home *** CD-ROM | disk | FTP | other *** search
/ Power CD-ROM!! 7 / POWERCD7.ISO / prgmming / inter43 / interrup.g < prev    next >
Text File  |  1994-11-06  |  350KB  |  9,483 lines

  1. Interrupt List, part 7 of 12
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------l-2E---------------------------------
  4. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  5.     DS:SI -> commandline to execute (see #1278)
  6. Return: all registers except CS:IP destroyed
  7.     AX = status (4DOS v4.0)
  8.        0000h successful
  9.        FFFFh error before processing command (not enough memory, etc)
  10.        other error number returned by command
  11. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  12.       internal commands) without loading another copy of COMMAND.COM
  13.     if COMMAND.COM is the user's command interpreter, the primary copy
  14.       executes the command; this allows the master environment to be
  15.       modified by issuing a "SET" command, but changes in the master
  16.       environment will not become effective until all programs descended
  17.       from the primary COMMAND.COM terminate
  18.     since COMMAND.COM processes the string as if typed from the keyboard,
  19.       the transient portion needs to be present, and the calling program
  20.       must ensure that sufficient memory to load the transient portion can
  21.       be allocated by DOS if necessary
  22.     results are unpredictable if invoked by a program run from a batch file
  23.       because this call is not reentrant and COMMAND.COM uses the same
  24.       internal variables when processing a batch file
  25.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  26.       has been loaded
  27.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  28.  
  29. Format of DOS commandline:
  30. Offset    Size    Description    (Table 1278)
  31.  00h    BYTE    length of command string, not counting trailing CR
  32.  01h    var    command string
  33.   N    BYTE    0Dh (CR)
  34. --------O-2E---------------------------------
  35. INT 2E UP - Windows NT - NATIVE API
  36.     EAX = function number
  37.     EDX = address of parameter block
  38. Return: ???
  39. --------l-2E----BXE22E-----------------------
  40. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  41.     BX = E22Eh
  42.     DS:SI -> zero byte
  43. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  44. ----------2F---------------------------------
  45. INT 2F - Multiplex - NOTES
  46.     AH = identifier of program which is to handle the interrupt
  47.        00h-7Fh reserved for DOS
  48.        B8h-BFh reserved for networks
  49.        C0h-FFh reserved for applications
  50.     AL is the function code
  51.    This is a general mechanism for verifying the presence of a TSR and
  52.    communicating with it.  When searching for a free identifier code for AH
  53.    using the installation check (AL=00h), the calling program should set
  54.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  55.    and SS:SP to be valid on return, since numerous programs now use additional
  56.    registers on input and/or output for the installation check.
  57. Notes:    Since the multiplex chain is growing so long, and beginning to
  58.       experience multiplex number collisions, I am proposing an alternate
  59.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  60.       multiplex, please let me know.
  61.     DOS and some other programs return values in the flags register, so
  62.       any TSR which chains by calling the previous handler rather than
  63.       jumping to it should ensure that the returned flags are preserved
  64.       and passed back to the original caller
  65. SeeAlso: INT 2D
  66. --------t-2F---------------------------------
  67. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  68.     AH = xx (dynamically assigned based upon a search for a multiplex
  69.          number which doesn't answer installed)
  70.     AL = 00h installation check
  71.     ES:DI = EBEBh:BEBEh
  72. Return: AL = 00h not installed
  73.          01h not installed, not OK to install
  74.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  75.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  76.          short form of the manufacturer's name, PPPPPPPP is a product
  77.          name and NNNN is the product's version number
  78. --------t-2F---------------------------------
  79. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  80.     AH = programmer-selected multiplex number
  81.     AL = function
  82.         00h installation check
  83.         Return: AL = FFh if installed
  84.         01h get TSR interrupt vectors
  85.         Return: DX:AX -> vector table (see #1279)
  86.         02h get TSR code segment
  87.         Return: AX = code segment for all interrupt handlers
  88.         03h call user exit routine and release TSR's memory
  89.         04h get signature string
  90.         Return: DX:AX -> counted string containing signature
  91.         05h get TSR's INT 2F handler
  92.         Return: DX:AX -> INT 2F handler
  93.         06h enable/disable TSR
  94.         BL = new state (00h disabled, 01h enabled)
  95.         07h activate TSR (popup if not disabled)
  96.         08h get hotkeys
  97.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  98.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  99.         09h set hotkey
  100.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  101.         CX = new hotkey (CH = keyflags, CL = scancode)
  102.         0Ah-1Fh reserved
  103. Index:    installation check;Ross Wentworth POPUP library
  104. Index:    hotkeys;Ross Wentworth POPUP library
  105.  
  106. Format of POPUP vector table entry:
  107. Offset    Size    Description    (Table 1279)
  108.  00h    BYTE    vector number (00h = end of table)
  109.  01h    DWORD    original vector
  110.  05h    WORD    offset of interrupt handler in TSR's code segment
  111. --------t-2F---------------------------------
  112. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  113.     AH = xx (dynamically assigned based upon a search for a multiplex
  114.          number from C0h to FFh which doesn't answer installed)
  115.     AL = 00h installation check
  116.     ES:DI = 1492h:1992h
  117. Return: AL = 00h not installed
  118.          01h not installed, not OK to install
  119.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  120.          point to author_name_ver table (see #1280)
  121.     AH = FFh
  122. Note:    this interface permits advanced communication with TSRs: it is possible
  123.       to make a generic uninstall utility, advanced TSR relocator programs
  124.       in order to fit fragmented memory areas, etc.
  125. See also: INT 2D"AMIS",INT 2F"Compuscience"
  126. Index:    installation check;CiriSOFT TSR interface
  127. Index:    uninstall;CiriSOFT TSR interface
  128.  
  129. Format of CiriSOFT author_name_ver table:
  130. Offset    Size    Description    (Table 1280)
  131.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  132.           with PSP, XMS upper memory segment if installed as UMB...)
  133.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  134.           in *.COM programs and 0 in upper memory TSR's).
  135.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  136.           used by TSR is possible to determine if hooked vectors are
  137.           still pointing it (and if it is safe to uninstall).
  138.  -10    BYTE    characteristics byte (see #1281)
  139.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  140.           that the TSR must use THIS variable in it's INT 2Fh handler.
  141.  -8    WORD    offset to vector_area table (see #1282)
  142.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and below)
  143.  -4   4 BYTEs    signature string "*##*"
  144.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  145.           is used in order to determine if the TSR is already resident
  146.           and it's version code; the ':' char is used as delimiter)
  147.  
  148. Bitfields for CiriSOFT characteristics byte:
  149. Bit(s)    Description    (Table 1281)
  150.  0-2    type
  151.     000 normal program (with PSP)
  152.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  153.           when uninstalling)
  154.     010 device driver (*.SYS)
  155.     011 device driver in EXE format
  156.     1xx others (reserved)
  157.  3-6    reserved
  158.  7    set if extra_table defined and supported
  159.  
  160. Format of CiriSOFT vector_area table:
  161. Offset    Size    Description    (Table 1282)
  162.  -1    BYTE    number of vectors intercepted by TSR
  163.  00h    BYTE    first vector number
  164.  01h    DWORD    first vector pointer before installing the TSR
  165.  05h    BYTE    second vector number
  166.  06h    DWORD    second vector pointer before installing the TSR
  167.  0Ah    ...    (and so on)
  168. Note:    the TSR must use these variables to invoke the previous interrupt
  169.       handler routines
  170.  
  171. Format of extra_area table (needed only to improve relocation feature):
  172. Offset    Size    Description    (Table 1283)
  173.  00h    WORD    offset to external_ctrl table (0 if not supported)
  174.  02h    WORD    reserved for future use (0)
  175.  
  176. Format of CiriSOFT external_ctrl table:
  177. Offset    Size    Description    (Table 1284)
  178.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  179.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  180.  ---And if bit 0 in offset 00h is off:
  181.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  182.           /SR parameter (silent installation & inhibit)
  183.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  184.           from the previous TSR still resident
  185.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  186. --------c-2F00-------------------------------
  187. INT 2F U - DOS 2.x only PRINT.COM - ???
  188.     AH = 00h
  189.     ???
  190. Return: ???
  191. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  192.     values in AH other than 00h or 01h cause PRINT to return the number of
  193.       files in the queue in AH
  194. SeeAlso: AH=01h
  195. --------P-2F00-------------------------------
  196. INT 2F U - PSPRINT - PRINT JOB CONTROL
  197.     AH = 00h
  198.     ???
  199. Return: ???
  200. --------c-2F0080-----------------------------
  201. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  202.     AX = 0080h
  203. Return: after PRINT executes
  204. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  205.     this function is not supported by the Novell DOS 7 PRINT.COM
  206. --------N-2F00D8-----------------------------
  207. INT 2F - Personal NetWare - VLM - ???
  208.     AX = 00D8h
  209.     ???
  210. Return: ???
  211. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  212.       NOP
  213. --------c-2F01-------------------------------
  214. INT 2F U - DOS 2.x only PRINT.COM - ???
  215.     AH = 01h
  216.     ???
  217. Return: ???
  218. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  219.     values in AH other than 00h or 01h cause PRINT to return the number of
  220.       files in the queue in AH
  221. SeeAlso: AH=00h
  222. --------c-2F0100-----------------------------
  223. INT 2F - DOS 3+ PRINT - INSTALLATION CHECK
  224.     AX = 0100h
  225. Return: AL = status
  226.         00h not installed
  227.         01h not installed, but not OK to install
  228.         FFh installed
  229.         AH = 00h (Novell DOS 7)
  230. SeeAlso: AX=0101h
  231. --------c-2F0100SI20D6-----------------------
  232. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  233.     AX = 0100h
  234.     SI = 20D6h
  235.     DI = 8761h
  236. Return: AX = 00FFh if installed
  237.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  238.         SI = resident code segment
  239. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  240.       LaserTools' PrintCache memory/disk-based print spooler package
  241. Note:    if either of SI or DI differ from the indicated magic values, only AX
  242.       will be modified on return, for compatibility with DOS PRINT
  243. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  244. --------c-2F0101-----------------------------
  245. INT 2F - DOS 3+ PRINT - SUBMIT FILE FOR PRINTING
  246.     AX = 0101h
  247.     DS:DX -> submit packet (see #1285)
  248. Return: CF clear if successful
  249.         AL = status
  250.         01h added to queue
  251.         9Eh now printing
  252.     CF set on error
  253.         AX = error code (see #1286,#0811 at INT 21/AH=59h)
  254. SeeAlso: AX=0102h
  255.  
  256. Format of PRINT submit packet:
  257. Offset    Size    Description    (Table 1285)
  258.  00h    BYTE    level (must be 00h)
  259.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  260.  
  261. (Table 1286)
  262. Values for PRINT error code:
  263.  0001h    invalid function
  264.  0002h    file not found
  265.  0003h    path not found
  266.  0004h    out of file handles
  267.  0005h    access denied
  268.  0008h    print queue full
  269.  0009h    spooler busy
  270.  000Ch    name too long
  271.  000Fh    invalid drive
  272. --------c-2F0101SI20D6-----------------------
  273. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  274.     AX = 0101h
  275.     SI = 20D6h
  276.     DI = 8761h
  277.     DS:DX -> submit packet (see #1285)
  278.     CL = print options
  279.         bit 4: use default options
  280. Return: CF clear if successful
  281.         AL = status
  282.         01h added to queue
  283.         9Eh now printing
  284.     CF set on error
  285.         AX = error code (see #1286)
  286. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  287.       LaserTools' PrintCache memory/disk-based print spooler package
  288. Note:    if either SI or DI differs from the indicated magic values on entry,
  289.       PrintCache will use the default print options for the file for
  290.       compatibility with DOS PRINT
  291. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  292. --------c-2F0102-----------------------------
  293. INT 2F - DOS 3+ PRINT - REMOVE FILE FROM PRINT QUEUE
  294.     AX = 0102h
  295.     DS:DX -> ASCIZ filename (wildcards allowed)
  296. Return: CF clear if successful
  297.     CF set on error
  298.         AX = error code (see #1286)
  299. SeeAlso: AX=0101h,AX=0103h
  300. --------c-2F0103-----------------------------
  301. INT 2F - DOS 3+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  302.     AX = 0103h
  303. Return: CF clear if successful
  304.     CF set on error
  305.         AX = error code (see #1286)
  306. SeeAlso: AX=0102h
  307. --------c-2F0104-----------------------------
  308. INT 2F - DOS 3+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  309.     AX = 0104h
  310. Return: CF clear if successful
  311.         DX = error count since status last read
  312.         DS:SI -> print queue
  313.     CF set on error
  314.         AX = error code (see #1286)
  315. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  316.       to avoid changing the list while it is being examined
  317. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  318.       an empty filename; the first name is the file currently being printed
  319.     printing is stopped until AX=0105h is called to prevent the queue
  320.       from changing while the filenames are being read
  321. SeeAlso: AX=0101h,AX=0105h
  322. --------c-2F0105-----------------------------
  323. INT 2F - DOS 3+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  324.     AX = 0105h
  325. Return: CF clear if successful
  326.     CF set on error
  327.         AX = error code (see #1286)
  328. Desc:    restart PRINT's activities once an application finishes examining the
  329.       print queue
  330. SeeAlso: AX=0104h
  331. --------c-2F0106-----------------------------
  332. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  333.     AX = 0106h
  334. Return: CF set if files in print queue
  335.         AX = error code 0008h (queue full)
  336.         DS:SI -> device driver header
  337.     CF clear if print queue empty
  338.         AX = 0000h
  339. Desc:    determine which device, if any, PRINT is currently using for output
  340. Notes:    undocumented prior to the release of MS-DOS 5.0
  341.     this function can be used to allow a program to avoid printing to the
  342.       printer on which PRINT is currently performing output
  343. SeeAlso: AX=0104h
  344. --------c-2F0107-----------------------------
  345. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  346.     AX = 0107h
  347.     CL bit 0: output form feed between print jobs
  348. Return: AL destroyed
  349. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  350. --------N-2F0200-----------------------------
  351. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  352.     AX = 0200h
  353. Return: AL = FFh if installed
  354. Desc:    determine whether the PC LAN Program redirector is installed
  355. SeeAlso: AX=0201h,AX=0203h
  356. --------N-2F0201-----------------------------
  357. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  358.     AX = 0201h
  359. Return: nothing???
  360. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  361.     AX=0202h appears to be the opposite function
  362.     these functions are supposedly used to signal opening and closing of
  363.       printers
  364. SeeAlso: AX=0202h
  365. --------N-2F0202-----------------------------
  366. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  367.     AX = 0202h
  368.     ???
  369. Return: nothing???
  370. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  371.     these functions are supposedly used to signal opening and closing of
  372.       printers
  373. SeeAlso: AX=0201h
  374. --------N-2F0203-----------------------------
  375. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  376.     AX = 0203h
  377. Return: nothing???
  378. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  379.     AX=0204h appears to be the opposite function
  380.     these functions are supposedly used to signal opening and closing of
  381.       printers
  382. SeeAlso: AX=0200h,AX=0204h
  383. --------N-2F0204-----------------------------
  384. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  385.     AX = 0204h
  386.     ???
  387. Return: nothing???
  388. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  389.     AX=0203h appears to be the opposite function
  390.     these functions are supposedly used to signal opening and closing of
  391.       printers
  392. SeeAlso: AX=0200h,AX=0203h
  393. --------N-2F---------------------------------
  394. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  395.     AX = 02xxh
  396.     ???
  397. Return: ???
  398. --------l-2F0500-----------------------------
  399. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  400.     AX = 0500h
  401. Return: AL = 00h not installed, OK to install
  402.          01h not installed, can't install
  403.          FFh installed
  404. Desc:    determine whether a critical error message override is installed
  405. Note:    this set of functions allows a user program to partially or completely
  406.       override the default critical error handler's message in COMMAND.COM
  407. SeeAlso: AH=05h,INT 24
  408. --------l-2F05-------------------------------
  409. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  410.     AH = 05h
  411. ---DOS 3.x---
  412.     AL = extended error code (not zero)
  413. ---DOS 4+ ---
  414.     AL = error type
  415.         01h DOS extended error code
  416.         02h parameter error
  417.     BX = error code
  418. Return: CF clear if successful
  419.         ES:DI -> ASCIZ error message (read-only)
  420.         AL = completion state
  421.         00h message requires completion with device name, drive, etc.
  422.         01h message is complete as returned
  423.     CF set if error code can't be converted to string
  424.         AX,DI,ES destroyed
  425.     other flags corrupted
  426. Notes:    called at start of COMMAND.COM's default critical error handler if
  427.       installed by a user program, allowing partial or complete overriding
  428.       of the default error messages
  429.     subfunction 02h is called by many DOS 4 external programs
  430.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  431.       returned string
  432. SeeAlso: AX=0500h,AX=122Eh,INT 24
  433. --------U-2F0600-----------------------------
  434. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  435.     AX = 0600h
  436. Return: AL = status
  437.         00h not installed
  438.         01h not installed, but not OK to install
  439.         FFh installed
  440. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  441.       (see INT 21/AH=52h)
  442.     undocumented prior to the release of DOS 5.0
  443. SeeAlso: AX=0601h,INT 21/AH=52h
  444. --------U-2F0601-----------------------------
  445. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  446.     AX = 0601h
  447. Return: ES = segment of ASSIGN work area and assignment table
  448. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  449.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  450. SeeAlso: AX=0600h
  451. --------D-2F0800-----------------------------
  452. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  453.     AX = 0800h
  454. Return: AL = status
  455.         00h not installed, OK to install
  456.         01h not installed, not OK to install
  457.         FFh installed
  458. Desc:    determine whether the internal support code used by DRIVER.SYS is
  459.       present; it is always present in DOS 3.2+
  460. Note:    supported by DR-DOS 5.0
  461. --------D-2F0801-----------------------------
  462. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  463.     AX = 0801h
  464.     DS:DI -> drive data table (see #1293,#1294,#1295)
  465. Return: AX,BX,SI,ES destroyed
  466. Notes:    moves down internal list of drive data tables, copying and modifying
  467.       the drive description flags word for tables referencing same physical
  468.       drive
  469.     the data table is appended to the chain of tables
  470.     supported by DR-DOS 5.0
  471. SeeAlso: AX=0803h
  472. --------D-2F0802-----------------------------
  473. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  474.     AX = 0802h
  475.     ES:BX -> device driver request header (see #1289)
  476. Return: request header updated as per requested operation
  477. Notes:    supported by DR-DOS 5.0
  478.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  479.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  480.     the command codes and structures described below apply to all drivers
  481.       which support the appropriate commands; this call is just one of a
  482.       number of ways in which a device driver request may be invoked
  483. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  484.  
  485. (Table 1287)
  486. Values for device driver command code:
  487.  00h    INIT
  488.  01h    MEDIA CHECK (block devices)
  489.  02h    BUILD BPB (block devices)
  490.  03h    IOCTL INPUT
  491.  04h    INPUT
  492.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  493.  06h    INPUT STATUS (character devices)
  494.  07h    INPUT FLUSH (character devices)
  495.  08h    OUTPUT
  496.  09h    OUTPUT WITH VERIFY
  497.  0Ah    OUTPUT STATUS (character devices)
  498.  0Bh    OUTPUT FLUSH (character devices)
  499.  0Ch    IOCTL OUTPUT
  500.  0Dh    (DOS 3+) DEVICE OPEN
  501.  0Eh    (DOS 3+) DEVICE CLOSE
  502.  0Fh    (DOS 3+) REMOVABLE MEDIA (block devices)
  503.  10h    (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  504.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  505.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  506.  13h    (DOS 3.2+) GENERIC IOCTL
  507.  14h    unused
  508.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  509.  16h    unused
  510.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  511.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  512.  19h    (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  513.  80h    (CD-ROM) READ LONG
  514.  81h    (CD-ROM) reserved
  515.  82h    (CD-ROM) READ LONG PREFETCH
  516.  83h    (CD-ROM) SEEK
  517.  84h    (CD-ROM) PLAY AUDIO
  518.  85h    (CD-ROM) STOP AUDIO
  519.  86h    (CD-ROM) WRITE LONG
  520.  87h    (CD-ROM) WRITE LONG VERIFY
  521.  88h    (CD-ROM) RESUME AUDIO
  522.  
  523. Bitfields for device request status:
  524. Bit(s)    Description    (Table 1288)
  525.  15    error
  526.  14-11    reserved
  527.  10    ??? set by DOS kernel on entry to some driver calls
  528.  9    busy
  529.  8    done (may be clear on return under European MS-DOS 4.0)
  530.  7-0    error code if bit 15 set (see #1290)
  531.  
  532. Format of device driver request header:
  533. Offset    Size    Description    (Table 1289)
  534.  00h    BYTE    length of request header
  535.  01h    BYTE    subunit within device driver
  536.  02h    BYTE    command code (see #1287)
  537.  03h    WORD    status (filled in by device driver) (see #1288)
  538. ---DOS---
  539.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  540.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  541.               device's request queue
  542.         (other versions) reserved (unused in DOS 2.x and 3.x)
  543. ---STARLITE architecture---
  544.  05h    DWORD    pointer to next request header
  545.  09h  4 BYTEs    reserved
  546. ---command code 00h---
  547.  0Dh    BYTE    (return) number of units
  548.  0Eh    DWORD    (call) pointer to DOS device helper function (see #1291)
  549.               (European MS-DOS 4.0 only)
  550.         (call) pointer past end of memory available to driver (DOS 5+)
  551.         (return) address of first free byte following driver
  552.  12h    DWORD    (call) pointer to commandline arguments
  553.         (return) pointer to BPB array (block drivers) or
  554.               0000h:0000h (character drivers)
  555.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  556.    ---European MS-DOS 4.0---
  557.  17h    DWORD    pointer to function to save registers on stack
  558.    ---DOS 5+ ---
  559.  17h    WORD    (return) error-message flag
  560.         0001h MS-DOS should display error msg on init failure
  561. ---command code 01h---
  562.  0Dh    BYTE    media descriptor
  563.  0Eh    BYTE    (return) media status
  564.         00h don't know
  565.         01h media has not changed
  566.         FFh media has been changed
  567.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  568.           bit in device header is set and disk changed
  569. ---command code 02h---
  570.  0Dh    BYTE    media descriptor
  571.  0Eh    DWORD    transfer address
  572.         -> scratch sector if NON-IBM FORMAT bit in device header set
  573.         -> first FAT sector otherwise
  574.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  575. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  576.  0Dh    BYTE    media descriptor (block devices only)
  577.  0Eh    DWORD    transfer address
  578.  12h    WORD    (call) number of bytes to read/write
  579.         (return) actual number of bytes read or written
  580. ---command codes 04h,08h,09h---
  581.  0Dh    BYTE    media descriptor (block devices only)
  582.  0Eh    DWORD    transfer address
  583.  12h    WORD    byte count (character devices) or sector count (block devices)
  584.  14h    WORD    starting sector number (block devices only)
  585.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  586.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  587.           device attribute word bit 1 set only) if starting sector
  588.           number above is FFFFh (see INT 21/AH=52h)
  589. ---command code 05h---
  590.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  591. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  592.  no further fields
  593. ---command code 10h---
  594.  0Dh    BYTE    unused
  595.  0Eh    DWORD    transfer address
  596.  12h    WORD    (call) number of bytes to write
  597.         (return) actual number of bytes written
  598. ---command codes 11h,12h---
  599.  0Dh    BYTE    reserved
  600. ---command code 15h---
  601.  no further fields
  602. ---command codes 13h,19h---
  603.  0Dh    BYTE    category code
  604.         00h unknown
  605.         01h COMn:
  606.         03h CON
  607.         05h LPTn:
  608.         07h mouse (European MS-DOS 4.0)
  609.         08h disk
  610.         9Eh (STARLITE) Media Access Control driver
  611.  0Eh    BYTE    function code
  612.         00h (STARLITE) MAC Bind request
  613.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  614.         SI contents (European MS-DOS 4.0)
  615.  11h    WORD    offset of device driver header
  616.         DI contents (European MS-DOS 4.0)
  617.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  618. ---command codes 80h,82h---
  619.  0Dh    BYTE    addressing mode
  620.         00h HSG (default)
  621.         01h Phillips/Sony Red Book
  622.  0Eh    DWORD    transfer address (ignored for command 82h)
  623.  12h    WORD    number of sectors to read
  624.         (if 0 for command 82h, request is an advisory seek)
  625.  14h    DWORD    starting sector number
  626.         logical sector number in HSG mode
  627.         frame/second/minute/unused in Red Book mode
  628.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  629.  18h    BYTE    data read mode
  630.         00h cooked (2048 bytes per frame)
  631.         01h raw (2352 bytes per frame, including EDC/ECC)
  632.  19h    BYTE    interleave size (number of sectors stored consecutively)
  633.  1Ah    BYTE    interleave skip factor
  634.         (number of sectors between consecutive portions)
  635. ---command code 83h---
  636.  0Dh    BYTE    addressing mode (see above)
  637.  0Eh    DWORD    transfer address (ignored)
  638.  12h    WORD    number of sectors to read (ignored)
  639.  14h    DWORD    starting sector number (see also above)
  640. ---command code 84h---
  641.  0Dh    BYTE    addressing mode (see above)
  642.  0Eh    DWORD    starting sector number (see also above)
  643.  12h    DWORD    number of sectors to play
  644. ---command codes 85h,88h---
  645.  no further fields
  646. ---command codes 86h,87h---
  647.  0Dh    BYTE    addressing mode (see above)
  648.  0Eh    DWORD    transfer address (ignored in write mode 0)
  649.  12h    WORD    number of sectors to write
  650.  14h    DWORD    starting sector number (see also above)
  651.  18h    BYTE    write mode
  652.         00h mode 0 (write all zeros)
  653.         01h mode 1 (default) (2048 bytes per sector)
  654.         02h mode 2 form 1 (2048 bytes per sector)
  655.         03h mode 2 form 2 (2336 bytes per sector)
  656.  19h    BYTE    interleave size (number of sectors stored consecutively)
  657.  1Ah    BYTE    interleave skip factor
  658.         (number of sectors between consecutive portions)
  659.  
  660. (Table 1290)
  661. Values for device driver error code:
  662.  00h    write-protect violation
  663.  01h    unknown unit
  664.  02h    drive not ready
  665.  03h    unknown command
  666.  04h    CRC error
  667.  05h    bad drive request structure length
  668.  06h    seek error
  669.  07h    unknown media
  670.  08h    sector not found
  671.  09h    printer out of paper
  672.  0Ah    write fault
  673.  0Bh    read fault
  674.  0Ch    general failure
  675.  0Dh    reserved
  676.  0Eh    (CD-ROM) media unavailable
  677.  0Fh    invalid disk change
  678.  
  679. (Table 1291)
  680. Call European MS-DOS 4.0 device helper function with:
  681.     DL = function
  682.         00h "SchedClock" called on each timer tick
  683.         AL = tick interval in milliseconds
  684.         01h "DevDone" device I/O complete
  685.         ES:BX -> request header
  686.         Note:    must update status word first; may be called from
  687.               an interrupt handler
  688.         02h "PullRequest" pull next request from queue
  689.         DS:SI -> DWORD pointer to start of device's request queue
  690.         Return: ZF clear if pending request
  691.                 ES:BX -> request header
  692.             ZF set if no more requests
  693.         03h "PullParticular" remove specific request from queue
  694.         DS:SI -> DWORD pointer to start of device's request queue
  695.         ES:BX -> request header
  696.         Return: ZF set if request header not found
  697.         04h "PushRequest" push the request onto the queue
  698.         DS:SI -> DWORD pointer to start of device's request queue
  699.         ES:BX -> request header
  700.         interrupts disabled
  701.         05h "ConsInputFilter" keyboard input check
  702.         AX = character (high byte 00h if PC ASCII character)
  703.         Return: ZF set if character should be discarded
  704.             ZF clear if character should be handled normally
  705.         Note:    called by keyboard interrupt handler so DOS can scan
  706.               for special input characters
  707.         06h "SortRequest" push request in sorted order by starting sector
  708.         DS:SI -> DWORD pointer to start of device's request queue
  709.         ES:BX -> request header
  710.         interrupts disabled
  711.         07h "SigEvent" send signal on keyboard event
  712.         AH = event identifier
  713.         Return: AL,FLAGS destroyed
  714.         09h "ProcBlock" block on event
  715.         AX:BX = event identifier (typically a pointer)
  716.         CX = timeout in ms or 0000h for never
  717.         DH = interruptable flag (nonzero if pause may be interrupted)
  718.         interrupts disabled
  719.         Return: after corresponding ProcRun call
  720.             CF clear if event wakeup, set if unusual wakeup
  721.             ZF set if timeout wakeup, clear if interrupted
  722.             AL = wakeup code, nonzero if unusual wakeup
  723.             interrupts enabled
  724.             BX,CX,DX destroyed
  725.         Note:    block process and schedules another to run
  726.         0Ah "ProcRun" unblock process
  727.         AX:BX = event identifier (typically a pointer)
  728.         Return: AX = number of processes awakened
  729.             ZF set if no processes awakened
  730.             BX,CX,DX destroyed
  731.         0Bh "QueueInit" initialize/clear character queue
  732.         DS:BX -> character queue structure (see #1292)
  733.         Note:    the queue size field must be set before calling
  734.         0Dh "QueueWrite" put a character in the queue
  735.         DS:BX -> character queue (see #1292)
  736.         AL = character to append to end of queue
  737.         Return: ZF set if queue is full
  738.             ZF clear if character stored
  739.         0Eh "QueueRead" get a character from the queue
  740.         DS:BX -> character queue (see #1292)
  741.         Return: ZF set if queue is empty
  742.             ZF clear if characters in queue
  743.                 AL = first character in queue
  744.         10h "GetDOSVar" return pointer to DOS variable
  745.         AL = index of variable
  746.             03h current process ID
  747.         BX = index into variable if AL specifies an array
  748.         CX = expected length of variable
  749.         Return: CF clear if successful
  750.                 DX:AX -> variable
  751.             CF set on error
  752.                 AX,DX destroyed
  753.             BX,CX destroyed
  754.         Note:    the variables may not be modified
  755.         14h "Yield" yield CPU if higher-priority task ready to run
  756.         Return: FLAGS destroyed
  757.         1Bh "CritEnter" begin system critical section
  758.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  759.         Return: AX,BX,CX,DX destroyed
  760.         1Ch "CritLeave" end system critical section
  761.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  762.         Return: AX,BX,CX,DX destroyed
  763.         Note:    must be called in the context of the process which
  764.               called CritEnter on the semaphore
  765. Note:    the DWORD pointing at the request queue must be allocated by the driver
  766.       and initialized to 0000h:0000h.  It always points at the next request
  767.       to be executed
  768.  
  769. Format of European MS-DOS 4.0 character queue:
  770. Offset    Size    Description    (Table 1292)
  771.  00h    WORD    size of queue in bytes
  772.  02h    WORD    index of next character out
  773.  04h    WORD    count of characters in the queue
  774.  06h  N BYTEs    queue buffer
  775. --------D-2F0803-----------------------------
  776. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  777.     AX = 0803h
  778. Return: DS:DI -> first drive data table in list
  779. Note:    not available under DR-DOS 5.0
  780. SeeAlso: AX=0801h
  781.  
  782. Format of DOS 3.30 drive data table:
  783. Offset    Size    Description    (Table 1293)
  784.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  785.  04h    BYTE    physical unit number (for INT 13)
  786.  05h    BYTE    logical drive number (0=A:)
  787.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  788.         Offset    Size    Description
  789.          00h    WORD    bytes per sector
  790.          02h    BYTE    sectors per cluster, FFh if unknown
  791.          03h    WORD    number of reserved sectors
  792.          05h    BYTE    number of FATs
  793.          06h    WORD    number of root dir entries
  794.          08h    WORD    total sectors
  795.          0Ah    BYTE    media descriptor, 00h if unknown
  796.          0Bh    WORD    sectors per FAT
  797.          0Dh    WORD    sectors per track
  798.          0Fh    WORD    number of heads
  799.          11h    WORD    number of hidden sectors
  800.  19h    BYTE    flags
  801.         bit 6: 16-bit FAT instead of 12-bit FAT
  802.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  803.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  804.           fixed media)
  805.  27h    BYTE    terminating null for volume label???
  806.  28h    BYTE    device type (see INT 21/AX=440Dh)
  807.  29h    WORD    bit flags describing drive (see #1296)
  808.  2Bh    WORD    number of cylinders
  809.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  810.  40h  3 BYTEs    ???
  811.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  812.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  813.           media and PC-DOS 3.30)
  814.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  815. ---removable media---
  816.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  817. ---fixed media---
  818.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  819.  4Fh    WORD    absolute cylinder number of partition's start on physical
  820.           drive (always FFFFh if primary partition)
  821.  
  822. Format of COMPAQ DOS 3.31 drive data table:
  823. Offset    Size    Description    (Table 1294)
  824.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  825.  04h    BYTE    physical unit number (for INT 13)
  826.  05h    BYTE    logical drive number (0=A:)
  827.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  828.  1Fh  6 BYTEs    reserved fields from BPB above???
  829.  25h    BYTE    flags
  830.         bit 6: 16-bit FAT instead of 12-bit FAT
  831.         bit 5: large volume???
  832.  26h    WORD    device-open count???
  833.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  834.           fixed media)
  835.  33h    BYTE    terminating null for volume label
  836.  34h    BYTE    device type (see INT 21/AX=440Dh)
  837.  35h    WORD    bit flags describing drive (see #1296)
  838.  37h    WORD    number of cylinders
  839.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  840.  52h  6 BYTEs    ??? apparently always zeros
  841.  58h    BYTE    least-significant byte of last-accessed cylinder number
  842. ---removable media---
  843.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  844. ---fixed media---
  845.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  846.  5Bh    WORD    absolute cylinder number of partition's start on physical
  847.           drive (always FFFFh if primary partition)
  848.  
  849. Format of DOS 4.0-6.0 drive data table:
  850. Offset    Size    Description    (Table 1295)
  851.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  852.  04h    BYTE    physical unit number (for INT 13)
  853.  05h    BYTE    logical drive number (0=A:)
  854.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  855.         Offset    Size    Description
  856.          00h    WORD    bytes per sector
  857.          02h    BYTE    sectors per cluster, FFh if unknown
  858.          03h    WORD    number of reserved sectors
  859.          05h    BYTE    number of FATs
  860.          06h    WORD    number of root dir entries
  861.          08h    WORD    total sectors (see offset 15h if zero)
  862.          0Ah    BYTE    media descriptor, 00h if unknown
  863.          0Bh    WORD    sectors per FAT
  864.          0Dh    WORD    sectors per track
  865.          0Fh    WORD    number of heads
  866.          11h    DWORD    number of hidden sectors
  867.          15h    DWORD    total sectors if WORD at 08h is zero
  868.  1Fh    BYTE    flags
  869.         bit 6: 16-bit FAT instead of 12-bit
  870.         bit 7: unsupportable disk (all accesses will return Not Ready)
  871.  20h    WORD    device-open count
  872.  22h    BYTE    device type (see INT 21/AX=440Dh)
  873.  23h    WORD    bit flags describing drive (see #1296)
  874.  25h    WORD    number of cylinders (for partition only, if hard disk)
  875.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  876.  40h  6 BYTEs    reserved (part of BPB above)
  877.  46h    BYTE    last track accessed
  878. ---removable media---
  879.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  880. ---fixed media---
  881.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  882.         always 0001h for DOS 5+
  883.  49h    WORD    absolute cylinder number of partition's start on physical drive
  884.         (FFFFh if primary partition in DOS 4.x)
  885. ------
  886.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  887.           extended boot record rather than root directory)
  888.  56h    BYTE    terminating null for volume label
  889.  57h    DWORD    serial number
  890.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  891.  63h    BYTE    terminating null for filesystem type
  892.  
  893. Bitfields for flags describing drive:
  894. Bit(s)    Description    (Table 1296)
  895.  0    fixed media
  896.  1    door lock ("changeline") supported
  897.  2    current BPB locked
  898.  3    all sectors in a track are the same size
  899.  4    physical drive has multiple logical units
  900.  5    current logical drive for shared physical drive
  901.  6    disk change detected
  902.  7    device parameters were changed (set DASD before formatting)
  903.     (see #0706 at INT 21/AX=440Dh)
  904.  8    disk reformatted (BPB of current media was changed)
  905.  9    access flag (fixed media only, disables reads and writes)
  906.     (see #0712 at INT 21/AX=440Dh)
  907. --------f-2F1000-----------------------------
  908. INT 2F - SHARE - INSTALLATION CHECK
  909.     AX = 1000h
  910. Return: AL = status
  911.         00h not installed, OK to install
  912.         01h not installed, not OK to install
  913.         FFh installed
  914. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  915.       (08E9: OR  AL,AL
  916.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  917.     values of AL other than described here put PC-DOS 4.00 into the same
  918.       loop (the buggy instructions are the same)
  919. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  920.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  921.       inactive state (due to the undocumented /NC flag used by the autoload
  922.       code) until this call is made
  923.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  924.     Windows Enhanced mode hooks this call and reports that SHARE is
  925.       installed even when it is not
  926. SeeAlso: AX=1080h,INT 21/AH=52h
  927. --------d-2F1001-----------------------------
  928. INT 2F U - DR-DOS 6.0 SHARE internal - SET ???
  929.     AX = 1001h
  930.     DX:BX -> ???function
  931. Notes:    this function is also supported by SuperStor, a disk-compression
  932.       program by Addstor which is bundled with DR-DOS 6.0, and the
  933.       Novell DOS 7 DELWATCH.EXE
  934.     the default handler for the pointer set by this call under DELWATCH
  935.       simply returns with CF set
  936. SeeAlso: AX=1000h,AX=F800h
  937. --------f-2F1040-----------------------------
  938. INT 2F U - DOS 4 only SHARE internal - ???
  939.     AX = 1040h
  940.     ???
  941. Return: AL = FFh???
  942. SeeAlso: AX=1000h
  943. --------f-2F1080-----------------------------
  944. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  945.     AX = 1080h
  946. Return: AL = status
  947.         F0h successful
  948.         FFh checking was already on
  949. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  950.       and file sharing checks.  The undocumented commandline flag /NC can
  951.       be used to disable the sharing code.
  952. SeeAlso: AX=1000h,AX=1081h
  953. --------f-2F1081-----------------------------
  954. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  955.     AX = 1081h
  956. Return: AL = status
  957.         F0h successful
  958.         FFh checking was already off
  959. Note:    (see AX=1080h)
  960. SeeAlso: AX=1000h,AX=1080h
  961. ----------2F10FE-----------------------------
  962. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  963.     AX = 10FEh
  964. Return: AX = 20FFh if installed and active
  965.         DX:BX -> private entry point
  966.  
  967. (Table 1297)
  968. Call DELWATCH private entry point with:
  969.     AH = function
  970.         00h NOP???
  971.         Return: AX = 0000h
  972.             CX = 0004h (unsupported function)
  973.         01h disable DELWATCH on drive
  974.         AL = drive number (00h = A:)
  975.         Return: AX = status (0000h if failed, FFFFh if successful)
  976.         02h ???
  977.         AL = drive number (00h = A:)
  978.         ???
  979.         Return: ???
  980.         03h    ???
  981.         AL = drive number (00h = A:)
  982.         CX = ??? (0000h/0001h)
  983.         ???
  984.         Return: ???
  985.         04h ???
  986.         AL = drive number (00h = A:)
  987.         ???
  988.         Return: ???
  989.         05h ???
  990.         AL = drive number (00h = A:)
  991.         ???
  992.         Return: ???
  993.         06h enable DELWATCH on drive
  994.         AL = drive number with bit 7 set (80h = A:, etc.)
  995.         BX = maximum files of same name in one directory to save
  996.         CX = maximum files to save on this disk
  997.         ???
  998.         Return: AX = status
  999.                 0000h failed
  1000.                 FFFFh successful
  1001.             CX = error code on failure
  1002.                 (0004h if AL < 80h on entry)
  1003.         07h ???
  1004.         08h set file extensions list
  1005.         AL = sense (00h exclude named extensions, 01h only named ext.)
  1006.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  1007.               per extension)
  1008.         Return: AX = FFFFh (successful)
  1009.         09h    ???
  1010.         AL = drive number (00h = A:)
  1011.         ???
  1012.         Return: ???
  1013.         0Ah ???
  1014.         AL = drive number (00h = A:)
  1015.         ???
  1016.         Return: ???
  1017.         0Bh reset ???
  1018.         Return: AX = FFFFh (successful)
  1019.         see also function 0Dh
  1020.         0Ch check if drive enabled
  1021.         AL = drive number with bit 7 set (80h = A:, etc.)
  1022.         Return: AX = state
  1023.                 0000h disabled or error (check CX)
  1024.                 0001h drive enabled
  1025.             CX = error code (0004h invalid drive number)
  1026.         0Dh set ???
  1027.         BX = ???
  1028.         Return: AX = FFFFh (successful)
  1029.         see also function 0Bh
  1030.         0Eh ???
  1031.         AL = drive number (00h = A:)
  1032.         ???
  1033.         Return: ???
  1034. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  1035.     registers unchanged if AH >= 0Fh on entry
  1036. --------O-2F10FF-----------------------------
  1037. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  1038.     AX = 10FFh
  1039.     ES:BX -> ???
  1040. Note:    sets pointer in kernel
  1041. --------N-2F1100-----------------------------
  1042. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  1043.     AX = 1100h
  1044. Return: AL = status
  1045.         00h not installed, OK to install
  1046.         01h not installed, not OK to install
  1047.         FFh installed
  1048.         AH = product identifier (ad hoc by various manufacturers)
  1049.             00h if PC Tools v8 DRIVEMAP
  1050.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  1051.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  1052. Notes:    this function is called by the DOS 3.1+ kernel
  1053.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  1054.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  1055.       redirector
  1056.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  1057.       only supports AL=00h-27h
  1058. --------d-2F1100SFDADA-----------------------
  1059. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  1060.     AX = 1100h subfn DADAh
  1061.     STACK: WORD DADAh
  1062. Return: AL = status
  1063.         00h not installed, OK to install
  1064.         STACK unchanged
  1065.         01h not installed, not OK to install
  1066.         STACK unchanged
  1067.         FFh installed
  1068.         STACK: WORD    ADADh if MSCDEX installed
  1069.                 DADBh if Lotus CD/Networker installed
  1070. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  1071.       than DADAh is considered to mean that MSCDEX is already installed;
  1072.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  1073.       thinking it is already installed when it is in fact CD/Networker
  1074.       that is installed
  1075. Index:    installation check;Lotus CD/Networker
  1076. Index:    Lotus CD/Networker;installation check
  1077. --------N-2F1101-----------------------------
  1078. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  1079.     AX = 1101h
  1080.     SS = DOS DS
  1081.     SDA first filename pointer -> fully-qualified directory name
  1082.     SDA CDS pointer -> current directory structure for drive with dir
  1083. Return: CF set on error
  1084.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1085.     CF clear if successful
  1086. Note:    this function is called by the DOS 3.1+ kernel
  1087. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  1088. --------N-2F1102-----------------------------
  1089. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  1090.     AX = 1102h
  1091.     SS = DOS DS
  1092.     SDA first filename pointer -> fully-qualified directory name
  1093.     SDA CDS pointer -> current directory structure for drive with dir
  1094. Return: CF set on error
  1095.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1096.     CF clear if successful
  1097. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  1098.       this function "SEQ_RMDIR"
  1099. SeeAlso: AX=1101h
  1100. --------N-2F1103-----------------------------
  1101. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  1102.     AX = 1103h
  1103.     SS = DOS DS
  1104.     SDA first filename pointer -> fully-qualified directory name
  1105.     SDA CDS pointer -> current directory structure for drive with dir
  1106. Return: CF set on error
  1107.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1108.     CF clear if successful
  1109. Note:    this function is called by the DOS 3.1+ kernel
  1110. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  1111. --------N-2F1104-----------------------------
  1112. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  1113.     AX = 1104h
  1114.     SS = DOS DS
  1115.     SDA first filename pointer -> fully-qualified directory name
  1116.     SDA CDS pointer -> current directory structure for drive with dir
  1117. Return: CF set on error
  1118.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1119.     CF clear if successful
  1120. Note:    appears to be identical to AX=1103h
  1121. SeeAlso: AX=1103h
  1122. --------N-2F1105-----------------------------
  1123. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  1124.     AX = 1105h
  1125.     SS = DOS DS
  1126.     SDA first filename pointer -> fully-qualified directory name
  1127.     SDA CDS pointer -> current directory structure for drive with dir
  1128. Return: CF set on error
  1129.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1130.     CF clear if successful
  1131.         CDS updated with new path
  1132. Notes:    this function is called by the DOS 3.1+ kernel
  1133.     directory string in CDS should not have a terminating backslash unless
  1134.       the current directory is the root
  1135. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  1136. --------N-2F1106-----------------------------
  1137. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  1138.     AX = 1106h
  1139.     BX = device info word from SFT
  1140.     ES:DI -> SFT
  1141.         SFT DPB field -> DPB of drive containing file
  1142. Return: CF set on error
  1143.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1144.     CF clear if successful
  1145.         SFT updated (redirector must decrement open count, which may be
  1146.           done with INT 2F/AX=1208h)
  1147. Note:    this function is called by the DOS 3.1+ kernel
  1148. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  1149. --------N-2F1107-----------------------------
  1150. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  1151.     AX = 1107h
  1152.     ES:DI -> SFT
  1153.         SFT DPB field -> DPB of drive containing file
  1154. Return: CF set on error
  1155.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1156.     CF clear if successful
  1157.         all buffers for file flushed
  1158.         directory entry updated
  1159. Note:    this function is called by the DOS 3.1+ kernel
  1160. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  1161. --------N-2F1108-----------------------------
  1162. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  1163.     AX = 1108h
  1164.     ES:DI -> SFT
  1165.         SFT DPB field -> DPB of drive containing file
  1166.     CX = number of bytes
  1167.     SS = DOS DS
  1168.     SDA DTA field -> user buffer
  1169. Return: CF set on error
  1170.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1171.     CF clear if successful
  1172.         CX = number of bytes read (0000h = end of file)
  1173.         SFT updated
  1174. Note:    this function is called by the DOS 3.1+ kernel
  1175. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  1176. --------N-2F1109-----------------------------
  1177. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  1178.     AX = 1109h
  1179.     ES:DI -> SFT
  1180.         SFT DPB field -> DPB of drive containing file
  1181.     CX = number of bytes
  1182.     SS = DOS DS
  1183.     SDA DTA field -> user buffer
  1184. Return: CF set on error
  1185.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1186.     CF clear if successful
  1187.         CX = number of bytes written
  1188.         SFT updated
  1189. Notes:    this function is called by the DOS 3.1+ kernel
  1190.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  1191.       the Device Driver Header field points at PCACHE, but does not
  1192.       intercept any other network redirector functions
  1193. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  1194. --------N-2F110A-----------------------------
  1195. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  1196.     AX = 110Ah
  1197.     BX = file handle
  1198.     CX:DX = starting offset
  1199.     SI = high word of size
  1200.     STACK: WORD low word of size
  1201.     ES:DI -> SFT
  1202.         SFT DPB field -> DPB of drive containing file
  1203.     SS = DOS DS
  1204. Return: CF set on error
  1205.        AL = DOS error code (see #0811 at INT 21/AH=59h)
  1206.     STACK unchanged
  1207. Notes:    this function is called by the DOS 3.10-3.31 kernel
  1208.     the redirector is expected to resolve lock conflicts
  1209. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1210. --------N-2F110A-----------------------------
  1211. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  1212.     AX = 110Ah
  1213.     BL = function
  1214.         00h lock
  1215.         01h unlock
  1216.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  1217.     DS:DX -> parameter block (see #1298)
  1218.     ES:DI -> SFT
  1219.         SFT DPB field -> DPB of drive containing file
  1220.     SS = DOS DS
  1221. Return: CF set on error
  1222.        AL = DOS error code (see #0811 at INT 21/AH=59h)
  1223. Notes:    this function is called by the DOS 4.0+ kernel
  1224.     the redirector is expected to resolve lock conflicts
  1225. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1226.  
  1227. Format of parameter block entry [array, but currently limited to single entry]:
  1228. Offset    Size    Description    (Table 1298)
  1229.  00h    DWORD    start offset
  1230.  04h    DWORD    size of region
  1231. --------N-2F110B-----------------------------
  1232. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  1233.     AX = 110Bh
  1234.     BX = file handle
  1235.     CX:DX = starting offset
  1236.     SI = high word of size
  1237.     STACK: WORD low word of size
  1238.     ES:DI -> SFT for file
  1239.         SFT DPB field -> DPB of drive containing file
  1240. Return: CF set on error
  1241.        AL = DOS error code (see #0811 at INT 21/AH=59h)
  1242.     STACK unchanged
  1243. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  1244. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  1245. --------N-2F110C-----------------------------
  1246. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  1247.     AX = 110Ch
  1248.     ES:DI -> current directory structure for desired drive
  1249. Return: CF clear if data valid
  1250.         AL = sectors per cluster
  1251.         AH = media ID byte
  1252.         BX = total clusters
  1253.         CX = bytes per sector
  1254.         DX = number of available clusters
  1255.     CF set if data invalid
  1256. Note:    this function is called by the DOS 3.1+ kernel
  1257. SeeAlso: INT 21/AH=36h
  1258. --------N-2F110D-----------------------------
  1259. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  1260.     AX = 110Dh
  1261.     SDA first filename pointer -> name of file
  1262.     ???
  1263. Return: ???
  1264. Note:    similar to AX=110Eh
  1265. SeeAlso: AX=110Eh
  1266. --------N-2F110E-----------------------------
  1267. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  1268.     AX = 110Eh
  1269.     SS = DOS DS
  1270.     SDA first filename pointer -> fully-qualified name of file
  1271.     SDA CDS pointer -> current directory structure for drive with file
  1272.     STACK: WORD new file attributes
  1273. Return: CF set on error
  1274.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1275.     CF clear if successful
  1276.     STACK unchanged
  1277. Note:    this function is called by the DOS 3.1+ kernel
  1278. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  1279. --------N-2F110F-----------------------------
  1280. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1281.     AX = 110Fh
  1282.     SS = DOS DS
  1283.     SDA first filename pointer -> fully-qualified name of file
  1284.     SDA CDS pointer -> current directory structure for drive with file
  1285. Return: CF set on error
  1286.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1287.     CF clear if successful
  1288.         AX = file attributes
  1289.         BX:DI = file size
  1290. Note:    this function is called by the DOS 3.1+ kernel
  1291. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  1292. --------N-2F1110-----------------------------
  1293. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1294.     AX = 1110h
  1295.     SDA first filename pointer -> name of file
  1296.     ???
  1297. Return: ???
  1298. Note:    appears to be similar to AX=110Fh
  1299. SeeAlso: AX=110Eh
  1300. --------N-2F1111-----------------------------
  1301. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  1302.     AX = 1111h
  1303.     SS = DS = DOS DS
  1304.     SDA first filename pointer = offset of fully-qualified old name
  1305.     SDA second filename pointer = offset of fully-qualified new name
  1306.     SDA CDS pointer -> current directory structure for drive with file
  1307. Return: CF set on error
  1308.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1309.     CF clear if successful
  1310. Note:    this function is called by the DOS 3.1+ kernel
  1311. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  1312. --------N-2F1112-----------------------------
  1313. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  1314.     AX = 1112h
  1315.     SS = DS = DOS DS
  1316.     SDA first filename pointer -> name of file
  1317.     ???
  1318. Return: ???
  1319. Note:    similar to AX=1111h
  1320. SeeAlso: AX=1111h
  1321. --------N-2F1113-----------------------------
  1322. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  1323.     AX = 1113h
  1324.     SS = DS = DOS DS
  1325.     SDA first filename pointer -> fully-qualified filename in DOS DS
  1326.     SDA CDS pointer -> current directory structure for drive with file
  1327. Return: CF set on error
  1328.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1329.     CF clear if successful
  1330. Notes:    this function is called by the DOS 3.1+ kernel
  1331.     the filespec may contain wildcards
  1332. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  1333. --------N-2F1114-----------------------------
  1334. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  1335.     AX = 1114h
  1336.     SDA first filename pointer -> name of file
  1337.     ???
  1338. Return: ???
  1339. Note:    similar to AX=1113h
  1340. SeeAlso: AX=1113h
  1341. --------N-2F1115-----------------------------
  1342. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  1343.     AX = 1115h
  1344.     SS = DOS DS
  1345.     ES:DI -> SFT ???
  1346.     ???
  1347. Return: ???
  1348. Note:    similar to AX=1116h
  1349. SeeAlso: AX=1116h,AX=112Eh
  1350. --------N-2F1116-----------------------------
  1351. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  1352.     AX = 1116h
  1353.     ES:DI -> uninitialized SFT
  1354.     SS = DOS DS
  1355.     SDA first filename pointer -> fully-qualified name of file to open
  1356.     STACK: WORD file access and sharing modes (see INT 21/AH=3Dh)
  1357. Return: CF set on error
  1358.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1359.     CF clear if successful
  1360.         SFT filled (except handle count, which DOS manages itself)
  1361.     STACK unchanged
  1362. Note:    this function is called by the DOS 3.1+ kernel
  1363. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  1364. SeeAlso: INT 21/AH=60h
  1365. --------N-2F1117-----------------------------
  1366. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  1367.     AX = 1117h
  1368.     ES:DI -> uninitialized SFT
  1369.     SS = DOS DS
  1370.     SDA first filename pointer -> fully-qualified name of file to open
  1371.     SDA CDS pointer -> current directory structure for drive with file
  1372.     STACK: WORD file creation mode
  1373.             low byte = file attributes (see INT 21/AH=3Ch)
  1374.             high byte = 00h normal create, 01h create new file
  1375. Return: CF set on error
  1376.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1377.     CF clear if successful
  1378.         SFT filled (except handle count, which DOS manages itself)
  1379.     STACK unchanged
  1380. Note:    this function is called by the DOS 3.1+ kernel
  1381. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  1382. --------N-2F1118-----------------------------
  1383. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  1384.     AX = 1118h
  1385.     ES:DI -> uninitialized SFT
  1386.     SS = DOS DS
  1387.     SDA first filename pointer -> fully-qualified name of file
  1388.     STACK: WORD file creation mode
  1389.             low byte = file attributes
  1390.             high byte = 00h normal create, 01h create new file
  1391. Return: ???
  1392.     STACK unchanged
  1393. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  1394.       on a drive for which the SDA CDS pointer has offset FFFFh
  1395. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  1396. --------N-2F1119-----------------------------
  1397. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  1398.     AX = 1119h
  1399.     SS = DS = DOS DS
  1400.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  1401.     SDA first filename pointer -> fully-qualified search template
  1402.     SDA search attribute = attribute mask for search
  1403. Return: CF set on error
  1404.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1405.     CF clear if successful
  1406.         [DTA] = updated findfirst search data
  1407.             (bit 7 of first byte must be set)
  1408.         [DTA+15h] = standard directory entry for file
  1409. Notes:    this function is called by the DOS 3.1+ kernel
  1410.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  1411. SeeAlso: AX=111Ah,AX=111Bh
  1412. --------N-2F111A-----------------------------
  1413. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  1414.     AX = 111Ah
  1415.     ???
  1416. Return: CF set
  1417.         AX = error code (03h for DOS 4.01 IFSFUNC)
  1418. Note:    use AX=111Ch for DOS 5+
  1419. SeeAlso: AX=1119h,AX=111Ch
  1420. --------N-2F111B-----------------------------
  1421. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  1422.     AX = 111Bh
  1423.     SS = DS = DOS DS
  1424.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  1425.     SDA first filename pointer -> fully-qualified search template
  1426.     SDA CDS pointer -> current directory structure for drive with file
  1427.     SDA search attribute = attribute mask for search
  1428. Return: CF set on error
  1429.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1430.     CF clear if successful
  1431.         [DTA] = updated findfirst search data
  1432.             (bit 7 of first byte must be set)
  1433.         [DTA+15h] = standard directory entry for file
  1434. Note:    this function is called by the DOS 3.1+ kernel
  1435. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  1436. --------N-2F111C-----------------------------
  1437. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  1438.     AX = 111Ch
  1439.     SS = DS = DOS DS
  1440.     ES:DI -> CDS
  1441.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  1442. Return: CF set on error
  1443.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1444.     CF clear if successful
  1445.         [DTA] = updated findfirst search data
  1446.             (bit 7 of first byte must be set)
  1447.         [DTA+15h] = standard directory entry for file
  1448. Note:    this function is called by the DOS 3.1+ kernel
  1449. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  1450. --------N-2F111D-----------------------------
  1451. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  1452.     AX = 111Dh
  1453.     SS = DOS DS
  1454.     SDA PSP segment field = PSP of terminating process
  1455. Return: nothing
  1456. Notes:    used when a process is aborted; the process being terminated is
  1457.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  1458.     this function is called by the DOS 3.1+ kernel
  1459.     closes all FCBs opened by process
  1460. SeeAlso: INT 21/AX=5D04h
  1461. --------N-2F111E-----------------------------
  1462. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  1463.     AX = 111Eh
  1464.     SS = DOS DS
  1465.     STACK: WORD function to execute
  1466.         5F00h  get redirection mode
  1467.             BL = type (03h printer, 04h disk)
  1468.             Return: BH = state (00h off, 01h on)
  1469.         5F01h  set redirection mode
  1470.             BL = type (03h printer, 04h disk)
  1471.             BH = state (00h off, 01h on)
  1472.         5F02h  get redirection list entry
  1473.             BX = redirection list index
  1474.             DS:SI -> 16-byte local device name buffer
  1475.             ES:DI -> 128-byte network name buffer
  1476.             Return: must set user's BX to device type and CX to
  1477.                 stored parameter value, using AX=1218h to get
  1478.                 stack frame address
  1479.         5F03h  redirect device
  1480.             BL = device type (see INT 21/AX=5F03h)
  1481.             CX = stored parameter value
  1482.             DS:SI -> ASCIZ source device name
  1483.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  1484.         5F04h  cancel redirection
  1485.             DS:SI -> ASCIZ device name or network path
  1486.         5F05h  get redirection list extended entry
  1487.             BX = redirection list index
  1488.             DS:SI -> buffer for ASCIZ source device name
  1489.             ES:DI -> buffer for destination ASCIZ network path
  1490.             Return: BH = status flag
  1491.                 BL = type (03h printer, 04h disk)
  1492.                 CX = stored parameter value
  1493.                 BP = NETBIOS local session number
  1494.         5F06h  similar to 5F05h???
  1495. Return: CF set on error
  1496.         AX = error code (see #0811 at INT 21/AH=59h)
  1497.     STACK unchanged
  1498. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  1499.       (including LAN Manager calls)
  1500.     the PC Network 1.00 redirector does not support function 5F06h
  1501. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  1502. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  1503. --------N-2F111F-----------------------------
  1504. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  1505.     AX = 111Fh
  1506.     STACK: WORD function
  1507.         5E02h  set printer setup
  1508.         5E03h  get printer setup
  1509.         5E04h  set printer mode
  1510.         5E05h  get printer mode
  1511. Return: CF set on error
  1512.         AX = error code (see #0811 at INT 21/AH=59h)
  1513.     STACK unchanged
  1514. Note:    this function is called by the DOS 3.1+ kernel
  1515. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  1516. --------N-2F1120-----------------------------
  1517. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  1518.     AX = 1120h
  1519.     DS = DOS DS
  1520.     ???
  1521. Return: CF clear (successful)
  1522. Notes:    this function is called by the DOS 3.1+ kernel
  1523.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  1524. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  1525. --------N-2F1121-----------------------------
  1526. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  1527.     AX = 1121h
  1528.     CX:DX = offset (in bytes) from end
  1529.     ES:DI -> SFT
  1530.         SFT DPB field -> DPB of drive with file
  1531.     SS = DOS DS
  1532. Return: CF set on error
  1533.         AL = DOS error code (see #0811 at INT 21/AH=59h)
  1534.     CF clear if successful
  1535.         DX:AX = new file position
  1536. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  1537.       from the end of a file opened with sharing modes set in such a
  1538.       manner that another process is able to change the size of the file
  1539.       while it is already open
  1540. SeeAlso: AX=1228h,INT 21/AH=42h
  1541. --------N-2F1122-----------------------------
  1542. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  1543.     AX = 1122h
  1544.     SS = DOS DS
  1545.     DS = PSP of process about to terminate
  1546. Return: ???
  1547. Notes:    this function is called by the DOS 3.1+ kernel
  1548.     after calling this function, the kernel calls INT 2F/AX=111Dh
  1549. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  1550. --------N-2F1123-----------------------------
  1551. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  1552.     AX = 1123h
  1553.     DS:SI -> ASCIZ filename to canonicalize
  1554.     ES:DI -> 128-byte buffer for qualified name
  1555. Return: CF set if not resolved
  1556. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  1557.       filename matches the name of a character device
  1558.     called first when DOS attempts to resolve a filename (unless inside an
  1559.       AX=5D00h server call); if this fails, DOS resolves the name locally
  1560. SeeAlso: AX=1221h,INT 21/AH=60h
  1561. --------N-2F1124-----------------------------
  1562. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  1563.     AX = 1124h
  1564.     ES:DI -> SFT
  1565.     SS = DOS DS
  1566.     ???
  1567. Return: CX = ???
  1568. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h returns CF set
  1569. SeeAlso: AX=1126h
  1570. --------N-2F1125-----------------------------
  1571. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  1572.     AX = 1125h
  1573.     STACK: WORD subfunction
  1574.         5D07h get print stream state
  1575.             Return: DL = current state
  1576.         5D08h set print stream state
  1577.             DL = new state
  1578.         5D09h finish print job
  1579. Return: CF set on error
  1580.         AX = error code (see #0811 at INT 21/AH=59h)
  1581.     STACK unchanged
  1582. Note:    this function is called by the DOS 3.1+ kernel
  1583. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  1584. --------N-2F1126-----------------------------
  1585. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  1586.     AX = 1126h
  1587.     ES:DI -> SFT for file handle 4???
  1588.     SS = DOS DS???
  1589.     ???
  1590. Return: CF set on error
  1591. Notes:    this function is called by the DOS 3.1+ kernel
  1592.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  1593.       bit 11 of the device information word in the SFT set
  1594. SeeAlso: AX=1124h
  1595. --------N-2F1127-----------------------------
  1596. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1597.     AX = 1127h
  1598. Return: CF set
  1599.         AX = 0001h (invalid function) (see #0811 at INT 21/AH=59h)
  1600. --------N-2F1128-----------------------------
  1601. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1602.     AX = 1128h
  1603. Return: CF set
  1604.         AX = 0001h (invalid function) (see #0811 at INT 21/AH=59h)
  1605. --------N-2F1129-----------------------------
  1606. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1607.     AX = 1129h
  1608. Return: CF set
  1609.         AX = 0001h (invalid function) (see #0811 at INT 21/AH=59h)
  1610. --------N-2F112A-----------------------------
  1611. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  1612.     AX = 112Ah
  1613.     DS = DOS DS
  1614.     ???
  1615. Return: ???
  1616. Note:    does something to each IFS driver
  1617. --------N-2F112B-----------------------------
  1618. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  1619.     AX = 112Bh
  1620.     SS = DOS DS
  1621.     CX = function/category
  1622.     DS:DX -> parameter block
  1623.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  1624.     ???
  1625. Return: CF set on error
  1626.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1627.     CF clear if successful
  1628. Note:    this function is called by the DOS 4.0 kernel
  1629. --------N-2F112C-----------------------------
  1630. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - "UPDATE_CB" - ???
  1631.     AX = 112Ch
  1632.     SS = DOS DS
  1633.     SDA current SFT pointer -> SFT for file
  1634.     ???
  1635. Return: CF set on error
  1636. Note:    called by SHARE in DOS 5.0-6.0
  1637. --------N-2F112D-----------------------------
  1638. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  1639.     AX = 112Dh
  1640.     BL = subfunction (value of AL on INT 21)
  1641.         02h get extended attributes
  1642.         03h get extended attribute properties
  1643.         04h set extended attributes
  1644.         Return: CF clear
  1645.         else ???
  1646.         Return: CX = ??? (00h or 02h for DOS 4.01)
  1647.     ES:DI -> SFT for file
  1648.     SS = DOS DS
  1649. Return: DS = DOS DS
  1650. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  1651.       INT 21/AX=5703h, and INT 21/AX=5704h
  1652. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  1653. --------N-2F112E-----------------------------
  1654. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  1655.     AX = 112Eh
  1656.     SS = DS = DOS DS
  1657.     ES:DI -> uninitialized SFT for file
  1658.     STACK: WORD file attribute for created/truncated file
  1659.             low byte = file attributes
  1660.             high byte = 00h normal create/open, 01h create new file
  1661.     SDA first filename pointer -> fully-qualified filename
  1662.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  1663.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  1664. Return: CF set on error
  1665.         AX = error code
  1666.     CF clear if successful
  1667.         CX = result code
  1668.         01h file opened
  1669.         02h file created
  1670.         03h file replaced (truncated)
  1671.         SFT initialized (except handle count, which DOS manages itself)
  1672. Note:    this function is called by the DOS 4+ kernel
  1673. BUG:    this function is not called correctly under some DOS versions
  1674.       (at least 5.0 and 6.2):
  1675.         the file attribute on the stack is not correct if the action 
  1676.           code is 11h,
  1677.         the result code in CX is not passed back to the application.
  1678. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  1679. --------N-2F112F-----------------------------
  1680. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  1681.     AX = 112Fh
  1682.     SS = DOS DS
  1683.     STACK: WORD function in low byte
  1684.         00h ???
  1685.             DS:SI -> Current Directory Structure???
  1686.             CL = drive (1=A:)
  1687.         01h ???
  1688.             DS:SI -> ???
  1689.             CL = file handle???
  1690.         02h ???
  1691.             DS:SI -> Current Directory Structure???
  1692.             DI = ???
  1693.             CX = drive (1=A:)
  1694.     ???
  1695. Return: CF set on error
  1696.         AX = DOS error code (see #0811 at INT 21/AH=59h)
  1697.     CF clear if successful
  1698. Note:    this function is called by the DOS 4.0 kernel
  1699. SeeAlso: INT 21/AH=6Bh
  1700. --------N-2F1130-----------------------------
  1701. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  1702.     AX = 1130h
  1703. Return: ES = CS of resident IFSFUNC
  1704. --------N-2F1180-----------------------------
  1705. INT 2F - LAN Manager Enhanced DOS Services - ???
  1706.     AX = 1180h
  1707.     ???
  1708. Return: ???
  1709. --------N-2F1182-----------------------------
  1710. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  1711.     AX = 1182h
  1712.     ???
  1713. Return: ???
  1714. --------N-2F1184-----------------------------
  1715. INT 2F - LAN Manager Enhanced DOS - ???
  1716.     AX = 1184h
  1717.     ???
  1718. Return: ???
  1719. --------N-2F1186-----------------------------
  1720. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  1721.     AX = 1186h
  1722.     DS:SI -> stack frame (see #1299)
  1723. Return: CF clear if successful
  1724.     CF set if error
  1725.         AX = error code
  1726. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  1727.       file/printer services
  1728. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  1729.  
  1730. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  1731. Offset    Size    Description    (Table 1299)
  1732.  00h    DWORD    -> number of bytes read
  1733.  04h    WORD    size of buffer
  1734.  06h    DWORD    -> buffer
  1735.  0Ah    DWORD    -> return code
  1736.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  1737.  12h    WORD    handle
  1738. --------N-2F118A-----------------------------
  1739. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  1740.     AX = 118Ah
  1741.     BX = function (0000h or 0001h)
  1742. Return: CF clear if successful
  1743.         AX = 1100h success
  1744.     CF set if error
  1745.         AX = 0001h, etc.
  1746. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  1747. --------N-2F118B-----------------------------
  1748. INT 2F - LAN Manager Enhanced DOS - ???
  1749.     AX = 118Bh
  1750.     ???
  1751. Return: ???
  1752. --------N-2F118C-----------------------------
  1753. INT 2F - LAN Manager Enhanced DOS - ???
  1754.     AX = 118Ch
  1755.     ???
  1756. Return: ???
  1757. --------N-2F118E-----------------------------
  1758. INT 2F - LAN Manager Enhanced DOS - ???
  1759.     AX = 118Eh
  1760.     ???
  1761. Return: ???
  1762. --------N-2F118F-----------------------------
  1763. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  1764.     AX = 118Fh
  1765.     DS:SI -> stack frame (see #1300)
  1766. Return: CF clear if successful
  1767.     CF set if error
  1768.         AX = error code
  1769. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  1770.  
  1771. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  1772. Offset    Size    Description    (Table 1300)
  1773.  00h    DWORD    -> number of bytes read
  1774.  04h    WORD    Size of buffer
  1775.  06h    DWORD    -> buffer
  1776.  0Ah    DWORD    -> return code
  1777.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  1778.  12h    WORD    handle
  1779. --------N-2F1190-----------------------------
  1780. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  1781.     AX = 1190h
  1782.     DS:SI -> stack frame (see #1301)
  1783. Return: CF clear if successful
  1784.     CF set if error
  1785.         AX = error code
  1786. SeeAlso: AX=1186h,AX=1191h
  1787.  
  1788. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  1789. Offset    Size    Description    (Table 1301)
  1790.  00h    DWORD    -> number of bytes read
  1791.  04h    WORD    size of buffer
  1792.  06h    DWORD    -> buffer
  1793.  0Ah    DWORD    -> return code
  1794.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  1795.  12h    WORD    handle
  1796.  14h    DWORD    ???
  1797. --------N-2F1191-----------------------------
  1798. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  1799.     AX = 1191h
  1800.     DS:SI -> stack frame (see #1302)
  1801. Return: CF clear if successful
  1802.     CF set if error
  1803.         AX = error code
  1804. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  1805.  
  1806. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  1807. Offset    Size    Description    (Table 1302)
  1808.  00h    DWORD    -> number of bytes read
  1809.  04h    WORD    size of buffer
  1810.  06h    DWORD    -> buffer
  1811.  0Ah    DWORD    -> return code
  1812.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  1813.  12h    WORD    handle
  1814.  14h    DWORD    ???
  1815. --------D-2F1200-----------------------------
  1816. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  1817.     AX = 1200h
  1818. Return: AL = FFh (for compatibility with other INT 2F functions)
  1819. --------D-2F1201-----------------------------
  1820. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  1821.     AX = 1201h
  1822.     SS = DOS DS (must be using a DOS internal stack)
  1823.     SDA current SFT pointer -> SFT of file to close
  1824. Return: CF set on error
  1825.     BX???
  1826.     CX new reference count of SFT
  1827.     ES:DI -> SFT for file
  1828. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  1829. --------D-2F1202-----------------------------
  1830. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  1831.     AX = 1202h
  1832.     STACK: WORD vector number
  1833. Return: ES:BX -> interrupt vector
  1834.     STACK unchanged
  1835. --------D-2F1203-----------------------------
  1836. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  1837.     AX = 1203h
  1838. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  1839. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  1840.       segment
  1841. --------D-2F1204-----------------------------
  1842. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  1843.     AX = 1204h
  1844.     STACK: WORD character to normalize
  1845. Return: AL = normalized character (forward slash turned to backslash, all
  1846.           others unchanged)
  1847.     ZF set if path separator
  1848.     STACK unchanged
  1849. --------D-2F1205-----------------------------
  1850. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  1851.     AX = 1205h
  1852.     STACK: WORD character to output
  1853. Return: STACK unchanged
  1854. Note:    can be called only from within DOS
  1855. --------D-2F1206-----------------------------
  1856. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  1857.     AX = 1206h
  1858.     DI = error code
  1859.     BP:SI -> device driver header
  1860.     SS = DOS DS (must be using a DOS internal stack)
  1861.     STACK: WORD value to be passed to INT 24 in AX
  1862. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  1863.     STACK unchanged
  1864. SeeAlso: INT 24
  1865. --------D-2F1207-----------------------------
  1866. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  1867.     AX = 1207h
  1868.     DS:DI -> disk buffer
  1869. Return: nothing
  1870. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  1871.       recently used is first); under DOS 3.3, the buffer is then moved to
  1872.       the start of the disk buffer chain if it was marked unused
  1873. Notes:    can be called only from within DOS
  1874.     this function is nearly the same as AX=120Fh
  1875. SeeAlso: AX=120Fh
  1876. --------D-2F1208-----------------------------
  1877. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  1878.     AX = 1208h
  1879.     ES:DI -> SFT
  1880. Return: AX = original value of reference count
  1881. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  1882.       that the SFT is not in use).    It is the caller's responsibility to
  1883.       set the reference count to zero after cleaning up.
  1884.     used by network redirectors such as MSCDEX
  1885. SeeAlso: AX=1106h
  1886. --------D-2F1209-----------------------------
  1887. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  1888.     AX = 1209h
  1889.     DS:DI -> disk buffer
  1890. Return: disk buffer marked unused, contents written to disk if buffer dirty
  1891. Note:    can be called only from within DOS
  1892. SeeAlso: AX=120Eh,AX=1215h
  1893. --------D-2F120A-----------------------------
  1894. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  1895.     AX = 120Ah
  1896.     DS = SS = DOS DS (must be using a DOS internal stack)
  1897.     STACK: WORD extended error code
  1898. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  1899.     CF clear if retry, set otherwise
  1900.     STACK unchanged
  1901. Notes:    can only be called during a DOS function call, as it uses various
  1902.       fields in the SDA to set up the registers for the INT 24
  1903.     reportedly sets current DPB's first root directory sector to 1
  1904. SeeAlso: INT 24
  1905. --------D-2F120B-----------------------------
  1906. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  1907.     AX = 120Bh
  1908.     ES:DI -> system file table entry for previous open of file
  1909.     STACK: WORD extended error code (should be 20h--sharing violation)
  1910. Return: CF clear if operation should be retried
  1911.     CF set if operation should not be retried
  1912.         AX = error code (20h) (see #0811 at INT 21/AH=59h)
  1913.     STACK unchanged
  1914. Notes:    can only be called during a DOS function call
  1915.     should only be called if an attempt was made to open an already-open
  1916.       file contrary to the sharing rules
  1917.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  1918.       inheritance allowed
  1919. --------D-2F120C-----------------------------
  1920. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  1921.     AX = 120Ch
  1922.     SDA current SFT pointer -> SFT for file
  1923.     DS = DOS DS
  1924.     SS = DOS DS (must be using a DOS internal stack)
  1925. Return: ES, DI, AX destroyed
  1926. Notes:    invokes "device open" call on device driver for SFT
  1927.     changes owner of last-accessed SFT to calling process if it was opened
  1928.       via FCB
  1929.     called by network redirectors such as MSCDEX
  1930. --------D-2F120D-----------------------------
  1931. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  1932.     AX = 120Dh
  1933.     SS = DOS DS (must be using a DOS internal stack)
  1934. Return: AX = current date in packed format (see #0803 at INT 21/AX=5700h)
  1935.     DX = current time in packed format (see #0802 at INT 21/AX=5700h)
  1936. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  1937. --------D-2F120E-----------------------------
  1938. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  1939.     AX = 120Eh
  1940.     SS = DOS DS (must be using a DOS internal stack)
  1941. Return: DS:DI -> first disk buffer
  1942. Notes:    clears "referenced" flag on all disk buffers
  1943.     in DOS 5+, this has become essentially a NOP, invoking the same code
  1944.       used by AX=1224h (SHARING DELAY)
  1945. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  1946. --------D-2F120F-----------------------------
  1947. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  1948.     AX = 120Fh
  1949.     DS:DI -> disk buffer
  1950.     SS = DOS DS (must be using a DOS internal stack)
  1951. Return: DS:DI -> next buffer in buffer list
  1952. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  1953.       recently used is first); under DOS 3.3, the buffer is then moved to
  1954.       the start of the disk buffer chain if it was marked unused
  1955. Note:    this function is the same as AX=1207h except that it returns a
  1956.       pointer to the buffer following the specified buffer in the buffer
  1957.       chain
  1958. SeeAlso: AX=1207h
  1959. --------D-2F1210-----------------------------
  1960. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  1961.     AX = 1210h
  1962.     DS:DI -> first disk buffer to check
  1963. Return: ZF clear if found
  1964.         DS:DI -> first unreferenced disk buffer
  1965.     ZF set if not found
  1966. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  1967.       used by AX=1224h (SHARING DELAY)
  1968. SeeAlso: AX=120Eh
  1969. --------D-2F1211-----------------------------
  1970. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  1971.     AX = 1211h
  1972.     DS:SI -> ASCIZ filename to normalize
  1973.     ES:DI -> buffer for normalized filename
  1974. Return: destination buffer filled with uppercase filename, with slashes turned
  1975.     to backslashes
  1976. SeeAlso: AX=121Eh,AX=1221h
  1977. --------D-2F1212-----------------------------
  1978. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  1979.     AX = 1212h
  1980.     ES:DI -> ASCIZ string
  1981. Return: CX = length of string
  1982. SeeAlso: AX=1225h
  1983. --------D-2F1213-----------------------------
  1984. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  1985.     AX = 1213h
  1986.     STACK: WORD character to convert to uppercase
  1987. Return: AL = uppercase character
  1988.     STACK unchanged
  1989. --------D-2F1214-----------------------------
  1990. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  1991.     AX = 1214h
  1992.     DS:SI = first pointer
  1993.     ES:DI = second pointer
  1994. Return: ZF set if pointers are equal, ZF clear if not equal
  1995. --------D-2F1215-----------------------------
  1996. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  1997.     AX = 1215h
  1998.     DS:DI -> disk buffer
  1999.     SS = DOS DS (must be using a DOS internal stack)
  2000.     STACK: WORD drives for which to skip buffer
  2001.         ignore buffer if drive same as high byte, or bytes differ and
  2002.           the buffer is for a drive OTHER than that given in low byte
  2003. Return: STACK unchanged
  2004. Note:    can be called only from within DOS
  2005. SeeAlso: AX=1209h
  2006. --------D-2F1216-----------------------------
  2007. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  2008.     AX = 1216h
  2009.     BX = system file table entry number
  2010. Return: CF clear if successful
  2011.         ES:DI -> system file table entry
  2012.     CF set if BX greater than FILES=
  2013. Note:    supported by DR-DOS 5+
  2014. SeeAlso: AX=1220h
  2015. --------D-2F1217-----------------------------
  2016. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  2017.     AX = 1217h
  2018.     SS = DOS DS (must be using a DOS internal stack)
  2019.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  2020. Return: CF set on error
  2021.         (drive > LASTDRIVE)
  2022.     CF clear if successful
  2023.         DS:SI -> current directory structure for specified drive
  2024.     STACK unchanged
  2025. SeeAlso: AX=1219h
  2026. --------D-2F1218-----------------------------
  2027. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  2028.     AX = 1218h
  2029. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  2030. Note:    only valid while within DOS
  2031. --------D-2F1219-----------------------------
  2032. INT 2F U - DOS 3+ internal - SET DRIVE???
  2033.     AX = 1219h
  2034.     SS = DOS DS (must be using a DOS internal stack)
  2035.     STACK: WORD drive (0 = default, 1 = A:, etc)
  2036. Return: ???
  2037.     STACK unchanged
  2038. Notes:    calls AX=1217h
  2039.     builds a current directory structure if inside server call
  2040.       (INT 21/AX=5D00h)
  2041. SeeAlso: AX=1217h,AX=121Fh
  2042. --------D-2F121A-----------------------------
  2043. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  2044.     AX = 121Ah
  2045.     DS:SI -> filename
  2046. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  2047.     DS:SI -> filename without leading X: (if present)
  2048. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  2049. --------D-2F121B-----------------------------
  2050. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  2051.     AX = 121Bh
  2052.     CL = year - 1980
  2053. Return: AL = number of days in February
  2054. Note:    requires DS to be set to the DOS data segment
  2055. SeeAlso: INT 21/AH=2Bh
  2056. --------D-2F121C-----------------------------
  2057. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  2058.     AX = 121Ch
  2059.     DS:SI -> start of memory to checksum
  2060.     CX = number of bytes
  2061.     DX = initial checksum
  2062.     SS = DOS DS (must be using a DOS internal stack)
  2063. Return: AX, CX destroyed
  2064.     DX = checksum
  2065.     DS:SI -> first byte after checksummed range
  2066. Notes:    used by DOS to determine day count since 1/1/80 given a date
  2067.     supported by DR-DOS 5.0+
  2068. SeeAlso: AX=121Dh
  2069. --------D-2F121D-----------------------------
  2070. INT 2F U - DOS 3+ internal - SUM MEMORY
  2071.     AX = 121Dh
  2072.     DS:SI -> memory to add up
  2073.     CX = 0000h
  2074.     DX = limit
  2075. Return: AL = byte which exceeded limit
  2076.     CX = number of bytes before limit exceeded
  2077.     DX = remainder after adding first CX bytes
  2078.     DS:SI -> byte beyond the one which exceeded the limit
  2079. Notes:    used by DOS to determine year or month given day count since 1/1/80
  2080.     supported by DR-DOS 5.0+
  2081. SeeAlso: AX=121Ch
  2082. --------D-2F121E-----------------------------
  2083. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  2084.     AX = 121Eh
  2085.     DS:SI -> first ASCIZ filename
  2086.     ES:DI -> second ASCIZ filename
  2087. Return: ZF set if filenames equivalent, ZF clear if not
  2088. Note:    supported by DR-DOS 5.0+
  2089. SeeAlso: AX=1211h,AX=1221h
  2090. --------D-2F121F-----------------------------
  2091. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  2092.     AX = 121Fh
  2093.     SS = DOS DS (must be using a DOS internal stack)
  2094.     STACK: WORD drive letter
  2095. Return: ES:DI -> current directory structure (will be overwritten by next call)
  2096.     STACK unchanged
  2097. --------D-2F1220-----------------------------
  2098. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  2099.     AX = 1220h
  2100.     BX = file handle
  2101. Return: CF set on error
  2102.         AL = 6 (invalid file handle)
  2103.     CF clear if successful
  2104.         ES:DI -> JFT entry for file handle in current process
  2105. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  2106.       file handle, or FFh if the handle is not open
  2107.     supported by DR-DOS 5.0+
  2108. SeeAlso: AX=1216h,AX=1229h
  2109. --------D-2F1221-----------------------------
  2110. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  2111.     AX = 1221h
  2112.     DS:SI -> file name to be fully qualified
  2113.     ES:DI -> 128-byte buffer for resulting canonical file name
  2114.     SS = DOS DS (must be using a DOS internal stack)
  2115. Return: (see INT 21/AH=60h)
  2116. Note:    identical to INT 21/AH=60h
  2117. SeeAlso: AX=1123h,INT 21/AH=60h
  2118. --------D-2F1222-----------------------------
  2119. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  2120.     AX = 1222h
  2121.     SS = DOS data segment
  2122.     SS:SI -> 4-byte records
  2123.         BYTE    error code, FFh = last record
  2124.         BYTE    error class, FFh = don't change
  2125.         BYTE    suggested action, FFh = don't change
  2126.         BYTE    error locus, FFh = don't change
  2127.     SDA error code set
  2128. Return: SI destroyed
  2129.     SDA error class, error locus, and suggested action fields set
  2130. Note:    can be called only from within DOS
  2131. SeeAlso: AX=122Dh,INT 21/AH=59h,INT 21/AX=5D0Ah
  2132. --------D-2F1223-----------------------------
  2133. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  2134.     AX = 1223h
  2135.     DS = DOS DS
  2136.     SS = DOS DS (must be using a DOS internal stack)
  2137.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  2138.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  2139. Return: CF set if no character device by that name found
  2140.     CF clear if found
  2141.         BH = low byte of device attribute word
  2142. Note:    can only be called from within DOS
  2143. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  2144. --------D-2F1224-----------------------------
  2145. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  2146.     AX = 1224h
  2147.     SS = DOS DS (must be using a DOS internal stack)
  2148. Return: after delay set by INT 21/AX=440Bh, unless in server call
  2149.       (INT 21/AX=5D00h)
  2150. Note:    delay is dependent on the processor speed, and is skipped entirely if
  2151.       inside a server call
  2152. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  2153. --------D-2F1225-----------------------------
  2154. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2155.     AX = 1225h
  2156.     DS:SI -> ASCIZ string
  2157. Return: CX = length of string
  2158. Note:    supported by DR-DOS 5.0+
  2159. SeeAlso: AX=1212h
  2160. --------D-2F1226-----------------------------
  2161. INT 2F U - DOS 3.3+ internal - OPEN FILE
  2162.     AX = 1226h
  2163.     CL = access mode
  2164.     DS:DX -> ASCIZ filename
  2165.     SS = DOS DS (must be using a DOS internal stack)
  2166. Return: CF set on error
  2167.         AL = error code (see #0811 at INT 21/AH=59h)
  2168.     CF clear if successful
  2169.         AX = file handle
  2170. Notes:    can only be called from within DOS
  2171.     equivalent to INT 21/AH=3Dh
  2172.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2173. SeeAlso: AX=1227h,INT 21/AH=3Dh
  2174. --------D-2F1227-----------------------------
  2175. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  2176.     AX = 1227h
  2177.     BX = file handle
  2178.     SS = DOS DS (must be using a DOS internal stack)
  2179. Return: CF set on error
  2180.         AL = 06h invalid file handle
  2181.     CF clear if successful
  2182. Notes:    can only be called from within DOS
  2183.     equivalent to INT 21/AH=3Eh
  2184.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2185. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  2186. --------D-2F1228BP4200-----------------------
  2187. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  2188.     AX = 1228h
  2189.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  2190.     BX = file handle
  2191.     CX:DX = offset in bytes
  2192.     SS = DOS DS (must be using a DOS internal stack)
  2193. Return: as for INT 21/AH=42h
  2194. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  2195.       function call
  2196.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2197.       LSEEK, and restores frame pointer
  2198.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2199. SeeAlso: INT 21/AH=42h
  2200. --------D-2F1229-----------------------------
  2201. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  2202.     AX = 1229h
  2203.     BX = file handle
  2204.     CX = number of bytes to read
  2205.     DS:DX -> buffer
  2206.     SS = DOS DS (must be using a DOS internal stack)
  2207. Return: as for INT 21/AH=3Fh
  2208. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  2209.       a DOS function call
  2210.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2211. SeeAlso: AX=1226h,INT 21/AH=3Fh
  2212. --------D-2F122A-----------------------------
  2213. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  2214.     AX = 122Ah
  2215.     BX = entry point to set (0001h or 0002h)
  2216.     DS:SI -> FASTOPEN entry point
  2217.         (entry point not set if SI = FFFFh for DOS 4+)
  2218. Return: CF set if specified entry point already set
  2219. Notes:    entry point in BX is ignored under DOS 3.30
  2220.     both entry points set to same handler by DOS 4.01
  2221.     DOS 5.0 and 6.0 only set entry point 1
  2222.  
  2223. (Table 1303)
  2224. Values DOS 3.30+ FASTOPEN is called with:
  2225.     AL = 01h  Lookup
  2226.         CX = ??? seems to be offset
  2227.         DI = ??? seems to be offset
  2228.         SI = offset in DOS DS of filename
  2229.     AL = 02h  insert file into FASTOPEN cache
  2230.     AL = 03h  delete file from FASTOPEN cache
  2231.         SI = offset in DOS DS of filename
  2232.     AL = 04h  purge FASTOPEN cache
  2233.         AH = subfunction (00h,01h,02h)
  2234.         ES:DI -> ???
  2235.         CX = ??? (subfunctions 01h and 02h only)
  2236. Returns: CF set on error or not installed
  2237. Note: function 03h calls function 01h first
  2238.  
  2239. (Table 1304)
  2240. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  2241.     AL = 04h ???
  2242.         AH = 03h
  2243.         ???
  2244.     AL = 05h ???
  2245.     AL = 0Bh ???
  2246.     AL = 0Ch ???
  2247.     AL = 0Dh ???
  2248.     AL = 0Eh ???
  2249.     AL = 0Fh ???
  2250.     AL = 10h ???
  2251.  
  2252. (Table 1305)
  2253. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  2254.     AL = 04h  purge FASTOPEN cache
  2255.         AH = 03h
  2256.         ???
  2257.     AL = 05h ???
  2258.         DL = drive (00h = A:)
  2259.         ???
  2260.     AL = 06h ???
  2261.         ???
  2262. --------D-2F122B-----------------------------
  2263. INT 2F U - DOS 3.3+ internal - IOCTL
  2264.     AX = 122Bh
  2265.     BP = 44xxh
  2266.     SS = DOS DS (must be using a DOS internal stack)
  2267.     additional registers as appropriate for INT 21/AX=44xxh
  2268. Return: as for INT 21/AH=44h
  2269. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  2270.       a DOS function call
  2271.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2272.       IOCTL, and restores frame pointer
  2273.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  2274. SeeAlso: INT 21/AH=44h
  2275. --------D-2F122C-----------------------------
  2276. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  2277.     AX = 122Ch
  2278. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  2279. Note:    although this function exists in DR-DOS 5.0, it returns 0000h:0000h
  2280. SeeAlso: INT 21/AH=52h
  2281. --------D-2F122D-----------------------------
  2282. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  2283.     AX = 122Dh
  2284. Return: AX = current extended error code
  2285. SeeAlso: AX=1222h,INT 21/AH=59h
  2286. --------D-2F122E-----------------------------
  2287. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  2288.     AX = 122Eh
  2289.     DL = subfunction
  2290.         00h get standard DOS error table (see #1306)
  2291.         Return: ES:DI -> error table
  2292.                  (DOS 4: errors 00h-12h,50h-5Bh)
  2293.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  2294.         01h set standard DOS error table
  2295.         ES:DI -> error table
  2296.         02h get parameter error table (errors 00h-0Ah)
  2297.         Return: ES:DI -> error table
  2298.         03h set parameter error table
  2299.         ES:DI -> error table
  2300.         04h get critical/SHARE error table (errors 13h-2Bh)
  2301.         Return: ES:DI -> error table
  2302.         05h set critical/SHARE error table
  2303.         ES:DI -> error table
  2304.         06h get ??? error table
  2305.         Return: ES:DI -> error table or 0000h:0000h
  2306.         07h set ??? error table
  2307.         ES:DI -> error table
  2308.         08h get error message retriever (see #1307)
  2309.         Return: ES:DI -> FAR procedure to fetch error message
  2310.         09h set ??? error table
  2311.         ES:DI -> error table
  2312. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  2313.       the offset of the error message table within COMMAND.COM, and the
  2314.       procedure returned by DL=08h should be called
  2315.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  2316.       with DL odd are ignored); they are always returned with segment 0001h
  2317.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  2318.       into a single error table
  2319. SeeAlso: AX=0500h,INT 21/AH=59h
  2320.  
  2321. Format of DOS 4.x error table:
  2322. Offset    Size    Description    (Table 1306)
  2323.  00h    BYTE    FFh
  2324.  01h  2 BYTEs    04h,00h (DOS version???)
  2325.  03h    BYTE    number of error headers following
  2326.  04h 2N WORDs    table of all error headers for table
  2327.         Offset    Size    Description
  2328.          00h    WORD    error message number
  2329.          02h    WORD    offset of error message from start of header
  2330.                 error messages are count byte followed by msg
  2331. Note:    DOS 5 error tables consist of one word per error number; each word
  2332.       contains either the offset of a counted string or 0000h
  2333.  
  2334. (Table 1307)
  2335. Call error retrieval function with:
  2336.     AX = error number
  2337.     DI = offset of error table
  2338. Return: ES:DI -> error message (counted string)
  2339. Notes:    this function needs to access COMMAND.COM if the messages were not
  2340.       loaded into memory permanently with /MSG; the caller should assume
  2341.       that the returned message will be overwritten by the next call of
  2342.       the function
  2343.     supported by DR-DOS 5.0
  2344.  
  2345. (Table 1308)
  2346. Values for parameter errors:
  2347.  01h    Too many parameters
  2348.  02h    Required Parameter missing
  2349.  03h    Invalid switch
  2350.  04h    Invalid keyword
  2351.  06h    Parameter value not in allowed range
  2352.  07h    Parameter value not allowed
  2353.  08h    Parameter value not allowed
  2354.  09h    Parameter format not correct
  2355.  0Ah    Invalid parameter
  2356.  0Bh    Invalid parameter combination
  2357. --------D-2F122F-----------------------------
  2358. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  2359.     AX = 122Fh
  2360.     DX = DOS version number (0000h = return true DOS version)
  2361. Note:    not available under DR-DOS 5.0 or 6.0
  2362. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  2363. --------m-2F12FFBX0006-----------------------
  2364. INT 2F U - DR-DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  2365.     AX = 12FFh
  2366.     BX = 0006h
  2367.     DX = 0000h
  2368.     CX = function
  2369.         0000h get status of video memory space (MEMMAX /V)
  2370.         0001h map memory into video memory space (MEMMAX +V)
  2371.         0002h unmap memory from video memory space (MEMMAX -V)
  2372. Return: CF clear if successful
  2373.         AX = 0000h (successful)
  2374.         BX = segment of reserved video RAM
  2375.         CX = segment of used video RAM
  2376.         DX = segment of first upper MCB
  2377. Notes:    this functionality is provided by EMM386, and partially supported by
  2378.       HIDOS.SYS
  2379.     BL specifies which program handles the call, BH is the function number
  2380. SeeAlso: AX=D201h/BX=4849h
  2381. --------O-2F12FFBX0007-----------------------
  2382. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  2383.     AX = 12FFh
  2384.     BX = 0007h
  2385.     CX = 0000h
  2386. Return: CF clear if installed
  2387.         AX = 0000h
  2388.         BX = ??? (4426h)
  2389.         CX = ??? (0068h)
  2390.         DX = PSP segment of resident code???
  2391.         SI = ??? (4AFAh)
  2392.         ES = resident code segment
  2393. --------m-2F12FFBX0106-----------------------
  2394. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  2395.     AX = 12FFh
  2396.     BX = 0106h
  2397. Return:    CF clear if successful
  2398.         AX = 0000h (successful)
  2399.         BX = EDC0h (signature)
  2400.         CL = memory manager variant (02h,03h)
  2401.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  2402.         CH = ??? (00h)
  2403.         DX = version??? (0300h for v3.0)
  2404.         ES = segment of EMM386 low-memory stub
  2405. Notes:    BL specifies which program handles the call, BH is the function number
  2406.     if the word at ES:0012h is nonzero, if contains the offset within
  2407.       segment ES of the CEMM-compatible entry point (see #1309)
  2408.     if no other program has hooked INT 67, an alternate installation
  2409.       check is to test for the string
  2410.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  2411.       handler's segment; the word immediately preceding this string
  2412.       contains the offset of the API entry point if it is nonzero
  2413. Index:    entry point;Novell EMM386
  2414.  
  2415. (Table 1309)
  2416. Call Novell EMM386.EXE entry point with:
  2417.     AH = 00h get memory manager's status???
  2418.         ???
  2419.     AH = 01h set memory manager's status???
  2420.         ???
  2421.     AH = 02h Weitek coprocessor support???
  2422.         AL = subfunction???
  2423.     more functions???
  2424. SeeAlso: #0660 at INT 21/AX=4402h/SF=02h,#2107 at INT 67/AX=FFA5h
  2425. --------m-2F12FFBL06-------------------------
  2426. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  2427.     AX = 12FFh
  2428.     BL = 06h
  2429.     BH = function (02h-09h)
  2430.     ???
  2431. Return: ???
  2432. --------O-2F12FFBX0EDC-----------------------
  2433. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  2434.     AX = 12FFh
  2435.     BX = 0EDCh
  2436. Return: AX = 0000h if ??? loaded
  2437.         CF clear
  2438.         BX = 0000h
  2439. Notes:    called by Novell DOS 7 TaskMgr
  2440.     if this function returns with AX=0000h, then the code necessary to
  2441.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  2442.       available for use
  2443.     because the request is handled on the initial trap to the memory
  2444.       manager caused by INT instructions, this function must be invoked
  2445.       with an actual INT 2F instruction instead of some simulation such
  2446.       as a far call to the address in the interrupt vector table
  2447. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  2448. --------D-2F13-------------------------------
  2449. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  2450.     AH = 13h
  2451.     DS:DX -> interrupt handler disk driver calls on read/write
  2452.     ES:BX = address to restore INT 13 to on system halt (exit from root
  2453.          shell) or warm boot (INT 19)
  2454. Return: DS:DX set by previous invocation of this function
  2455.     ES:BX set by previous invocation of this function
  2456. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  2457.       original INT 13 handler.  The first is for disk change detection
  2458.       on floppy drives, the second is for tracking formatting calls and
  2459.       correcting DMA boundary errors, the third is for working around
  2460.       problems in a particular version of IBM's ROM BIOS
  2461.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  2462.       also points there unless IO.SYS has installed a special filter for
  2463.       hard disk reads (on systems with model byte FCh and BIOS date
  2464.       "01/10/84" only), in which case it points at the special filter
  2465.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  2466.       functions are still invoked via an INT 13 instruction
  2467.     this is a dangerous security loophole for any virus-monitoring software
  2468.       which does not trap this call ("INT13", "Nomenklatura", and many
  2469.       Bulgarian viruses are known to use it to get the original ROM entry
  2470.       point)
  2471. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  2472. --------N-2F13-------------------------------
  2473. INT 2F U - MS-NET - ???
  2474.     AH = 13h
  2475.     ???
  2476. Return: ???
  2477. Note:    supposedly used to move (or control the movement of) NCBs
  2478. --------U-2F1400-----------------------------
  2479. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  2480.     AX = 1400h
  2481. Return: AL = 00h not installed, OK to install
  2482.          01h not installed, not OK
  2483.          FFh installed
  2484. Notes:    this function is called by the DOS v3.3+ kernel
  2485.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2486.     supported by DR-DOS 5.0
  2487.     documented for MS-DOS 5+, but undocumented in prior versions
  2488. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  2489. --------D-2F1400-----------------------------
  2490. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  2491.     AX = 1400h
  2492. Return: AX = FFFFh if installed
  2493.         BX = maximum memory required to save screen and keyboard info
  2494.     CF clear if successful
  2495.     CF set on error
  2496.         AX = error code
  2497.         0002h invalid function
  2498.         0004h unknown error
  2499. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  2500.       to communicate with the user
  2501. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2502. --------U-2F1401-----------------------------
  2503. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  2504.     AX = 1401h
  2505.     DS:SI -> internal code page structure (see #1310)
  2506.     BX = new code page (see INT 21/AX=6602h)
  2507.     DX = country code???
  2508. Return: AL = status
  2509.          00h successful
  2510.          else DOS error code
  2511. Note:    this function is called by the DOS v3.3+ kernel
  2512. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  2513.  
  2514. Format of DOS 3.30 internal code page structure:
  2515. Offset    Size    Description    (Table 1310)
  2516.  00h  8 BYTEs    ???
  2517.  08h 64 BYTEs    name of country information file
  2518.  48h    WORD    system code page
  2519.  4Ah    WORD    number of supported subfunctions
  2520.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  2521.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  2522.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  2523.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  2524.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  2525. --------D-2F1401-----------------------------
  2526. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  2527.     AX = 1401h
  2528.     DL = function (00h open, 01h close)
  2529.     DH = wait flag
  2530.         00h block until screen opens
  2531.         01h return error if screen is not available
  2532.         02h urgent--always open screen immediately
  2533. Return: CF clear if successful
  2534.         BX = amount of memory needed to save screen and keyboard info,
  2535.         0000h if default save location can be used (only if DH was 02h)
  2536.     CF set on error
  2537. Note:    the application using the screen is frozen until the popup screen is
  2538.       closed
  2539. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2540. --------U-2F1402-----------------------------
  2541. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  2542.     AX = 1402h
  2543.     BP = subfunction (same as AL for INT 21/AH=65h)
  2544.     BX = code page (see INT 21/AX=6602h)
  2545.     DX = country code (see INT 21/AH=38h)
  2546.     DS:SI -> internal code page structure (see #1310)
  2547.     ES:DI -> user buffer
  2548.     CX = size of user buffer
  2549. Return: AL = status
  2550.         00h successful
  2551.         else DOS error code
  2552. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  2553.     code page structure apparently only needed for COUNTRY.SYS pathname
  2554. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  2555. --------D-2F1402-----------------------------
  2556. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  2557.     AX = 1402h
  2558.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  2559. Return: CF clear if successful
  2560.     CF set on error
  2561.         AX = error code (see #1311)
  2562. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  2563.  
  2564. (Table 1311)
  2565. Values for POPUP error code:
  2566.  0001h    process does not own screen
  2567.  0004h    unknown error
  2568.  0005h    invalid pointer
  2569. --------U-2F1403-----------------------------
  2570. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  2571.     AX = 1403h
  2572.     DS:SI -> internal code page structure (see #1310)
  2573.     BX = code page (see INT 21/AX=6602h)
  2574.     DX = country code (see INT 21/AH=38h)
  2575. Return: AL = status
  2576.          ???
  2577. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  2578. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  2579. --------D-2F1403-----------------------------
  2580. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  2581.     AX = 1403h
  2582.     ES:DI -> buffer containing saved screen
  2583.         (0000h:0000h for default buffer in POPUP)
  2584. Return: CF clear if successful
  2585.     CF set on error
  2586.         AX = error code (see #1311)
  2587. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  2588. --------U-2F1404-----------------------------
  2589. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  2590.     AX = 1404h
  2591.     BX = code page (see INT 21/AX=6602h)
  2592.     DX = country code (see INT 21/AH=38h)
  2593.     DS:SI -> internal code page structure (see #1310)
  2594.     ES:DI -> user buffer
  2595. Return: AL = status
  2596.          ???
  2597. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  2598.     code page structure apparently only needed for COUNTRY.SYS pathname
  2599. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  2600. --------U-2F14FE-----------------------------
  2601. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  2602.     AX = 14FEh
  2603.     BX = code page (FFFFh=global code page) (see INT 21/AX=6602h)
  2604.     DX = country ID (FFFFh=current country) (see INT 21/AH=38h)
  2605.     ES:DI -> country information buffer
  2606.     CL = info ID
  2607.         01h get general internationalization info
  2608.         02h get pointer to uppercase table
  2609.         04h get pointer to filename uppercase table
  2610.         05h get pointer to filename terminator table
  2611.         06h get pointer to collating sequence table
  2612.         07h get pointer to Double-Byte Character Set table
  2613.     CF set (used to return error if not installed)
  2614. Return: CF clear if successful
  2615.         DS:SI -> requested information
  2616.     CF set on error
  2617. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  2618.       or FFh on entry.
  2619.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  2620.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  2621. SeeAlso: AX=14FFh,INT 21/AH=65h
  2622.  
  2623. Format of DR-DOS COUNTRY.SYS file:
  2624. Offset    Size    Description    (Table 1312)
  2625.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  2626.  7Eh    WORD    signature EDC1h
  2627.  80h    var    country pointer records
  2628.     Offset    Size    Description
  2629.      00h    WORD    country code (0000h if end of array)
  2630.      02h    WORD    code page
  2631.      04h    WORD    ??? (0000h)
  2632.      06h  7 WORDs    offsets in file for data tables for subfunctions
  2633.               01h-07h
  2634.  var    var    country information
  2635. --------U-2F14FF-----------------------------
  2636. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  2637.     AX = 14FFh
  2638.     BX = code page
  2639. Return: AX = ???
  2640.     ZF set if AX=0000h
  2641. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  2642.       or FFh on entry.
  2643.     passes codepage preparation request to each character device supporting
  2644.       the generic IOCTL call
  2645. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  2646. --------U-2F1500-----------------------------
  2647. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  2648.     AX = 1500h
  2649. Return: AX = FFFFh
  2650.     ES:DI -> ??? (graphics data?)
  2651. Note:    this installation check conflicts with the CD-ROM Extensions
  2652.       installation check; moved to AX=AC00h in later versions
  2653. SeeAlso: AX=AC00h
  2654. --------d-2F1500BX0000-----------------------
  2655. INT 2F - CD-ROM - INSTALLATION CHECK
  2656.     AX = 1500h
  2657.     BX = 0000h
  2658. Return: BX = number of CD-ROM drive letters used
  2659.     CX = starting drive letter (0=A:)
  2660. Notes:    this installation check DOES NOT follow the format used by other
  2661.       software
  2662.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  2663.       installation check
  2664. SeeAlso: INT 2F/AX=D000h/BX=4D44h"Lotus"
  2665. --------d-2F1501-----------------------------
  2666. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  2667.     AX = 1501h
  2668.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  2669. Return: buffer filled, for each drive letter
  2670.       BYTE    subunit number in driver
  2671.       DWORD address of device driver header
  2672. --------d-2F1502-----------------------------
  2673. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  2674.     AX = 1502h
  2675.     ES:BX -> 38-byte buffer for name of copyright file
  2676.     CX = drive number (0=A:)
  2677. Return: CF set if drive is not a CD-ROM drive
  2678.         AX = 000Fh (invalid drive)
  2679.     CF clear if successful
  2680. SeeAlso: AX=1503h
  2681. --------d-2F1503-----------------------------
  2682. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  2683.     AX = 1503h
  2684.     ES:BX -> 38-byte buffer for name of abstract file
  2685.     CX = drive number (0=A:)
  2686. Return: CF set if drive is not a CD-ROM drive
  2687.         AX = 000Fh (invalid drive)
  2688.     CF clear if successful
  2689. SeeAlso: AX=1502h,AX=1504h
  2690. --------d-2F1504-----------------------------
  2691. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  2692.     AX = 1504h
  2693.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  2694.     CX = drive number (0=A:)
  2695. Return: CF set if drive is not a CD-ROM drive
  2696.         AX = 000Fh (invalid drive)
  2697.     CF clear if successful
  2698. SeeAlso: AX=1502h,AX=1503h
  2699. --------d-2F1505-----------------------------
  2700. INT 2F - CD-ROM - READ VTOC
  2701.     AX = 1505h
  2702.     ES:BX -> 2048-byte buffer
  2703.     CX = drive number (0=A:)
  2704.     DX = sector index (0=first volume descriptor,1=second,...)
  2705. Return: CF set on error
  2706.         AX = error code (15=invalid drive,21=not ready)
  2707.     CF clear if successful
  2708.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  2709. --------d-2F1506-----------------------------
  2710. INT 2F - CD-ROM - TURN DEBUGGING ON
  2711.     AX = 1506h
  2712.     BX = debugging function to enable
  2713. Note:    reserved for development
  2714. SeeAlso: AX=1507h
  2715. --------d-2F1507-----------------------------
  2716. INT 2F - CD-ROM - TURN DEBUGGING OFF
  2717.     AX = 1507h
  2718.     BX = debugging function to disable
  2719. Note:    reserved for development
  2720. SeeAlso: AX=1506h
  2721. --------d-2F1508-----------------------------
  2722. INT 2F - CD-ROM - ABSOLUTE DISK READ
  2723.     AX = 1508h
  2724.     ES:BX -> buffer
  2725.     CX = drive number (0=A:)
  2726.     SI:DI = starting sector number
  2727.     DX = number of sectors to read
  2728. Return: CF set on error
  2729.         AL = error code (15=invalid drive,21=not ready)
  2730.     CF clear if successful
  2731. SeeAlso: AX=1509h
  2732. --------d-2F1509-----------------------------
  2733. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  2734.     AX = 1509h
  2735.     ES:BX -> buffer
  2736.     CX = drive number (0=A:)
  2737.     SI:DI = starting sector number
  2738.     DX = number of sectors to write
  2739. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  2740. SeeAlso: AX=1508h
  2741. --------d-2F150A-----------------------------
  2742. INT 2F - CD-ROM - RESERVED
  2743.     AX = 150Ah
  2744. --------d-2F150B-----------------------------
  2745. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  2746.     AX = 150Bh
  2747.     CX = drive number (0=A:)
  2748. Return: BX = ADADh if MSCDEX.EXE installed
  2749.         AX = support status
  2750.         0000h if drive not supported
  2751.         nonzero if supported
  2752. SeeAlso: AX=150Dh
  2753. --------d-2F150C-----------------------------
  2754. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  2755.     AX = 150Ch
  2756. Return: BH = major version
  2757.     BL = minor version
  2758. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  2759. --------d-2F150D-----------------------------
  2760. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  2761.     AX = 150Dh
  2762.     ES:BX -> buffer for drive letter list (1 byte per drive)
  2763. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  2764.     to the drive in the same position for function 1501h
  2765. SeeAlso: AX=150Bh
  2766. --------d-2F150E-----------------------------
  2767. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  2768.     AX = 150Eh
  2769.     BX = subfunction
  2770.         00h get preference
  2771.         DX = 0000h
  2772.         Return: DX = preference settings
  2773.         01h set preference
  2774.         DH = volume descriptor preference
  2775.             01h = primary volume descriptor
  2776.             02h = supplementary volume descriptor
  2777.         DL = supplementary volume descriptor preference
  2778.             01h = shift-Kanji
  2779.     CX = drive number (0=A:)
  2780. Return: CF set on error
  2781.         AX = error code (15=invalid drive,1=invalid function)
  2782.     CF clear if successful
  2783. --------d-2F150F-----------------------------
  2784. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  2785.     AX = 150Fh
  2786.     CL = drive number (0=A:)
  2787.     CH bit 0 = copy flag
  2788.         clear if direct copy
  2789.         set if copy to structure which removes ISO/High Sierra diffs
  2790.     ES:BX -> ASCIZ path name
  2791.     SI:DI -> buffer for directory entry (see #1313)
  2792.          minimum 255 bytes for direct copy
  2793. Return: CF set on error
  2794.         AX = error code
  2795.     CF clear if successful
  2796.         AX = disk format (0=High Sierra,1=ISO 9660)
  2797.  
  2798. Format of CD-ROM directory entry (direct copy):
  2799. Offset    Size    Description    (Table 1313)
  2800.  00h    BYTE  length of directory entry
  2801.  01h    BYTE  length of XAR in Logical Block Numbers
  2802.  02h    DWORD LBN of data, Intel (little-endian) format
  2803.  06h    DWORD LBN of data, Motorola (big-endian) format
  2804.  0Ah    DWORD length of file, Intel format
  2805.  0Eh    DWORD length of file, Motorola format
  2806. ---High Sierra---
  2807.  12h  6 BYTEs date and time
  2808.  18h    BYTE  bit flags
  2809.  19h    BYTE  reserved
  2810. ---ISO 9660---
  2811.  12h  7 BYTEs date and time
  2812.  19h    BYTE  bit flags
  2813. ---both formats---
  2814.  1Ah    BYTE  interleave size
  2815.  1Bh    BYTE  interleave skip factor
  2816.  1Ch    WORD  volume set sequence number, Intel format
  2817.  1Eh    WORD  volume set sequence number, Motorola format
  2818.  20h    BYTE  length of file name
  2819.  21h  N BYTEs file name
  2820.     BYTE (optional) padding if filename is odd length
  2821.       N BYTEs system data
  2822.  
  2823. Format of CD-ROM directory entry (canonicalized):
  2824. Offset    Size    Description    (Table 1314)
  2825.  00h    BYTE    length of XAR in Logical Block Numbers
  2826.  01h    DWORD    Logical Block Number of file start
  2827.  05h    WORD    size of disk in logical blocks
  2828.  07h    DWORD    file length in bytes
  2829.  0Bh  7 BYTEs    date and time
  2830.  12h    BYTE    bit flags
  2831.  13h    BYTE    interleave size
  2832.  14h    BYTE    interleave skip factor
  2833.  15h    WORD    volume set sequence number
  2834.  17h    BYTE    length of file name
  2835.  18h 38 BYTEs    ASCIZ filename
  2836.  3Eh    WORD    file version number
  2837.  40h    BYTE    number of bytes of system use data
  2838.  41h 220 BYTEs    system use data
  2839. --------d-2F1510-----------------------------
  2840. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  2841.     AX = 1510h
  2842.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  2843.     ES:BX -> CD-ROM device driver request header (see #1289 at AX=0802h)
  2844. --------W-2F1600-----------------------------
  2845. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  2846.     AX = 1600h
  2847. Return: AL = status
  2848.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  2849.         01h Windows/386 2.x running
  2850.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  2851.           mode nor Windows/386 2.x running) (obsolete--see note)
  2852.         FFh Windows/386 2.x running
  2853.     AL = anything else
  2854.         AL = Windows major version number >= 3
  2855.         AH = Windows minor version number
  2856. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  2857.       drivers, TSRs, and applications) to cooperate with multitasking
  2858.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  2859.     certain calls are also supported in the Microsoft 80286 DOS extender in
  2860.       Windows standard mode
  2861.     this function served as the installation check and AX=1610h served to
  2862.       get the driver entry point for XMS version 1, which is now obsolete.
  2863.       Use AX=4300h and AX=4310h instead
  2864. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  2865. Index:    installation check;XMS version 1
  2866. --------W-2F1602-----------------------------
  2867. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  2868.     AX = 1602h
  2869. Return: ES:DI -> Windows/386 2.x API procedure entry point
  2870. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  2871.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  2872.         AX = 0000h
  2873.         ES:DI -> return address
  2874.         JUMP to address returned from INT 2F/AX=1602h
  2875.     After JUMP, at return address:
  2876.         BX = current VM ID.
  2877. SeeAlso: AX=C020h
  2878. --------W-2F1603-----------------------------
  2879. INT 2F - MS Windows/386 - GET INSTANCE DATA
  2880.     AX = 1603h
  2881. Return: AX = 5248h ('RH') if supported
  2882.         DS:SI -> Windows/386 instance data (see #1315)
  2883. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  2884.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  2885.       supported, as is the case in DOS versions prior to 5.0
  2886.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  2887.       this function, DOSMGR's behavior, and instancing in general
  2888. SeeAlso: AX=1607h/BX=0015h
  2889.  
  2890. Format of Windows/386 instance data:
  2891. Offset    Size    Description    (Table 1315)
  2892.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  2893.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  2894.         0000h if not applicable
  2895.  04h    WORD    number of instance data entries (max 32)
  2896.  06h    Array of instance data entries
  2897.     Offset    Size    Description
  2898.      00h    WORD    segment (0002h = DOS kernel)
  2899.      02h    WORD    offset
  2900.      04h    WORD    size
  2901. --------W-2F1605-----------------------------
  2902. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  2903.     AX = 1605h
  2904.     ES:BX = 0000h:0000h
  2905.     DS:SI = 0000h:0000h
  2906.     CX = 0000h
  2907.     DX = flags
  2908.         bit 0 = 0 if Windows enhanced-mode initialization
  2909.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  2910.         bits 1-15 reserved (undefined)
  2911.     DI = version number (major in upper byte, minor in lower)
  2912. Return: CX = 0000h if okay for Windows to load
  2913.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  2914.     CX <> 0 if Windows should not load
  2915.     ES:BX -> startup info structure (see #1316)
  2916.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  2917. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  2918.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  2919.       driver or TSR can watch for this broadcast and return the appropriate
  2920.       values.  If the driver or TSR returns CX <> 0, it is also its
  2921.       responsibility to display an error message.
  2922.     each handler must first chain to the prior INT 2F handler with
  2923.       registers unchanged before processing the call
  2924.     if the handler requires local data on a per-VM basis, it must store the
  2925.       returned ES:BX in the "next" field of a startup info structure and
  2926.       return a pointer to that structure in ES:BX
  2927.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  2928.       already nonzero, the TSR must fail the initialization by setting CX
  2929.       nonzero
  2930.     MSD checks for Windows 3.0 running in standard mode by testing whether
  2931.       CX=FFFFh and other registers are unchanged on return
  2932. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  2933.  
  2934. Format of Windows Startup Information Structure:
  2935. Offset    Size    Description    (Table 1316)
  2936.  00h  2 BYTEs    major, minor version of info structure
  2937.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  2938.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  2939.  0Ah    DWORD    virtual device reference data (see #1318)
  2940.         (only used if above nonzero)
  2941.  0Eh    DWORD    pointer to instance data records (see #1317) or 0000h:0000h
  2942.  
  2943. Format of one Instance Item in array:
  2944. Offset    Size    Description    (Table 1317)
  2945.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  2946.  04h    WORD    size of instance data
  2947.  
  2948. Format of Virtual Device Reference Data:
  2949. Offset    Size    Description    (Table 1318)
  2950.  00h    DWORD    physical address of ??? or 00000000h
  2951.  04h    DWORD    physical address of ??? table
  2952.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  2953.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  2954.         00000000h = end of table
  2955. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  2956.       chain, the second pointer to a field of 40h bytes followed by a
  2957.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  2958.       the start segment of the UMB area
  2959.  
  2960. (Table 1319)
  2961. Values Windows virtual mode enable/disable procedure is called with:
  2962.     AX = 0000h disable V86 mode
  2963.     AX = 0001h enable V86 mode
  2964.     interrupts disabled
  2965. Return: CF set on error
  2966.     CF clear if successful
  2967.     interrupts disabled
  2968. --------W-2F1606-----------------------------
  2969. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  2970.     AX = 1606h
  2971.     DX = flags
  2972.         bit 0 = 0 if Windows enhanced-mode exit
  2973.         bit 0 = 1 if Microsoft 286 DOS extender exit
  2974.         bits 1-15 reserved (undefined)
  2975. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  2976.       broadcast will be issued immediately.
  2977.     this call will be issued in real mode
  2978. SeeAlso: AX=1605h,AX=1609h
  2979. --------W-2F1607-----------------------------
  2980. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  2981.     AX = 1607h
  2982.     BX = virtual device ID (see INT 2F/AX=1684h)
  2983.     CX = (usually) callout subfunction
  2984. Return: (usually) AX,BX,CX,DX,ES contain results
  2985. Notes:    more of a convention than an API, this call specifies a standard
  2986.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  2987.       to DOS device drivers and TSRs
  2988.     see below for details on several virtual devices
  2989. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  2990. SeeAlso: AX=1684h,AX=C020h
  2991. --------W-2F1607BX0006-----------------------
  2992. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  2993.     AX = 1607h
  2994.     BX = 0006h (VxD identifier of "V86MMGR")
  2995.     CX = 0000h
  2996. Return: AX = status
  2997.         0000h if local A20 state changed
  2998.         1607h if A20 unchanged
  2999.         other if global A20 state changed
  3000. --------W-2F1607BX000C-----------------------
  3001. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  3002.     AX = 1607h
  3003.     BX = 000Ch (VxD identifier of "VMD")
  3004. Return: CX = nonzero if mouse driver already virtualized
  3005. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  3006.       nonzero; if yes, it will not automatically virtualize the mouse
  3007.       driver.  This would be used if MOUSE.COM already virtualizes
  3008.       itself using the Windows API.
  3009. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3010. ----------2F1607BX0010-----------------------
  3011. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  3012.     AX = 1607h
  3013.     BX = 0010h (VxD identifier of "BLOCKDEV")
  3014.     CX = function
  3015.         0001h starting FastDisk compatibility tests
  3016.         0002h ending FastDisk compatibility tests
  3017.         0003h check if FastDisk installation allowed
  3018.         Return: CX = 0000h if allowed
  3019. Note:    this interface is called by the Windows FastDisk driver (such as
  3020.       WDCTRL) when it thinks that the INT 13h handler immediately below
  3021.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  3022.       program which hooks itself underneath IO.SYS's INT 13h code with
  3023.       INT 2F/AH=13h
  3024. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  3025. --------W-2F1607BX0014-----------------------
  3026. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  3027.     AX = 1607h
  3028.     BX = 0014h (VxD identifier of "VNETBIOS")
  3029. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  3030.         command code (see #1320)
  3031. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  3032.       the NetBIOS has an extensions Windows should know about
  3033. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  3034.  
  3035. (Table 1320)
  3036. Values for VNETBIOS action code:
  3037.  00h    "VN_Unknown" unknown command
  3038.  04h    "VN_No_Map"  no memory mapping necessary
  3039.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  3040.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  3041.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  3042.  14h    "VN_Chain_Send"     the chain-send command
  3043.  18h    "VN_Cancel"    special case for cancel command
  3044.  1Ch    "VN_Buffer_In"    buffer is incoming
  3045.  20h    "VN_Buffer_Out" buffer is outgoing
  3046.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  3047. --------D-2F1607BX0015-----------------------
  3048. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  3049.     AX = 1607h
  3050.     BX = 0015h (VxD identifier of "DOSMGR")
  3051.     CX = function
  3052.         0000h query instance processing
  3053.         DX = 0000h
  3054.         Return: CX = state
  3055.                 0000h not instanced
  3056.                 other instanced (DOS 5+ kernel returns 0001h)
  3057.                 DX = segment of DOS drivers or 0000h for
  3058.                     default of 0070h
  3059.                 ES:BX -> patch table (see #1322)
  3060.         0001h set patches in DOS
  3061.         DX = bit mask of patch requests (see #1321)
  3062.         Return: AX = B97Ch
  3063.             BX = bit mask of patches applied (see #1321)
  3064.             DX = A2ABh
  3065.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  3066.         DX = bit mask of patch requests (see function 0001h)
  3067.         Return: CX = 0000h (DOS 5-6)
  3068.         Note:    return values are ignored by DOSMGR in Windows 3.1
  3069.         0003h get size of DOS data structures
  3070.         DX = bit mask of request (only one bit can be set)
  3071.             bit 0: Current Directory Structure size
  3072.         Return: if supported request:
  3073.                 AX = B97Ch
  3074.                 CX = size in bytes of requested structure
  3075.                 DX = A2ABh
  3076.             else:
  3077.                 CX = 0000h
  3078.                 all other registers preserved
  3079.         0004h determine instanced data structures
  3080.         Return: AX = B97Ch if supported
  3081.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  3082.             BX = bit mask of instanced items
  3083.                 bit 0: CDS
  3084.                 bit 1: SFT
  3085.                 bit 2: device list
  3086.                 bit 3: DOS swappable data area
  3087.         0005h get device driver size
  3088.         ES = segment of device driver
  3089.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  3090.             DX:AX = A2ABh:B97Ch if successful
  3091.                 BX:CX = size of device driver in bytes
  3092. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  3093.       been instanced via this API and will not perform its own default
  3094.       instancing of the normal DOS/BIOS data if so; if this API is not
  3095.       supported, DOSMGR will also try to access instancing data through
  3096.       INT 2F/AX=1603h
  3097.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  3098.       tables of instancing information for earlier versions of DOS
  3099.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3100.       DOSMGR's behavior and instancing in general
  3101. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  3102.  
  3103. Bitfields for DOSMGR patch requests:
  3104. Bit(s)    Description    (Table 1321)
  3105.  0    enable critical sections
  3106.  1    NOP setting/checking user ID
  3107.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  3108.  3    trap stack fault in "SYSINIT" to WIN386
  3109.  4    BIOS patch to trap "Insert disk X:" to WIN386
  3110.  
  3111. Format of DOSMGR patch table:
  3112. Offset    Size    Description    (Table 1322)
  3113.  00h  2 BYTEs    DOS version (major, minor)
  3114.  02h    WORD    offset in DOS data segment of "SAVEDS"
  3115.  04h    WORD    offset in DOS data segment of "SAVEBX"
  3116.  06h    WORD    offset in DOS data segment of InDOS flag
  3117.  08h    WORD    offset in DOS data segment of User ID word
  3118.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  3119.           critical section calls (see INT 2A/AH=80h)
  3120.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  3121.           containing segment of last MCB in conventional memory
  3122. --------E-2F1607BX22C0-----------------------
  3123. INT 2F - Rational Systems DOS/4GW - ???
  3124.     AX = 1607h
  3125.     BX = 22C0h
  3126.     ???
  3127. Return: ???
  3128. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  3129. --------W-2F1608-----------------------------
  3130. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  3131.     AX = 1608h
  3132. Notes:    called after all installable devices have been initialized
  3133.     real-mode software may be called between the Windows enhanced-mode init
  3134.       call (AX=1605h) and this call; the software must detect this
  3135.       situation
  3136. SeeAlso: AX=1605h,AX=1609h
  3137. --------W-2F1609-----------------------------
  3138. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  3139.     AX = 1609h
  3140. Note:    called at the beginning of a normal exit sequence; not made in the
  3141.       event of a fatal system crash
  3142. SeeAlso: AX=1606h,AX=1608h
  3143. --------W-2F160A-----------------------------
  3144. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  3145.     AX = 160Ah
  3146. Return: AX = 0000h if call supported
  3147.         BX = version (BH=major, BL=minor)
  3148.         CX = mode (0002h = standard, 0003h = enhanced)
  3149. SeeAlso: AX=1600h,AX=4680h
  3150. --------W-2F160B-----------------------------
  3151. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  3152.     AX = 160Bh
  3153.     ES:DI -> communication structure (see #1323) or 0000h:0000h
  3154. Return: ES:DI -> communication structure
  3155. Desc:    this call allows Windows-aware TSRs to make themselves known to
  3156.       Windows.
  3157. Note:    the TSR should allocate a communication structure, place the given
  3158.       ES:DI pointer in the first field, and return a pointer to the new
  3159.       structure
  3160. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  3161.  
  3162. Format of TSR-to-Windows communication structure:
  3163. Offset    Size    Description    (Table 1323)
  3164.  00h    DWORD    pointer to next structure
  3165.  04h    WORD    PSP segment
  3166.  06h    WORD    API version ID (0100h)
  3167.  08h    WORD    EXEC flags
  3168.         bit 0: "WINEXEC"
  3169.         bit 1: "LOADLIBRARY"
  3170.         bit 2: "OPENDRIVER"
  3171.  0Ah    WORD    "exec_cmd_show"
  3172.  0Ch    DWORD    "exec_cmd"
  3173.  10h  4 BYTEs    reserved (0)
  3174.  14h    DWORD    pointer to TSR ID block (see #1324)
  3175.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  3176.  
  3177. Format of Norton Utilities 6.0 TSR ID block:
  3178. Offset    Size    Description    (Table 1324)
  3179.  00h    WORD    length of name string
  3180.  02h  N BYTEs    name of TSR's executable
  3181. --------W-2F160C-----------------------------
  3182. INT 2F - MS Windows 3.1 - DETECT ROMs
  3183.     AX = 160Ch
  3184.     ???
  3185. Return: ???
  3186. Note:    used by ROM Windows
  3187. SeeAlso: AX=160Bh
  3188. --------m-2F1610-----------------------------
  3189. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  3190.     AX = 1610h
  3191.     details unavailable
  3192. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  3193.       obsolete.  Use AX=4300h and AX=4310h instead
  3194. SeeAlso: AX=1600h,AX=4310h
  3195. --------W-2F1680-----------------------------
  3196. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  3197.     AX = 1680h
  3198. Return: AL = status
  3199.         00h if the call is supported
  3200.         80h (unchanged) if the call is not supported
  3201. Notes:    programs can use this function in idle loops to enhance performance
  3202.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  3203.       DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications
  3204.     does not block the program; it just gives up the remainder of the time
  3205.       slice
  3206.     should not be used by Windows-specific programs
  3207.     when called very often without intermediate screen output under WIN 3+,
  3208.       the VM will go into an idle-state and will not receive the next slice
  3209.       before 8 seconds. This time can be changed in SYSTEM.INI through
  3210.       "IdleVMWakeUpTime=<seconds>". Setting to zero results in a long wait.
  3211. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  3212. --------W-2F1681-----------------------------
  3213. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  3214.     AX = 1681h
  3215. Notes:    used to prevent a task switch from occurring
  3216.     should be followed by an INT 2F/AX=1682h call as soon as possible
  3217.     nested calls are allowed, and must be followed by an appropriate number
  3218.       of "end critical section" calls
  3219.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  3220.       increment by hand.
  3221. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  3222. --------W-2F1682-----------------------------
  3223. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  3224.     AX = 1682h
  3225. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  3226.       and decrement by hand, taking care not to decrement InDOS flag
  3227.       through zero
  3228. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  3229. --------W-2F1683-----------------------------
  3230. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  3231.     AX = 1683h
  3232. Return: BX = current virtual machine (VM) ID
  3233. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  3234.     VM IDs are reused when VMs are destroyed
  3235.     an ID of 0 will never be returned
  3236. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  3237. --------W-2F1684-----------------------------
  3238. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  3239.     AX = 1684h
  3240.     BX = virtual device (VxD) ID (see #1325)
  3241.     ES:DI = 0000h:0000h
  3242. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3243. Note:    some Windows enhanced-mode virtual devices provide services that
  3244.       applications can access.  For example, the Virtual Display Device
  3245.       (VDD) provides an API used in turn by WINOLDAP.
  3246. SeeAlso: AX=1683h
  3247.  
  3248. (Table 1325)
  3249. Values for MS Windows VxD ID:
  3250. Value    Name   CallOut V86 PM    Description
  3251.  0000h    LPT        N    N  N    DOS386 LPT Device (Windows for Workgroups 3.11)
  3252.  0000h    MSODISUP    N    N  N    MS ODI Support (Windows for Workgroups 3.11)
  3253.  0000h    NWNBLINK    N    N  N    Netware NetBIOS (Windows for Workgroups 3.11)
  3254.  0000h    SERIAL        N    N  N    DOS386 Serial Device (Windows for Workgrp 3.11)
  3255.  0001h    VMM        N  N    Virtual Machine Manager
  3256.  0002h    Debug
  3257.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  3258.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  3259.  0005h    VTD        Y  Y    Virtual Timer Device
  3260.  0006h    V86MMGR        Y    N  N    Virtual 8086 Mode Device
  3261.  0007h    PageSwap    N  N    Paging Device
  3262.  0008h    Parity        N  N    Parity-check trapper
  3263.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  3264.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  3265.  000Bh    VSD        N  N    Virtual Sound Device
  3266.  000Ch    VMD        Y    Y  Y    Virtual Mouse Device
  3267.  000Dh    VKD        N  Y    Virtual Keyboard Device
  3268.  000Eh    VCD        N  Y    Virtual COMM Device
  3269.  000Fh    VPD            Virtual Printer Device
  3270.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  3271.  0010h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  3272.  0010h    IOS        N    N  N    DOS386 IOS Device (Windows for Workgroups 3.11)
  3273.  0010h    IOS        N  Y    (Chicago)
  3274.  0011h    VMCPD        Y  Y    Virtual Math CoProcessor Device
  3275.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  3276.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  3277.  0014h    VNETBIOS    Y    N  N    Virtual NetBIOS Device
  3278.  0015h    DOSMGR        Y    Y  N    DOS data instancing (see #1328)
  3279.  0016h    WINLOAD
  3280.  0017h    SHELL        N  Y
  3281.  0018h    VMPOLL        N  N
  3282.  0019h    VPROD
  3283.  001Ah    DOSNET        N  N    assures network integrity across VMs
  3284.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  3285.  001Bh    VFD        N  N    Virtual Floppy Device
  3286.  001Ch    VDD2            Secondary display adapter
  3287.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  3288.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  3289.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  3290.  001Dh    WINDEBUG    N  Y
  3291.  001Dh    TDDebug        N  Y
  3292.  001Eh    TSRLoad            TSR instance utility
  3293.  001Fh    BiosHook        BIOS interrupt hooker VxD
  3294.  0020h    Int13        N    N  N
  3295.  0021h    PageFile    N  Y    Paging File device
  3296.  0022h    SCSI
  3297.  0023h    MCA_POS
  3298.  0024h    SCSIFD            SCSI FastDisk device
  3299.  0025h    VPEND            Pen device
  3300.  0026h    APM            Advanced Power Management
  3301.  0027h    VXDLDR         N    Y  Y    VXDLDR (Windows for Workgroups 3.11)
  3302.  0028h    NDIS         N    Y  Y    Network Driver Interface Specification
  3303.                   (Windows for Workgroups 3.11)
  3304.  002Ah    VWIN32        N  Y    (Chicago)
  3305.  002Bh    VCOMM         N    Y  Y    DOS386 VCOMM Device (Windows for Workgrps 3.11)
  3306.  0030h    MACH32        N  Y    ATI Mach32 video card
  3307.  0030h    MACH32         N    N  Y    ATI MACH32
  3308.  0031h    NETBEUI         N    N  N    NETBEUI (Windows for Workgroups 3.11)
  3309.  0032h    SERVER         N    Y  Y    Int21 File Server (Windows for Workgroups 3.11)
  3310.  0033h    CONFIGMG    Y  Y    (Chicago)
  3311.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  3312.  0036h    VFBACKUP    Y  Y    (Chicago)
  3313.  0038h    VCOND        Y  Y    (Chicago)
  3314.  003Ah    VPMTD         N    N  Y    IFAX Scheduler Device (Windows for Workgr 3.11)
  3315.  003Bh    DSVXD        Y  N    DoubleSpace VxD from MS-DOS v6.x
  3316.  0051h    ISAPNP        N  N
  3317.  008Dh    ESDI_506    N  N    (Chicago)
  3318.  0090h    voltrack    N  N
  3319.  00FDh    FAKEIDE        N  N    (Chicago)
  3320.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  3321.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  3322.  0200h    VIPX        Y  Y    Netware VIPX
  3323.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  3324.  0202h    WINICE        Y  Y    SoftICE/W
  3325.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  3326.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  3327.  0205h    BCW        Y  Y    Nu-Mega Bounds Checker for Windows
  3328.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  3329.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  3330.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  3331.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  3332.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  3333.  045Dh    VflatD        N  Y    dva.386, part of WIN32s
  3334.  0460h    UNIMODEM    N  Y
  3335.  0480h    VNetSup         N    Y  Y    Virtual Net Support (Windows for Workgrps 3.11)
  3336.  0481h    VRedir         N    N  N    Redirector File System Driver
  3337.                   (Windows for Workgroups 3.11)
  3338.  0483h    VSHARE        N  N    Windows for Workgroups Virtual SHARE
  3339.  0484h    IFSMgr         Y    Y  N    Installable File System Manager
  3340.                   (Windows for Workgroups 3.11)
  3341.  0486h    VFAT         N    Y  Y    Win386 HPFS Driver (Windows for Workgrps 3.11)
  3342.  048Bh    VCache         N    Y  Y    Virtual File Cache (Windows for Workgrps 3.11)
  3343.  048Bh    VCACHE        Y  Y
  3344.  0750h    VSWITCHD    Y  N
  3345.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  3346.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  3347.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  3348.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  3349.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  3350.  22C0h    ???        Y        Rational Systems DOS/4GW ??? 
  3351.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  3352.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  3353.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  3354.  24A2h    SYMEvent    Y  Y    Norton Utilities v8
  3355.  2540h    VILD        Y  N    INTERLNK client from MS-DOS v6.x
  3356.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  3357.  2860h    COMMTASK    N    N  Y    Windows 386-mode preemptive tasker by James
  3358.                   A. Kenemuth of Interabang Computing
  3359.  28C0h    VXD        N    Y  Y    Generic VxD for real and protected mode by
  3360.                   Andrew Schulman in MSJ February 1993
  3361.  2925h    EDOS        Y  Y    Enhanced DOS by Firefly Software
  3362.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  3363.  3098h    VstlthD        N    N  N    for QEMM Stealth ROM mode
  3364.  310Eh    WPS        N  Y    MS DevNet CD-ROM: Windows Process Status
  3365.  4321h    POSTMSG        Y  Y    (see #1337)
  3366.  7FE0h    VWFD        N    Y  Y    ??? by Neil Sandlin of Microsoft
  3367.  7FE1h    VWATCHD        N    Y  Y    basic driver w/ no functionality except tracing
  3368.                   by Keith Jin of Microsoft PSS
  3369.  7FE5h    VFINTD        N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  3370.                   Sandlin of Microsoft
  3371.  7FE7h    VMPAGES        N    Y  Y    demonstration of exporting VxD services, by
  3372.                   Neil Sandlin of Microsoft
  3373.  7FE9h    VIdleD        N    N  N    demonstration of Call_When_Idle function, by
  3374.                   Bernie McIlroy of Microsoft
  3375.  7FEBh    VMIOD        N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  3376.                   Sandlin of Microsoft
  3377.  7FEDh    VMIRQD        N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  3378.                   Sandlin of Microsoft
  3379.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  3380.  EEEEh    VEPSD        N  N    Virtual Extended Paging Services for
  3381.                   Borland C++ v4.0
  3382. Note:    The high bit of the VxD ID is reserved for future use. The
  3383.     next 10 bits are the OEM number which is assigned by Microsoft. The
  3384.     low 5 bits are the device number.  Naturally, this scheme has not
  3385.     been adhered to since there are now more than 32 different VxDs.
  3386. --------W-2F1684BX0005-----------------------
  3387. INT 2F - MS Windows - VTD - GET DEVICE API ENTRY POINT
  3388.     AX = 1684h
  3389.     BX = 0005h (virtual device ID for VTD device) (see #1325)
  3390.     ES:DI = 0000h:0000h
  3391. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3392.           (see #1326)
  3393.  
  3394. (Table 1326)
  3395. Call VTD.386 entry point with:
  3396.     AX = 0000h get VTD version number
  3397.         Return: AH = major version
  3398.             AL = minor version
  3399.     AX = 0100h get current clock tick time
  3400.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  3401.                 started
  3402.     AX = 0101h get current system time in milliseconds
  3403.         Return: EAX = time in milliseconds that Windows has been running
  3404.     AX = 0102h get current virtual machine time
  3405.         Return: EAX = cumulative amount of time the virtual machine has
  3406.             been active, in milliseconds
  3407. Note:    this entry point should only be called directly when TOOLHELP.DLL
  3408.       TimerCount() cannot be called
  3409. --------W-2F1684BX0009-----------------------
  3410. INT 2F - MS Windows - REBOOT - GET DEVICE API ENTRY POINT
  3411.     AX = 1684h
  3412.     BX = 0009h (virtual device ID for REBOOT device) (see #1325)
  3413.     ES:DI = 0000h:0000h
  3414. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3415.           (see #1327)
  3416.  
  3417. (Table 1327)
  3418. Call REBOOT protected-mode entry point with:
  3419.     AX = function
  3420.         0100h warm boot
  3421.         Return: never
  3422.         Note:    broadcasts "Reboot_Processor" message, which is caught
  3423.               by the VKD device
  3424.         0201h set Ctrl-Alt-Del handler
  3425.         ES:DI -> new Ctrl-Alt-Del handler
  3426.         Return: CF clear
  3427.         Note:    if an application installs its own handler and then
  3428.               chains to Windows' handler, Windows will no longer
  3429.               be able to detect hung applications, and will always
  3430.               produce an "Application not responding" dialog
  3431.         0202h get Ctrl-Alt-Del handler
  3432.         Return: CF clear
  3433.             ES:DI -> current Ctrl-Alt-Del handler
  3434.         Note:    the default handler is located in KERNEL
  3435.         0203h display "Application not responding" dialog box
  3436.         ES:DI -> ASCIZ name of hung application
  3437.         Return: CF clear
  3438.             AX = result
  3439.                 0000h user pressed Esc
  3440.                 0001h user pressed Enter
  3441.         Note:    this function is used by the default Windows
  3442.               Ctrl-Alt-Del handler
  3443.         0204h fatal exit to DOS
  3444.         CX:EDX -> ??? function
  3445.         CX = 0000h if unknown function not used
  3446.         Return: never
  3447.         Note:    used by Windows' default Ctrl-Alt-Del handler
  3448.         Warning: opened files are not closed and remain open as
  3449.               orphaned files in DOS
  3450. --------W-2F1684BX0015-----------------------
  3451. INT 2F - MS Windows - DOSMGR - GET DEVICE API ENTRY POINT
  3452.     AX = 1684h
  3453.     BX = 0015h (virtual device ID for DOSMGR device) (see #1325)
  3454.     ES:DI = 0000h:0000h
  3455. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3456.           (see #1328)
  3457.  
  3458. (Table 1328)
  3459. Call DOSMGR entry point with:
  3460.     AX = 0000h get DOSMGR version
  3461.         Return: CF clear
  3462.             AX = version (AH = major, AL = minor)
  3463.     AX = 0001h set critical focus
  3464.         Return: CF clear
  3465.     AX = 0002h crash current virtual machine
  3466.         Return: never
  3467.         Note:   displays message box stating that "application has been
  3468.               stopped by the DOSMGR device"
  3469.     AX = 0003h enter critical section
  3470.         Note:   this function assumes that the code for INT 2A/AX=8001h
  3471.               and INT 2A/AX=8002h have been modified for Windows
  3472.     AX = 0004h get VM ID byte
  3473.         Return: CF clear if successful
  3474.             ES:DI -> VM ID byte
  3475.             CF set on error
  3476.         Note:   this function fails if the INT 2A modifications have not
  3477.               yet been applied
  3478.     AX = 0005h inform Windows of possible media change
  3479.         BL = drive number (00h=A:)
  3480.         Return: CF clear if successful
  3481.             CF set on error
  3482. --------W-2F1684BX0017-----------------------
  3483. INT 2F U - MS Windows - SHELL - GET DEVICE API ENTRY POINT
  3484.     AX = 1684h
  3485.     BX = 0017h (virtual device ID for SHELL device) (see #1325)
  3486.     ES:DI = 0000h:0000h
  3487. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3488.           (see #1329)
  3489.  
  3490. (Table 1329)
  3491. Call SHELL entry point with:
  3492.     DX = function number (0000h-0016h, mostly unknown)
  3493.         0000h get version number
  3494.         Return: AX = version number
  3495.         0003h run program???
  3496.         SS:DI -> SEB structure (see #1330)
  3497.         Return: AX = ??? or 0000h on failure
  3498.  
  3499. Format of Shell Execution Block (SEB):
  3500. Offset    Size    Description    (Table 1330)
  3501.  00h    DWORD    PIF flags (see #1331)
  3502.  04h    DWORD    display flags (see #1332)
  3503.  08h    PWORD    -> pathname of .EXE to run
  3504.  0Eh    PWORD    -> argument list
  3505.  14h    PWORD    -> working drive/directory
  3506.  1Ah    WORD    desired number of V86 pages for virtual machine
  3507.  1Ch    WORD    minimum number of V86 pages for VM
  3508.  1Eh    WORD    foreground priority
  3509.  20h    WORD    background priority
  3510.  22h    WORD    maximum KB of EMS
  3511.  24h    WORD    minimum KB of EMS
  3512.  26h    WORD    maximum KB of XMS
  3513.  28h    WORD    minimum KB of XMS
  3514.  2Ah    WORD    ???
  3515.  2Ch    WORD    ???
  3516.  2Eh 128 BYTEs    title
  3517. Note:    the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset
  3518.       followed by a WORD selector
  3519.  
  3520. Bitfields for 386 Enhanced Mode PIF flags:
  3521. Bit(s)    Description    (Table 1331)
  3522.  0    exclusive use of processor when VM is fullscreen
  3523.  1    VM runs in background
  3524.  2    VM runs in window
  3525.  3-4    ???
  3526.  5    Alt-Tab reserved
  3527.  6    Alt-Esc reserved
  3528.  7    Alt-Space reserved
  3529.  8    Alt-Enter reserved
  3530.  9    Alt-PrtSc reserved
  3531.  10    PrtSc reserved
  3532.  11    Ctrl-Esc reserved
  3533.  12    VM will release idle time slice
  3534.  13    VM not allowed to use high mem
  3535.  14    unknown
  3536.  15    VM expanded mem not pageable
  3537.  16    VM extended mem not pageable
  3538.  17    Fast paste from clipboard enabled
  3539.  18    VM app memory not pageable
  3540.  30    Close VM when app exits
  3541.  
  3542. Bitfields for SHELL display options:
  3543. Bit(s)    Description    (Table 1332)
  3544.  0    emulate text mode
  3545.  1    monitor text port
  3546.  2    monitor low graphics port
  3547.  3    monitor high graphics port
  3548.  7    Retain video memory
  3549. --------W-2F1684BX0444-----------------------
  3550. INT 2F - MS Windows - VADMAD - GET DEVICE API ENTRY POINT
  3551.     AX = 1684h
  3552.     BX = 0444h (virtual device ID for VADMAD device) (see #1325)
  3553.     ES:DI = 0000h:0000h
  3554. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3555.           (see #1333)
  3556.  
  3557. (Table 1333)
  3558. Call VADMAD entry point with:
  3559.     DX = operation
  3560.         0000h set VADMAD mode
  3561.         AX = desired mode
  3562.         0001h set VADMAD channel
  3563.         AX = desired channel
  3564. Note:    after setting mode/channel, start the DMA operation with an OUT to
  3565.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  3566. --------W-2F1684BX0750-----------------------
  3567. INT 2F - MS Windows - VSWITCHD - GET DEVICE API ENTRY POINT
  3568.     AX = 1684h
  3569.     BX = 0750h (virtual device ID for VSWITCHD device) (see #1325)
  3570.     ES:DI = 0000h:0000h
  3571. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3572.           (see #1334)
  3573.  
  3574. (Table 1334)
  3575. Call VSWITCHD entry point with:
  3576.     AX = function
  3577.         0000h toggle windowed mode
  3578.         Return: nothing
  3579.         0001h get windowed mode
  3580.         Return: CF clear if VM is windowed
  3581.             CF set if VM is full-screen
  3582. --------W-2F1684BX310E-----------------------
  3583. INT 2F - MS Windows - WPS - GET DEVICE API ENTRY POINT
  3584.     AX = 1684h
  3585.     BX = 310Eh (virtual device ID for WPS device) (see #1325)
  3586.     ES:DI = 0000h:0000h
  3587. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3588.           (see #1335)
  3589.  
  3590. (Table 1335)
  3591. Call WPS protected-mode entry point with:
  3592.     DX = function
  3593.         0000h get WPS.386 version
  3594.         Return: CF clear
  3595.             AX = version (AH = major, AL = minor)
  3596.         0001h get number of installed VxDs
  3597.         Return: CF clear
  3598.             AX = number of installed VxDs
  3599.         0002h get VxD characteristics
  3600.         AX = number of VxD
  3601.         ES:BX -> buffer for VxD characteristics structure (see #1336)
  3602.         Return: CF clear
  3603.             ES:BX buffer filled
  3604.  
  3605. Format of WPS.386 VxD characteristics structure:
  3606. Offset    Size    Description    (Table 1336)
  3607.  00h    WORD    VxD ID number
  3608.  02h    BYTE    VxD minor version
  3609.  03h    BYTE    VxD major version
  3610.  04h    BYTE    DDK minor version
  3611.  05h    BYTE    DDK major version
  3612.  06h    WORD    flags
  3613.         bit 0: V86 API supported
  3614.         bit 1: PM API supported
  3615.         bit 2: services supported
  3616.  08h    DWORD    start order
  3617.  0Ch  9 BYTEs    ASCIIZ VxD name
  3618. --------W-2F1684BX8888-----------------------
  3619. INT 2F - MS Windows - POSTMSG - GET DEVICE API ENTRY POINT
  3620.     AX = 1684h
  3621.     BX = 8888h (virtual device ID for POSTMSG device) (see #1325)
  3622.     ES:DI = 0000h:0000h
  3623. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3624.           (see #1337,#1339)
  3625.  
  3626. (Table 1337)
  3627. Call POSTMSG protected-mode entry point with:
  3628.     AX = window handle
  3629.     CX:BX -> callback procedure (see #1338)
  3630. Return: nothing
  3631. Note:    this call registers a WinApp with the VxD; the callback must be in a
  3632.       fixed, non-discardable code segment
  3633. SeeAlso: #1339
  3634.  
  3635. (Table 1338)
  3636. Values POSTMSG callback routine is called with:
  3637.     STACK:    DWORD    "lParam" parameter from DOSApp
  3638.         WORD    "wParam" parameter from DOSApp
  3639.         WORD    Windows message number (WM_USER + 100)
  3640.         DWORD    registered hwnd
  3641.  
  3642. (Table 1339)
  3643. Call POSTMSG V86-mode entry point with:
  3644.     BX = wParam value to pass to protected-mode callback
  3645.     DX:AX = lParam value to pass to protected-mode callback
  3646. Return: CF clear if successful
  3647.     CF set on error (no WinApp registered)
  3648. SeeAlso: #1337
  3649. --------W-2F1684BX8888-----------------------
  3650. INT 2F - MS Windows - VbillD - GET DEVICE API ENTRY POINT
  3651.     AX = 1684h
  3652.     BX = 8888h (virtual device ID for VbillD device) (see #1325)
  3653.     ES:DI = 0000h:0000h
  3654. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3655.           (see #1340)
  3656.  
  3657. (Table 1340)
  3658. Call VbillD entry point with:
  3659.     AX = function
  3660.         0001h set reverse video
  3661.         0002h set normal video
  3662. Return: ???
  3663. --------W-2F1685-----------------------------
  3664. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  3665.     AX = 1685h
  3666.     BX = VM ID of virtual machine to switch to
  3667.     CX = flags (see #1341)
  3668.     DX:SI = priority boost (see VMM.INC)
  3669.     ES:DI -> FAR procedure to callback
  3670. Return: CF set on error
  3671.         AX = error code
  3672.         01h invalid VM ID
  3673.         02h invalid priority boost
  3674.         03h invalid flags
  3675.     CF clear if successful
  3676.         event will be or has been called
  3677. Notes:    some DOS devices, such as networks, need to call functions in a
  3678.       specific VM. This call forces the appropriate VM to be installed.
  3679.     the callback procedure must preserve all registers and return with IRET
  3680. SeeAlso: AX=1683h,INT 15/AX=1117h
  3681.  
  3682. Bitfields for VM switching flags:
  3683. Bit(s)    Description    (Table 1341)
  3684.  0    wait until interrupts enabled
  3685.  1    wait until critical section unowned
  3686.  2-15    reserved (zero)
  3687. --------E-2F1686-----------------------------
  3688. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  3689.     AX = 1686h
  3690. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  3691.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  3692. SeeAlso: AX=1687h
  3693. --------E-2F1687-----------------------------
  3694. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  3695.     AX = 1687h
  3696. Return: AX = 0000h if installed
  3697.         BX = flags
  3698.         bit 0: 32-bit programs supported
  3699.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  3700.         DH = DPMI major version
  3701.         DL = two-digit DPMI minor version (binary)
  3702.         SI = number of paragraphs of DOS extender private data
  3703.         ES:DI -> DPMI mode-switch entry point
  3704.     AX nonzero if not installed
  3705. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  3706. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  3707.  
  3708. (Table 1342)
  3709. Call DPMI mode switch entry point with:
  3710.     AX = flags
  3711.         bit 0: set if 32-bit program
  3712.     ES = real mode segment of buffer for DPMI private data (ignored if
  3713.         SI was zero)
  3714. Return: CF set on error
  3715.         program still in real mode
  3716.         AX = error code (DPMI 1.0+)
  3717.            8011h unable to allocate all necessary descriptors
  3718.            8021h 32-bit program specified, but 16-bit DPMI host
  3719.     CF clear if successful
  3720.         CS = 16-bit selector corresponding to real-mode CS
  3721.         SS = selector corresponding to real-mode SS (64K limit)
  3722.         DS = selector corresponding to real-mode DS (64K limit)
  3723.         ES = selector to program's PSP (100h byte limit)
  3724.         FS = GS = 0
  3725.         high word of ESP = 0 if 32-bit program
  3726.         program now in protected mode
  3727. Note:    this entry point is only called for the initial switch to protected
  3728.       mode
  3729. --------W-2F1688BX0BAD-----------------------
  3730. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT
  3731.     AX = 1688h
  3732.     BX = 0BADh
  3733. Return: AX = 0000h if supported
  3734.         BX = alias selector for LDT
  3735. Note:    use the LSL instruction or GetSelectorLimit() to find LDT size
  3736.     this call should be considered obsolete for Windows 3.1+, as the
  3737.       alias selector can be retrieved via the API entry point for
  3738.       "MS-DOS" retrieved from INT 2F/AX=168Ah (see #1344)
  3739. --------W-2F1689-----------------------------
  3740. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  3741.     AX = 1689h
  3742.     ???
  3743. Return: ???
  3744. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  3745. --------E-2F168A-----------------------------
  3746. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  3747.     AX = 168Ah
  3748.     DS:(E)SI = selector:offset of ASCIZ vendor name
  3749. Return: AL = status
  3750.         00h successful
  3751.            ES:(E)DI -> extended API entry point
  3752.         8Ah unsuccessful
  3753. Notes:    the vendor name is used to determine which entry point to return; it is
  3754.       case-sensitive
  3755.     available in protected mode only
  3756.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  3757.     this call is present but not documented for DPMI 0.9
  3758.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  3759.       other than the MS-DOS one gracefully, producing an unhandled
  3760.       exception report; this has been fixed in the Borland Pascal 7 version
  3761. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  3762.  
  3763. (Table 1343)
  3764. Values for DPMI vendor-specific API names:
  3765.  "MS-DOS"    MS Windows and 386MAX v6.00+ (see #1344)
  3766.  "386MAX"    386MAX v6.00+
  3767.  "HELIX_DPMI"    Helix Netroom's DPMI server
  3768.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286 (see #1345)
  3769.  
  3770. (Table 1344)
  3771. Call Windows-support ("MS-DOS") entry point with:
  3772.     AX = 0100h get LDT alias selector
  3773. Return: CF clear if successful
  3774.         AX = alias selector
  3775.     CF set on error
  3776.  
  3777. (Table 1345)
  3778. Call Phar Lap RUN286 entry point with:
  3779.     AX = 0000h (function "load MSW")
  3780.     BX = new value for MSW register (low word of CR0)
  3781. Return: ???
  3782. --------W-2F168B-----------------------------
  3783. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  3784.     AX = 168Bh
  3785.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  3786. Return: AL = 00h if focus set to specified VM
  3787. Notes:    documented on the Microsoft Developer's Network CD-ROM
  3788.     if the VM is a windowed DOS box, it will be set to full screen
  3789. SeeAlso: AX=1683h
  3790. --------W-2F168C-----------------------------
  3791. INT 2F - MS Windows 3.1 - RESTART COMMAND
  3792.     AX = 168Ch
  3793.     ???
  3794. Return: ???
  3795. Note:    WIN.COM executes specified application
  3796. --------W-2F1700-----------------------------
  3797. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  3798.     AX = 1700h
  3799. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  3800.     AX <> 1700h
  3801.         AL = WINOLDAP major version
  3802.         AH = WINOLDAP minor version
  3803. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  3804.       "old" (character-mode) application access to Dynamic Data Exchange,
  3805.       menus, and the Windows clipboard.
  3806. Note:    this installation check DOES NOT follow the format used by other
  3807.       software of returning AL=FFh
  3808. SeeAlso: AX=1701h,AX=4601h
  3809. Index:    installation check;WINOLDAP
  3810. --------W-2F1701-----------------------------
  3811. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  3812.     AX = 1701h
  3813. Return: AX = status
  3814.         nonzero success
  3815.         0000h   clipboard is already open
  3816. SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h
  3817. --------W-2F1702-----------------------------
  3818. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  3819.     AX = 1702h
  3820. Return: AX = status
  3821.         nonzero clipboard has been emptied
  3822.         0000h   failure
  3823. SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h
  3824. --------W-2F1703-----------------------------
  3825. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  3826.     AX = 1703h
  3827.     DX = clipboard format supported by WinOldAp (see #1346)
  3828.     ES:BX -> data (see #1347,#1348)
  3829.     SI:CX = size of data
  3830. Return: AX = status
  3831.         nonzero data copied into the Clipboard
  3832.         0000h   failure
  3833.  
  3834. (Table 1346)
  3835. Values for WinOldAp clipboard format:
  3836.  01h    text
  3837.  02h    bitmap
  3838.  03h    metafile picture
  3839.  04h    SYLK
  3840.  05h    DIF
  3841.  06h    TIFF
  3842.  07h    OEM text
  3843.  81h    DSP text
  3844.  82h    DSP bitmap
  3845.  
  3846. Format of Windows Clipboard bitmap:
  3847. Offset    Size    Description    (Table 1347)
  3848.  00h    WORD    type (0000h)
  3849.  02h    WORD    width of bitmap in pixels
  3850.  04h    WORD    height of bitmap in pixels
  3851.  06h    WORD    bytes per line
  3852.  08h    BYTE    number of color planes
  3853.  09h    BYTE    number of adjacent color bits in pixel
  3854.  0Ah    DWORD    pointer to start of data
  3855.  0Eh    WORD    width in 0.1mm units
  3856.  10h    WORD    height in 0.1mm units
  3857.  12h  N BYTEs    bitmap data
  3858.  
  3859. Format of Windows metafile picture:
  3860. Offset    Size    Description    (Table 1348)
  3861.  00h    WORD    mapping mode
  3862.  02h    WORD    X extent
  3863.  04h    WORD    Y extent
  3864.  06h    WORD    picture data
  3865. --------W-2F1704-----------------------------
  3866. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  3867.     AX = 1704h
  3868.     DX = clipboard format supported by WinOldAp (see #1346)
  3869. Return:    DX:AX = size of data in bytes, including any headers
  3870.         0000h:0000h if no data in this format in the Clipboard
  3871. Note:    Windows reportedly rounds up the size of the data to a multiple of 32
  3872.       bytes
  3873. --------W-2F1705-----------------------------
  3874. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  3875.     AX = 1705h
  3876.     DX = clipboard format supported by WinOldAp (see #1346)
  3877.     ES:BX -> buffer
  3878. Return: AX = status
  3879.         nonzero success
  3880.         0000h   error, or no data in this format in Clipboard
  3881. --------W-2F1708-----------------------------
  3882. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  3883.     AX = 1708h
  3884. Return: AX = status
  3885.         0000h failure
  3886.         nonzero success
  3887. --------W-2F1709-----------------------------
  3888. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  3889.     AX = 1709h
  3890.     SI:CX = desired size in bytes
  3891. Return: DX:AX = number of bytes in largest block of free memory
  3892. Note:    WinOldAp is responsible for including the size of any headers
  3893. --------W-2F170A-----------------------------
  3894. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  3895.     AX = 170Ah
  3896.     DX = GDI information index (see #1349)
  3897. Return: AX = integer value of the desired item
  3898.           (see #1350,#1351,#1352,#1353,#1354,#1355,#1356)
  3899. Note:    This function returns the device-capability bits for the given display
  3900.  
  3901. (Table 1349)
  3902. Values for GDI information index:
  3903.  00h    device driver version
  3904.  02h    device classification
  3905.  04h    width in mm
  3906.  06h    height in mm
  3907.  08h    width in pixels
  3908.  0Ah    height in pixels
  3909.  0Ch    bits per pixel
  3910.  0Eh    number of bit planes
  3911.  10h    number of brushes supported by device
  3912.  12h    number of pens supported by device
  3913.  14h    number of markers supported by device
  3914.  16h    number of fonts supported by device
  3915.  18h    number of colors
  3916.  1Ah    size required for device descriptor
  3917.  1Ch    curve capabilities
  3918.  1Eh    line capabilities
  3919.  20h    polygon capabilities
  3920.  22h    text capabilities
  3921.  24h    clipping capabilities
  3922.  26h    bitblt capabilities
  3923.  28h    X aspect
  3924.  2Ah    Y aspect
  3925.  2Ch    length of hypotenuse of aspect
  3926.  58h    logical pixels per inch of width
  3927.  5Ah    logical pixels per inch of height
  3928. SeeAlso: #1350,#1351,#1352,#1353,#1354,#1355,#1356
  3929.  
  3930. (Table 1350)
  3931. Values for device classification:
  3932.  00h    vector plotter
  3933.  01h    raster display
  3934.  02h    raster printer
  3935.  03h    raster camera
  3936.  04h    character-stream, PLP
  3937.  05h    Metafile, VDM
  3938.  06h    display-file
  3939. SeeAlso: #1349,#1351,#1352,#1353,#1354,#1355,#1356
  3940.  
  3941. Bitfields for curve capabilities:
  3942. Bit(s)    Description    (Table 1351)
  3943.  0    circles
  3944.  1    pie wedges
  3945.  2    chord arcs
  3946.  3    ellipses
  3947.  4    wide lines
  3948.  5    styled lines
  3949.  6    wide styled lines
  3950.  7    interiors
  3951. SeeAlso: #1349,#1350,#1352,#1353,#1354,#1355,#1356
  3952.  
  3953. Bitfields for line capabilities:
  3954. Bit(s)    Description    (Table 1352)
  3955.  1    polylines
  3956.  2    markers
  3957.  3    polymarkers
  3958.  4    wide lines
  3959.  5    styled lines
  3960.  6    wide styled lines
  3961.  7    interiors
  3962. SeeAlso: #1349,#1350,#1351,#1353,#1354,#1355,#1356
  3963.  
  3964. Bitfields for polygon capabilities:
  3965. Bit(s)    Description    (Table 1353)
  3966.  0    polygons
  3967.  1    rectangles
  3968.  2    trapezoids
  3969.  3    scanlines
  3970.  4    wide borders
  3971.  5    styled borders
  3972.  6    wide styled borders
  3973.  7    interiors
  3974. SeeAlso: #1349,#1350,#1351,#1352,#1354,#1355,#1356
  3975.  
  3976. Bitfields for text capabilities:
  3977. Bit(s)    Description    (Table 1354)
  3978.  0    output precision character
  3979.  1    output precision stroke
  3980.  2    clippping precision stroke
  3981.  3    90-degree character rotation
  3982.  4    arbitrary character rotation
  3983.  5    independent X and Y scaling
  3984.  6    double-size
  3985.  7    integer scaling
  3986.  8    continuous scaling
  3987.  9    bold
  3988.  10    italic
  3989.  11    underline
  3990.  12    strikeout
  3991.  13    raster fonts
  3992.  14    vector fonts
  3993.  15    reserved
  3994. SeeAlso: #1349,#1350,#1351,#1352,#1353,#1355,#1356
  3995.  
  3996. (Table 1355)
  3997. Values for clipping capabilities:
  3998.  00h    none
  3999.  01h    clipping to rectangles
  4000. SeeAlso: #1349,#1350,#1351,#1352,#1353,#1354,#1356
  4001.  
  4002. Bitfields for raster capabilities:
  4003. Bit(s)    Description    (Table 1356)
  4004.  0    simple bitBLT
  4005.  1    device requires banding support
  4006.  2    device requires scaling support
  4007.  3    supports >64K bitmap
  4008. SeeAlso: #1349,#1350,#1351,#1352,#1353,#1354,#1355
  4009. ----------2F18-------------------------------
  4010. INT 2F U - MS-Manager
  4011.     AH = 18h
  4012.     ???
  4013. Return: ???
  4014. --------l-2F1900-----------------------------
  4015. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  4016.     AX = 1900h
  4017. Return: AL = status
  4018.         00h not installed
  4019.         FFh installed
  4020. --------l-2F1901-----------------------------
  4021. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  4022.     AX = 1901h
  4023.     BL = SHELLC type
  4024.         00h transient
  4025.         01h resident
  4026.     DS:DX -> far call entry point for resident SHELLC.EXE
  4027. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  4028. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  4029. --------l-2F1902-----------------------------
  4030. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  4031.     AX = 1902h
  4032.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  4033.           final filename element uppercased
  4034.     DS:DX -> buffer for results
  4035. Return: AL = 00h  failed, either
  4036.         (a) final filename element quoted at ES:DI does not match
  4037.               identity of shell batch file quoted as parameter of most
  4038.               recent call of SHELLB command, or
  4039.         (b) no more Program Start Commands available.
  4040.     AL= FFh     success, then:
  4041.         memory at DS:[DX+1] onwards filled as:
  4042.         DX+1:    BYTE    count of bytes of PSC
  4043.         DX+2: N BYTEs    Program Start Command text
  4044.             BYTE    0Dh terminator
  4045. Desc:    COMMAND.COM executes the result of this call in preference to
  4046.       reading a command from a batch file.    Thus the batch file does not
  4047.       advance in execution for so long as SHELLB provides PSCs from its
  4048.       workspace.
  4049. Note:    The PSCs are planted in SHELLB workspace by SHELLC, the user
  4050.       menu interface.  The final PSC of a sequence is finished with a
  4051.       GOTO COMMON, which causes a loop back in the batch file which called
  4052.       SHELLC so as to execute SHELLC again.     The check on batch file name
  4053.       permits PSCs to CALL nested batch files while PSCs are still stacked
  4054.       up for subsequent execution.
  4055. --------l-2F1903-----------------------------
  4056. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  4057.     AX = 1903h
  4058.     ES:DI -> ASCIZ batch file name as for AX=1902h
  4059. Return: AL = status
  4060.         FFh quoted batch file name matches last SHELLB parameter
  4061.         00h it does not
  4062. --------l-2F1904-----------------------------
  4063. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  4064.     AX = 1904h
  4065. Return: ES:DI -> name of current shell batch file:
  4066.         WORD    number of bytes of name following
  4067.         BYTEs    (8 max) uppercase name of shell batch file
  4068. --------V-2F1A00-----------------------------
  4069. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  4070.     AX = 1A00h
  4071. Return: AL = FFh if installed
  4072. Notes:    AVATAR.SYS also responds to this call
  4073.     documented for DOS 5+, but undocumented for DOS 4.x
  4074. --------V-2F1A00BX414E-----------------------
  4075. INT 2F - ANSIPLUS.SYS v2.00+ - INSTALLATION CHECK
  4076.     AX = 1A00h
  4077.     BX = 414Eh ('AN')
  4078.     CX = 5349h ('SI')
  4079.     DX = 2B2Bh ('++')
  4080. Return: AL = FFh if installed
  4081.         CF clear
  4082.         ES:BX -> INT 29 entry point
  4083.         CX = ANSIPLUS BCD version number (v3.10+, CH=major, CL=minor)
  4084.         DL = capabilities (v4.00+)
  4085.         00h full capability driver
  4086.         01h reduced capability driver
  4087.         2Bh full capability driver (before v4.00)
  4088. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  4089.       replaces the normal ANSI.SYS is a more powerful version with many
  4090.       additional features
  4091. Notes:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  4092.       from the magic values above
  4093.     an additional installation check is to test for the signature
  4094.       "ANSIPLUS" 12 bytes before the INT 29 entry point; the version
  4095.       number is also available as a four-character ASCII string (e.g.
  4096.       "4.00") four bytes before the entry point
  4097. SeeAlso: AX=1AA5h,AX=1AA6h,AX=1AA7h,AX=1AA8h,AX=1AA9h,AX=1AAAh,AX=D44Fh
  4098. --------V-2F1A00BX4156-----------------------
  4099. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4100.     AX = 1A00h
  4101.     BX = 4156h ('AV')
  4102.     CX = 4154h ('AT')
  4103.     DX = 4152h ('AR')
  4104. Return: AL = FFh if installed
  4105.         CF clear
  4106.         BX = AVATAR protocol level supported
  4107.         CX = driver type
  4108.         0000h AVATAR.SYS
  4109.         4456h DVAVATAR.COM inside DESQview window
  4110.         DX = 0016h
  4111. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4112.       interprets AVATAR command codes in the same way that ANSI interprets
  4113.       ANSI command codes
  4114. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4115.       the magic values
  4116. SeeAlso: AX=1A21h,AX=1A3Ch,AX=1A3Fh,AX=1A52h,AX=1A72h,AX=1A7Dh,AX=1AADh"AVATAR"
  4117. --------V-2F1A01-----------------------------
  4118. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  4119.     AX = 1A01h
  4120.     CL = function
  4121.         7Fh for GET
  4122.         5Fh for SET
  4123.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  4124. Return:    CF clear if successful
  4125.         AX destroyed
  4126.     CF set on error
  4127.         AX = error code (many non-standard)
  4128. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  4129. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  4130. --------V-2F1A02-----------------------------
  4131. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  4132.     AX = 1A02h
  4133.     DS:DX -> parameter block (see #1357)
  4134. Return: CF clear if successful
  4135.     CF set on error
  4136.         AX = error code
  4137. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  4138. SeeAlso: AX=1A01h
  4139.  
  4140. Format of ANSI.SYS parameter block:
  4141. Offset    Size    Description    (Table 1357)
  4142.  00h    BYTE    subfunction
  4143.         00h set/reset interlock
  4144.         01h get /L flag
  4145.  01h    BYTE    interlock state
  4146.         00h=reset, 01h=set
  4147.           This interlock prevents some of the ANSI.SYS post-processing
  4148.           in its hook onto INT 10, AH=00h mode set
  4149.  02h    BYTE    (returned)
  4150.         00h if /L not in effect
  4151.         01h if /L in effect
  4152. --------V-2F1A21-----------------------------
  4153. INT 2F - AVATAR.SYS - SET DRIVER STATE
  4154.     AX = 1A21h (AL='!')
  4155.     DS:SI -> command string with one or more state characters (see #1358)
  4156.     CX = length of command string
  4157. Return: CF set on error (invalid subfunction)
  4158.     CF clear if successful
  4159. Note:    the characters in the state string are interpreted left to right, and
  4160.       need not be in any particular order
  4161. SeeAlso: AX=1A00h/BX=4156h,AX=1A3Fh
  4162.  
  4163. (Table 1358)
  4164. Values for AVATAR.SYS state characters:
  4165.  'a'    activate driver
  4166.  'd'    disable driver
  4167.  'f'    use fast screen output
  4168.  'g'    always convert gray keys (+ and -) to function keys
  4169.  'G'    never convert gray keys
  4170.  'l'    convert gray keys only when ScrollLock active
  4171.  's'    use slow screen output
  4172.  't'    Tandy 1000 keyboard (not yet implemented)
  4173. --------V-2F1A3C-----------------------------
  4174. INT 2F U - AVATAR.SYS v0.11 - ???
  4175.     AX = 1A3Ch
  4176.     ???
  4177. Return: CX = 0000h
  4178. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A3Eh
  4179. --------V-2F1A3E-----------------------------
  4180. INT 2F U - AVATAR.SYS v0.11 - ???
  4181.     AX = 1A3Eh
  4182.     CL = ???
  4183.     CH = ???
  4184.     DL = ???
  4185.     DH = ???
  4186. Return: CL = ???
  4187.     CH = ???
  4188.     DL = ???
  4189.     DH = ???
  4190. SeeAlso: AX=1A3Ch,AX=1A3Fh
  4191. --------V-2F1A3F-----------------------------
  4192. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  4193.     AX = 1A3Fh (AL='?')
  4194.     ES:DI -> buffer
  4195.     CX = length of buffer in bytes
  4196. Return: CF clear
  4197.     CX = actual size of returned info
  4198. Note:    the returned information consists of multiple letters whose meanings
  4199.       are described under AX=1A21h
  4200. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A44h
  4201. --------S-2F1A42BX4156-----------------------
  4202. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  4203.     AX = 1A42h
  4204.     BX = 4156h ('AV')
  4205.     ES:DI -> FAR handler for serial port using IRQ3
  4206.     DS = data segment needed by handler
  4207. Return: AX = status/return value
  4208.         0000h if no more room
  4209.         1A42h if ASD not installed
  4210.         else handle to use when uninstalling
  4211. Notes:    the handler need not save/restore registers or signal EOI to the
  4212.       interrupt controller
  4213.     the handler should return AX=0000h if the interrupt was meant for it,
  4214.       and either leave AX unchanged or return a non-zero value otherwise
  4215.     the most recently installed handler will be called first, continuing
  4216.       to earlier handlers until one returns AX=0000h
  4217. SeeAlso: AX=1A43h,AX=1A62h
  4218. --------S-2F1A43BX4156-----------------------
  4219. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  4220.     AX = 1A43h
  4221.     BX = 4156h ('AV')
  4222.     ES:DI -> FAR handler for serial port using IRQ4
  4223.     DS = data segment needed by handler
  4224. Return: AX = status/return value
  4225.         0000h if no more room
  4226.         1A43h if ASD not installed
  4227.         else handle to use when uninstalling
  4228. Notes:    (see AX=1A42h)
  4229. SeeAlso: AX=1A42h,AX=1A63h
  4230. --------V-2F1A44BX4156-----------------------
  4231. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  4232.     AX = 1A44h
  4233.     BX = 4156h ('AV')
  4234. Return: AX = 0000h
  4235.     DS = data segment
  4236.     CX = size of data segment
  4237. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  4238.       process under a multitasker hooks this function and provides a
  4239.       separate data segment, AVATAR.SYS becomes fully reentrant.
  4240. SeeAlso: AX=1A21h,AX=1A3Fh,AX=1A52h
  4241. --------V-2F1A52-----------------------------
  4242. INT 2F U - AVATAR.SYS v0.11 - GET ???
  4243.     AX = 1A52h
  4244.     CX = size of buffer
  4245.     ES:DI -> buffer
  4246. Return: ??? copied into user buffer
  4247. Note:    the maximum size of the data which may be copied is returned by
  4248.       AX=1A72h
  4249. SeeAlso: AX=1A53h,AX=1A72h
  4250. --------V-2F1A53-----------------------------
  4251. INT 2F U - AVATAR.SYS v0.11 - ???
  4252.     AX = 1A53h
  4253.     CL = ??? (00h-05h)
  4254.     ???
  4255. Return: ???
  4256. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A72h
  4257. --------S-2F1A62BX4156-----------------------
  4258. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  4259.     AX = 1A62h
  4260.     BX = 4156h ('AV')
  4261.     CX = handle for IRQ routine returned by AX=1A42h
  4262. SeeAlso: AX=1A42h,AX=1A63h
  4263. --------S-2F1A63BX4156-----------------------
  4264. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  4265.     AX = 1A63h
  4266.     BX = 4156h ('AV')
  4267.     CX = handle for IRQ routine returned by AX=1A43h
  4268. SeeAlso: AX=1A43h,AX=1A62h
  4269. --------V-2F1A72-----------------------------
  4270. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  4271.     AX = 1A72h
  4272. Return: CX = maximum size of ???
  4273. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A7Bh,AX=1AADh"AVATAR"
  4274. --------V-2F1A7B-----------------------------
  4275. INT 2F U - AVATAR.SYS v0.11 - ???
  4276.     AX = 1A7Bh
  4277. Return: AX = 0000h
  4278.     CX = 0000h
  4279. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h,AX=1A7Dh
  4280. --------V-2F1A7D-----------------------------
  4281. INT 2F U - AVATAR.SYS v0.11 - ???
  4282.     AX = 1A7Dh
  4283. Return: AX = ???
  4284. SeeAlso: AX=1A00h/BX=4156h,AX=1A7Bh
  4285. --------V-2F1AA5-----------------------------
  4286. INT 2F - ANSIPLUS v4.00+ - GET/SET ANSIPLUS CLIPBOARD
  4287.     AX = 1AA5h
  4288.     DH = subfunction
  4289.         00h get clipboard information
  4290.         01h get clipboard text
  4291.         02h set clipboard text
  4292.         03h append text to clipboard
  4293.         04h clear clipboard
  4294.         05h paste clipboard to keyboard
  4295.     ES:BX -> data area for subfunctions 01h, 02h, and 03h
  4296.     CX = size of data area (maximum size for subfunction 01h, actual size
  4297.         to add to clipboard for subfunctions 02h and 03h)
  4298. Return: AL = status
  4299.         00h successful
  4300.         01h unsupported subfunction (reduced capability driver)
  4301.         02h insufficient space
  4302.         A5h unsupported function (ANSIPLUS before v4.00)
  4303.     ES:BX -> ANSIPLUS local clipboard data
  4304.     CX = number of bytes currently in local clipboard
  4305.     DX = maximum size of local clipboard
  4306. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA6h
  4307. --------V-2F1AA6-----------------------------
  4308. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS DRIVER
  4309.     AX = 1AA6h
  4310.     BH = function
  4311.         00h get hooked interrupts
  4312.         01h set hooked interrupts mask
  4313.         BL = new interrupts mask (see #1359)
  4314. Return: BL = previous interrupts mask (see #1359)
  4315. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA7h
  4316.  
  4317. Desc:    used to temporarily disable any prior copies of ANSIPLUS when a new
  4318.       copy is installed, such as in a multitasking system like DESQview
  4319. Note:    only the most-recently loaded copy of ANSIPLUS on the current INT 2F
  4320.       chain responds to this call
  4321.  
  4322. Bitfields for ANSIPLUS hooked interrupts mask:
  4323. Bit(s)    Description    (Table 1359)
  4324.  0    INT 09 hook disabled
  4325.  1    INT 10 hook disabled
  4326.  2    INT 15 hook disabled
  4327.  3    INT 16 hook disabled
  4328.  4    INT 1C hook disabled
  4329.  5    reset all bits when INT 29 called
  4330.  6    INT 29 hook disabled
  4331.  7    INT 33, INT 74, or other mouse event hook disabled
  4332. --------V-2F1AA7-----------------------------
  4333. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS FEATURES
  4334.     AX = 1AA7h
  4335.     BL = function
  4336.         00h prevent scroll-back saves
  4337.         01h enable scroll-back saves
  4338.         02h disable key reprogramming and lock changes by escape sequences
  4339.         03h enable key reprogramming by escape sequences
  4340.         04h    disable and lock key stacking changes by escape sequences
  4341.         05h allow key stacking by escape sequences
  4342. Return: nothing
  4343. SeeAlso: AX=1AA6h
  4344. --------V-2F1AA8-----------------------------
  4345. INT 2F - ANSIPLUS v3.10+ - GET NEXT ANSIPLUS SCROLLBACK LINE
  4346.     AX = 1AA8h
  4347. Return: AL = status
  4348.         00h successful
  4349.         ES:BX -> screen line (character and attribute pairs)
  4350.         CX = length of line in bytes, 0000h if no more lines or
  4351.               unsupported video mode
  4352.         01h unsupported video mode active
  4353.         02h screen currently scrolled back
  4354.         03h reduced capability driver
  4355.         A8h unsupported function (driver before v3.10)
  4356. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA9h
  4357. --------V-2F1AA9-----------------------------
  4358. INT 2F - ANSIPLUS v3.10+ - GET ANSIPLUS SCROLLBACK INFORMATION
  4359.     AX = 1AA9h
  4360. Return: AL = status
  4361.         00h successful
  4362.         BX = current number of lines in scrollback buffer
  4363.         CX = number of bytes in one line
  4364.         01h unsupported video mode active
  4365.         02h screen currently scrolled back
  4366.         03h reduced capability driver
  4367.         A9h unsupported function (driver before v3.10)
  4368. Desc:    determine how much data is in the scrollback buffer and initialize
  4369.       scrollback retrieval to return the first line on the next call to
  4370.       AX=1AA8h
  4371. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA8h
  4372. --------V-2F1AAA-----------------------------
  4373. INT 2F - ANSIPLUS v3.01+ - GET/SET ANSIPLUS SCREEN SAVER BLANKING TIME
  4374.     AX = 1AAAh
  4375.     BX = function
  4376.         FFFFh to get current blanking time
  4377.         other to set time
  4378.         CX = blanking time in clock ticks (0000h-7FFFh)
  4379. Return: BX = current blanking time
  4380.     CX = blanking time when last set
  4381. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh
  4382. --------V-2F1AAB-----------------------------
  4383. INT 2F - ANSIPLUS v3.01+ - SET ANSIPLUS KEY REPEAT RATE
  4384.     AX = 1AABh
  4385.     BX = repeat rate in characters per second
  4386.         0000h use BIOS repeat rate
  4387. Return: nothing
  4388. SeeAlso: AX=1A00h/BX=414Eh,AX=1AAAh,AX=1AACh
  4389. --------V-2F1AAC-----------------------------
  4390. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  4391.     AX = 1AACh
  4392.     BH = number of bytes per character pattern
  4393.     BL = VGA/EGA character table to be loaded
  4394.     CX = number of characters to load
  4395.     DX = starting character code (offset into Map2 block)
  4396.     ES:BP -> user character table to be loaded
  4397. Return: AX = 1100h
  4398. Desc:    load the EGA/VGA character generator without the BIOS function's
  4399.       side effects of resetting the video mode and color palette
  4400. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh,AX=1AADh"ANSIPLUS",INT 10/AX=1100h
  4401. --------V-2F1AAD-----------------------------
  4402. INT 2F - ANSIPLUS v2.00+ - ANSIPLUS DEVICE STATUS REPORT
  4403.     AX = 1AADh
  4404.     BL = report request code (81h-96h for v4.00)
  4405.     CX = color selector or key code, if required by request
  4406. Return: AX = first reported result
  4407.     BX = second result
  4408.     CX = third result, if applicable (unchanged otherwise)
  4409.     DX = fourth result, if applicable (unchanged otherwise)
  4410. Desc:    get device status reports equivalent to those for Esc [#n sequences
  4411.       while bypassing any device redirection and avoiding the need to
  4412.       parse the returned result
  4413. Note:    the report request code in BL is identical to the number in the
  4414.       corresponding Esc [#n sequence
  4415. SeeAlso: AX=1A00h/BX=414Eh,AX=1AACh
  4416. --------V-2F1AADDX0000-----------------------
  4417. INT 2F U - AVATAR.SYS v0.11 - ???
  4418.     AX = 1AADh
  4419.     DX = 0000h
  4420.     CX = subfunction (00h-0Ch)
  4421.     ???
  4422. Return: AX = 0000h if DX was nonzero
  4423.     ???
  4424. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h
  4425. --------V-2F1AAC-----------------------------
  4426. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  4427.     AX = 1AACh
  4428. --------m-2F1B00-----------------------------
  4429. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  4430.     AX = 1B00h
  4431. Return: AL = FFh if installed
  4432. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  4433.     This extension hooks onto INT 67/AH=58h and returns from that call data
  4434.       which excludes the physical pages being used by DOS.
  4435. SeeAlso: AH=1Bh"FRAME INFO"
  4436. --------m-2F1B-------------------------------
  4437. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  4438.     AH = 1Bh
  4439.     AL <> 00h
  4440.     DI = hidden physical page number
  4441. Return: AX = FFFFh if failed (no such hidden page)
  4442.     AX = 0000h if OK, then
  4443.         ES = segment of page frame
  4444.         DI = physical page number
  4445. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  4446.     FASTOPEN makes this call with AL = FFh
  4447. SeeAlso: AX=1B00h
  4448. --------V-2F2300-----------------------------
  4449. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  4450.     AX = 2300h
  4451. Return: AH = FFh
  4452. Note:    this installation check does not follow the usual format
  4453. SeeAlso: AH=23h,AX=2E00h
  4454. --------V-2F23-------------------------------
  4455. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  4456.     AH = 23h
  4457.     AL nonzero
  4458. Return: AH = FFh
  4459.     ES:BX -> graphics data (8 bytes for each character from 80h to FFh)
  4460. SeeAlso: AX=2300h,AX=2E00h
  4461. --------T-2F2700-----------------------------
  4462. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  4463.     AX = 2700h
  4464. Return: AL = status
  4465.         00h not installed
  4466.         FFh installed
  4467. --------T-2F2701-----------------------------
  4468. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  4469.     AX = 2701h
  4470. Return: AX = maximum simultaneous tasks
  4471.     BX = index into TASK_IDS of current foreground task
  4472.     CX = currently-active tasks
  4473.     DX = version number (DL = major, DH = minor)
  4474.         (DR-DOS 6.0 = 0001h, Novell DOS 7 = 0002h)
  4475.     ES:SI -> TASK_IDS
  4476.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  4477. Notes:    do not attempt to create a new task if CX == AX
  4478.     the task's index is its position on the task menu, while its ID is the
  4479.       position within the internal task name table
  4480. SeeAlso: AX=2714h,AX=2716h
  4481. --------T-2F2702-----------------------------
  4482. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  4483.     AX = 2702h
  4484. Return: DX = maximum pages INT 67/AH=42h will report available
  4485. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  4486.       amount which is reported as being available at a given time
  4487. SeeAlso: AX=2703h,INT 67/AH=42h
  4488. --------T-2F2703-----------------------------
  4489. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  4490.     AX = 2703h
  4491.     DX = maximum pages INT 67/AH=42h should report available
  4492. Return: DX = new maximum for reporting
  4493. SeeAlso: AX=2702h,INT 67/AH=42h
  4494. --------T-2F2704-----------------------------
  4495. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  4496.     AX = 2704h
  4497.     DL = subfunction
  4498.         00h unregister task manager
  4499.         01h register task manager
  4500. Return: DL = status
  4501.         00h registered
  4502.         01h unregistered
  4503. Notes:    a task manager replaces TaskMAX's menu system with its own user
  4504.       interface; while one is registered, the TaskMAX hotkeys and
  4505.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  4506.     unregister the task manager before terminating it
  4507. SeeAlso: AX=2705h
  4508. Index:    hotkeys;TaskMAX
  4509. --------T-2F2705-----------------------------
  4510. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  4511.     AX = 2705h
  4512.     DL = subfunction
  4513.         00h disable keystrokes for switching to next/prev/specified task
  4514.         01h enable
  4515. Return: nothing
  4516. Note:    should only be called by a registered task manager (see AX=2704h)
  4517. SeeAlso: AX=2704h,AX=2706h
  4518. --------T-2F2706-----------------------------
  4519. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  4520.     AX = 2706h
  4521.     DX = task index (see AX=2701h) of task to be activated
  4522. Return: DX = task index of previously-active task
  4523. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  4524. --------T-2F2707-----------------------------
  4525. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  4526.     AX = 2707h
  4527.     DS:DX -> ASCIZ pathname of executable
  4528.     ES:BX -> parameter block (see #1360)
  4529.     CX = number of ticks before automatic return to task manager
  4530.         (0000h = run until termination or explicitly switched)
  4531. Return: DX = new task's task index (FFFFh if task terminated)
  4532. SeeAlso: AX=2706h,AX=2708h
  4533.  
  4534. Format of TaskMAX parameter block:
  4535. Offset    Size    Description    (Table 1360)
  4536.  00h    WORD    reserved, should be 0000h
  4537.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4538.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4539.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4540. --------T-2F2708-----------------------------
  4541. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  4542.     AX = 2708h
  4543.     DX = task index
  4544. Return: DX = FFFFh (task deleted)
  4545. Notes:    this call should only be used for abnormal task termination, after
  4546.       first checking for open files with AX=270Ch; should not be used
  4547.       with programs that allocate EMS or XMS memory
  4548.     switches to specified task first
  4549. SeeAlso: AX=2707h
  4550. --------T-2F2709-----------------------------
  4551. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  4552.     AX = 2709h
  4553.     DX = task index
  4554.     DS:SI -> 8-byte name (8 NULs = remove name)
  4555. Return: AL = task flags
  4556.         00h ID unused or task terminated
  4557.         01h ID in use, task name table entry valid
  4558.         81h ID in use, task name fixed
  4559.     BX = task ID
  4560.     ES:DI -> name in task name table (see AX=2701h)
  4561. Note:    the task retains the given name until it terminates or the name is
  4562.       removed by specifying a name of 8 NULs.
  4563. SeeAlso: AX=2701h,AX=2707h
  4564. --------T-2F270A-----------------------------
  4565. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  4566.     AX = 270Ah
  4567.     DX = task index
  4568. Return: DX = task ID (FFFFh if index invalid)
  4569. Note:    task IDs stay constant, while indexes can change when other tasks are
  4570.       deleted
  4571. SeeAlso: AX=2701h,AX=270Bh
  4572. --------T-2F270B-----------------------------
  4573. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  4574.     AX = 270Bh
  4575.     DX = task ID
  4576. Return: DX = task index (FFFFh if task not active)
  4577. SeeAlso: AX=270Ah
  4578. --------T-2F270C-----------------------------
  4579. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  4580.     AX = 270Ch
  4581.     DX = task index
  4582. Return: AX = number of files currently open for specified task
  4583. SeeAlso: AX=2708h
  4584. --------T-2F270D-----------------------------
  4585. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  4586.     AX = 270Dh
  4587.     DX = task index
  4588. Return: DX = status
  4589.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  4590.         0001h if not in root shell for task
  4591. Note:    TaskMAX will return 0001h if the specified task has spawned another
  4592.       command interpreter with AX=2707h
  4593. SeeAlso: AX=2707h,AX=270Ch
  4594. --------T-2F270E-----------------------------
  4595. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  4596.     AX = 270Eh
  4597.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4598.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4599. Return: ES:DI -> current lead-in string
  4600. Note:    the specified sequence of keystrokes is sent to the application before
  4601.       every line of a text-mode spreadsheet paste
  4602. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  4603. --------T-2F270F-----------------------------
  4604. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  4605.     AX = 270Fh
  4606.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4607.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4608. Return: ES:DI -> current lead-in string
  4609. Note:    the specified sequence of keystrokes is sent to the application before
  4610.       every number in a numeric-mode spreadsheet paste
  4611. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  4612. --------T-2F2710-----------------------------
  4613. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  4614.     AX = 2710h
  4615.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4616.     DS:SI -> pasting terminator string (character/scan-code pairs)
  4617. Return: ES:DI -> current terminator string
  4618. Note:    the specified sequence of keystrokes is sent to the application after
  4619.       every line of a spreadsheet paste operation
  4620. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  4621. --------T-2F2711-----------------------------
  4622. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  4623.     AX = 2711h
  4624.     DX = ASCII code for separator (FFFFh to get current)
  4625. Return: DL = current separator character
  4626. SeeAlso: AX=270Fh
  4627. --------T-2F2712-----------------------------
  4628. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  4629.     AX = 2712h
  4630.     DX = task index
  4631. --------T-2F2713-----------------------------
  4632. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  4633.     AX = 2713h
  4634.     DX = task index
  4635.     CX = paste mode
  4636.         0000h alphanumeric
  4637.         0001h numeric
  4638.         0002h text
  4639. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  4640. --------T-2F2714-----------------------------
  4641. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  4642.     AX = 2714h
  4643. Return: CX = total KB of swap space
  4644.     DX = available KB of swap space
  4645. SeeAlso: AX=2701h
  4646. --------T-2F2715-----------------------------
  4647. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  4648.     AX = 2715h
  4649. Return: only after calling task is again selected
  4650. SeeAlso: AX=2706h
  4651. --------T-2F2716-----------------------------
  4652. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  4653.     AX = 2716h
  4654. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  4655.         CX = bytes in paste buffer
  4656.         DX = current generation number (updated after every copy operation)
  4657. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  4658. --------T-2F2717-----------------------------
  4659. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  4660.     AX = 2717h
  4661.     CX = bytes in destination buffer
  4662.     ES:DI -> destination buffer
  4663. Return: AX = 0000h if function supported
  4664.         CX = bytes actually copied (FFFFh if buffer too small)
  4665.         DX = current generation number for paste buffer
  4666. Note:    the destination buffer may be too small if another task adds more data
  4667.       to the paste buffer after the AX=2716h call but before this call
  4668. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  4669. --------T-2F2718-----------------------------
  4670. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  4671.     AX = 2718h
  4672.     CX = bytes in source buffer
  4673.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  4674. Return: AX = 0000h if function supported
  4675.         CX = bytes actually copied
  4676.         DX = current generation number for paste buffer
  4677. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  4678. --------T-2F2719-----------------------------
  4679. INT 2F - Novell DOS 7 TaskMGR - NOP
  4680.     AX = 2719h to 271Bh
  4681. --------T-2F271C-----------------------------
  4682. INT 2F U - Novell DOS 7 TaskMGR - ???
  4683.     AX = 271Ch
  4684.     DX = ???
  4685.         bit 0: ???
  4686. Return: ???
  4687.     ---if DX bit 0 set---
  4688.     AX = 0031h
  4689.     CX = 0000h
  4690. BUG:    if the task switcher is running, and DX bit 0 is set on call, this
  4691.       function will crash because its exit code attempts to pop several
  4692.       registers which are not pushed when DX bit 0 is set
  4693. --------m-2F2780CL01-------------------------
  4694. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  4695.     AX = 2780h
  4696.     CL = 01h (function number)
  4697.     CH = subfunction
  4698.         00h unused
  4699.         Return: CX = status (0002h) (see #1361)
  4700.         01h unused
  4701.         Return: CX = status (0002h) (see #1361)
  4702.         02h ???
  4703.         BX = ??? (0005h-000Fh)
  4704.         Return: CX = status (0000h,0030h) (see #1361)
  4705.         03h allocate ???
  4706.         DX = ???
  4707.         Return: CX = status (0000h,0003h) (see #1361)
  4708.         04h get ???
  4709.         Return: CX = 0000h (successful)
  4710.             BX = selector for EMM386 data segment
  4711.             EBX high word cleared
  4712.         05h ???
  4713.         EDX = ???
  4714.         Return: ???
  4715.         06h return to real mode via triple fault
  4716.         07h debugger break
  4717.         Note:    calls INT 03, then INT 21/AH=02h to output a question
  4718.               mark
  4719.         08h get ???
  4720.         Return: CX = 0000h (successful)
  4721.             EBX = ??? (0 or 2)
  4722.         09h ???
  4723.         0Ah ???
  4724.         0Bh unused
  4725.         Return: CX = status (0002h) (see #1361)
  4726.         0Ch ??? manipulates DOS memory chain
  4727.         0Dh ???
  4728.         EBX = ???
  4729.         EDX = ???
  4730.         Return: ???
  4731.         0Eh ???
  4732.         Return: CX = 0000h (successful)
  4733.             BL = ???     \ or BX = 0000h
  4734.             BH = ???     /
  4735.         0Fh get ???
  4736.         Return: CX = 0000h (successful)
  4737.             EBX = ???
  4738.         10h get and set ???
  4739.         EDX = ???
  4740.         Return: CX = 0000h (successful)
  4741.             EBX = old value of ???
  4742.         11h get ???
  4743.         Return: CX = 0000h (successful)
  4744.             EBX = ??? (0100h)
  4745.         12h get and set ???
  4746.         DX = ???
  4747.         Return: CX = 0000h (successful)
  4748.             AX = old value of ???
  4749.         13h ???
  4750.         Return: CX = status (0000h,003Fh) (see #1361)
  4751.             AX = ???
  4752.         14h ???
  4753.         EDX = ???
  4754.         Return: CX = status (0000h,003Fh) (see #1361)
  4755.         15h ???
  4756.         BX = segment of ???
  4757.         Return: CX = 0000h (successful)
  4758.             BX = segment of ???
  4759.         16h ???
  4760.         17h ???
  4761.         EBX = subfunction (0-2)
  4762.         Return: CX = status (0002h if EBX>2) (see #1361)
  4763.             ???
  4764.         18h unused
  4765.         Return: CX = status (0002h) (see #1361)
  4766. Return: CX = status (most subfunctions)
  4767.     (E)AX and/or (E)BX contain return values, depending on function
  4768. Notes:    called by DPMS.EXE and EMM386.EXE
  4769.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  4770.       because the request is handled on the initial trap to the memory
  4771.       manager caused by INT instructions, this API must be invoked with
  4772.       an actual INT 2F instruction instead of some simulation such as a
  4773.       far call to the address in the interrupt vector table
  4774. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  4775.  
  4776. (Table 1361)
  4777. Values for Novell DOS 7 EMM386 function status:
  4778.  0000h    successful
  4779.  0001h    invalid function???
  4780.  0002h    invalid subfunction
  4781.  0003h    ???
  4782.  0004h    invalid ??? index
  4783.  0005h    ???
  4784.  0006h    ???
  4785.  0007h    ???
  4786.  0009h    ???
  4787.  000Ah    ???
  4788.  000Bh    invalid ??? handle
  4789.  000Ch    ???
  4790.  000Dh    ???
  4791.  000Eh    ???
  4792.  000Fh    ???
  4793.  0014h    ???
  4794.  0023h    ???
  4795.  0030h    ???
  4796.  003Fh    ???
  4797. --------m-2F2780CL02-------------------------
  4798. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  4799.     AX = 2780h
  4800.     CL = 02h (function number)
  4801.     CH = subfunction
  4802.         00h ???
  4803.         ???
  4804.         Return: CX = status (0000h,0023h, others???) (see #1361)
  4805.             BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
  4806.         Note:    calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
  4807.               func 02h/sf 0Bh, and func 04h/sf 01h
  4808.         01h get and clear ???
  4809.         DX = ??? handle or 0000h for default
  4810.         Return: CX = status (0000h,000Bh) (see #1361)
  4811.             EBX = old value of ??? if successful
  4812.             EDX destroyed
  4813.         02h ???
  4814.         DX = index of ???
  4815.         Return: CX = status (0000h,0004h,0005h) (see #1361)
  4816.             EBX = 0000FFFFh on error, 00000000h if successful
  4817.         03h ???
  4818.         DX = index of ???
  4819.         Return: CX = status (0000h,0004h,0006h) (see #1361)
  4820.             BX = FFFFh on error, 0000h if successful
  4821.         04h ???
  4822.         Return: CX = status (0000h,0007h,000Ah) (see #1361)
  4823.         05h ???
  4824.         EDX -> ??? data (first 8 bytes seem to be name)
  4825.         Return: CX = status (0000h,0009h,000Dh) (see #1361)
  4826.         06h ???
  4827.         Note:    calls fn 02h/subfn 05h, then fn 02h/subfn 40h
  4828.         07h ???
  4829.         EDX = ???
  4830.         Return: CX = status (0000h,0009h,000Eh) (see #1361)
  4831.         08h ???
  4832.         EDX = ???
  4833.         Return: CX = status (0000h,0009h,000Eh) (see #1361)
  4834.         09h ???
  4835.         EDX = ???
  4836.         Return: CX = status (0000h,0009h,000Fh) (see #1361)
  4837.         0Ah ???
  4838.         EDX = ???
  4839.         Return: CX = status (0000h,0009h,000Fh) (see #1361)
  4840.         0Bh ???
  4841.         DX = ???
  4842.         Return: CX = 0000h (successful)
  4843.         0Ch ???
  4844.         Return: CX = 0000h (successful)
  4845.         0Dh ???
  4846.         Return: CX = status (0000h,0023h) (see #1361)
  4847.             BX = FFFFh on error, 0000h if successful
  4848.         Note:    calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
  4849.               fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
  4850.         0Eh ???
  4851.         ???
  4852.         Return: CX = status (0000h,000Ch) (see #1361)
  4853.             EBX = ??? if successful
  4854.         0Fh ???
  4855.         BX = ???
  4856.         DX = ??? handle or 0000h for default
  4857.         Return: CX = status (0000h,000Bh) (see #1361)
  4858.         10h get ??? handle
  4859.         Return: CX = 0000h (successful)
  4860.             BX = handle of default ???
  4861.             EBX high word cleared
  4862.         11h ???
  4863.         DX = ??? handle or 0000h for default
  4864.         BX = ??? (handle???)
  4865.         Return:    CX = status (0000h,000Bh,0014h) (see #1361)
  4866.         12h ???
  4867.         BX = ???
  4868.         DX = ???
  4869.         Return: CX = 0000h (successful)
  4870.         13h ???
  4871.         DX = ???
  4872.         Return: CX = status (see #1361)
  4873.         14h ???
  4874.         BX = ???
  4875.         DX = ???
  4876.         Return: CX = status (0000h,0014h) (see #1361)
  4877.             BX = FFFFh on error, ??? if successful
  4878.         15h set ??? flags
  4879.         BX = ??? (low two bits only)
  4880.         DX = ??? handle or 0000h for default
  4881.         Return: CX = status (0000h,000Bh) (see #1361)
  4882.             BX = new value of ??? flags (entire word)
  4883.             EBX high register cleared
  4884.         16h clear ??? flag for default ???
  4885.         Return: CX = 0000h (successful)
  4886.         17h ???
  4887.         18h ???
  4888.         19h ???
  4889.         1Ah ???
  4890.         1Bh ???
  4891.         1Ch ???
  4892.         1Dh ???
  4893.         1Eh ???
  4894.         1Fh ???
  4895.         20h ???
  4896.         21h ???
  4897.         22h ???
  4898.         23h ???
  4899.         24h ???
  4900.         25h ???
  4901.         26h ???
  4902.         27h ???
  4903.         28h ???
  4904.         29h ???
  4905.         2Ah ???
  4906.         2Bh ???
  4907.         2Ch ???
  4908.         2Dh ???
  4909.         2Eh ???
  4910.         2Fh ???
  4911.         30h ???
  4912.         31h ???
  4913.         32h ???
  4914.         33h ???
  4915.         34h ???
  4916.         35h ???
  4917.         36h ???
  4918.         37h ???
  4919.         38h ???
  4920.         39h ???
  4921.         3Ah ???
  4922.         3Bh ???
  4923.         3Ch ???
  4924.         3Eh ???
  4925.         3Fh ???
  4926.         40h ???
  4927.         41h ???
  4928.         42h ???
  4929.         43h ???
  4930.         44h ???
  4931.         45h ???
  4932.         46h ???
  4933.         47h ???
  4934. Return: CX = status (most subfunctions)
  4935.     (E)AX and/or (E)BX contain return values, depending on function
  4936. Notes:    called by DPMS.EXE and EMM386.EXE
  4937.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  4938.       because the request is handled on the initial trap to the memory
  4939.       manager caused by INT instructions, this API must be invoked with
  4940.       an actual INT 2F instruction instead of some simulation such as a
  4941.       far call to the address in the interrupt vector table
  4942. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
  4943. --------m-2F2780CL03-------------------------
  4944. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  4945.     AX = 2780h
  4946.     CL = 03h (function number)
  4947.     CH = subfunction
  4948.         00h ???    
  4949.         01h ???
  4950.         02h ???
  4951.         03h ???
  4952.         04h ???
  4953.         05h ???
  4954.         06h ???
  4955.         07h ???
  4956.         08h ???
  4957.         09h ???
  4958.         0Ah ???
  4959.         0Bh ???
  4960.         0Ch ???
  4961.         0Dh ???
  4962.         0Eh ???
  4963.         0Fh ???
  4964.         10h ???
  4965.         11h ???
  4966.         12h ???
  4967.         13h ???
  4968.         14h ???
  4969.         15h ???
  4970.         16h ???
  4971.         17h ???
  4972.         18h ???
  4973.         19h ???
  4974.         1Ah ???
  4975.         1Bh ???
  4976.         1Ch ???
  4977.         1Dh ???
  4978.         1Eh ???
  4979.         1Fh ???
  4980.         20h ???
  4981.         21h ???
  4982.         22h ???
  4983.         23h ???
  4984.         24h ???
  4985.         25h ???
  4986.         26h ???
  4987.         27h ???
  4988.         28h ???
  4989.         29h ???
  4990.         2Ah ???
  4991.         2Bh ???
  4992.         2Ch ???
  4993.         2Dh ???
  4994.         2Eh ???
  4995.         2Fh ???
  4996.         30h ???
  4997.         31h ???
  4998.         32h ???
  4999.         33h ???
  5000.         34h ???
  5001.         35h ???
  5002.         36h ???
  5003.         37h ???
  5004. Return: CX = status (most subfunctions)
  5005.     (E)AX and/or (E)BX contain return values, depending on function
  5006. Notes:    called by DPMS.EXE and EMM386.EXE
  5007.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5008.       because the request is handled on the initial trap to the memory
  5009.       manager caused by INT instructions, this API must be invoked with
  5010.       an actual INT 2F instruction instead of some simulation such as a
  5011.       far call to the address in the interrupt vector table
  5012. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=04h
  5013. --------m-2F2780CL04-------------------------
  5014. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5015.     AX = 2780h
  5016.     CL = 04h (function number)
  5017.     CH = subfunction
  5018.         00h ???    
  5019.         01h ???
  5020.         02h ???
  5021.         03h ???
  5022.         04h ???
  5023.         05h ???
  5024.         06h ???
  5025.         07h ???
  5026.         08h ???
  5027.         09h ???
  5028.         0Ah ???
  5029.         0Bh ???
  5030.         0Ch ???
  5031.         0Dh ???
  5032.         0Eh ???
  5033.         0Fh ???
  5034.         10h ???
  5035.         11h ???
  5036.         12h ???
  5037.         13h ???
  5038.         14h ???
  5039.         15h ???
  5040.         16h ???
  5041.         17h ???
  5042.         18h ???
  5043.         19h ???
  5044.         1Ah ???
  5045.         1Bh ???
  5046.         1Ch ???
  5047.         1Dh ???
  5048.         1Eh ???
  5049.         1Fh ???
  5050.         20h ???
  5051.         21h ???
  5052.         22h ???
  5053.         23h ???
  5054.         24h ???
  5055.         25h ???
  5056.         26h ???
  5057.         27h ???
  5058.         28h ???
  5059.         29h ???
  5060.         2Ah ???
  5061.         2Bh ???
  5062.         2Ch ???
  5063.         2Dh ???
  5064.         2Eh ???
  5065.         2Fh ???
  5066.         30h ???
  5067.         31h ???
  5068.         32h ???
  5069. Return: CX = status (most subfunctions)
  5070.     (E)AX and/or (E)BX contain return values, depending on function
  5071. Notes:    called by DPMS.EXE and EMM386.EXE
  5072.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5073.       because the request is handled on the initial trap to the memory
  5074.       manager caused by INT instructions, this API must be invoked with
  5075.       an actual INT 2F instruction instead of some simulation such as a
  5076.       far call to the address in the interrupt vector table
  5077. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5078. --------m-2F2780CL05-------------------------
  5079. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5080.     AX = 2780h
  5081.     CL = 05h
  5082.     ???
  5083. Return: ???
  5084. Notes:    called by DPMS.EXE and EMM386.EXE
  5085.     the handler for this function may be set by one of the subfunctions
  5086.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  5087.       CX=0001h (see #1361)
  5088.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5089.       because the request is handled on the initial trap to the memory
  5090.       manager caused by INT instructions, this API must be invoked with
  5091.       an actual INT 2F instruction instead of some simulation such as a
  5092.       far call to the address in the interrupt vector table
  5093. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5094. --------m-2F2780CL06-------------------------
  5095. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5096.     AX = 2780h
  5097.     CL = 06h
  5098.     ???
  5099. Return: ???
  5100. Notes:    called by DPMS.EXE and EMM386.EXE
  5101.     the handler for this function may be set by one of the subfunctions
  5102.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  5103.       CX=0001h (see #1361)
  5104.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5105.       because the request is handled on the initial trap to the memory
  5106.       manager caused by INT instructions, this API must be invoked with
  5107.       an actual INT 2F instruction instead of some simulation such as a
  5108.       far call to the address in the interrupt vector table
  5109. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5110. --------m-2F2780-----------------------------
  5111. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5112.     AX = 2780h
  5113.     CL = function (07h-0Fh)
  5114.     ???
  5115. Return: ???
  5116. Notes:    called by DPMS.EXE and EMM386.EXE
  5117.     the handlers for each of these functions may be set individually by
  5118.       one of the subfunctions of AX=2780h/CL=01h; the default handlers
  5119.       return with all registers unchanged
  5120.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5121.       because the request is handled on the initial trap to the memory
  5122.       manager caused by INT instructions, this API must be invoked with
  5123.       an actual INT 2F instruction instead of some simulation such as a
  5124.       far call to the address in the interrupt vector table
  5125. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5126. --------T-2F2781-----------------------------
  5127. INT 2F U - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  5128.     AX = 2781h
  5129. Return: ???
  5130. SeeAlso: AX=2782h
  5131. --------T-2F2782-----------------------------
  5132. INT 2F U - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  5133.     AX = 2782h
  5134. Return: ???
  5135. SeeAlso: AX=2781h
  5136. --------m-2F2783-----------------------------
  5137. INT 2F U - Novell DOS 7 - EMM386.EXE - GET ???
  5138.     AX = 2783h
  5139. Return: AX = ???
  5140.     BX = ???
  5141. --------T-2F278F-----------------------------
  5142. INT 2F U - Novell DOS 7 TaskMGR - ??? API
  5143.     AX = 278Fh
  5144.     as for INT 2F/AX=2780h
  5145. Return: as for INT 2F/AX=2780h
  5146. Note:    Novell DOS 7 TaskMGR passes this call through to INT 2F/AX=2780h
  5147.       without changing any other registers
  5148. SeeAlso: AX=2780h,AX=2782h
  5149. --------F-2F2A-------------------------------
  5150. INT 2F - Gammafax DOS Dispatcher INTERFACE
  5151.     AH = 2Ah
  5152. Note:    details not available at this time
  5153. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  5154. --------V-2F2E00-----------------------------
  5155. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  5156.     AX = 2E00h
  5157. Return: AH = FFh if installed
  5158. Note:    this installation check does not follow the usual format of setting
  5159.       AL to FFh
  5160. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  5161. --------V-2F2E-------------------------------
  5162. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  5163.     AH = 2Eh
  5164.     AL nonzero
  5165. Return: AH = FFh if installed
  5166.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  5167. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  5168. --------t-2F3900-----------------------------
  5169. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  5170.     AX = 3900h
  5171. Return: AL = status
  5172.         00h not installed
  5173.         FFh one or more TSRs using this interface is installed
  5174.         DX may be destroyed
  5175. Note:    this function is provided to that the multiplex number will appear used
  5176.       to other programs
  5177. SeeAlso: AH=39h/BL=00h
  5178. --------t-2F39--BL00-------------------------
  5179. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  5180.     AH = 39h
  5181.     BL = 00h
  5182.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see #1362)
  5183. Return: AL = status
  5184.         00h not installed
  5185.         FFh installed
  5186.         DX = segment address of resident module
  5187. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  5188.       resident module is installed by allocating a block of upper memory,
  5189.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  5190.       field with the TSR's name.
  5191. SeeAlso: AX=3900h,AH=39h/BL=01h
  5192.  
  5193. (Table 1362)
  5194. Values for Kingswood TSR ID number:
  5195.  01h    TSR Windows
  5196.  02h    NOBUSY
  5197.  03h    CD STACK
  5198.  04h    DISK WATCH
  5199.  05h    PUSHBP
  5200.  06h    ALIAS
  5201.  07h    KEYMACRO
  5202.  08h    SLOWDOWN
  5203.  09h    ANSIGRAB
  5204.  0Ah    TEE
  5205.  0Bh    FASTMOUS
  5206.  0Ch    EXTWILD
  5207.  0Dh    BREAKOUT
  5208.  0Eh    STOPDISK
  5209.  0Fh    MEMINIT
  5210.  10h    JANUSEXT
  5211.  11h    CAPS
  5212.  12h    ANSI
  5213.  13h    TRAPPER
  5214.  14h    EATMEM
  5215.  15h    WPJOKE
  5216.  16h    SHOWDOS
  5217.  17h    LOGINTS
  5218.  18h    BLANKVGA
  5219.  19h    SWAPEXEC
  5220.  1Ah    SHELL
  5221.  1Bh    TSRGAMES
  5222.  
  5223. Format of Kingswood TSR modules:
  5224. Offset    Size    Description    (Table 1363)
  5225.  00h  4 BYTEs    signature "FTSR"
  5226.  04h    WORD    segment address of this module (used to check validity)
  5227.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  5228.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  5229.         (usually only a PSP if file access is required)
  5230.      5N BYTEs    interrupt list (see #1364)
  5231.     BYTE    FFh terminator
  5232.  
  5233. Format of Kingswood TSR interrupt list entry:
  5234. Offset    Size    Description    (Table 1364)
  5235.  00h    BYTE    interrupt number (00h-FEh)
  5236.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  5237.  03h    WORD    offset within segment of begin of interrupt handler code
  5238. --------t-2F39--BL01-------------------------
  5239. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  5240.     AH = 39h
  5241.     BL = 01h
  5242.     AL = TSR ID number (01h-FFh) (see #1362)
  5243. Return: AL = status
  5244.         00h not ready to be removed
  5245.         FFh resident module may be removed by deassigning the interrupts
  5246.           hooked by the TSR and deallocating the TSR's memory block
  5247.     AH,BX,CX,DX,ES may be destroyed
  5248. SeeAlso: AX=3900h,AH=39h/BL=00h
  5249. --------t-2F39-------------------------------
  5250. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  5251.     AH = 39h
  5252.     BL = function number (02h-FFh)
  5253.     AL = TSR ID number (01h-FFh) (see #1362)
  5254.     CX,DX,SI,DI,DS,ES may contain parameters
  5255.     BH reserved for use by the function dispatcher
  5256. Return: as appropriate for the called function
  5257. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  5258. --------r-2F3901BL02-------------------------
  5259. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  5260.     AX = 3901h
  5261.     BL = 02h
  5262. Return: AX = error code (0000h if successful)
  5263.     SI,DI,DS,ES preserved
  5264. Notes:    opens the next TSR window on top of any others.     Only three
  5265.       TSR windows can be opened at any one time.  The three windows
  5266.       are all 40x11 characters, partly overlapping.
  5267. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  5268. --------r-2F3901BL03-------------------------
  5269. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  5270.     AX = 3901h
  5271.     BL = 03h
  5272. Return: AX = error code (0000h if successful)
  5273.     SI,DI,DS,ES preserved
  5274. Notes:    Hide any visible TSR windows from view.
  5275. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  5276. --------r-2F3901BL04-------------------------
  5277. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  5278.     AX = 3901h
  5279.     BL = 04h
  5280. Return: AX = error code (0000h if successful)
  5281.     SI,DI,DS,ES preserved
  5282. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  5283. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  5284. --------r-2F3901BL05-------------------------
  5285. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  5286.     AX = 3901h
  5287.     BL = 05h
  5288. Return: AX = error code (0000h if successful)
  5289.     SI,DI,DS,ES preserved
  5290. Notes:    Close the last opened TSR window.
  5291. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5292. --------r-2F3901BL06-------------------------
  5293. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  5294.     AX = 3901h
  5295.     BL = 06h
  5296.     DS:SI -> title string
  5297. Return: AX = error code (0000h if successful)
  5298.     SI,DI,DS,ES preserved
  5299. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5300. --------r-2F3901BL07-------------------------
  5301. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  5302.     AX = 3901h
  5303.     BL = 07h
  5304.     CH = Y coordinate (0-10)
  5305.     CL = X coordinate (0-39)
  5306. Return: AX = error code (0000h if successful)
  5307.     SI,DI,DS,ES preserved
  5308. Note:    the hardware cursor is always disabled when a TSR window is opened;
  5309.       this call only sets a text position
  5310. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  5311. --------r-2F3901BL08-------------------------
  5312. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  5313.     AX = 3901h
  5314.     BL = 08h
  5315.     DS:SI -> string
  5316. Return: AX = error code (0000h if successful)
  5317.     SI,DI,DS,ES preserved
  5318. Notes:    The text is not clipped.
  5319.     This routine understands Tab, NewLine and Carriage Return
  5320. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5321. --------r-2F3901BL09-------------------------
  5322. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  5323.     AX = 3901h
  5324.     BL = 09h
  5325.     CL = scroll direction: 01h up, FFh down, 00h clear window
  5326. Return: AX = error code (0000h if successful)
  5327.     SI,DI,DS,ES preserved
  5328. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5329. --------r-2F3901BL0A-------------------------
  5330. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  5331.     AX = 3901h
  5332.     BL = 0Ah
  5333.     DX = sound divisor, or 0 for silence.
  5334.          (divide 1843200 by required frequency to get value for DX)
  5335.     CL = sound length in 18.2 Hz clock ticks
  5336. Return: AX = error code (0000h if successful)
  5337.     SI,DI,DS,ES preserved
  5338. SeeAlso: AH=39h/BL=00h
  5339. --------r-2F3901BL0B-------------------------
  5340. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  5341.     AX = 3901h
  5342.     BL = 0Bh
  5343.     CL = number of users increment: +1 if adding a new user
  5344.                     -1 if removing a user
  5345. Return: AX = error code (0000h if successful)
  5346.     SI,DI,DS,ES preserved
  5347. Note:    the TSR windows resident module may only be removed when the internal
  5348.       user count is zero
  5349. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5350. --------V-2F3912BL03-------------------------
  5351. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  5352.     AX = 3912h
  5353.     BL = 03h
  5354.     CL = new mode (00h fast, FFh BIOS)
  5355. Return: AL = old compatibility mode
  5356.     SI,DI,DS,ES preserved
  5357. SeeAlso: AX=3900h,AX=3912h/BL=04h
  5358. --------V-2F3912BL04-------------------------
  5359. INT 2F - Kingswood ANSI display driver - SET FLAGS
  5360.     AX = 3912h
  5361.     BL = 04h
  5362.     CL = new flags (see #1365)
  5363. Return: AL = old flags
  5364.     SI,DI,DS,ES preserved
  5365. SeeAlso: AX=3900h,AX=3912h/BL=03h
  5366.  
  5367. Bitfields for Kingswood ANSI flags:
  5368. Bit(s)    Description    (Table 1365)
  5369.  0    do not wrap at end of line
  5370.  1    wait for beeps to end before displaying next character
  5371.  2    do not use graphics cursor
  5372. --------W-2F4000-----------------------------
  5373. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  5374.     AX = 4000h
  5375. Return: AL = video virtualization (see #1366)
  5376. Note:    this function is used by display drivers to find out what capabilities
  5377.       exist for the VDD driver and also trigger the VDD driver to call
  5378.       functions 4005h and 4006h.  This function also gives the Video Driver
  5379.       hardware access to the video registers.
  5380.  
  5381. (Table 1366)
  5382. Values for Windows video virtualization:
  5383.  01h    does not virtualize video access
  5384.  02h    virtualizes the video when in text mode
  5385.  03h    virtualizes the video when in text mode or single plane graphics modes
  5386.  04h    virtualizes the video when in text mode, single plane graphics modes,
  5387.       and VGA multiplane modes
  5388.  FFh    virtualizes the video fully
  5389. --------O-2F4001-----------------------------
  5390. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  5391.     AX = 4001h
  5392. Note:    called by OS/2 when the DOS box is about to be placed in the background
  5393.       and the video driver should save any necessary state
  5394. SeeAlso: AX=4002h,AX=4005h
  5395. --------O-2F4002-----------------------------
  5396. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  5397.     AX = 4002h
  5398. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  5399.       and the video driver should restore the previously-saved state
  5400. SeeAlso: AX=4001h,AX=4006h
  5401. --------W-2F4003-----------------------------
  5402. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  5403.     AX = 4003h
  5404. Note:    This critical section must be exited within 1 second.
  5405. SeeAlso: AX=4004h
  5406. --------W-2F4004-----------------------------
  5407. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  5408.     AX = 4004h
  5409. SeeAlso: AX=4003h
  5410. --------W-2F4005-----------------------------
  5411. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  5412.     AX = 4005h
  5413. Note:    called by Windows when the DOS box is about to be placed in the
  5414.       background and the video driver should save any necessary state
  5415.       information (this may be called only in Standard mode)
  5416. SeeAlso: AX=4001h,AX=4006h
  5417. --------W-2F4006-----------------------------
  5418. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  5419.     AX = 4006h
  5420. Note:    called by Windows when the DOS box is about to be placed in the
  5421.       foreground and the video driver should restore any necessary state
  5422.       information (this may be called only in Standard mode)
  5423. SeeAlso: AX=4002h,AX=4005h
  5424. --------W-2F4007-----------------------------
  5425. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  5426.     AX = 4007h
  5427. Note:    used by Windows Standard mode
  5428. --------O-2F4010-----------------------------
  5429. INT 2F - OS/2 v2.0+ - INSTALLATION CHECK / GET VERSION
  5430.     AX = 4010h
  5431. Return: AX = 4010h if OS/2 not installed
  5432.     AX = OS/2 version if installed
  5433. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  5434. --------E-2F4040-----------------------------
  5435. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  5436.     AX = 4040h
  5437. Return: BX:CX -> ???
  5438. --------N-2F4100-----------------------------
  5439. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  5440.     AX = 4100h
  5441. Return: CF clear if successful
  5442.         AL = FFh
  5443.     CF set on error
  5444.         AX = ???
  5445. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  5446.     LAN Manager enhanced mode adds features beyond the standard redirector
  5447.       file/printer services
  5448. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  5449. --------N-2F4103-----------------------------
  5450. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5451.     AX = 4103h
  5452. Return: ???
  5453. SeeAlso: AX=4100h,AX=4104h
  5454. --------N-2F4104-----------------------------
  5455. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5456.     AX = 4104h
  5457. Return: ???
  5458. SeeAlso: AX=4100h,AX=4103h
  5459. --------N-2F42-------------------------------
  5460. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5461.     AH = 42h
  5462.     ???
  5463. Return: ???
  5464. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5465.       file/printer services
  5466. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  5467. --------m-2F4300-----------------------------
  5468. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  5469.     AX = 4300h
  5470. Return: AL = 80h XMS driver installed
  5471.     AL <> 80h no driver
  5472. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5473.       above 640K
  5474.     this installation check DOES NOT follow the format used by other
  5475.       software
  5476. SeeAlso: AX=4310h
  5477. Index:    installation check;XMS version 2+
  5478. --------m-2F4308-----------------------------
  5479. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  5480.     AX = 4308h
  5481. Return: AL = 43h if supported
  5482.         BL = A20 handler number (value of /MACHINE:nn switch)
  5483.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  5484. Note:    if the A20 handler number returned in BL is 00h, an external handler
  5485.       is being used (see AX=4330h)
  5486. SeeAlso: AX=4309h,AX=4330h
  5487. --------m-2F4309-----------------------------
  5488. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  5489.     AX = 4309h
  5490. Return: AL = 43h if function supported
  5491.         ES:BX -> XMS handle table (see #1367)
  5492. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  5493. SeeAlso: AX=4308h
  5494.  
  5495. Format of XMS handle table:
  5496. Offset    Size    Description    (Table 1367)
  5497.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  5498.  01h    BYTE    size of one handle descriptor
  5499.  02h    WORD    number of handles (default = 20h)
  5500.  04h    DWORD    pointer to XMS handle array (see #1368)
  5501. SeeAlso: #1401
  5502.  
  5503. Format of XMS handle descriptor [array]:
  5504. Offset    Size    Description    (Table 1368)
  5505.  00h    BYTE    flag
  5506.         01h=free, 02h=used, 04h=in pool but not associated with any EMB
  5507.  01h    BYTE    lock count (00h=unlocked)
  5508.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  5509.  06h    DWORD    size of XMS block in KB
  5510. --------m-2F4310-----------------------------
  5511. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  5512.     AX = 4310h
  5513. Return: ES:BX -> driver entry point (see #1369,#1370,#1380,#1398)
  5514. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5515.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  5516.       the driver entry point
  5517. SeeAlso: AX=4300h,AX=4310h"Cloaking"
  5518.  
  5519. Format of XMS driver entry point:
  5520. Offset    Size    Description    (Table 1369)
  5521.  00h  5 BYTEs    jump to actual handler
  5522.         either short jump (EBh XXh) followed by three NOPs or
  5523.           far jump (EAh XXXX:XXXX) to a program which has hooked itself
  5524.           into the XMS driver chain
  5525. Note:    to hook into the XMS driver chain, a program should follow the chain of
  5526.       far jumps until it reaches the short jump of the driver at the end
  5527.       of the chain; this short jump is to be replaced with a far jump to
  5528.       the new handler's entry point, which should contain a short jump
  5529.       followed by three NOPs.  The new handler must return to the address
  5530.       pointed at by the short jump which was overwritten.  Using this
  5531.       method, the new handler becomes the first to see every XMS request.
  5532.  
  5533. (Table 1370)
  5534. Call the XMS driver "Get XMS version number" function with:
  5535.     AH = 00h
  5536. Return: AX = XMS version (in BCD, AH=major, AL=minor)
  5537.     BX = internal revision number (in BCD for HIMEM.SYS)
  5538.     DX = High Memory Area (HMA) state
  5539.         0001h HMA (1M to 1M + 64K) exists
  5540.         0000h HMA does not exist
  5541.  
  5542. (Table 1371)
  5543. Call the XMS driver "Request High Memory Area" function with:
  5544.     AH = 01h
  5545.     DX = memory in bytes (for TSR or device drivers)
  5546.         FFFFh if application program
  5547. Return: AX = status
  5548.         0001h success
  5549.         0000h failure
  5550.         BL = error code (80h,81h,90h,91h,92h) (see #1399)
  5551. Note:    HIMEM.SYS will fail function 01h with error code 91h if AL=40h and
  5552.       DX=KB free extended memory returned by last call of function 08h
  5553.  
  5554. (Table 1372)
  5555. Call the XMS driver "Release High Memory Area" function with:
  5556.     AH = 02h
  5557. Return: AX = status
  5558.         0001h success
  5559.         0000h failure
  5560.         BL = error code (80h,81h,90h,93h) (see #1399)
  5561.  
  5562. (Table 1373)
  5563. Call the XMS driver "Global enable A20, for using the HMA" function with:
  5564.     AH = 03h
  5565. Return: AX = status
  5566.         0001h success
  5567.         0000h failure
  5568.         BL = error code (80h,81h,82h) (see #1399)
  5569.  
  5570. (Table 1374)
  5571. Call the XMS driver "Global disable A20" function with:
  5572.     AH = 04h
  5573. Return: AX = status
  5574.         0001h success
  5575.         0000h failure
  5576.         BL = error code (80h,81h,82h,94h) (see #1399)
  5577.  
  5578. (Table 1375)
  5579. Call the XMS driver "Local enable A20" function with:
  5580.     AH = 05h
  5581. Return: AX = status
  5582.         0001h success
  5583.         0000h failure
  5584.         BL = error code (80h,81h,82h) (see #1399)
  5585. Note:    this function is used for direct access to extended memory
  5586.  
  5587. (Table 1376)
  5588. Call the XMS driver "Local disable A20" function with:
  5589.     AH = 06h
  5590. Return: AX = status
  5591.         0001h success
  5592.         0000h failure
  5593.         BL = error code (80h,81h,82h,94h) (see #1399)
  5594.  
  5595. (Table 1377)
  5596. Call the XMS driver "Query A20 state" function with:
  5597.     AH = 07h
  5598. Return: AX = status
  5599.         0001h enabled
  5600.         0000h disabled
  5601.         BL = error code (00h,80h,81h) (see #1399)
  5602.  
  5603. (Table 1378)
  5604. Call the XMS driver "Query free extended memory" function with:
  5605.     AH = 08h
  5606.     BL = 00h (some implementations leave BL unchanged on success)
  5607. Return: AX = size of largest extended memory block in KB
  5608.     DX = total extended memory in KB
  5609.     BL = error code (00h,80h,81h,A0h) (see #1399)
  5610. Note:    this function does not include the HMA in the returned memory sizes
  5611.  
  5612. (Table 1379)
  5613. Call the XMS driver "Allocate extended memory block" function with:
  5614.     AH = 09h
  5615.     DX = Kbytes needed
  5616. Return: AX = status
  5617.         0001h success
  5618.         DX = handle for memory block
  5619.         0000h failure
  5620.         BL = error code (80h,81h,A0h) (see #1399)
  5621. SeeAlso: #1396
  5622.  
  5623. (Table 1380)
  5624. Call the XMS driver "Free extended memory block" function with:
  5625.     AH = 0Ah
  5626.     DX = handle of block to free
  5627. Return: AX = status
  5628.         0001h success
  5629.         0000h failure
  5630.         BL = error code (80h,81h,A2h,ABh) (see #1399)
  5631. SeeAlso: #1379,#1396
  5632.  
  5633. (Table 1381)
  5634. Call the XMS driver "Move extended memory block" function with:
  5635.     AH = 0Bh
  5636.     DS:SI -> EMM structure (see #1400)
  5637. Return: AX = status
  5638.         0001h success
  5639.         0000h failure
  5640.         BL = error code (80h-82h,A3h-A9h) (see #1399)
  5641. Note:    if either handle in the EMM structure is 0000h, the corresponding
  5642.       offset is considered to be an absolute segment:offset address in
  5643.       directly addressable memory
  5644.  
  5645. (Table 1382)
  5646. Call the XMS driver "Lock extended memory block" function with:
  5647.     AH = 0Ch
  5648.     DX = handle of block to lock
  5649. Return: AX = status
  5650.         0001h success
  5651.         DX:BX = 32-bit linear address of locked block
  5652.         0000h failure
  5653.         BL = error code (80h,81h,A2h,ACh,ADh) (see #1399)
  5654. Note:    MS Windows 3.x rejects this function for handles allocated after
  5655.       Windows started
  5656.  
  5657. (Table 1383)
  5658. Call the XMS driver "Unlock extended memory block" function with:
  5659.     AH = 0Dh
  5660.     DX = handle of block to unlock
  5661. Return: AX = status
  5662.         0001h success
  5663.         0000h failure
  5664.         BL = error code (80h,81h,A2h,AAh) (see #1399)
  5665.  
  5666. (Table 1384)
  5667. Call the XMS driver "Get handle information" function with:
  5668.     AH = 0Eh
  5669.     DX = handle for which to get info
  5670. Return: AX = status
  5671.         0001h success
  5672.         BH = block's lock count
  5673.         BL = number of free handles left
  5674.         DX = block size in KB
  5675.         0000h failure
  5676.         BL = error code (80h,81h,A2h) (see #1399)
  5677. BUG:    MS Windows 3.10 acts as though unallocated handles are in use
  5678. Note:    MS Windows 3.00 has problems with this call
  5679.  
  5680. (Table 1385)
  5681. Call the XMS driver "Reallocate extended memory block" function with:
  5682.     AH = 0Fh
  5683.     DX = handle of block
  5684.     BX = new size of block in KB
  5685. Return: AX = status
  5686.         0001h success
  5687.         0000h failure
  5688.         BL = error code (80h,81h,A0h-A2h,ABh) (see #1399)
  5689.  
  5690. (Table 1386)
  5691. Call the XMS driver "Request upper memory block" function with:
  5692.     AH = 10h
  5693.     DX = size of block in paragraphs
  5694. Return: AX = status
  5695.         0001h success
  5696.         BX = segment address of UMB
  5697.         DX = actual size of block
  5698.         0000h failure
  5699.         BL = error code (80h,B0h,B1h) (see #1399)
  5700.         DX = largest available block
  5701. Notes:    Upper Memory consists of non-EMS memory between 640K and 1024K
  5702.     the XMS driver need not implement functions 10h through 12h to be
  5703.       considered compliant with the standard
  5704.  
  5705. (Table 1387)
  5706. Call the XMS driver "Release upper memory block" function with:
  5707.     AH = 11h
  5708.     DX = segment address of UMB to release
  5709. Return: AX = status
  5710.         0001h success
  5711.         0000h failure
  5712.         BL = error code (80h,B2h) (see #1399)
  5713. Note:    the XMS driver need not implement functions 10h through 12h to be
  5714.       considered compliant with the standard
  5715.  
  5716. (Table 1388)
  5717. Call the XMS v3.0+ driver "Reallocate upper memory block" function with:
  5718.     AH = 12h
  5719.     DX = segment address of UMB to resize
  5720.     BX = new size of block in paragraphs
  5721. Return: AX = status
  5722.         0001h success
  5723.         0000h failure
  5724.         BL = error code (80h,B0h,B2h) (see #1399)
  5725.         DX = maximum available size (RM386)
  5726. Note:    the XMS driver need not implement functions 10h through 12h to be
  5727.       considered compliant with the standard
  5728.  
  5729. (Table 1389)
  5730. Call the QEMM v5.11 "???" function with:
  5731.     AH = 34h  (QEMM 5.11 only, undocumented)
  5732.     ???
  5733. Return: ???
  5734.  
  5735. (Table 1390)
  5736. Call the QEMM v5.11 "???" function with:
  5737.     AH = 44h  (QEMM 5.11 only, undocumented)
  5738.     ???
  5739. Return: ???
  5740.  
  5741. (Table 1391)
  5742. Call the Netroom RM386 v6.00 "Reallocate upper memory block" function with:
  5743.     AH = 80h
  5744.     DX = segment address of UMB to resize
  5745.     BX = new size of block in paragraphs
  5746. Return: AX = status
  5747.         0001h success
  5748.         0000h failure
  5749.         BL = error code (80h,B0h,B2h) (see #1399)
  5750.         DX = maximum available size
  5751. Note:    this function is identical to function 12h
  5752.  
  5753. (Table 1392)
  5754. Call the Netroom RM386 v6.00 "re-enable HMA allocation" function with:
  5755.     AH = 81h
  5756. Return: AX = 0001h (success)
  5757.  
  5758. (Table 1393)
  5759. Call the Netroom RM386 v6.00 "Create new UMB entry" function with:
  5760.     AH = 83h
  5761.     BX = segment of high-memory block
  5762.     DX = first page of start of block
  5763.     CX = number of consecutive pages in block
  5764.     DI = start of UMB in block
  5765. Return: AX = 0001h (success)
  5766.     DI = segment of first high-DOS block
  5767. Note:    the new UMB is not linked into the high-memory chain
  5768.  
  5769. (Table 1394)
  5770. Call the Netroom RM386 v6.00 "Get all XMS handles info" function with:
  5771.     AH = 84h
  5772.     CX = size of buffer for handle info
  5773.     ES:DI -> buffer for handle info (see #1401)
  5774. Return: AX = 0001h (success)
  5775.     DX = current number of allocated XMS handles
  5776.  
  5777. (Table 1395)
  5778. Call the XMS v3.0 driver "Query free extended memory" function with:
  5779.     AH = 88h
  5780. Return: EAX = largest block of extended memory, in KB
  5781.     BL = status (00h,80h,81h,A0h) (see #1399)
  5782.     ECX = physical address of highest byte of memory
  5783.         (valid even on error codes 81h and A0h)
  5784.     EDX = total Kbytes of extended memory (0 if status A0h)
  5785. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5786.       are called
  5787. SeeAlso: #1378,#1396
  5788.  
  5789. (Table 1396)
  5790. Call the XMS v3.0 driver "Allocate any extended memory" function with:
  5791.     AH = 89h
  5792.     EDX = Kbytes needed
  5793. Return: AX = status
  5794.         0001h success
  5795.         DX = handle for allocated block (free with AH=0Ah) (see #1380)
  5796.         0000h failure
  5797.         BL = status (80h,81h,A0h,A1h,A2h) (see #1399)
  5798. SeeAlso: #1379,#1395
  5799.  
  5800. (Table 1397)
  5801. Call the XMS v3.0 driver "Get extended EMB handle information" function with:
  5802.     AH = 8Eh
  5803.     DX = handle
  5804. Return: AX = status
  5805.         0001h success
  5806.         BH = block's lock count
  5807.         CX = number of free handles left
  5808.         EDX = block size in KB
  5809.         0000h failure
  5810.         BL = status (80h,81h,A2h) (see #1399)
  5811. BUG:    MS-DOS 6.0 HIMEM.SYS leaves CX unchanged
  5812.  
  5813. (Table 1398)
  5814. Call the XMS v3.0 driver "Reallocate any extended memory block" function with:
  5815.     AH = 8Fh
  5816.     DX = unlocked handle
  5817.     EBX = new size in KB
  5818. Return: AX = status
  5819.         0001h success
  5820.         0000h failure
  5821.         BL = status (80h,81h,A0h-A2h,ABh) (see #1399)
  5822. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5823.       are called
  5824.  
  5825. (Table 1399)
  5826. Values for XMS error code returned in BL:
  5827.  00h    successful
  5828.  80h    function not implemented
  5829.  81h    Vdisk was detected
  5830.  82h    an A20 error occurred
  5831.  8Eh    a general driver error
  5832.  8Fh    unrecoverable driver error
  5833.  90h    HMA does not exist or is not managed by XMS provider
  5834.  91h    HMA is already in use
  5835.  92h    DX is less than the /HMAMIN= parameter
  5836.  93h    HMA is not allocated
  5837.  94h    A20 line still enabled
  5838.  A0h    all extended memory is allocated
  5839.  A1h    all available extended memory handles are allocated
  5840.  A2h    invalid handle
  5841.  A3h    source handle is invalid
  5842.  A4h    source offset is invalid
  5843.  A5h    destination handle is invalid
  5844.  A6h    destination offset is invalid
  5845.  A7h    length is invalid
  5846.  A8h    move has an invalid overlap
  5847.  A9h    parity error occurred
  5848.  AAh    block is not locked
  5849.  ABh    block is locked
  5850.  ACh    block lock count overflowed
  5851.  ADh    lock failed
  5852.  B0h    only a smaller UMB is available
  5853.  B1h    no UMB's are available
  5854.  B2h    UMB segment number is invalid
  5855.  
  5856. Format of EMM structure:
  5857. Offset    Size    Description    (Table 1400)
  5858.  00h    DWORD    number of bytes to move (must be even)
  5859.  04h    WORD    source handle
  5860.  06h    DWORD    offset into source block
  5861.  0Ah    WORD    destination handle
  5862.  0Ch    DWORD    offset into destination block
  5863. Notes:    if source and destination overlap, only forward moves (source base
  5864.       less than destination base) are guaranteed to work properly
  5865.     if either handle is zero, the corresponding offset is interpreted
  5866.       as a real-mode address referring to memory directly addressable
  5867.       by the processor
  5868.  
  5869. Format of XMS handle info [array]:
  5870. Offset    Size    Description    (Table 1401)
  5871.  00h    BYTE    handle
  5872.  01h    BYTE    lock count
  5873.  02h    DWORD    handle size
  5874.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  5875. SeeAlso: #1367
  5876. --------m-2F4310-----------------------------
  5877. INT 2F - Cloaking - REAL-MODE API
  5878.     AX = 4310h
  5879. Return: ES:BX -> driver entry point (see #1369,#1402,#1403,#1404,#1405)
  5880. SeeAlso: AX=4310h"XMS"
  5881.  
  5882. (Table 1402)
  5883. Call the Cloaking v1.01 "Client Registration" function with:
  5884.     AH = 7Eh
  5885.     BX = subfunction
  5886.         0000h get client registration count
  5887.         0001h get client registration structures
  5888.         ES:DI -> buffer for registration structures
  5889. Return: AX = status
  5890.         0000h failed
  5891.         0001h successful
  5892.         ---subfunction 00h---
  5893.         BX = size of client structure in bytes
  5894.         CX = number of clients installed
  5895.         ---subfunction 01h---
  5896.         ES:DI buffer filled
  5897. SeeAlso: #1403,#1405,INT 2C/AX=0033h
  5898.  
  5899. (Table 1403)
  5900. Call the Cloaking v1.01 "Verify Cloaking Host" function with:
  5901.     AH = 7Fh
  5902. Return: AX = status
  5903.         0000h failed
  5904.         0001h (successful) if installed
  5905.         BX = version (0101h for v1.01)
  5906.         CX = flags
  5907.             bit 0: host is VCPI-based
  5908.         DS:DX -> ASCIZ Cloaking host signature
  5909.             "CLOAKING.EXE"0, followed by a far-call entry point to
  5910.               uninstall host (see #1404) in Helix's CLOAKING.EXE
  5911. SeeAlso: #1402,#1405
  5912. Index:    installation check;Cloaking host|installation check;CLOAKING.EXE
  5913.  
  5914. (Table 1404)
  5915. Call the CLOAKING.EXE "Uninstall Host" function with:
  5916. Return:    AX = 4F4Bh ('OK') if successfully uninstalled protected-mode code
  5917.  
  5918. (Table 1405)
  5919. Call the Cloaking "Start Protected-Mode Client" function with:
  5920.     AH = 82h
  5921.     DX = XMS handle of locked block containing protected-mode code
  5922.     CL = code size (00h 16-bit, else 32-bit)
  5923.     ESI, EDI = parameters to pass to protected-mode code
  5924. Return: AX = status
  5925.         nonzero success
  5926.         0000h failed
  5927.         BL = error code (A2h,B0h) (see #1399)
  5928. Notes:    this function calls a user initialization function at offset 0 in
  5929.       the XMS memory block (see #1406)
  5930.     supported by Helix's RM386 v6.00 and Helix's CLOAKING.EXE
  5931. SeeAlso: #1402,#1403
  5932.  
  5933. (Table 1406)
  5934. Values user initialization function is called with:
  5935.     EBX = physical address of block's start
  5936.     ESI = user data from function 82h call
  5937.     EDI = user data from function 82h call
  5938.     CS = code selector for XMS block at EBX (16-bit or 32-bit)    
  5939.     DS = data selector for XMS block, starting at EBX
  5940.     ES = selector for V86 memory access to full real-mode 1088K
  5941.     GS = selector for full 4G flat address space
  5942.     SS:ESP -> stack provided by host
  5943. Return: via 32-bit FAR return
  5944. Note:    the initialization function may call any protected-mode Cloaking
  5945.       service; it should store the values of DS, ES, and GS for future
  5946.       reference
  5947. --------m-2F4320-----------------------------
  5948. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  5949.     AX = 4320h
  5950.     ???
  5951. Return: ???
  5952. --------m-2F4330-----------------------------
  5953. INT 2F CU - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  5954.     AX = 4330h
  5955. Return: AL = 80h if external A20 handler provided
  5956.         ES:BX -> external A20 handler (see #1407)
  5957.         CL = A20 detection support
  5958.         00h handler is unable to report A20 state
  5959.         01h handler supports function 0002h to report A20 state
  5960. Note:    HIMEM.SYS calls this function to allow an external program to provide
  5961.       an A20 handler (i.e. to support a machine not supported by HIMEM
  5962.       itself)
  5963. SeeAlso: AX=4308h,AX=4310h
  5964.  
  5965. (Table 1407)
  5966. Call parameters for external A20 handler are:
  5967.     AX = function
  5968.         0000h disable A20
  5969.         0001h enable A20
  5970.         0002h get A20 state
  5971. Return: AX = status (functions 0000h and 0001h)
  5972.         0000h failure
  5973.         0001h successful
  5974.     AX = A20 state (function 0002h)
  5975.         0000h disabled
  5976.         0001h enabled
  5977. Note:    HIMEM.SYS only calls function 0002h if the returned CL indicated that
  5978.       the handler supports the call
  5979. --------E-2F43E0BX0000-----------------------
  5980. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - INSTALLATION CHECK
  5981.     AX = 43E0h
  5982.     BX = 0000h
  5983.     CX = 4450h ('DP')
  5984.     DX = 4D53h ('MS')
  5985. Return: AX = 0000h if installed
  5986.         CF clear
  5987.         ES:DI -> server structure (see #1408)
  5988.         ES:BX -> registration structure (pre-NWDOS 7 beta spec) (see #1410)
  5989. Note:    the DPMS 1.0 server included with the original release of Novell DOS
  5990.       7.0 supports both the beta and 1.0 specification, setting ES:BX even
  5991.       if CX and DX are not as specified on entry (since the beta
  5992.       specification did not use those registers).  However, the DPMS 1.1
  5993.       server included with the March 1994 update does not support the beta
  5994.       specification
  5995. SeeAlso: AX=43E1h,AX=43E2h,AX=43E3h,INT 2F/AX=1687h
  5996. Index:    signature strings;DPMS
  5997.  
  5998. Format of DPMS 1.0 server structure:
  5999. Offset    Size    Description    (Table 1408)
  6000.  00h  4 BYTEs    signature string "DPMS"
  6001.  04h  2 BYTEs    DPMS version (major,minor)
  6002.  06h  8 BYTEs    blank-padded server OEM name
  6003.  0Eh  2 BYTEs    OEM server version (major,minor)
  6004.  10h    WORD    DPMS flags (see #1409)
  6005.  12h    BYTE    CPU type
  6006.         (02h = 286, 03h = 386 or higher, higher values allowed)
  6007.  
  6008. Bitfields for DPMS flags:
  6009. Bit(s)    Description    (Table 1409)
  6010.  0    fast processor reset available (286 only)
  6011.  1    DPMS server is enabled
  6012.  2    memory is remapped
  6013.  3-15    reserved (undefined)
  6014.  
  6015. Format of beta DPMS registration structure:
  6016. Offset    Size    Description    (Table 1410)
  6017.  00h    DWORD    real-mode API entry point (see #1412)
  6018.  04h    DWORD    16-bit protected-mode API entry point (see #1412)
  6019.  08h  8 BYTEs    reserved (0)
  6020.  10h  8 BYTEs    blank-padded server OEM name
  6021.  18h    WORD    flags
  6022.         bit 0: fast processor reset available (286 only)
  6023.         bits 1-15 reserved (undefined)
  6024.  1Ah  2 BYTEs    DPMS version (major,minor)
  6025.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  6026. ----------2F43E1-----------------------------
  6027. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - REGISTER CLIENT
  6028.     AX = 43E1h
  6029.     CX = required protected-mode stack size in bytes
  6030.     ES:DI -> DPMS client interface structure (see #1411)
  6031. Return: AX = 0000h if supported
  6032.        CF clear
  6033.        ES:DI buffer filled with API entry point code from offset 0Ah
  6034. Note:    the client is allowed to copy the returned API code to any location in
  6035.       memory, and need not keep the three code fields together
  6036. SeeAlso: AX=43E0h,AX=43E2h,AX=43E3h
  6037.  
  6038. Format of DPMS client interface structure:
  6039. Offset    Size    Description    (Table 1411)
  6040.  00h    WORD    0000h (structure version / flags)
  6041.  02h  8 BYTEs    blank-padded client name
  6042.  0Ah  7 BYTEs    real/virtual-86 mode API code (see #1412)
  6043.  11h    BYTE    space for return instruction
  6044.         set to C3h for near return, CBh for far return
  6045.  12h  7 BYTEs    16-bit protected-mode API code (see #1412)
  6046.  19h    BYTE    space for return instruction
  6047.         set to C3h for near return, CBh for far return
  6048.  1Ah  9 BYTEs    32-bit protected-mode API code (see #1412)
  6049.  23h    BYTE    space for return instruction
  6050.         set to C3h for near return, CBh for far return
  6051. Note:    the DPMS server fills the return opcode bytes with zeros and DPMS
  6052.       requests will thus crash the system unless the application
  6053.       explicitly sets them (some early versions set them to C3h by
  6054.       default, but one should not rely on that)
  6055.  
  6056. (Table 1412)
  6057. Call DPMS entry point with:
  6058.     AX = 0000h unregister client from server
  6059.  ---control transfer functions---
  6060.     AX = 0100h call protected-mode procedure
  6061.         CX = number of words of stack to copy
  6062.         ES:(E)DI -> callup/down register structure (see #1414)
  6063.         Return: CF clear if successful
  6064.             CF set on error
  6065.                 AX = error code (see #1413)
  6066.     AX = 0101h call real-mode procedure (RETF return)
  6067.         CX = number of words of stack to copy
  6068.         ES:(E)DI -> callup/down register structure (see #1414)
  6069.         Return: CF clear if successful
  6070.             CF set on error
  6071.                 AX = error code (see #1413)
  6072.     AX = 0102h call real-mode procedure (IRET return)
  6073.         CX = number of words of stack to copy
  6074.         ES:(E)DI -> callup/down register structure (see #1414)
  6075.         Return: CF clear if successful
  6076.             CF set on error
  6077.                 AX = error code (see #1413)
  6078.     AX = 0103h call real-mode interrupt handler
  6079.         BL = interrupt number
  6080.         CX = number of words of stack to copy
  6081.         ES:(E)DI -> callup/down register structure (see #1414)
  6082.         Return: CF clear if successful
  6083.             CF set on error
  6084.                 AX = error code (see #1413)
  6085.     AX = 0104h register default protected mode procedure
  6086.         ES:(E)DI -> default register structure (see #1415)
  6087.         Return: CF clear if successful
  6088.             CF set on error
  6089.                 AX = error code (see #1413)
  6090.     AX = 0105h register default real-mode procedure (RETF return)
  6091.         ES:(E)DI -> default register structure (see #1415)
  6092.         Return: CF clear if successful
  6093.             CF set on error
  6094.                 AX = error code (see #1413)
  6095.         Note:    the procedure will be called from 16-bit prot. mode
  6096.     AX = 0106h register default real-mode procedure (IRET return)
  6097.         ES:(E)DI -> default register structure (see #1415)
  6098.         Return: CF clear if successful
  6099.             CF set on error
  6100.                 AX = error code (see #1413)
  6101.         Note:    the procedure will be called from 16-bit prot. mode
  6102.     AX = 0107h register default real-mode interrupt handler
  6103.         BL = interrupt number
  6104.         ES:(E)DI -> default register structure (see #1415)
  6105.         Return: CF clear if successful
  6106.             CF set on error
  6107.                 AX = error code (see #1413)
  6108.         Note:    the handler will be called from 16-bit protected mode
  6109.     AX = 0108h register default real-mode procedure (RETF return)
  6110.         ES:(E)DI -> default register structure (see #1415)
  6111.         Return: CF clear if successful
  6112.             CF set on error
  6113.                 AX = error code (see #1413)
  6114.         Note:    the procedure will be called from 32-bit prot. mode
  6115.     AX = 0109h register default real-mode procedure (IRET return)
  6116.         ES:(E)DI -> default register structure (see #1415)
  6117.         Return: CF clear if successful
  6118.             CF set on error
  6119.                 AX = error code (see #1413)
  6120.         Note:    the procedure will be called from 32-bit prot. mode
  6121.     AX = 010Ah register default real-mode interrupt handler
  6122.         BL = interrupt number
  6123.         ES:(E)DI -> default register structure (see #1415)
  6124.         Return: CF clear if successful
  6125.             CF set on error
  6126.                 AX = error code (see #1413)
  6127.         Note:    the handler will be called from 32-bit protected mode
  6128.  ---descriptor management---
  6129.     AX = 0200h allocate descriptors
  6130.         CX = number of descriptors to allocate
  6131.         Return: CF clear if successful
  6132.                 AX = selector for first descriptor allocated
  6133.             CF set on error
  6134.                 AX = error code (see #1413)
  6135.     AX = 0201h free a descriptor
  6136.         BX = selector for descriptor
  6137.         Return: CF clear if successful
  6138.             CF set on error
  6139.                 AX = error code (see #1413)
  6140.     AX = 0202h create alias descriptor
  6141.         BX = selector for descriptor to be aliased
  6142.         Return: CF clear if successful
  6143.                 AX = alias descriptor
  6144.             CF set on error
  6145.                 AX = error code (see #1413)
  6146.     AX = 0203h build alias to real-mode segment
  6147.         BX = descriptor
  6148.         CX = real-mode segment
  6149.         Return: CF clear if successful
  6150.             CF set on error
  6151.                 AX = error code (see #1413)
  6152.     AX = 0204h set descriptor base
  6153.         BX = descriptor
  6154.         CX:DX = base address
  6155.         Return: CF clear if successful
  6156.             CF set on error
  6157.                 AX = error code (see #1413)
  6158.     AX = 0205h set descriptor limit
  6159.         BX = descriptor
  6160.         CX = limit
  6161.         Return: CF clear if successful
  6162.             CF set on error
  6163.                 AX = error code (see #1413)
  6164.     AX = 0206h set descriptor type/attribute
  6165.         BX = descriptor
  6166.         CL = type
  6167.         CH = attribute
  6168.         Return: CF clear if successful
  6169.             CF set on error
  6170.                 AX = error code (see #1413)
  6171.     AX = 0207h get descriptor base
  6172.         BX = descriptor
  6173.         Return: CF clear if successful
  6174.                 CX:DX = base address
  6175.             CF set on error
  6176.                 AX = error code (see #1413)
  6177.  ---linear memory functions---
  6178.     AX = 0300h get size of largest free block of memory
  6179.         Return: CF clear if successful
  6180.                 BX:CX = size
  6181.             CF set on error
  6182.                 AX = error code (see #1413)
  6183.     AX = 0301h allocate block of extended memory
  6184.         BX:CX = required size
  6185.         Return: CF clear if successful
  6186.                 BX:CX = base address
  6187.                 SI:DI = handle
  6188.             CF set on error
  6189.                 AX = error code (see #1413)
  6190.     AX = 0302h free block of extended memory
  6191.         SI:DI = handle
  6192.         Return: CF clear if successful
  6193.             CF set on error
  6194.                 AX = error code (see #1413)
  6195.     AX = 0303h map linear memory
  6196.         ES:(E)DI -> DDS (see #1416)
  6197.         Return: CF clear if successful
  6198.                 BX:CX = base address
  6199.                 SI:DI = handle
  6200.             CF set on error
  6201.                 AX = error code (see #1413)
  6202.     AX = 0304h unmap linear memory
  6203.         SI:DI = handle
  6204.         Return: CF clear if successful
  6205.             CF set on error
  6206.                 AX = error code (see #1413)
  6207.     AX = 0305h get page table entries
  6208.         ESI = linear address
  6209.         (E)CX = count
  6210.         ES:(E)DI -> buffer for page table entries
  6211.         Return: CF clear if successful
  6212.                 ES:(E)DI buffer filled
  6213.             CF set on error
  6214.                 AX = error code (see #1413)
  6215.     AX = 0306h set page table entries
  6216.         EBX = linear memory handle
  6217.         ESI = linear address
  6218.         (E)CX = count
  6219.         ES:(E)DI -> buffer containing page table entries
  6220.         Return: CF clear if successful
  6221.             CF set on error
  6222.                 AX = error code (see #1413)
  6223.     AX = 0307h get largest mappable block size
  6224.         Return: CF clear if successful
  6225.                 BX:CX = size
  6226.             CF set on error
  6227.                 AX = error code (see #1413)
  6228.  ---miscellaneous---
  6229.     AX = 0400h relocate segment to extended memory
  6230.         ES:SI = base address
  6231.         CX = limit
  6232.         BL = type
  6233.         BH = attribute
  6234.         DX = selector or 0000h
  6235.         Return: CF clear if successful
  6236.                 AX = selector
  6237.                 BX:CX = new base address
  6238.                 SI:DI = handle
  6239.             CF set on error
  6240.                 AX = error code (see #1413)
  6241. Note:    the beta DPMS specification, which is still supported by the Novell
  6242.       DOS 7.0 DPMS host, only supported functions 0100h-0103h, 0200h-0207h,
  6243.       0300h-0304h, and 0400h
  6244.  
  6245. (Table 1413)
  6246. Values for DPMS error code:
  6247.  8000h    general error
  6248.  8001h    unsupported function
  6249.  8002h    unable to switch to protected mode
  6250.  8004h    no default stack defined
  6251.  8005h    unknown client
  6252.  8010h    resource unavailable
  6253.  8011h    descriptor unavailable
  6254.  8012h    linear memory unavailable
  6255.  8013h    physical memory unavailable
  6256.  8021h    invalid value
  6257.  8022h    invalid selector
  6258.  8023h    invalid handle
  6259.  8025h    invalid linear address
  6260.  
  6261. Format of DPMS callup/down register structure:
  6262. Offset    Size    Description    (Table 1414)
  6263.  00h    DWORD    EDI
  6264.  04h    DWORD    ESI
  6265.  08h    DWORD    EBP
  6266.  0Ch  4 BYTEs    reserved (0) (ESP, may be used by DPMS server)
  6267.  10h    DWORD    EBX
  6268.  14h    DWORD    EDX
  6269.  18h    DWORD    ECX
  6270.  20h    DWORD    EAX
  6271.  24h    DWORD    EIP
  6272.  28h    WORD    CS
  6273.  2Ah  2 BYTEs    reserved (0)
  6274.  2Ch    DWORD    EFLAGS
  6275.  30h    DWORD    ESP
  6276.  34h    WORD    SS
  6277.  36h  2 BYTEs    reserved (0)
  6278.  38h    WORD    ES
  6279.  3Ah  2 BYTEs    reserved (0)
  6280.  3Ch    WORD    DS
  6281.  3Eh  2 BYTEs    reserved (0)
  6282.  40h    WORD    FS
  6283.  42h  2 BYTEs    reserved (0)
  6284.  44h    WORD    GS
  6285.  46h  2 BYTEs    reserved (0)
  6286.  
  6287. Format of DPMS default register structure:
  6288. Offset    Size    Description    (Table 1415)
  6289.  00h    DWORD    EIP
  6290.  04h    WORD    CS
  6291.  06h  2 BYTEs    reserved (0)
  6292.  08h    WORD    number of words to copy from stack to stack
  6293.  0Ah    BYTE    (call) 00h
  6294.         (return) nonzero if call could not be made
  6295.  0Bh    BYTE    reserved (may be used by some servers)
  6296.  0Ch    DWORD    ESP
  6297.  10h    WORD    SS
  6298.  12h  2 BYTEs    reserved (0)
  6299.  14h    WORD    ES
  6300.  16h  2 BYTEs    reserved (0)
  6301.  18h    WORD    DS
  6302.  1Ah  2 BYTEs    reserved (0)
  6303.  1Ch    WORD    FS
  6304.  1Eh  2 BYTEs    reserved (0)
  6305.  20h    WORD    GS
  6306.  22h  2 BYTEs    reserved (0)
  6307.  24h  9 BYTEs    API entry code (filled in by server)
  6308.  
  6309. Format of DPMS lock DDS:
  6310. Offset    Size    Description    (Table 1416)
  6311.  00h    DWORD    total size in bytes
  6312.  04h    DWORD    offset
  6313.  08h    WORD    segment or selector
  6314.  0Ah    WORD    reserved
  6315.  0Ch    WORD    maximum number of physical blocks structure has space for
  6316.  0Eh    WORD    number of physical blocks listed
  6317.  10h    DWORD    physical address of first block
  6318.  14h    DWORD    size in bytes of first block
  6319.     ...
  6320. ----------2F43E2-----------------------------
  6321. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - ENABLE/DISABLE DPMS
  6322.     AX = 43E2h
  6323.     BX = new state (0000h disable, 0001h enable)
  6324. Return: AX = 0000h if supported
  6325. Note:    this function should normally be called only by system software
  6326. SeeAlso: AX=43E0h,AX=43E1h,AX=43E3h
  6327. ----------2F43E3BX0000-----------------------
  6328. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS STARTUP BROADCAST
  6329.     AX = 43E3h
  6330.     BX = 0000h
  6331.     CX = 4450h ('DP')
  6332.     DX = 4D53h ('MS')
  6333. SeeAlso: AX=43E0h,AX=43E4h 
  6334. ----------2F43E4BX0000-----------------------
  6335. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS EXIT BROADCAST
  6336.     AX = 43E4h
  6337.     BX = 0000h
  6338.     CX = 4450h ('DP')
  6339.     DX = 4D53h ('MS')
  6340. SeeAlso: AX=43E0h,AX=43E3h 
  6341. --------E-2F44-------------------------------
  6342. INT 2F U - DOS Extender support???
  6343.     AH = 44h
  6344.     AL = function (at least 0Bh, 15h, 17h)
  6345.     ???
  6346. Return: ???
  6347. Note:    called by Codeview for Windows
  6348. SeeAlso: AH=86h
  6349. --------G-2F4500-----------------------------
  6350. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  6351.     AX = 4500h
  6352. Return: AL = installation status
  6353.         01h if PROF.COM installed
  6354.         02h if VPROD.386 installed
  6355. SeeAlso: AX=4501h,AX=4502h
  6356. --------G-2F4501-----------------------------
  6357. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  6358.     AX = 4501h
  6359.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  6360.     CX = output limit in KB (second parameter for ProfSetup)
  6361. Note:    this call is not supported by PROF.COM
  6362. SeeAlso: AX=4502h,AX=4503h
  6363. --------G-2F4502-----------------------------
  6364. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  6365.     AX = 4502h
  6366.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  6367.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  6368.     CX = sampling rate for VPROD.386
  6369. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  6370.       low four bits of CMOS register 0Ah.  The interruption rate is
  6371.       1 SHL (15 - BL) per second.
  6372. SeeAlso: AX=4501h,AX=4503h
  6373. --------G-2F4503-----------------------------
  6374. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  6375.     AX = 4503h
  6376. Notes:    Profiling is also turned on by the key combinations
  6377.       LeftShift + RightShift + Alt and LeftShift + RightShift + Ctrl
  6378.     for PROF.COM, this call programs the CMOS clock by reading register
  6379.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  6380.       is unmasked
  6381. SeeAlso: AX=4504h
  6382. --------G-2F4504-----------------------------
  6383. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  6384.     AX = 4504h
  6385. Notes:    profiling is also turned off by the key combination
  6386.       LeftShift + RightShift
  6387.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  6388.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  6389. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  6390. --------G-2F4505-----------------------------
  6391. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  6392.     AX = 4505h
  6393. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  6394. --------G-2F4506-----------------------------
  6395. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  6396.     AX = 4506h
  6397. SeeAlso: AX=4505h,AX=4507h
  6398. --------G-2F4507-----------------------------
  6399. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  6400.     AX = 4507h
  6401. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  6402.       "ProfFlush" (AX=4506h)
  6403. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  6404. --------G-2F4508-----------------------------
  6405. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  6406.     AX = 4508h
  6407.     BX = ordinal (or 0000h)
  6408.     CX = segment
  6409.     DX = instance (or 0000h)
  6410.     SI = type (or 0000h)
  6411.     ES:DI -> ASCIZ module name
  6412. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  6413.       interface, but only to function 0, for notifying the profiler of
  6414.       each new segment loaded.  The SHOWHITS utility then examines the
  6415.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  6416.       with symbol files to provide information in a useful form.
  6417.     this call does not have a corresponding Windows function
  6418. SeeAlso: AX=4500h
  6419. --------D-2F4601-----------------------------
  6420. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  6421.     AX = 4601h
  6422. Return: ???
  6423. Note:    the DOS 5+ kernel intercepts this function and copies the MCB
  6424.        following the caller's PSP memory block into the DOS data segment;
  6425.        in conjunction with AX=4602h, this intercept is used by DOS to
  6426.        avoid corruption of the Windows real-mode heap's end sentinel
  6427. SeeAlso: AX=1700h,AX=4602h
  6428. --------D-2F4602-----------------------------
  6429. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  6430.     AX = 4602h
  6431. Return: ???
  6432. Note:    the DOS 5+ kernel intercepts this function and copies the
  6433.       previously-saved MCB from the DOS data segment into the MCB following
  6434.       the caller's PSP memory block; in conjunction with AX=4601h, this
  6435.       intercept is used by DOS to avoid corruption of the Windows real-mode
  6436.       heap's end sentinel
  6437. SeeAlso: AX=1700h,AX=4601h
  6438. --------E-2F46-------------------------------
  6439. INT 2F U - Windows/286 DOS Extender
  6440.     AH = 46h
  6441.     AL = subfunction (03h,04h)
  6442. Return: ???
  6443. Note:    these two subfunctions are called by MS Windows 3.0
  6444. --------v-2F4653CX0002-----------------------
  6445. INT 2F - F-PROT v1.x only - F-LOCK.EXE - API
  6446.     AX = 4653h
  6447.     CX = 0002h
  6448.     BX = subfunction
  6449.         0000h  installation check
  6450.         Return: AX = FFFFh
  6451.         0001h  uninstall
  6452.         Return: AX,BX,ES destroyed
  6453.         0002h  disable (v1.08 and below only)
  6454.         0003h  enable (v1.08 and below only)
  6455. Program: F-LOCK is part of the shareware F-PROT virus/trojan protection
  6456.       package by Fridrik Skulason
  6457. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  6458. Index:    installation check;F-LOCK|uninstall;F-LOCK
  6459. --------v-2F4653CX0003-----------------------
  6460. INT 2F - F-PROT v1.x only - F-XCHK.EXE - API
  6461.     AX = 4653h
  6462.     CX = 0003h
  6463.     BX = subfunction
  6464.         0000h  installation check
  6465.         Return: AX = FFFFh
  6466.         0001h  uninstall
  6467.         Return: AX,BX,ES destroyed
  6468. Program: F-XCHK is part of the shareware F-PROT virus/trojan protection
  6469.       package by Fridrik Skulason
  6470. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  6471. Index:    installation check;F-XCHK|uninstall;F-XCHK
  6472. --------v-2F4653CX0004-----------------------
  6473. INT 2F - F-PROT v1.x only - F-POPUP.EXE - API
  6474.     AX = 4653h
  6475.     CX = 0004h
  6476.     BX = subfunction
  6477.         0000h  installation check
  6478.         Return: AX = FFFFh
  6479.         0001h  uninstall
  6480.         Return: AX,BX,ES destroyed
  6481.         0002h  disable (v1.08 and below only)
  6482.            display message (v1.14+)
  6483.             other registers: ???
  6484.         0003h  enable (v1.08 and below only)
  6485.            display message (v1.14+)
  6486.             other registers: ???
  6487.             Return: AX = key pressed by user
  6488. Program: F-POPUP is part of the shareware F-PROT virus/trojan protection
  6489.       package by Fridrik Skulason
  6490. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  6491. Index:    installation check;F-POPUP|uninstall;F-POPUP
  6492. --------v-2F4653CX0005-----------------------
  6493. INT 2F - F-PROT v1.x only - F-DLOCK.EXE - API
  6494.     AX = 4653h
  6495.     CX = 0005h
  6496.     BX = subfunction
  6497.         0000h installation check
  6498.         Return: AX = FFFFh
  6499.         0001h uninstall
  6500.         Return: AX,BX,ES destroyed
  6501. Program: F-DLOCK is part of the shareware F-PROT virus/trojan protection
  6502.       package by Fridrik Skulason
  6503. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  6504. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  6505. --------W-2F4680-----------------------------
  6506. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  6507.     AX = 4680h
  6508. Return: AX = result
  6509.         0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  6510.           or DOS 5 DOSSHELL active
  6511.         nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  6512.           mode
  6513. Note:    Windows 3.1 finally provides an installation check which works in all
  6514.       modes (see AX=160Ah)
  6515. SeeAlso: AX=1600h,AX=160Ah
  6516. ----------2F47-------------------------------
  6517. INT 2F U - ???
  6518.     AH = 47h
  6519.     ???
  6520. Return: ???
  6521. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  6522. --------K-2F4800-----------------------------
  6523. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  6524.     AX = 4800h
  6525. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  6526.         ES = segment of DOSKEY resident portion
  6527. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  6528. SeeAlso: AX=4800h"PCED",AX=4810h
  6529. --------K-2F4800-----------------------------
  6530. INT 2F - PCED v2.1 - INSTALLATION CHECK
  6531.     AX = 4800h
  6532. Return: AX = AACDh if installed
  6533.         ES = segment of PCED kernel (PCED has multiple code segments)
  6534. Program: PCED v2.1 is a command line editor/history/macro facility by
  6535.       Cove Software.  It is the commercial version of the freeware CED.
  6536. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  6537.     unlike DOSKEY, PCED does *not* chain if AL contains an
  6538.       unsupported function code.  It IRETs with all registers intact.
  6539. --------K-2F4810-----------------------------
  6540. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  6541.     AX = 4810h
  6542.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  6543. Return: AX = 0000h if successful
  6544. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  6545.       the previous handler; PCED allows sizes other than 80h
  6546.     if the user's input is a macro name, no text is placed in the buffer
  6547.       even though AX=0000h on return; the program must immediately issue
  6548.       this call again to retrieve the expansion of the macro.  Similarly,
  6549.       if the user enters a special parameter such as $*, this call must
  6550.       be repeated to retrieve the expansion; on the second call, DOSKEY
  6551.       overwrites the macro name on the screen with its expansion.
  6552.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  6553.       not necessary to make two calls; since the buffer is not empty on
  6554.       return, DOSKEY-aware programs will not make the second call
  6555.     DOSKEY chains if AL is not 00h or 10h on entry
  6556. SeeAlso: AX=4800h,INT 21/AH=0Ah
  6557. --------K-2F48C0-----------------------------
  6558. INT 2F - PCED v2.1 - PCED API
  6559.     AX = 48C0h
  6560.     DX = API function code
  6561.     other registers as required by the specified function
  6562. Return: CF clear if successful
  6563.     CF set on error
  6564.         AX = PCED error code
  6565.     other registers as appropriate for API function
  6566. Program: PCED v2.1 is a command line editor/history/macro facility by
  6567.       Cove Software.  It is the commercial version of the freeware CED.
  6568. Note:    the full API information is available from Cove Software
  6569. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  6570. ----------2F48C1BL00-------------------------
  6571. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  6572.     AX = 48C1h
  6573.     BL = 00h
  6574. Return: AX = 0000h if installed
  6575.         BX = VSTACK resident segment
  6576. Program: VSTACK is a resident backscroll utility included as part of the PCED
  6577.       package by Cove Software
  6578. Note:    chains if BL <> 00h on entry
  6579. SeeAlso: AX=48C0h,AX=48C2h
  6580. ----------2F48C2BL00-------------------------
  6581. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  6582.     AX = 48C2h
  6583.     BL = 00h
  6584. Return: AX = 0000h if installed
  6585.         BX = ATTRIB resident segment
  6586. Program: ATTRIB is a resident file attribute changer included as part of the
  6587.       PCED package by Cove Software
  6588. Note:    chains if BL <> 00h on entry
  6589. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  6590. --------K-2F48C3BL00-------------------------
  6591. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  6592.     AX = 48C3h
  6593.     BL = 00h
  6594. Return: AX = 0000h if installed
  6595.         BX = KEYDEF resident segment
  6596. Program: KEYDEF is a resident keyboard redefinition utility included as part
  6597.       of the PCED package by Cove Software
  6598. Note:    chains if BL <> 00h on entry
  6599. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  6600. ----------2F48C4BL00-------------------------
  6601. INT 2F - PCED/FLIST - INSTALLATION CHECK
  6602.     AX = 48C4h
  6603.     BL = 00h
  6604. Return: AX = 0000h if installed
  6605.         BX = FLIST resident segment
  6606. Program: FLIST is a resident filelist processor included as part of the PCED
  6607.       package by Cove Software
  6608. Note:    chains if BL <> 00h on entry
  6609. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  6610. ----------2F48C5BL00-------------------------
  6611. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  6612.     AX = 48C5h
  6613.     BL = 00h
  6614. Return: AX = 0000h if installed
  6615.         BX = ASSOC resident segment
  6616. Program: ASSOC is a resident utility included as part of the PCED package which
  6617.       associated files with executable programs based on their extensions
  6618. Note:    chains if BL > 02h on entry
  6619. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  6620. ----------2F48C5BL01-------------------------
  6621. INT 2F - PCED/ASSOC - VERSION CHECK
  6622.     AX = 48C5h
  6623.     BL = 01h
  6624. Return: AX = 0000h if installed
  6625.         BX = binary ASSOC version (BL = major, BH = minor)
  6626. Note:    chains if BL > 02h on entry
  6627. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  6628. ----------2F48C5BL02-------------------------
  6629. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  6630.     AX = 48C5h
  6631.     BL = 02h
  6632.     DS:SI -> ASCIZ filename
  6633. Return: AX = status
  6634.         0000h if filename is unknown
  6635.         0001h if there is an association defined for the file
  6636.     BX destroyed
  6637. Program: ASSOC is a resident utility included as part of the PCED package which
  6638.       associated files with executable programs based on their extensions
  6639. Note:    chains if BL > 02h on entry
  6640. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  6641. ----------2F49-------------------------------
  6642. INT 2F U - ???
  6643.     AH = 49h
  6644.     ???
  6645. Return: ???
  6646. Note:    reportedly called by DOS 5.0 installation
  6647. --------D-2F4A00CX0000-----------------------
  6648. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  6649.     AX = 4A00h
  6650.     CX = 0000h
  6651.     DH = new drive number
  6652.     DL = current drive number
  6653. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  6654. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  6655.       "Insert diskette for drive X:" on single-floppy systems
  6656. --------D-2F4A01-----------------------------
  6657. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  6658.     AX = 4A01h
  6659. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  6660.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  6661. Note:    called by Windows 3.1 DOSX.EXE
  6662. SeeAlso: AX=4310h,AX=4A02h
  6663. --------D-2F4A02-----------------------------
  6664. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  6665.     AX = 4A02h
  6666.     BX = number of bytes
  6667. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  6668.     BX = number of bytes actually allocated (rounded up to next paragraph
  6669.           for DOS 5.0 and 6.0)
  6670. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  6671.     called by Windows 3.1 DOSX.EXE
  6672. SeeAlso: AX=4A01h
  6673. --------T-2F4A05-----------------------------
  6674. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  6675.     AX = 4A05h
  6676.     SI = function
  6677.         0000h reset???
  6678.         0001h ???
  6679.         ES:BP -> 80-byte buffer containing ???
  6680.         0002h ???
  6681.         0003h ???
  6682.         0004h ???
  6683.         BL = ???
  6684.         0005h ???
  6685.         0006h get ???
  6686.         Return: ES:SI -> ???
  6687.         0007h get ???
  6688.         Return: AX = ???
  6689.         0008h get ???
  6690.         Return: DX:AX -> ??? (internal control data of some kind)
  6691.         0009h get ???
  6692.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  6693.         000Ah ???
  6694.         BL = length of buffer
  6695.         ES:BP -> buffer containing ???
  6696.         000Bh get ???
  6697.         Return: AX = ???
  6698.         000Ch ???
  6699.         BL = ???
  6700.         Return: if BL nonzero on entry
  6701.                 DX:AX -> ???
  6702.             if BL = 00h on entry
  6703.                 ES:SI -> ???
  6704. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  6705.       listed above
  6706.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  6707.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  6708. SeeAlso: AX=4B01h
  6709. --------D-2F4A06-----------------------------
  6710. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  6711.     AX = 4A06h
  6712.     DX = segment following last byte of conventional memory
  6713. Return: DX = segment following last byte of memory available for use by DOS
  6714. Desc:    used to override the default memory size when booting diskless
  6715.       workstations
  6716. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  6717.       present three bytes beyond the INT 2F handler; this call overrides
  6718.       the value returned by INT 12
  6719.     hooked by RPL code at the top of memory to protect itself from being
  6720.       overwritten; DOS builds a memory block with owner = 0008h and name
  6721.       "RPL" which must be freed by the RPL code when it is done
  6722. SeeAlso: INT 12,INT 18
  6723. --------N-2F4A07-----------------------------
  6724. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  6725.     AX = 4A07h
  6726.     ???
  6727. Return: ???
  6728. --------c-2F4A10BX0000-----------------------
  6729. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  6730.     AX = 4A10h
  6731.     BX = 0000h
  6732.     CX = EBABh (v4.1+; see Note)
  6733. Return: AX = BABEh if installed
  6734.         DX:BX = cache hits
  6735.         DI:SI = cache misses
  6736.         CX = number of dirty cache elements
  6737.         BP = version in BCD (4.10 = 0410h)
  6738. Notes:    most of the SMARTDRV API, including this call, is supported by
  6739.       PC-Cache v8.0 and recent versions of the Norton Caches
  6740.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  6741.       then calls of this function with CX<>EBABh on entry cause
  6742.       DBLSPACE.BIN to display the error message
  6743.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and abort the caller
  6744.       with INT 21/AX=4C00h
  6745.     SMARTDRV v3.x had a completely different API using IOCTL calls, which
  6746.       was also supported by the Norton Caches
  6747. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  6748. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  6749. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  6750. ----------2F4A10BX0000-----------------------
  6751. INT 2F U - Novell NWCACHE - ???
  6752.     AX = 4A10h
  6753.     BX = 0000h
  6754.     CX = 0EDCh
  6755. Return: ???
  6756. SeeAlso: AX=4A10h/BX=0001h"NWCACHE"
  6757. --------c-2F4A10BX0001-----------------------
  6758. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS (COMMIT CACHE)
  6759.     AX = 4A10h
  6760.     BX = 0001h
  6761. Note:    this function is also supported by PC-Cache v8.0.
  6762. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  6763. ----------2F4A10BX0001-----------------------
  6764. INT 2F U - Novell NWCACHE - ???
  6765.     AX = 4A10h
  6766.     BX = 0001h
  6767.     CX = 0EDCh
  6768. Return: ???
  6769. SeeAlso: AX=4A10h/BX=0000h"NWCACHE"
  6770. --------c-2F4A10BX0002-----------------------
  6771. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  6772.     AX = 4A10h
  6773.     BX = 0002h
  6774. Note:    this function is also supported by PC-Cache v8.0.
  6775. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  6776. --------c-2F4A10BX0003-----------------------
  6777. INT 2F - SMARTDRV v4.00+ - STATUS
  6778.     AX = 4A10h
  6779.     BX = 0003h
  6780.     BP = drive number (0=A, 1=B, etc.)
  6781.     DL = subfunction
  6782.         00h only get information
  6783.         01h turn on read cache
  6784.         02h turn off read cache
  6785.         03h turn on write cache
  6786.         04h turn off write cache
  6787. Return: AX = BABEh if OK
  6788.     DL = status (see #1417)
  6789.     DL = FFh if drive does not exist
  6790. Notes:    If the read cache is off, reads will not be cached, but writes will
  6791.       continue to be cached if the write-cache is enabled.
  6792.     this function is also supported by PC-Cache v8.0.
  6793. SeeAlso: AX=4A10h/BX=0000h
  6794.  
  6795. Bitfields for SMARTDRV status:
  6796. Bit(s)    Description    (Table 1417)
  6797.  7    not cached
  6798.  6    write-through (not write-cached)
  6799.  0-5    real drive number (0=A, 1=B...)
  6800. --------c-2F4A10BX0004-----------------------
  6801. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  6802.     AX = 4A10h
  6803.     BX = 0004h
  6804. Return: AX = size in elements of full-sized cache
  6805.     BX = current size in elements
  6806.     CX = size of one element in bytes
  6807.     DX = number of elements under Windows
  6808. Note:    this function is also supported by PC-Cache v8.0.
  6809. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  6810. --------c-2F4A10BX0005-----------------------
  6811. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  6812.     AX = 4A10h
  6813.     BX = 0005h
  6814.     BP = drive number (0=A, 1=B...)
  6815. Return: AX = BABEh if double-buffered
  6816.         ES:DI -> 16-byte array of status bytes for fixed disks (see #1418)
  6817. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  6818.  
  6819. (Table 1418)
  6820. Values for SMARTDRV status byte:
  6821.  00h    state unknown
  6822.  FFh    drive double-buffered
  6823.  else    not double-buffered
  6824. --------c-2F4A10BX0006-----------------------
  6825. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  6826.     AX = 4A10h
  6827.     BX = 0006h
  6828.     CL = drive number (01h = A:)
  6829. Return: AX = 0006h if drive should not be cached by SMARTDRV
  6830. Note:    called by SMARTDRV at startup to determine whether it should cache
  6831.       a particular drive
  6832. SeeAlso: AX=4A10h/BX=0000h
  6833. --------c-2F4A10BX0007-----------------------
  6834. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  6835.     AX = 4A10h
  6836.     BX = 0007h
  6837.     BP = drive number (00h=A:)
  6838. Return: DL = unit number within device driver
  6839.     ES:DI -> device driver header for drive
  6840. Note:    this function is also supported by PC-Cache v8.0.
  6841.     this call is reported to always return the driver header of the
  6842.       standard block driver (A:-C:+) for SmartDrive v5.00 from MS-DOS 6.2
  6843. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  6844. --------c-2F4A10BX0008-----------------------
  6845. INT 2F - SMARTDRV v4.20+ - GET/SET FLUSH BEFORE PROMPT, CD-ROM SUPPORT
  6846.     AX = 4A10h
  6847.     BX = 0008h
  6848.     DL = subfunction
  6849.         00h set
  6850.         DH = new states
  6851.             bit 0: flush before prompt
  6852.             bits 1-7 reserved (0)
  6853.         01h get
  6854.         Return: DH = status flags
  6855.                 bit 0: (v4.2+) flush before prompt
  6856.                 bit 1: (v5.0+) CD-ROM caching support installed
  6857. Note:    v4.2 was an interim release to fix problems in the SMARTDRV included
  6858.       with MS-DOS 6.00; v5.00 is included with MS-DOS 6.2
  6859. --------c-2F4A10BX000A-----------------------
  6860. INT 2F - SMARTDRV v4.00+ - GET ELEMENT STATUS TABLE
  6861.     AX = 4A10h
  6862.     BX = 000Ah
  6863. Return: ES:BX -> information pointer table (see #1419)
  6864. Note:    this function is also supported by PC-Cache v8.0.
  6865. SeeAlso: AX=4A10h/BX=0000h
  6866.  
  6867. Format of SMARTDRV information pointer table:
  6868. Offset    Size    Description    (Table 1419)
  6869.  00h    WORD    offset of ??? byte/word array (byte if elements < 2000h bytes)
  6870.  02h    WORD    offset of dirty flag byte/word array (byte if elts < 2000h)
  6871.         each byte/word is a bit string of the dirty sectors in element
  6872.  04h    WORD    offset of word array containing low halves of unique
  6873.           identifiers for the corresponding element's contents
  6874.  06h    WORD    offset of word array containing high halves of unique
  6875.           identifiers for the corresponding element's contents
  6876.  08h    WORD    offset of WORD containing current number of elements in cache
  6877. --------c-2F4A10BX1234-----------------------
  6878. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  6879.     AX = 4A10h
  6880.     BX = 1234h
  6881. Desc:    this function pops up a message box saying that a serious error
  6882.       occurred and to hit R to retry, then waits for the keypress
  6883. Note:    this function is also supported by PC-Cache v8.0.
  6884. SeeAlso: AX=4A10h/BX=0000h
  6885. --------k-2F4A11BX0000-----------------------
  6886. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  6887.     AX = 4A11h
  6888.     BX = 0000h
  6889. Return: AX = 0000h (successful)
  6890.     BX = 444Dh ("DM")
  6891.     CL = first drive letter used by DBLSPACE (41h ['A'] = A:)
  6892.     CH = number of drive letters used by DBLSPACE
  6893.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  6894.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  6895.           position in memory (i.e. DBLSPACE.SYS /MOVE)
  6896. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6897.       disk-compression software bundled with MS-DOS 6.0
  6898. Note:    this function is also supported by the version of SuperStor bundled
  6899.       with IBM DOS 6.x and "preloading" versions of Stacker
  6900. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  6901. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  6902. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  6903. --------k-2F4A11BX0001-----------------------
  6904. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  6905.     AX = 4A11h
  6906.     BX = 0001h
  6907.     DL = drive number (0=A:)
  6908. Return: AX = status (see also #1420)
  6909.         0000h successful
  6910.         if DL was compressed drive,
  6911.             BL = host drive (bit 7 set if drive is compressed)
  6912.         else if DL was host drive,
  6913.             BL = compressed drive
  6914.         else
  6915.             BL = specified drive (if available for DoubleSpace)
  6916.         BH = DoubleSpace sequence number
  6917.         other error code (0101h) (see #1420)
  6918.         apparently never returned for the MS-DOS 6.2 DoubleSpace
  6919. Note:    the compressed volume file for the specified compressed drive is
  6920.       host:\DBLSPACE.sequence
  6921. SeeAlso: AX=4A11h/BX=0000h
  6922.  
  6923. (Table 1420)
  6924. Values for DBLSPACE function status:
  6925.  0000h    successful
  6926.  0100h    bad function
  6927.  0101h    invalid drive
  6928.  0102h    not a compressed drive
  6929.  0103h    drive already swapped
  6930.  0104h    drive not swapped
  6931. --------k-2F4A11BX0002-----------------------
  6932. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  6933.     AX = 4A11h
  6934.     BX = 0002h
  6935.     DL = drive number (0=A:) of compressed drive to swap with its host
  6936. Return: AX = status (0000h,0101h,0102h,0103h) (see #1420)
  6937. Note:    this function is intended for use by DBLSPACE.EXE only
  6938. SeeAlso: AX=4A11h/BX=0000h
  6939. --------k-2F4A11BX0003-----------------------
  6940. INT 2F - DBLSPACE.BIN - "DSGetEntryPoints" - GET DEVICE DRIVER ENTRY POINTS
  6941.     AX = 4A11h
  6942.     BX = 0003h
  6943.     CL = drive number (0=A:) of compressed drive
  6944. Return: CL = FFh on error (not compressed drive)
  6945.     CL <> FFh driver unit number of host drive
  6946.         ES:SI -> device driver's strategy routine
  6947.         ES:DI -> device driver's interrupt routine
  6948.     BX destroyed
  6949. Note:    in conjunction with subfunction 0004h, this call allows disk caches
  6950.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  6951.       drives just like SMARTDRV applies to regular block devices
  6952. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  6953. --------k-2F4A11BX0004-----------------------
  6954. INT 2F - DBLSPACE.BIN - "DSSetEntryPoints" - SET DEVICE DRIVER ENTRY POINTS
  6955.     AX = 4A11h
  6956.     BX = 0004h
  6957.     CL = drive number (0=A:) of compressed drive
  6958.     DL = unit number for new driver entry points
  6959.     DH = 00h
  6960.     ES:SI -> device driver strategy routine to call for drive
  6961.     ES:DI -> device driver interrupt routine to call for drive
  6962. Return: CL = FFh on error (not a compressed drive)
  6963.     BX destroyed
  6964. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6965.       disk-compression software bundled with MS-DOS 6.0
  6966. Note:    in conjunction with subfunction 0003h, this call allows disk caches
  6967.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  6968.       drives just like SMARTDRV applies to regular block devices
  6969. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  6970. --------k-2F4A11BX0005-----------------------
  6971. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  6972.     AX = 4A11h
  6973.     BX = 0005h
  6974.     DL = drive number (0=A:) to assign to new drive
  6975.     ES:SI -> activation record (see #1421)
  6976. Return: status returned in activation record (see #1422)
  6977. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  6978.  
  6979. Format of DBLSPACE activation record:
  6980. Offset    Size    Description    (Table 1421)
  6981.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  6982.  02h    BYTE    4Dh ('M') mount command
  6983.  03h    BYTE    error code (set to FFh before calling) (see #1422)
  6984.  04h    BYTE    host drive number (0=A:)
  6985.  05h    ???    DISK_UNIT structure (not documented)
  6986.  
  6987. (Table 1422)
  6988. Values for DBLSPACE Mount error code:
  6989.  00h    successful
  6990.  01h    drive letter not available for DoubleSpace
  6991.  02h    drive letter already in use
  6992.  03h    no more disk units (increase MaxRemovableDrives in .INI)
  6993.  09h    CVF too fragmented
  6994. --------k-2F4A11BX0006-----------------------
  6995. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  6996.     AX = 4A11h
  6997.     BX = 0006h
  6998.     DL = drive number (0=A:) to unmount
  6999. Return: AX = status (0000h,0102h) (see #1420)
  7000. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  7001. --------k-2F4A11BX0007-----------------------
  7002. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  7003.     AX = 4A11h
  7004.     BX = 0007h
  7005.     DL = compressed drive number (0=A:)
  7006. Return: AX = status (0000h,0102h) (see also #1420)
  7007.         0000h successful
  7008.         DS:SI -> free space record (see #1423)
  7009. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  7010.       disk-compression software bundled with MS-DOS 6.0
  7011. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  7012.  
  7013. Format of DBLSPACE free space record:
  7014. Offset    Size    Description    (Table 1423)
  7015.  00h    DWORD    total number of sectors in drive's sector heap
  7016.  04h    DWORD    number of free sectors in drive's sector heap
  7017. --------k-2F4A11BX0008-----------------------
  7018. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  7019.     AX = 4A11h
  7020.     BX = 0008h
  7021.     DL = compressed drive number (0=A:)
  7022. Return: AX = status (0000h,0102h) (see also #1420)
  7023.         0000h successful
  7024.         BX = maximum entries in File Fragment heap
  7025.         CX = available entries in File Fragment heap
  7026. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  7027. --------k-2F4A11BX0009-----------------------
  7028. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  7029.     AX = 4A11h
  7030.     BX = 0009h
  7031.     DL = compressed drive number (0=A:)
  7032. Return: AX = status (see also #1420)
  7033.         0000h successful
  7034.         CL = number of DISK_UNIT structures allocated
  7035.               (see AX=4A11h/BX=0005h)
  7036.         CH = DoubleGuard enabled-checks bitflags in bits 6-0 (DOS 6.2)
  7037. Note:    the DoubleGuard checks are enabled or disabled as a block by the
  7038.       DoubleGuard= line in DBLSPACE.INI; they may be individually set with
  7039.       the CheckSum= line.
  7040. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  7041. --------k-2F4A11BX000A-----------------------
  7042. INT 2F - DBLSPACE.BIN v6.2 - SET AUTOMOUNT DRIVES
  7043.     AX = 4A11h
  7044.     BX = 000Ah
  7045.     CX:DX = bitmask of drives on which to enable AutoMount
  7046.         (DX bit 0 = A:, CX bit 0 = P:, etc.)
  7047. Return: AX = 0000h if supported
  7048.         CX:DX = old mask or 0000h:0000h on error
  7049.     BX destroyed
  7050. SeeAlso: AX=4A11h/BX=000Bh
  7051. --------k-2F4A11BX000B-----------------------
  7052. INT 2F - DBLSPACE.BIN v6.2 - GET AUTOMOUNT DRIVES
  7053.     AX = 4A11h
  7054.     BX = 000Bh
  7055. Return: AX = 0000h if supported
  7056.         CX:DX = mask of drives with AutoMount enabled
  7057.         0000h:0000h on error
  7058.     BX destroyed
  7059. SeeAlso: AX=4A11h/BX=000Ah
  7060. --------k-2F4A11BXFFFE-----------------------
  7061. INT 2F U - DBLSPACE.BIN - RELOCATE
  7062.     AX = 4A11h
  7063.     BX = FFFEh
  7064.     ES = segment to which to relocate DBLSPACE.BIN
  7065. Return: ???
  7066. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  7067.       in memory
  7068.     this function also unhooks and discards the code providing this
  7069.       function and AX=4A11h/BX=FFFFh
  7070.     this function is also supported by the version of SuperStor bundled
  7071.       with IBM DOS 6.x and "preloading" versions of Stacker
  7072. SeeAlso: AX=4A11h/BX=FFFFh
  7073. --------k-2F4A11BXFFFF-----------------------
  7074. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  7075.     AX = 4A11h
  7076.     BX = FFFFh
  7077. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  7078. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  7079.       position in memory
  7080.     this function is also supported by the version of SuperStor bundled
  7081.       with IBM DOS 6.x and "preloading" versions of Stacker
  7082. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  7083. --------k-2F4A12CX4D52-----------------------
  7084. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  7085.     AX = 4A12h
  7086.     CX = 4D52h ("MR")
  7087.     DX = 4349h ("CI")
  7088. Return: CX = 4943h ("IC") if installed
  7089.     DX = 524Dh ("RM") if installed
  7090.         ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
  7091. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  7092.       called first, as the latter call is used for the first, ROM-based
  7093.       MRCI server, while this call is used for RAM-based servers which
  7094.       may be partially or entirely replacing a prior server
  7095. SeeAlso: AX=4A12h/CX=5354h,INT 1A/AX=B001h
  7096. --------k-2F4A12CX5354-----------------------
  7097. INT 2F - Stacker 4 LZS Compression Interface (LZSAPI)
  7098.     AX = 4A12h
  7099.     CX = 5354h ("ST")
  7100.     DX = 4143h ("AC")
  7101. Return: AX = 4F4Bh ("OK") if installed
  7102.     CX = 7374h ("st") if installed
  7103.     DX = 6163h ("ac") if installed
  7104.         ES:DI -> entry point in LZSAPI server (usually, driver
  7105.               STACKER.COM) containing far address of an actual
  7106.               LZSINFO structure (see #1424)
  7107. SeeAlso: AX=4A12h/CX=4D52h,INT 25/AX=CDCDh
  7108.  
  7109. Format of LZSINFO structure:
  7110. Offset    Size    Description    (Table 1424)
  7111.  00h  6 BYTEs    signature "LZSAPI"
  7112.  06h    WORD    server version (200 (0C8h) for Stacker 4)
  7113.  08h  4 BYTEs    vendor signature
  7114.         "STAC" = Stac Electronics, Inc.
  7115.  0Ch  6 BYTEs    ???
  7116.  12h    WORD    bit flags: server status/capabilities (see #1425)
  7117.  14h    DWORD    -> Stacker 3.X-compatible compression procedure
  7118.  18h    DWORD    -> Stacker 3.X-compatible decompression procedure
  7119.  1Ch  4 BYTEs    reserved (always set to 0)
  7120.  20h    DWORD    -> incremental Stacker 3.x-compatible compression procedure
  7121.           (see #1426)
  7122.  24h  4 BYTEs    ???
  7123.  28h    DWORD    -> incremental Stacker 3.x-compatible decompression procedure
  7124.           (see #1427)
  7125.  2Ch  4    BYTES    ???
  7126.  30h    DWORD    -> new (Stacker 4) compression procedure
  7127.  34h  4 BYTEs    ???
  7128.  38h    DWORD    -> new (Stacker 4) decompression procedure
  7129. Notes:    Stacker 4 usally keeps two different data-compression algorithms in
  7130.       memory (preferably in XMA):
  7131.         1) new (Stacker 4) data compression algorithm (4K LZ77 with hashing
  7132.           and static Huffman encoding), and
  7133.         2) old (Stacker 3.x-compatible) one (2K LZ77 with hashing), which
  7134.           is used to work with STACVOL files created under older
  7135.           versions of Stacker.
  7136.  
  7137. Bitfields for LZSAPI capabilities:
  7138. Bit(s)    Description    (Table 1425)
  7139.  0    ???
  7140.  1    busy/error flag
  7141.  2-10    ???
  7142.  11    maximum compressor/decompressor presented
  7143.  
  7144. (Table 1426)
  7145. Call Stacker 3.x-style non-incremental functions with:
  7146.     STACK:    DWORD    return address for compress/decompress procedure
  7147.         WORD    compression algorithm parameters (see #1428)
  7148.         WORD    size of destination buffer (in bytes)
  7149.         DWORD    address of destination buffer
  7150.         WORD    size of source buffer (in bytes)
  7151.         DWORD    address of source buffer
  7152. Return: (compression/decompression procedure)
  7153.     AX = size of resulting data in destination buffer
  7154.         0000h if error (either destination buffer too small or error in
  7155.           compressed data)
  7156.  
  7157. (Table 1427)
  7158. Call Stacker 4-style incremental procedures with:
  7159.     STACK:    DWORD    return address for compr./decompr. procedure
  7160.         DWORD    address of LZSSWAP structure (see #1429)
  7161.             if 0000:0000, procedure uses non-incremental technique
  7162.         WORD    compression algorithm parameters (see #1428)
  7163.         WORD    size of destination buffer (in bytes)
  7164.         DWORD    address of destination buffer
  7165.         WORD    size of source buffer (in bytes)
  7166.         DWORD    address of source buffer
  7167.  
  7168. (Table 1428)
  7169. Values for Compression algorithm parameters:
  7170. Value    Compression level (/P=xx parameter)
  7171.  07F9h      1
  7172.  0621h      2
  7173.  0625h      3
  7174.  0665h      4
  7175.  0669h      5
  7176.  06E9h      6
  7177.  06EDh      7
  7178.  07D1h      8
  7179.  07D9h      9
  7180.  
  7181. Format of LZSSWAP structure:
  7182. Offset    Size    Description    (Table 1429)
  7183.  00h  2 BYTEs    signature "CS"
  7184.  02h  6 BYTEs    reserved
  7185.  08h    DWORD    address of destination buffer swapping procedure
  7186.  0Ch    DWORD    address of stack swapping procedure
  7187. --------k-2F4A13-----------------------------
  7188. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  7189.     AX = 4A13h
  7190. Return: AX = 134Ah if supported
  7191.         ES:BX -> entry point record (see #1430)
  7192. SeeAlso: AX=4A11h/BX=0000h
  7193.  
  7194. Format of DBLSPACE entry point record:
  7195. Offset    Size    Description    (Table 1430)
  7196.  00h    DWORD    pointer to FAR function for ???
  7197.  04h  5 BYTEs    FAR JUMP instruction to ???
  7198. --------N-2F4B-------------------------------
  7199. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  7200.     AH = 4Bh
  7201.     ???
  7202. Return: ???
  7203. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  7204.       file/printer services
  7205. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  7206. --------T-2F4B01-----------------------------
  7207. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  7208.     AX = 4B01h
  7209.     CX:DX -> task switcher entry point (see #1433)
  7210.     ES:BX = 0000h:0000h
  7211. Return: ES:BX -> callback info structure (see #1431) or 0000h:0000h
  7212. Notes:    called by the task switcher
  7213.     this function is hooked by clients which require notification of task
  7214.       switcher activities; the call must first be passed on to the prior
  7215.       handler with registers unchanged using a simulated interrupt.     On
  7216.       return, the client must build a callback info structure and store
  7217.       the returned ES:BX in the "next" field, then return the address of
  7218.       its own callback info structure.
  7219.     a client program must add itself to the notification chain if it
  7220.       provides services to other programs; before terminating, it must
  7221.       remove itself from the chain by calling the task switcher's entry
  7222.       point with AX=0005h (see #1433)
  7223.     the task switcher entry point should not be saved, as it is subject to
  7224.       change and will be provided on any notification call
  7225.     the Windows 3.1 Standard Mode supports this API
  7226. SeeAlso: AX=160Bh,AX=4B02h
  7227.  
  7228. Format of task switcher callback info structure:
  7229. Offset    Size    Description    (Table 1431)
  7230.  00h    DWORD    pointer to next callback info structure
  7231.  04h    DWORD    pointer to notification function (see #1432)
  7232.  08h    DWORD    reserved
  7233.  0Ch    DWORD    address of zero-terminated list of API info structures
  7234.         (see #1435)
  7235.  
  7236. (Table 1432)
  7237. Values task switcher notification function is called with:
  7238.     AX = function
  7239.         0000h switcher initialization
  7240.         Return: AX = status
  7241.                 0000h if OK to load
  7242.                 nonzero to abort task switcher
  7243.         0001h query suspend
  7244.         BX = session ID
  7245.         Return: AX = status
  7246.                 0000h if OK to switch session
  7247.                 0001h if not
  7248.         0002h suspend session
  7249.         BX = session ID
  7250.         interrupts disabled
  7251.         Return: AX = 0000h if OK to switch session
  7252.                = 0001h if not
  7253.         0003h activate session
  7254.         BX = session ID
  7255.         CX = session status flags
  7256.             bit 0: set if first activation of session
  7257.             bits 1-15: reserved (0)
  7258.         interrupts disabled
  7259.         Return: AX = 0000h
  7260.         0004h session active
  7261.         BX = session ID
  7262.         CX = session status flags
  7263.             bit 0: set if first activation of session
  7264.             bits 1-15: reserved (0)
  7265.         Return: AX = 0000h
  7266.         0005h create session
  7267.         BX = session ID
  7268.         Return: AX = 0000h if OK to create session
  7269.                = 0001h if not
  7270.         0006h destroy session
  7271.         BX = session ID
  7272.         Return: AX = 0000h
  7273.         0007h switcher termination
  7274.         BX = flags
  7275.             bit 0: set if calling switcher is only switcher loaded
  7276.             bits 1-15: reserved (0)
  7277.         Return: AX = 0000h
  7278.     ES:DI -> task switcher entry point (see #1433)
  7279. Notes:    function 0000h is generally called by the program which controls or
  7280.       invokes the task switcher, rather than by the task switcher itself;
  7281.       the entry point supplied to this function is not necessarily the
  7282.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  7283.       any client indicates that loading is not possible, all clients will
  7284.       be called with function 0007h; thus it is possible for a client to
  7285.       receive a termination notice without a corresponding initialization
  7286.       notice.
  7287.     except for functions 0002h and 0003h, the notification handler is
  7288.       called with interrupts enabled and may make any INT 21h function
  7289.       call; interrupts must not be enabled in functions 0002h and 0003h
  7290.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  7291.       point is no longer valid
  7292. --------T-2F4B02BX0000-----------------------
  7293. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  7294.     AX = 4B02h
  7295.     BX = 0000h
  7296.     ES:DI = 0000h:0000h
  7297. Return: ES:DI = 0000h:0000h if task switcher not loaded
  7298.     ES:DI -> task switcher entry point (see #1433) if loaded
  7299.         AX = 0000h
  7300. Notes:    the returned entry point is that for the most-recently loaded task
  7301.       switcher; the entry points for prior task switchers may be determined
  7302.       with the "get version" call (see #1433)
  7303.     this function is supported by PC Tools v8+ CPTASK
  7304. SeeAlso: AX=4A05h,AX=4B03h
  7305.  
  7306. (Table 1433)
  7307. Call task switcher entry point with:
  7308.     AX = 0000h get version
  7309.         Return: CF clear if successful
  7310.                 AX = 0000h
  7311.                 ES:BX -> task switcher version struct (see #1434)
  7312.             CF set if unsupported function
  7313.     AX = 0001h test memory region
  7314.         ES:DI -> first byte to be tested
  7315.         CX = size of region to test
  7316.         Return: CF clear if successful
  7317.                 AX = memory type of tested region
  7318.                 0000h global
  7319.                 0001h global and local
  7320.                 0002h local (replaced on session switch)
  7321.             CF set if unsupported function
  7322.     AX = 0002h suspend switcher
  7323.         ES:DI -> new task switcher's entry point
  7324.         Return: CF clear if successful
  7325.                 AX = state
  7326.                 0000h switcher has been suspended
  7327.                 0001h switcher not suspended, new switcher must
  7328.                     abort
  7329.                 0002h switcher not suspended, but new switcher
  7330.                     may run anyway
  7331.             CF set if unsupported function
  7332.     AX = 0003h resume switcher
  7333.         ES:DI -> new task switcher's entry point
  7334.         Return: CF clear if successful
  7335.                 AX = 0000h
  7336.             CF set if unsupported function
  7337.     AX = 0004h hook notification chain
  7338.         ES:DI -> callback info structure to be added to chain
  7339.               (see #1431)
  7340.         Return: CF clear if successful
  7341.                 AX = 0000h
  7342.             CF set if unsupported function
  7343.     AX = 0005h unhook notification chain
  7344.         ES:DI -> callback info structure to be removed from chain
  7345.               (see #1431)
  7346.         Return: CF clear if successful
  7347.                 AX = 0000h
  7348.             CF set if unsupported function
  7349.     AX = 0006h query API support
  7350.         BX = asynchronous API identifier
  7351.         Return: CF clear if successful
  7352.                 AX = 0000h
  7353.                 ES:BX -> API info structure (see #1435) for the
  7354.                       client which provides the highest
  7355.                       level of API support
  7356.             CF set if unsupported function
  7357.  
  7358. Format of task switcher version structure:
  7359. Offset    Size    Description    (Table 1434)
  7360.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  7361.  02h    WORD    minor version of supported protocol
  7362.  04h    WORD    major version of task switcher
  7363.  06h    WORD    minor version of task switcher
  7364.  08h    WORD    task switcher ID (see AX=4B03h)
  7365.  0Ah    WORD    operation flags
  7366.         bit 0: set if task switcher disabled
  7367.         bits 1-15: reserved (0)
  7368.  0Ch    DWORD    pointer to ASCIZ task switcher name
  7369.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  7370.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  7371.  
  7372. Format of API info structure:
  7373. Offset    Size    Description    (Table 1435)
  7374.  00h    WORD    size of structure in bytes (000Ah)
  7375.  02h    WORD    API identifier
  7376.         0001h NetBIOS
  7377.         0002h 802.2
  7378.         0003h TCP/IP
  7379.         0004h LAN Manager named pipes
  7380.         0005h Novell NetWare IPX
  7381.  04h    WORD    major version \ of highest version of API for which the support
  7382.  06h    WORD    minor version / level specified in the next field is provided
  7383.  08h    WORD    support level
  7384.         0001h minimal support
  7385.         0002h API-level support
  7386.         0003h switcher compatibility
  7387.         0004h seamless compatibility
  7388. --------T-2F4B03-----------------------------
  7389. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  7390.     AX = 4B03h
  7391.     ES:DI -> task switcher entry point (see #1433)
  7392. Return: AX = 0000h
  7393.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  7394. Notes:    if a task switcher has determined that it is the first to be loaded, it
  7395.       must allocate an identifier for itself and provide this function to
  7396.       all subsequent task switchers; if it is not the first to be loaded,
  7397.       it must call this function to allocate an ID.     The switcher ID is
  7398.       used as the high four bits of all session identifiers to ensure
  7399.       unique session IDs.
  7400.     if no more switcher IDs are available, the new task switcher making the
  7401.       call must terminate or disable itself
  7402.     the task switcher providing the identifiers may call the new task
  7403.       switcher's entry point as needed
  7404.     this call is available from within DOSSHELL even if the task switcher
  7405.       is not installed
  7406.     this function is supported by PC Tools v8+ CPTASK, but appears to
  7407.       always return an ID of 0000h
  7408. SeeAlso: AX=4B02h,AX=4B04h
  7409. --------T-2F4B04-----------------------------
  7410. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  7411.     AX = 4B04h
  7412.     BX = switcher ID
  7413.     ES:DI -> task switcher entry point (see #1433)
  7414. Return: AX = 0000h
  7415.     BX = status
  7416.         0000h successful
  7417.         other error (invalid ID or ID not allocated)
  7418. Notes:    called by a task switcher when it exits, unless it was the first loaded
  7419.       and is providing the support for AX=4B03h and AX=4B04h
  7420.     the task switcher providing the identifiers may call the terminating
  7421.       task switcher's entry point as needed
  7422.     this call is available from within DOSSHELL even if the task switcher
  7423.       is not installed
  7424.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  7425.       sucessfully no matter which ID is given
  7426. SeeAlso: AX=4B02h,AX=4B03h
  7427. --------T-2F4B05-----------------------------
  7428. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  7429.     AX = 4B05h
  7430.     ES:BX = 0000h:0000h
  7431.     CX:DX -> task switcher entry point (see #1433)
  7432. Return: ES:BX -> startup info structure (see #1436) or 0000h:0000h
  7433. Notes:    called by task switcher
  7434.     clients with instance data should hook this call, pass it through to
  7435.       the previous handler with unchanged registers using a simulated
  7436.       interrupt.  On return, the client should create a startup info
  7437.       structure (see #1436), store the returned ES:BX in the "next"
  7438.       field, and return the address of the created structure in ES:BX
  7439.     all MS-DOS function calls are available from within this call
  7440. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  7441.  
  7442. Format of task switcher startup info structure:
  7443. Offset    Size    Description    (Table 1436)
  7444.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  7445.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  7446.  06h    DWORD    0000h:0000h (ignored)
  7447.  0Ah    DWORD    ignored
  7448.  0Eh    DWORD    pointer to instance data records (see #1437)
  7449.  
  7450. Format of one instance data record in array:
  7451. Offset    Size    Description    (Table 1437)
  7452.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  7453.  04h    WORD    size of instance data
  7454. --------W-2F4B20-----------------------------
  7455. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  7456.     AX = 4B20h
  7457. Return: AX = 0000h if successful
  7458.         DX:CX -> 256-byte buffer for pathname and commandline (see #1438)
  7459. Note:    when the Windows function ExitWindows is called with an exit code of
  7460.       44h, WIN.COM executes the program specified in the returned buffer
  7461.       and then restarts Windows
  7462.  
  7463. Format of WIN.COM buffer:
  7464. Offset    Size    Description    (Table 1438)
  7465.  00h 128 BYTEs    ASCIZ pathname of program to execute
  7466.  80h 128 BYTEs    commandline for program
  7467. --------p-2F4C-------------------------------
  7468. INT 2F U - Advanced Power Management
  7469.     AH = 4Ch
  7470.     AL = function
  7471.         00h version check
  7472.         01h suspend system requested
  7473.         FFh suspend/resume battery notification
  7474.     ???
  7475. Return: ???
  7476. ----------2F4D-------------------------------
  7477. INT 2F U - ???
  7478.     AH = 4Dh
  7479.     ???
  7480. Return: ???
  7481. Note:    reportedly called by Kana Kanji Converter and MSKK
  7482. --------N-2F4E53BL00-------------------------
  7483. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  7484.     AX = 4E53h ("NS")
  7485.     BL = 00h (function "installation check")
  7486.     BH = module ID (see #1439)
  7487. Return: AX = 0000h if specified module installed
  7488.     BX = 4E53h if installed
  7489. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  7490.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  7491. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  7492.  
  7493. (Table 1439)
  7494. Values for SilverNET module ID:
  7495.  01h    SilverCACHE
  7496.  02h    Workstation
  7497.  03h    NetBIOS
  7498.  04h    Peer
  7499.  20h    NS Share
  7500.  80h    NetWare help TSR
  7501. --------N-2F4E53BL01-------------------------
  7502. INT 2F - SilverNET - GET RUNTIME PARAMETER
  7503.     AX = 4E53h ("NS")
  7504.     BL = 01h (function "get runtime parameter")
  7505.     BH = module ID (see #1439)
  7506.     CX = parameter index (see #1440,#1442,#1443)
  7507. Return: AX = WORD value at specified index (see #1441)
  7508. Desc:    retrieve a word of data from the specified SilverNET module
  7509.  
  7510. (Table 1440)
  7511. Values for SilverNET Peer parameter index (* = read-only):
  7512.  00h *    maximum outstanding SMB buffers
  7513.  02h *    maximum logged-in nodes
  7514.  04h *    number of shareable resources
  7515.  06h *    number of characters to print per time slice
  7516.  08h *    number of printers that can be shared
  7517.  0Ah *    number of nodes logged in
  7518.  0Ch *    number of files to allow opened
  7519.  0Eh    how fast to despool (/PSLICE)
  7520.  10h    audit flag
  7521.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  7522.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  7523.     else DOS SFT)
  7524.  36h    spool flags (see #1441)
  7525.  
  7526. Bitfields for spool flags:
  7527. Bit(s)    Description    (Table 1441)
  7528.  0    LPT1 needs despooling
  7529.  1    LPT2 needs despooling
  7530.  2    LPT2 needs despooling
  7531.  4    COM1 needs despooling
  7532.  5    COM2 needs despooling
  7533.  6    COM3 needs despooling
  7534.  
  7535. (Table 1442)
  7536. Values for NS Share parameter index (* = read-only):
  7537.  00h    version number (high byte = minor, low byte = major)
  7538.  10h *    segment of first lock record (other records in consecutive paragraphs)
  7539.     (if PSP field = 0000h, lock record is free)
  7540.  12h *    maximum possible number of lock records
  7541.  14h *    starting segment of sharing buffer
  7542.     (NS Share's sharing records are identical to DOS SHARE except that
  7543.       fields which are normally offsets into SHARE are segment numbers)
  7544.  18h *    size of sharing buffer in paragraphs
  7545.  1Ah *    total free paragraphs in sharing buffer
  7546.  1Ch *    current number of shared files
  7547.  1Eh *    current number of locked records
  7548.  
  7549. (Table 1443)
  7550. Values for Workstation parameter index (* = read-only):
  7551.  00h    version number (high byte = minor, low byte = major)
  7552.  02h *    size of each network buffer for file operations
  7553.  04h *    number of redirector file buffers
  7554.  06h *    size of each print cache buffer
  7555.  08h *    number of network LPT printers
  7556.  0Ch    flush time in ticks (idle time on network printer before flushing)
  7557.  0Eh    (16 WORDs) last active time for each printer
  7558.  2Eh *    stub segment if program split into two parts
  7559.  60h    receive name number for datagram listens
  7560.  62h *    18-byte machine name
  7561.  74h *    LASTDRIVE (01h = A:, etc.)
  7562.  7Ch    row number of message box on screen
  7563.  7Eh    message time in clock ticks
  7564.  82h *    number of network adapters in use
  7565.  84h    station ID broadcast flag (never set on redirectors)
  7566.  96h *    NetBIOS names left
  7567.  98h *    NCBs left
  7568.  9Ah *    sessions left
  7569.  A2h *    total number of network printers (LPT+COM)
  7570.  A4h *    number of serial network printers
  7571.  A8h *    segment containing file cache buffers
  7572.  AAh *    segment containing print cache buffers
  7573.  ACh *    bytes remaining free in HMA before program loaded
  7574.  AEh *    start of free memory in HMA
  7575.  B2h *    flag: using HMA
  7576. --------N-2F4E53BL02-------------------------
  7577. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  7578.     AX = 4E53h ("NS")
  7579.     BL = 02h (function "set runtime parameters")
  7580.     BH = module ID (see #1439)
  7581.     CX = parameter index (see #1442,#1443)
  7582.     DX = new value for specified parameter
  7583. Desc:    set a WORD value in the specified SilverNET module
  7584. Note:    not all indexed parameters are writable; modifying a read-only
  7585.       parameter can result in system crashes
  7586. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  7587. --------N-2F5100-----------------------------
  7588. INT 2F U - ODIHLP.EXE - INSTALLATION CHECK
  7589.     AX = 5100h
  7590. Return: AL = FFh if installed
  7591.         BX = 0000h
  7592.         DX:SI -> signature string "ODI$HLP$"
  7593. Program: ODIHLP is a real-mode helper allowing the Windows for Workgroups 3.11
  7594.       protected-mode NDIS3 protocol to work with real-mode ODI drivers
  7595.       and LSL.COM
  7596. Note:    the returned signature string might be the first field of a structure
  7597. SeeAlso: AX=C000h"LSL.COM"
  7598. --------k-2F5200-----------------------------
  7599. INT 2F - JAM.SYS v1.10 - "GetVersion" - INSTALLATION CHECK
  7600.     AX = 5200h
  7601. Return: AH = 80h (successful)
  7602.     BX = internal JAM.SYS version number
  7603.     CX = size of JAMINFO structure (see #1444)
  7604.     DX = JAM.SYS segment address
  7605. Program: JAM.SYS is a main component of the JAM Real-Time Data Compression
  7606.       Utilities by George A. Reznik and friends (JAM Software).
  7607. SeeAlso: AX=5201h
  7608.  
  7609. Format of JAMINFO structure:
  7610. Offset    Size    Description    (Table 1444)
  7611.  00h 25 BYTEs    extended BIOS parameter block (BPB)
  7612.  25h    DWORD    total number of sectors in JAM archive file
  7613.         (size of compressed data area)
  7614.  29h    BYTE    flags
  7615.         bit 7: full undelete-compatible allocation strategy
  7616.         bit 6: no write-behind caching
  7617.         bit 5: read-only mode
  7618.         bit 4: enable direct write requests
  7619.                (Int 26h, non-DOS requests, etc.)
  7620.         bits 3..0 are reserved for internal use
  7621.  2Ah 127 BYTEs    full JAM archive file name
  7622.  A9h    WORD    the number of fragments in archive file
  7623.  ABh 96 BYTEs    archive file fragmentation list -
  7624.         array of 16 FRAGMENT structures:
  7625.         Offset    Size    Description
  7626.          00h    WORD    starting sector (low word)
  7627.          02h    BYTE    starting sector (high byte)
  7628.          03h    WORD    size of fragment (low word)
  7629.          05h    BYTE    size of fragment (high byte)
  7630. 10Bh    DWORD    address of the host-drive DPB (Drive Parameter Block)
  7631. 10Fh    DWORD    number of free sectors in JAM archive file
  7632. 113h    WORD    device status word (see #1445)
  7633.  
  7634. (Table 1445)
  7635. Values for JAM.SYS status (high byte):
  7636.  00h    successful
  7637.  01h    drive is not a JAM drive
  7638.  02h    drive is already attached
  7639.  03h    archive file cluster size value is larger than driver's one
  7640.  04h    drive is not attached
  7641.  05h    drive is locked
  7642.  06h    drive is not locked
  7643.  07h    bad physical-level request
  7644.  08h    host drive reading/writing error
  7645.  09h    bad entries in JAM descriptor table
  7646.  0Ah    compressed data integrity error
  7647.  0Bh    archive file overflow
  7648.  0Ch    bad DOS request
  7649.  0Dh    incorrect parameters in JAMINFO structure
  7650. Note:    the low byte of the status is the DOS error code for the Host drive
  7651. SeeAlso: #1290 at INT 2F/AX=0802h
  7652. --------k-2F5201-----------------------------
  7653. INT 2F - JAM.SYS v1.10 - "GetInfo" - GET COMPRESSED DRIVE INFORMATION
  7654.     AX = 5201h
  7655.     DL = compressed drive number (0-default, 1-A:, etc.)
  7656.     DS:BX -> buffer for JAMINFO structure (see #1444)
  7657. Return: AH = status (00h,01h) (see #1445)
  7658. SeeAlso: AX=5200h
  7659. --------k-2F52-------------------------------
  7660. INT 2F - JAM.SYS v1.10 - "Attach" - MOUNT COMPRESSED DRIVE
  7661.     AH = 52h
  7662.     AL = 02h
  7663.     DL = drive number (0-default, 1-A:, etc.) to attach to the JAM
  7664.           archive file
  7665.     DS:BX -> pointer to JAMINFO structure (see #1444), which
  7666.           contains parameters of the JAM file to mount, and pointer
  7667.           to the host drive DPB (i.e. DPB of the drive on which the
  7668.           JAM file is located)
  7669. Return: AH = status (00h,02h,03h,08h,09h,0Dh) (see also #1445)
  7670.         03h archive file cluster size value is larger than driver's - not
  7671.           mounted
  7672.         09h bad entries in JAM descriptor table - file mounted read-only
  7673.     AL = host drive error code (see #1290 at INT 2F/AX=0802h)
  7674. SeeAlso: AX=5203h
  7675. --------k-2F5203-----------------------------
  7676. INT 2F - JAM.SYS v1.10 - "Detach" - UNMOUNT COMPRESSED DRIVE
  7677.     AX = 5203h
  7678.     DL = drive number (0-default, 1-A:, etc.) to detach
  7679. Return: AH = status (00h,01h,04h,05h,08h,09h,0Bh,0Dh) (see #1445)
  7680.     AL = host drive error code (see #1290 at INT 2F/AX=0802h)
  7681. SeeAlso: AX=5202h
  7682. --------k-2F5204-----------------------------
  7683. INT 2F - JAM.SYS v1.10 - "Lock" - LOCK COMPRESSED DRIVE
  7684.     AX = 5204h
  7685.     DL = drive number (0-default, 1-A:, etc.) to lock
  7686. Return: AH = status (00h,01h,04h,05h,08h,09h,0Bh,0Dh) (see #1445)
  7687.     AL = host drive error code (see #1290 at INT 2F/AX=0802h)
  7688. SeeAlso: AX=5205h, AX=5206h, AX=5207h
  7689. --------k-2F5205-----------------------------
  7690. INT 2F - JAM.SYS v1.10 - "UnLock" - UNLOCK COMPRESSED DRIVE
  7691.     AX = 5205h
  7692.     DL = drive number (0-default, 1-A:, etc.) to unlock
  7693. Return: AH = status (00h,01h,04h,06h,08h,09h,0Dh) (see #1445)
  7694.     AL = host drive error code (see #1290 at INT 2F/AX=0802h)
  7695. SeeAlso: AX=5204h, AX=5206h, AX=5207h
  7696. Note:    Lock and UnLock functions were added to the JAM API to prevent
  7697.       asynchronous physical-level access (see AX=5206h,AX=5207h) to
  7698.       compressed data on JAM drives. In other words, two or more programs
  7699.       which use JAM API (say, JMAX optimizer and JCHKDSK - disk checker)
  7700.       cannot be run on the same JAM drive simultaneously.
  7701. --------k-2F5206-----------------------------
  7702. INT 2F - JAM.SYS v1.10 - "Read" - PHYSICAL READ DATA FROM JAM ARCHIVE
  7703.     AX = 5206h
  7704.     DL = drive number (0-default, 1-A:, etc.)
  7705.     DS:BX -> disk transfer packet (see #1446)
  7706. Return: AH = status (00h,01h,04h,06h,07h,08h,0Dh) (see #1445)
  7707.     AL = host drive error code (see #1290 at INT 2F/AX=0802h)
  7708. Program: JAM.SYS is a main component of the JAM Real-Time Data Compression
  7709.       Utilities by George A. Reznik and friends (JAM Software).
  7710. SeeAlso: AX=5207h
  7711.  
  7712. Format of disk transfer packet:
  7713. Offset    Size    Description    (Table 1446)
  7714.  00h    DWORD    sector number
  7715.  04h    WORD    number of sectors to read(write)
  7716.  06h    DWORD    transfer address
  7717. --------k-2F5207-----------------------------
  7718. INT 2F - JAM.SYS v1.10 - "Write" - PHYSICAL WRITE DATA TO JAM ARCHIVE
  7719.     AX = 5207h
  7720.     DL = drive number (0-default, 1-A:, etc.)
  7721.     DS:BX -> disk transfer packet (see #1446)
  7722. Return: AH = status (00h,01h,04h,06h,07h,08h,0Dh) (see #1445)
  7723.     AL = host drive error code (see #1290 at INT 2F/AX=0802h)
  7724. SeeAlso: AX=5206h
  7725. --------p-2F53-------------------------------
  7726. INT 2F U - POWER.EXE - APM event broadcasting???
  7727.     AH = 53h
  7728.     AL = event???
  7729.         05h CPU idle
  7730.         0Bh PM event broadcast API
  7731. Return: ???
  7732. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  7733.       and PC-Cache v8.0
  7734. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  7735. --------p-2F530B-----------------------------
  7736. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  7737.     AX = 530Bh
  7738.     BX = subfunction
  7739.         0003h ???
  7740.         0004h ???
  7741.     ???
  7742. Return: ???
  7743. Note:    it appears that subfunction 0003h reads or restores the current mouse
  7744.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  7745.       the converse
  7746. --------p-2F5400-----------------------------
  7747. INT 2F U - POWER.EXE - INSTALLATION CHECK
  7748.     AX = 5400h
  7749. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  7750.     BX = 504Dh ("PM")
  7751.     CF clear
  7752. Note:    called by MS Windows 3.1 POWER.DRV
  7753. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  7754. --------p-2F5401-----------------------------
  7755. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  7756.     AX = 5401h
  7757.     BH = function
  7758.         00h get status
  7759.         Return: BL = current power management status (see #1447)
  7760.         01h set status
  7761.         BL = new power managment status (see #1447)
  7762. Return: AX = function status (see #1448)
  7763. Note:    called by MS Windows 3.1 POWER.DRV
  7764. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  7765.  
  7766. Bitfields for power management status:
  7767. Bit(s)    Description    (Table 1447)
  7768.  0    POWER.EXE power management enabled
  7769.  1    APM firmware power management enabled
  7770.  2-7    reserved (0)
  7771. Notes:    bit 1 is ignored if there is no APM firmware
  7772.     bits 1-0: 00 = POWER OFF, 10 = POWER STD, 11 = POWER ADV
  7773.  
  7774. (Table 1448)
  7775. Values for POWER.EXE function status:
  7776.  0000h    successful
  7777.  0002h    "ERROR_PM_ALREADY_CONNECTED"
  7778.  0003h    "ERROR_PM_NOT_CONNECTED"
  7779.  0087h    "ERROR_PM_INVALID_PARAMETER"
  7780. --------p-2F5402-----------------------------
  7781. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  7782.     AX = 5402h
  7783.     BH = subfunction
  7784.         00h get
  7785.         other set
  7786.         BL = detection strategy (00h-0Fh or FFh)
  7787. Return: BX = current/new detection strategy
  7788. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  7789. --------p-2F5403-----------------------------
  7790. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  7791.     AX = 5403h
  7792.     BX = new power management setting or 0000h to get current setting
  7793. Return: AX = status
  7794.         0000h successful
  7795.         BX = power management setting (see #1449)
  7796.         other error code
  7797. SeeAlso: AX=5401h,AX=5480h
  7798.  
  7799. (Table 1449)
  7800. Values for power management setting:
  7801.  0001h-0005h "min"
  7802.  0006h         "reg"
  7803.  0007h-0008h "max"
  7804. --------t-2F5453-----------------------------
  7805. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  7806.     AX = 5453h
  7807.     BX = subfunction
  7808.         00h installation check
  7809.         CX = 0000h
  7810.         DS:SI -> 8-char blank-padded name
  7811.         Return: AX = FFFFh installed
  7812.                 CX = ID number of already-installed copy
  7813.             AX = anything else, not installed
  7814.                 CX = ID number for TSR when installed
  7815.         01h get user parameters
  7816.         CX = TSR ID number
  7817.         Return: AX = status
  7818.                 0000h successful
  7819.                 ES:BX -> user parameter block (see #1450)
  7820.                 nonzero failed
  7821.         02h check if hotkey in use
  7822.         CL = scan code of hot key
  7823.         Return: AX = FFFFh hot key conflicts with another TSR
  7824.                  otherwise safe to use the hotkey
  7825.         03h replace default critical error handler
  7826.         CX = TSR ID number
  7827.         DS:SI -> new routine for INT 24h
  7828.         Return: AX = nonzero, unable to install new handler
  7829.         04h get internal data area
  7830.         CX = TSR ID number
  7831.         Return: AX = status
  7832.                 0000h successful
  7833.                 ES:BX -> TSR's internal data area (see #1452)
  7834.                 nonzero, TSR not found
  7835.         05h set multiple hot keys
  7836.         CX = TSR ID number
  7837.         DL = number of additional hot keys to allocate
  7838.         DS:SI -> table of hot keys
  7839.             BYTE  hotkey scan code
  7840.             BYTE  hotkey shift state
  7841.             BYTE  flag value to pass to TSR (nonzero)
  7842.         Return: AX = nonzero, unable to install hot keys
  7843.         06h - 0Fh reserved
  7844.         10h enable TSR
  7845.         CX = TSR ID number
  7846.         Return: AX = nonzero, unable to enable
  7847.         11h disable TSR
  7848.         CX = TSR ID number
  7849.         Return: AX = nonzero, unable to disable
  7850.         12h unload TSR
  7851.         CX = TSR ID number
  7852.         Return: AX = nonzero, invalid TSR number
  7853.         Note: if any interrupts used by TSR have been grabbed by
  7854.             another TSR, the TesSeRact routines will wait until
  7855.             it is safe to remove the indicated TSR from memory
  7856.         13h restart TSR
  7857.         CX = TSR ID number of TSR which was unloaded but is still in
  7858.              memory
  7859.         Return: AX = nonzero, unable to restart TSR
  7860.         14h get status word
  7861.         CX = TSR ID number
  7862.         Return: AX = FFFFh invalid ID number
  7863.                = other, successful
  7864.                 BX = bit flags
  7865.         15h set status word
  7866.         CX = TSR ID number
  7867.         DX = new bit flags
  7868.         Return: AX = nonzero, unable to set status word
  7869.         16h get INDOS state at popup
  7870.         CX = TSR ID number
  7871.         Return: AX = 0000h successful
  7872.                 BX = value of INDOS flag
  7873.         17h - 1Fh reserved
  7874.         20h call user procedure
  7875.         CX = TSR ID number
  7876.         ES:DI -> user-defined data
  7877.         Return: AX = 0000h successful
  7878.         21h stuff keystrokes into keyboard buffer
  7879.         CX = TSR ID number
  7880.         DL = speed
  7881.             00h stuff keystrokes only when buffer is empty
  7882.             01h stuff up to four keystrokes per clock tick
  7883.             02h stuff up to 15 keystrokes per clock tick
  7884.         DH = scan code flag
  7885.             if zero, buffer contains alternating ASCII and scan codes
  7886.             if nonzero, buffer contains only ASCII codes
  7887.         SI = number of keystrokes
  7888.         ES:DI -> buffer to stuff
  7889.         Return: AX = 0000h success
  7890.                  F0F0h user aborted with ^C or ^Break
  7891.                  other unable to stuff keystrokes
  7892.         22h (v1.10) trigger popup
  7893.         CX = TSR ID number
  7894.         Return: AX = 0000h success, TSR will either pop up or beep to
  7895.                    indicate that it is unable to pop up
  7896.                  nonzero invalid ID number
  7897.         23h (v1.10) invoke TSR's background function
  7898.         CX = TSR ID number
  7899.         Return: AX = 0000h success
  7900.                  FFFFh not safe to call background function
  7901.                  nonzero invalid ID number
  7902.         24h - 2Fh reserved
  7903. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  7904.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  7905.       do the SWAP?? programs by Innovative Data Concepts.
  7906.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  7907.       of the user parameter block) using the name "AVATAR  "
  7908. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  7909. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  7910.  
  7911. (Table 1450)
  7912. Values for TesSeRact names:
  7913.  "AVATAR  "    AVATAR.SYS
  7914.  "QeditTSR"    TSR version of SemWare's Qedit editor
  7915.  "SCRNBLNK"    Trusted Access screen blanker
  7916.  
  7917. Format of TesSeRact User Parameter Block:
  7918. Offset    Size    Description    (Table 1451)
  7919.  00h  8 BYTEs    blank-padded TSR name
  7920.  08h    WORD    TSR ID number
  7921.  0Ah    DWORD    bitmap of supported functions
  7922.  0Eh    BYTE    scan code of primary hotkey
  7923.         00h = pop up when shift states match
  7924.         FFh = no popup (if shift state also FFh)
  7925.  0Fh    BYTE    shift state of primary hotkey
  7926.         FFh = no popup (if scan code also FFh)
  7927.  10h    BYTE    number of secondary hotkeys
  7928.  11h    DWORD    pointer to extra hotkeys set by func 05h
  7929.  15h    WORD    current TSR status flags
  7930.  17h    WORD    PSP segment of TSR
  7931.  19h    DWORD    DTA for TSR
  7932.  1Dh    WORD    default DS for TSR
  7933.  1Fh    DWORD    stack at popup
  7934.  23h    DWORD    stack at background invocation
  7935. Index:    hotkeys;TesSeRact TSR interface
  7936.  
  7937. Format of TSR internal data area:
  7938. Offset    Size    Description    (Table 1452)
  7939.  00h    BYTE    revision level of TesSeRact library
  7940.  01h    BYTE    type of popup in effect
  7941.  02h    BYTE    INT 08 occurred since last invocation
  7942.  03h    BYTE    INT 13 occurred since last invocation
  7943.  04h    BYTE    active interrupts
  7944.  05h    BYTE    active soft interrupts
  7945.  06h    BYTE    DOS major version
  7946.  07h    BYTE    how long to wait before popping up
  7947.  08h    DWORD    pointer to INDOS flag
  7948.  0CH    DWORD    pointer to DOS critical error flag
  7949.  10h    WORD    PSP segment of interrupted program
  7950.  12h    WORD    PSP segment of prog interrupted by INT 28
  7951.  14h    DWORD    DTA of interrupted program
  7952.  18h    DWORD    DTA of program interrupted by INT 28
  7953.  1Ch    WORD    SS of interrupted program
  7954.  1Eh    WORD    SP of interrupted program
  7955.  20h    WORD    SS of program interrupted by INT 28
  7956.  22h    WORD    SP of program interrupted by INT 28
  7957.  24h    DWORD    INT 24 of interrupted program
  7958.  28h  3 WORDs    DOS 3+ extended error info
  7959.  2Eh    BYTE    old BREAK setting
  7960.  2Fh    BYTE    old VERIFY setting
  7961.  30h    BYTE    were running MS WORD 4.0 before popup
  7962.  31h    BYTE    MS WORD 4.0 special popup flag
  7963.  32h    BYTE    enhanced keyboard call in use
  7964.  33h    BYTE    delay for MS WORD 4.0
  7965. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  7966.     DWORD    old interrupt vector
  7967.     BYTE    interrupt number
  7968.     WORD    offset in TesSeRact code segment of new interrupt handler
  7969. --------p-2F5480-----------------------------
  7970. INT 2F U - POWER.EXE - GET/SET ???
  7971.     AX = 5480h
  7972.     BX = direction
  7973.         0000h get
  7974.         other set
  7975.     CX = size of buffer (at least 0010h)
  7976.     DS:SI -> buffer
  7977. Return: AX = status
  7978.         0000h successful
  7979.         other error code
  7980. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  7981. --------p-2F5481-----------------------------
  7982. INT 2F U - POWER.EXE - GET STATISTICS
  7983.     AX = 5481h
  7984.     BX = which statistics
  7985.         0000h idle detection
  7986.         0001h APM statistics
  7987.     CX = length of buffer in bytes
  7988.     DS:SI -> buffer for statistics (see #1453,#1454)
  7989. Return: AX = status
  7990.         0000h successful
  7991.         0071h "ERROR_PM_BUFFER_TOO_SMALL"
  7992.         0087h "ERROR_PM_INVALID_PARAMETER"
  7993. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  7994.  
  7995. Format of POWER.EXE idle detection statistics:
  7996. Offset    Size    Description    (Table 1453)
  7997.  00h    DWORD    "CPU_ON_TIME" total time CPU is active with POWER.EXE idle
  7998.           detection enabled, in timer ticks
  7999.  04h    DWORD    "CPU_IDLE_TIME" timer ticks during which CPU was idle
  8000.         (divide by previous to get idle    rate)
  8001.  08h    DWORD    total idle calls
  8002.  0Ch    DWORD    "TOTAL_APP_IDLE" total INT 2Fh idle calls
  8003.  10h    DWORD    "TOTAL_DOS_YIELD" total INT 28h idle calls
  8004.  14h    DWORD    "TOTAL_KEY_IDLE" total INT 16h idle calls
  8005.  18h    DWORD    "TOTAL_DOS_IDLE" total INT 2Ah idle calls
  8006.  
  8007. Format of APM statistics:
  8008. Offset    Size    Description    (Table 1454)
  8009.  00h    DWORD    "RESUME_COUNT" total number of resumes since last APM_ENABLE
  8010. --------p-2F5482-----------------------------
  8011. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  8012.     AX = 5482h
  8013.     BX = new polling frequency or 0000h to get current frequency
  8014. Return: AX = 0000h (successful)
  8015.     BX = current frequency if BX=0000h on entry
  8016. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  8017. --------p-2F548F-----------------------------
  8018. INT 2F U - POWER.EXE - GET/SET ???
  8019.     AX = 548Fh
  8020.     BX = ??? or 0000h to get current ???
  8021. Return: AX = 0000h (successful)
  8022.     BX = current ???
  8023.     CX = ???
  8024. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  8025. --------l-2F5500-----------------------------
  8026. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  8027.     AX = 5500h
  8028. Return: AX = 0000h if an instance of COMMAND.COM is already running
  8029.     DS:SI -> entry point table
  8030. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  8031.       been moved into the HMA; only the primary COMMAND.COM retains this
  8032.       portion
  8033.     procedures called from a dispatcher in COMMAND's resident portion;
  8034.       most assume that the segment address of the resident portion is on
  8035.       the stack and are thus not of general use
  8036. SeeAlso: AX=5501h
  8037. --------l-2F5501-----------------------------
  8038. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  8039.     AX = 5501h
  8040. Return: ???
  8041. Note:    used to determine whether the caller is the first instance of ROM
  8042.       COMMAND.COM
  8043. SeeAlso: AX=5500h
  8044. --------R-2F5600DXFFFF-----------------------
  8045. INT 2F - INTERLNK - INSTALLATION CHECK
  8046.     AX = 5600h
  8047.     DX = FFFFh
  8048.     BL = instance number (00h = any, 01h = first loaded, etc.)
  8049. Return: AL = FFh if installed
  8050.         BL = instance number
  8051.         CX = ???
  8052.         DX = resident CS
  8053. SeeAlso: AX=5601h,AX=5602h
  8054. --------R-2F5601DXFFFF-----------------------
  8055. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  8056.     AX = 5601h
  8057.     DX = FFFFh
  8058.     BH = drive number (0=A:)
  8059.     BL = 00h
  8060. Return: (as for AL=00h if redirected drive)
  8061. SeeAlso: AX=5600h
  8062. --------R-2F5602DXFFFF-----------------------
  8063. INT 2F - INTERLNK - GET ???
  8064.     AX = 5602h
  8065.     DX = FFFFh
  8066. Return: CX = ???
  8067. SeeAlso: AX=5600h
  8068. ----------2F57-------------------------------
  8069. INT 2F U - ???
  8070.     AH = 57h
  8071.     ???
  8072. Return: ???
  8073. Note:    reportedly used by Iomega Corp.
  8074. --------c-2F5758BX4858-----------------------
  8075. INT 2F U - Helix Multimedia Cloaking - CACHECLK - INSTALLATION CHECK
  8076.     AX = 5758h
  8077.     BX = 4858h ('HX')
  8078.     DX = 4443h ('DC')
  8079.     CX <> 5758h
  8080. Return: BX = 6878h if installed
  8081.     DX = 6463h if installed
  8082.        CX = version (CH=major,CL=minor)
  8083. Program: CACHECLK is a 'Cloaked' disk cache by Helix Software
  8084. Note:    returns with registers unchanged if CX=5758h on entry
  8085. SeeAlso: INT 16/AX=5758h/BX=4858h,INT 2F/AX=4310h"Cloaking"
  8086. --------X-2F5D00-----------------------------
  8087. INT 2F U - PCMCIA - AWARD PCDISK - GET INFO FROM DRIVER ???
  8088.     AX = 5D00h
  8089. Return: ES:BX -> ???
  8090. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  8091. SeeAlso: AX=5D01h,INT 21/AX=440Dh
  8092. --------X-2F5D01-----------------------------
  8093. INT 2F U - PCMCIA - AWARD PCDISK - PUT INFO INTO DRIVER ???
  8094.     AX = 5D01h
  8095.     ES:BX -> ???
  8096. Return: nothing
  8097. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  8098. SeeAlso: AX=5D00h,INT 21/AX=440Dh
  8099. --------s-2F60FFDL00-------------------------
  8100. INT 2F U - IPLAY v1.00b - INSTALLATION CHECK
  8101.     AX = 60FFh
  8102.     DL = 00h (function number)
  8103.     BX = 5344h ('SD')
  8104.     CX = 4D50h ('MP')
  8105. Return: AX = 4F4Bh ('OK') if installed
  8106. Program: IPLAY is the Inertia Player by Prime and Excalibur for .MODules
  8107.       (digitized music files)
  8108. Note:    in version 1.00b, any value for DL except 01h invokes this function
  8109. SeeAlso: AX=60FFh/DL=01h
  8110. --------s-2F60FFDL01-------------------------
  8111. INT 2F U - IPLAY v1.00b - GET DATA SEGMENT
  8112.     AX = 60FFh
  8113.     DL = 01h (function number)
  8114.     BX = 5344h ('SD')
  8115.     CX = 4D50h ('MP')
  8116. Return: AX = data segment
  8117. Program: IPLAY is the Inertia Player by Prime and Excalibur for .MODules
  8118.       (digitized music files)
  8119. SeeAlso: AX=60FFh/DL=00h
  8120. --------v-2F6282-----------------------------
  8121. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  8122.     AX = 6282h
  8123.     CX:DX -> ??? or 0000h:0000h
  8124.     DI = segment of ??? record (see #1455) or 0000h/FFFFh to ignore
  8125. Return: BX = 0062h
  8126. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  8127.       (DATAMON only)
  8128. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  8129.  
  8130. Format of VSAFE/VWATCH record:
  8131. Offset    Size    Description    (Table 1455)
  8132.  00h    DWORD    ???
  8133.  04h    WORD    offset of ??? in record's segment
  8134.         VSAFE 2.0 sets byte at +01h to 56h or 58h
  8135.         VWATCH 2.1 sets byte at +02h to 56h or 58h
  8136.  06h  2 BYTEs    ???
  8137.  08h    BYTE    ??? (01h/other)
  8138. --------v-2F6284BX0000-----------------------
  8139. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT    - INSTALLATION CHECK
  8140.     AX = 6284h
  8141.     BX = 0000h
  8142.     CX = 0000h
  8143. Return: AX = segment of resident code
  8144.     BX = 5555h
  8145.     CX = 5555h
  8146. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  8147. SeeAlso: AX=6284h/BX=0001h,INT 16/AX=FFA3h
  8148. --------v-2F6284BX0001-----------------------
  8149. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  8150.     AX = 6284h
  8151.     BX = 0001h
  8152.     CX = 0001h
  8153. Return: AX:BX -> ??? data (see #1456)
  8154.     CX = BX
  8155. SeeAlso: AX=6284h/BX=0000h
  8156.  
  8157. Format of DPROTECT data for v9.0:
  8158. Offset    Size    Description    (Table 1456)
  8159.  00h  5 BYTEs    ???
  8160.  05h    WORD    resident code segment (may be segment of DWORD at +03h)
  8161.  07h    DWORD    -> FAR function to sound alert tone
  8162.     ???
  8163. --------v-2F6284BX0002-----------------------
  8164. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET OPTIONS
  8165.     AX = 6284h
  8166.     BX = 0002h
  8167.     CX = 0002h
  8168. Return: AX = options (see #1457)
  8169.     BX = ??? (0000h for v9)
  8170.     CX = AX
  8171.     DX = BX
  8172. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  8173. SeeAlso: AX=6284h/BX=0000h,AX=6284h/BX=0003h
  8174.  
  8175. Bitfields for DATAMON/DPROTECT options:
  8176. Bit(s)    Description    (Table 1457)
  8177.  1    ???
  8178.  12    disabled
  8179.  13    using Delete Sentry
  8180.  14    using Delete Tracker
  8181. --------v-2F6284BX0003-----------------------
  8182. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - SET OPTION??? FLAGS
  8183.     AX = 6284h
  8184.     BX = 0003h
  8185.     CX = flags (see #1458)
  8186.     DX = flags
  8187.         bit 15: ???
  8188. Note:    v9 DPROTECT only checks bit 12 of CX, and ignores DX entirely
  8189. SeeAlso: AX=6284h/BX=0002h
  8190.  
  8191. Bitfields for DATAMON/DPROTECT CX flags:
  8192. Bit(s)    Description    (Table 1458)
  8193.  3    ???
  8194.  5    ???
  8195.  10    ???
  8196.  12    disable DATAMON/DPROTECT
  8197. --------v-2F6284BX0004-----------------------
  8198. INT 2F U - PC Tools v8 DATAMON, v9+ DPROTECT - ???
  8199.     AX = 6284h
  8200.     BX = 0004h
  8201.     CX = 0004h
  8202. Return: AX = 5555h
  8203.     BX = ??? (0800h)
  8204.     CX = ??? (FCCCh for v8, FCCBh for v9)
  8205. --------V-2F6400-----------------------------
  8206. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  8207.     AX = 6400h
  8208. Return: AL = installation state
  8209.         00h not installed
  8210.         FFh installed
  8211. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  8212. SeeAlso: INT 10/AX=5555h,INT 14/AX=AA01h
  8213. Index:    screen saver;SCRNSAV2
  8214. --------N-2F7000-----------------------------
  8215. INT 2F - License Service API - INSTALLATION CHECK
  8216.     AX = 7000h
  8217.     CX = license server index (0000h to 001Fh)
  8218. Return: AL = status
  8219.         00h not installed
  8220.         FFh installed
  8221. Notes:    The License Service API is being maintained by Microsoft but is being
  8222.       supported by a large number of companies including Apple, Banyan,
  8223.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  8224.       and Wordperfect (not a complete list!)
  8225.     Each license service provider must search for the next free index
  8226.       slot to use
  8227. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  8228. --------N-2F7001-----------------------------
  8229. INT 2F - License Service API - REQUEST LICENSE
  8230.     AX = 7001h
  8231.     CX = license server index (0000h to 001Fh)
  8232.     DS:DX -> SLSREQUEST structure (see #1459)
  8233. Return: AX = status
  8234.         0000h success
  8235.         else  provider error code
  8236.     ES:BX = provider specific handle for the license context
  8237. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  8238.  
  8239. Format of License Service SLSREQUEST structure:
  8240. Offset    Size    Description    (Table 1459)
  8241.  00h    DWORD    (return) status code
  8242.  04h    DWORD    (return) handle identifying context
  8243.  08h    DWORD    (call) address of Publisher string
  8244.  0Ch    DWORD    (call) address of Product string
  8245.  10h    DWORD    (call) address of Version string
  8246.  14h    DWORD    units required
  8247.  18h    DWORD    address of comment string
  8248.  1Ch    DWORD    address of SLSCHALLENGE structure (see #1460)
  8249.  
  8250. Format of License Service SLSCHALLENGE structure:
  8251. Offset    Size    Description    (Table 1460)
  8252.  00h    DWORD    algorithm (currently always 1)
  8253.  04h    DWORD    secret to be challenged (1-255)
  8254.  08h    DWORD    size of challenge in bytes (1-255)
  8255.  0Ch  N BYTEs    challenge data
  8256. --------N-2F7002-----------------------------
  8257. INT 2F - License Service API - RELEASE LICENSE
  8258.     AX = 7002h
  8259.     CX = license server index (0000h to 001Fh)
  8260.     DS:DX -> SLSRELEASE structure (see #1461)
  8261.     ES:BX = provider specific handle for the license context
  8262. Return: AL = status
  8263.         00h not installed
  8264.         FFh installed
  8265. SeeAlso: AX=7001h,AX=7005h
  8266.  
  8267. Format of License Service SLSRELEASE structure:
  8268. Offset    Size    Description    (Table 1461)
  8269.  00h    DWORD    handle indentifying license context
  8270.  04h    DWORD    total units consumed
  8271.  08h    DWORD    address of comment string
  8272. --------N-2F7003-----------------------------
  8273. INT 2F - License Service API - UPDATE
  8274.     AX = 7003h
  8275.     CX = license server index (0000h to 001Fh)
  8276.     DS:DX -> SLSUPDATE structure (see #1462)
  8277.     ES:BX = provider specific handle for the license context
  8278. Return: AL = status
  8279.         00h not installed
  8280.         FFh installed
  8281. SeeAlso: AX=7004h,AX=7005h
  8282.  
  8283. Format of License Service SLSUPDATE structure:
  8284. Offset    Size    Description    (Table 1462)
  8285.  00h    DWORD    (return) status code
  8286.  04h    DWORD    (call) handle identifying license context
  8287.  08h    DWORD    (call) total units consumed
  8288.  0Ch    DWORD    additional units required
  8289.  10h    DWORD    address of comment string
  8290.  14h    DWORD    address of SLSCHALLENGE structure (see #1460)
  8291. --------N-2F7004-----------------------------
  8292. INT 2F - License Service API - GET ERROR
  8293.     AX = 7004h
  8294.     CX = license server index (0000h to 001Fh)
  8295.     DS:DX -> SLSGETERROR structure (see #1463)
  8296.     ES:BX = provider specific handle for the license context
  8297. Return: AL = status
  8298.         00h not installed
  8299.         FFh installed
  8300. SeeAlso: AX=7000h,AX=7001h
  8301.  
  8302. Format of License Service SLSGETERROR structure:
  8303. Offset    Size    Description    (Table 1463)
  8304.  00h    DWORD    (return) status code
  8305.  04h    DWORD    handle identifying license context
  8306.  08h    DWORD    error code
  8307.  0Ch    DWORD    buffer size in bytes
  8308.  10h  N BYTEs    data buffer
  8309. --------N-2F7005-----------------------------
  8310. INT 2F - License Service API - QUERY LICENSE
  8311.     AX = 7005h
  8312.     CX = license server index (0000h to 001Fh)
  8313.     DS:DX -> SLSQUERY structure (see #1464)
  8314.     ES:BX = provider specific handle for the license context
  8315. Return: AL = status
  8316.         00h not installed
  8317.         FFh installed
  8318. SeeAlso: AX=7001h,AX=7002h
  8319.  
  8320. Format of License Service SLSQUERY structure:
  8321. Offset    Size    Description    (Table 1464)
  8322.  00h    DWORD    (return) status code
  8323.  04h    DWORD    handle identifying license context
  8324.  08h    DWORD    information index
  8325.  0Ch    DWORD    buffer size in bytes
  8326.  10h  N BYTEs    data buffer
  8327. --------d-2F7200-----------------------------
  8328. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  8329.     AX = 7200h
  8330. Return: AL = FFh if installed
  8331.         ES = segment of device driver header (see #1465)
  8332. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  8333.  
  8334. Format of SRDISK device driver header:
  8335. Offset    Size    Description    (Table 1465)
  8336.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  8337.  0Ah    BYTE    number of subunits (drives) supported by driver
  8338.  0Bh  3 BYTEs    signature "SRD"
  8339.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  8340.  12h  4 BYTEs    ASCII driver version string "N.NN"
  8341.  16h    BYTE    00h
  8342.  17h    BYTE    configuration format version (currently 00h)
  8343.  18h    WORD    offset of drive configuration data
  8344. --------N-2F7A00-----------------------------
  8345. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  8346.     AX = 7A00h
  8347. Return: AL = status
  8348.         00h not installed
  8349.         FFh installed
  8350.         ES:DI -> FAR entry point for routines accessed exclusively
  8351.               through INT 7A in NetWare versions through 2.0a.
  8352.               Call with same values as INT 7A
  8353.         ES:BX -> two bytes containing IPX major/minor version
  8354.             (IPXODI v2.12; BX unchanged by older IPX drivers)
  8355. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  8356. --------N-2F7A10-----------------------------
  8357. INT 2F U - Novell NetWare - TBMI v1.1+ - GET TBMI STATUS
  8358.     AX = 7A10h
  8359. Return: DH = major TBMI version number
  8360.     DL = minor TBMI version number (01h for v1.1)
  8361.     CX = segment address of TBMI resident part
  8362.     BX = status word of TBMI (see #1466)
  8363. Note:    TBMI is the Task-Switched Buffer Manager Interface
  8364. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  8365.  
  8366. Bitfields for NetWare TBMI status word:
  8367. Bit(s)    Description    (Table 1466)
  8368.  0    INT2F intercepted by TBMI
  8369.  1    INT7A intercepted by TBMI
  8370.  2    INT64 intercepted by TBMI
  8371.  3-14    reserved or unused ???
  8372.  15    outstanding task ID was detected
  8373. --------N-2F7A11-----------------------------
  8374. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT2F HANDLERS
  8375.     AX = 7A11h
  8376. Return: ES:BX -> old INT 2F handler
  8377.     DS:DX -> TBMI INT 2F handler
  8378. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h,AX=7A1Ah
  8379. --------N-2F7A12-----------------------------
  8380. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT64 HANDLERS
  8381.     AX = 7A12h
  8382. Return: ES:BX -> old INT 64 handler
  8383.     DS:DX -> TBMI INT 64 handler
  8384. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  8385. --------N-2F7A13-----------------------------
  8386. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT7A HANDLERS
  8387.     AX = 7A13h
  8388. Return: ES:BX -> old INT 7A handler
  8389.     DS:DX -> TBMI INT 7A handler
  8390. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  8391. --------N-2F7A14-----------------------------
  8392. INT 2F U - Novell NetWare - TBMI v1.1+ - GET STATISTICS
  8393.     AX = 7A14h
  8394.     CX = statistic to retrieve
  8395.         0000h available diagnostic functions???
  8396.         Return: CX = maximum available function??? (000Ch for v2.0)
  8397.         0001h buffers in use
  8398.         Return: CX = TBMI buffers currently in use
  8399.         0002h maximum buffers used
  8400.         Return: CX = maximum number of buffers ever in use
  8401.         0003h unavailable buffers
  8402.         Return: CX = count of unavailable TBMI buffers
  8403.         0004h old interrupt usage
  8404.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  8405.                   INT 64, and INT 7A
  8406.         0005h far call usage
  8407.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  8408.                   including internal accesses)
  8409.         0006h task buffering
  8410.         Return: CX = TBMI task buffering status (enabled/disabled or
  8411.                   disable/enable switch count???)
  8412.         0007h current task ID
  8413.         Return: CX = TBMI current task ID number (0000h if ???)
  8414.         0008h outstanding ID count
  8415.         Return: CX = number of outstanding TBMI IDs
  8416.         0009h configured ECBs
  8417.         Return: CX = number of TBMI Event Control Blocks configured
  8418.         000Ah configured data ECBs
  8419.         Return: CX = number of TBMI data ECBs configured
  8420.         000Bh configured sockets
  8421.         Return: CX = number of TBMI sockets configured (from NETCFG)
  8422.         000Ch current sockets
  8423.         Return: CX = number of TBMI sockets currently in use
  8424. Return: BX = maximum supported subfunction (000Ch)
  8425. SeeAlso: AX=7A10h
  8426. --------N-2F7A15-----------------------------
  8427. INT 2F OU - Novell NetWare - TBMI v1.1 only - RESET ???
  8428.     AX = 7A15h
  8429. Return: BX = new value of ???
  8430. Desc:    set ??? to its default value
  8431. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  8432. SeeAlso: AX=7A17h
  8433. --------N-2F7A16-----------------------------
  8434. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  8435.     AX = 7A16h
  8436.     CX = ???
  8437.     ???
  8438. Return: ???
  8439. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  8440. --------N-2F7A17-----------------------------
  8441. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  8442.     AX = 7A17h
  8443.     ???
  8444. Return: BX = old value of ???
  8445.     CX = new value of ???
  8446. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  8447. SeeAlso: AX=7A15h
  8448. --------N-2F7A18-----------------------------
  8449. INT 2F U - Novell NetWare - TASKID v1.0 - INSTALLATION CHECK
  8450.     AX = 7A18h
  8451. Return: AL = FFh if installed
  8452.         BX = configuration flags (see #1467)
  8453.         CX = resident code segment
  8454. SeeAlso: AX=7A10h
  8455.  
  8456. Bitfields for NetWare TASKID configuration flags:
  8457. Bit(s)    Description    (Table 1467)
  8458.  0    INT 2F hooked
  8459.  3    INT 08 hooked
  8460.  other    unused
  8461. --------N-2F7A19-----------------------------
  8462. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 08 HANDLERS
  8463.     AX = 7A19h
  8464. Return: AL = FFh
  8465.     DS:DX -> TASKID INT 08 handler
  8466.     ES:BX -> original INT 08 handler
  8467. --------N-2F7A1A-----------------------------
  8468. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 2F HANDLERS
  8469.     AX = 7A1Ah
  8470. Return: AL = FFh
  8471.     DX:DX -> TASKID INT 2F handler
  8472.     ES:BX -> original INT 2F handler
  8473. SeeAlso: AX=7A11h,AX=7A19h
  8474. --------N-2F7A1B-----------------------------
  8475. INT 2F U - Novell NetWare - TASKID v1.0 - GET DIAGNOSTICS INFORMATION
  8476.     AX = 7A1Bh
  8477.     CX = desired information
  8478.         0000h supported functions
  8479.         0001h TASKID ID number
  8480.         Return: CX = ID number
  8481.         0002h set-ID count
  8482.         Return: CX = ID set count
  8483. Return: AL = FFh
  8484.     BX = highest supported subfunction number (0002h)
  8485. SeeAlso: AX=7A14h,AX=7A18h
  8486. --------N-2F7A1C-----------------------------
  8487. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  8488.     AX = 7A1Ch
  8489.     BP = ???
  8490.     CX:DX = ???
  8491. Return: AX = 70FFh
  8492. --------N-2F7A1D-----------------------------
  8493. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  8494.     AX = 7A1Dh
  8495.     ???
  8496. Return: ES = ???
  8497.     ???
  8498.     SI destroyed
  8499. --------N-2F7A1E-----------------------------
  8500. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  8501.     AX = 7A1Eh
  8502.     ES:SI -> ???
  8503.     ???
  8504. Return: ???
  8505. --------N-2F7A20BX0000-----------------------
  8506. INT 2F - Novell NetWare - Adv NetWare 4.0 DOS Requester - GET VLM CALL ADDRESS
  8507.     AX = 7A20h
  8508.     BX = 0000h
  8509. Return: AX = 0000h on success (installed)
  8510.         ES:BX -> far call address for DOS Requester (see #1468)
  8511. Notes:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  8512.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  8513.       is backward compatible with NetWare 2.1x through 3.11 servers as
  8514.       well.     Note that there was a NetWare 4.0 in the early 1980's, which
  8515.       can cause confusion.
  8516.     this call is used as the installation check by VLM.EXE, which is the
  8517.       loader for all the modules of the DOS Requester
  8518.     .VLMs are standard old .EXE format executables whose normal entry point
  8519.       merely terminates to prevent loading from the command line.  The
  8520.       real entry point is found by looking at the VLM header at the
  8521.       beginning of the load image (see #1471)
  8522. Index:    installation check;NetWare 4.0 DOS Requester
  8523.  
  8524. (Table 1468)
  8525. Call DOS Requester entry point with:
  8526.     STACK:    WORD    destination function
  8527.         WORD    destination VLM ID
  8528.         WORD    source VLM ID (0000h = application program)
  8529.     registers as appropriate for function
  8530. Return: AX = status code (0000h,8811h,8846h,8848h,8853h) (see #1469)
  8531.     other registers as appropriate for function
  8532.     STACK popped
  8533.  
  8534. (Table 1469)
  8535. Values for VLM status code:
  8536.  0000h    successful
  8537.  88xxh    error generated by requester
  8538.  8801h    invalid or non-attached connection handle
  8539.  8803h    cannot add CDS
  8540.  8804h    bad path
  8541.  8811h    nonexistent function called
  8542.  8836h    attempted function with invalid parameter
  8543.  8846h    ???
  8544.  8848h    non-loaded or nonexistent VLM called
  8545.  884Dh    no more SFT entries (too many handles)
  8546.  8850h    too many reply fragments
  8547.  8853h    ???
  8548.  89xxh    error generated by server, low byte = return code from server
  8549.  
  8550. (Table 1470)
  8551. Values for VLM identifier:
  8552.  0001h    VLM.EXE        Virtual Loadable Modules manager (see also #1472)
  8553.  0010h    CONN.VLM    connection table manager (see also #1473)
  8554.  0020h    TRAN.VLM    transport protocol multiplexor (see also #1474)
  8555.  0021h    IPXNCP.VLM    transport protocol implementation using IPX (see #1476)
  8556.  0022h    reserved for TCPNCP.VLM
  8557.  0030h    NWP.VLM        NetWare protocol multiplexor (see also #1477)
  8558.  0031h    BIND.VLM
  8559.  0032h    NDS.VLM        NetWare Directory Services (see also #1478)
  8560.  0033h    PNW.VLM        Personal NetWare
  8561.  0034h    RSA.VLM        RSA encryption for directory services re-authentication
  8562.  0040h    REDIR.VLM    DOS redirector (see also #1479)
  8563.  0041h    FIO.VLM        file I/O (see also #1481)
  8564.  0042h    PRINT.VLM    printer redirector (see also #1482)
  8565.  0043h    GENERAL.VLM    misc functions for NETx and REDIR (see also #1483)
  8566.  0050h    NETX.VLM    NetWare shell compatibility (see also #1484)
  8567.  0060h    AUTO.VLM    auto-reconnect/auto-retry
  8568.  0061h    SECURITY.VLM    enhanced security module
  8569.  0100h    NMR.VLM        NetWare management responder
  8570.  
  8571. Format of VLM header:
  8572. Offset    Size    Description    (Table 1471)
  8573.  00h    DWORD    -> initialization entry point
  8574.  04h    DWORD    -> VLM API entry point
  8575.  08h    DWORD    -> ??? entry point
  8576.  0Ch    DWORD    -> ??? entry point
  8577.  10h    DWORD    -> ??? entry point
  8578.     ...
  8579.  var    DWORD    00000000h (end of entry point list)
  8580.       4 BYTEs    signature "NVlm"
  8581.     WORD    VLM identifier
  8582. Note:    the number of entry points in the header is reported as "Func" in the
  8583.       VLM /D display.
  8584.  
  8585. (Table 1472)
  8586. Call VLM Manager (VLM.EXE, ID 0001h) with:
  8587. Func    Description/Registers
  8588.  01h    VLM Statistics
  8589.  
  8590. (Table 1473)
  8591. Call Connection Manager (CONN.VLM, ID 0010h) with:
  8592. Func    Description/Registers
  8593.  01h    Conn Get Version
  8594.  03h    Conn Statistics
  8595.  04h    Conn Alloc Handle
  8596.  05h    Conn Validate Handle
  8597.  06h    Conn Free Handle
  8598.  07h    Conn Get Entry Field
  8599.  08h    Conn Set Entry Field
  8600.  09h    Conn Reset Entry Field
  8601.  0Ah    Conn Lookup Handle
  8602.  0Dh    Conn Name Lookup
  8603.  0Eh    Conn Name To Handle
  8604.     DS:SI -> uppercased server name
  8605.     CX = length of server name, 0000h if ASCIZ name
  8606.     Return: AX = error code or 0000h if successful
  8607.             CX = connection handle if successful
  8608.  0Fh    Conn Get Num Connections
  8609.  
  8610. (Table 1474)
  8611. Call TRAN.VLM (VLM ID 0020h) with:
  8612. Func    Description/Registers
  8613.  01h    Tran Get Version
  8614.  03h    Tran Statistics
  8615.  06h    Tran Request Reply (see INT 21/AH=F2h)
  8616.     AL = request code (see #1191 at INT 21/AH=F2h)
  8617.     BH = error handler flag
  8618.         00h default error handler
  8619.         01h return network errors to caller
  8620.         02h handle network errors in requester
  8621.     BL = request list length (max 5 fragments) (see #1475)
  8622.     CX = connection handle
  8623.     DH = 00h (reserved)
  8624.     DL = reply list length (max 5 fragments) (see #1475)
  8625.     DS:SI -> address list
  8626.     ES:DI -> address list
  8627.     Return: AX = error code, 0000h if successful
  8628.         BX,DX destroyed
  8629.         reply buffer updated if successful
  8630.  08h    Tran Schedule/Cancel Event
  8631.  09h    Tran Get Max Size
  8632.  0Ah    Tran Broadcast Mux
  8633.  
  8634. Format of TRAN.VLM request/reply fragment descriptor (array):
  8635. Offset    Size    Description    (Table 1475)
  8636.  00h    DWORD    address of buffer
  8637.  04h    WORD    length of buffer
  8638.  
  8639. (Table 1476)
  8640. Call IPXNCP.VLM (VLM ID 0021h) with:
  8641. Func    Description/Registers
  8642.  01h    IPX Get Version
  8643.  03h    IPX Statistics
  8644.  06h    IPXNCP Request Reply???
  8645.     functionally equivalent to Tran Request Reply???
  8646.  
  8647. (Table 1477)
  8648. Call NWP.VLM (VLM ID 0030h) with:
  8649. Func    Description/Registers
  8650.  01h    NWP Get Version
  8651.  03h    NWP Statistics
  8652.  04h    NWP Connect
  8653.  05h    NWP Disconnect
  8654.  06h    NWP Attach
  8655.  08h    NWP Login
  8656.  09h    NWP Logout
  8657.  0Ah    NWP Get Bindery Object/Get Message Handler
  8658.  0Eh    NWP Ordered Send To All
  8659.  0Fh    NWP Preferred Handler
  8660.  10h    NWP ???
  8661.     AL = subfunction
  8662.         01h get security flags (see also INT 21/AX=B301h)
  8663.         Return: BX:CX indicates signature level
  8664.                 = 0100h:0000h if signature level=0
  8665.                 = 0300h:0000h if signature level=1
  8666.                 = 0302h:0000h if signature level=2
  8667.                 = 0302h:0202h if signature level=3
  8668.         04h set security flags (see also INT 21/AX=B304h)
  8669.         BL:CL = new flags
  8670.  
  8671. (Table 1478)
  8672. Call NDS.VLM (VLM ID 0032h) with:
  8673. Func    Description/Registers
  8674.  01h    NDS Get Version
  8675.  03h    NDS Statistics
  8676.  08h    NDS Fragment Request
  8677.  0Ch    NDS ???
  8678.     BX = subfunction
  8679.         0002h read from TDS
  8680.         CX = reply buffer length
  8681.         DX = 0110h ???
  8682.         SI = offset in TDS
  8683.         ES:DI -> reply buffer
  8684.         0003h write to TDS
  8685.         0005h "NWDSChangeResourceConnection/Lock Connection"
  8686.         0007h "NWDSSetMonitoredConnection"
  8687.  
  8688. (Table 1479)
  8689. Call REDIR.VLM (VLM ID 0040h) with:
  8690. Func    Description/Registers
  8691.  01h    Redir Get Version
  8692.  03h    Redir Statistics
  8693.  04h    Redir Build SFT (see INT 21/AH=B4h"NetWare")
  8694.     CX = connection handle
  8695.     ES:DI -> SFT build request (see #1480)
  8696.     Return: AX = 0000h if successful
  8697.             BX = DOS file handle
  8698.  05h    Redir DOS To NW Handle
  8699.  08h    Redir Specific
  8700.     BX = 0000h get item
  8701.         DS:SI -> ASCIZ string "LPTx" (x='1'-'9') or drive spec ("d:")
  8702.         ES:DI -> reply buffer for "\\server\resource",00h,"path",00h
  8703.  
  8704. Format of NetWare SFT build request:
  8705. Offset    Size    Description    (Table 1480)
  8706.  00h  6 BYTEs    NetWare handle
  8707.  06h 18 BYTEs    ???
  8708.  18h    LONG    file size
  8709.  1Ch  8 BYTEs    ???
  8710.  
  8711. (Table 1481)
  8712. Call File I/O FIO.VLM (VLM ID 0041h) with:
  8713. Func    Description/Registers
  8714.  01h    FIO Get Version
  8715.  03h    FIO Statistics
  8716.  04h    FIO Remote Copy
  8717.  
  8718. (Table 1482)
  8719. Call PRINT.VLM (VLM ID 0042h) with:
  8720. Func    Description/Registers
  8721.  01h    Print Get Version
  8722.  03h    Print Statistics
  8723.  04h    Print Get/Set Data
  8724.  05h    Print Open Capture File
  8725.  07h    Print Get Num Of Printers
  8726.  08h    Print Redirection
  8727.     CX = connection handle
  8728.     DX = printer (0=LPT1)
  8729.     BX = destination
  8730.         0000h redirect device to queue
  8731.         AX = length of queue name, 0000h to use queue ID
  8732.         DS:SI -> uppercased ASCIZ queue name
  8733.         ES:DI -> queue ID, 0000h:0000h to use queue name
  8734.         0003h redirect device to file
  8735.         AX = 0000h or 4E57h ('NW')
  8736.         ES:DI -> ASCIZ path of file
  8737.     Return: AX = 0000h if successful
  8738.  09h    Print Flush And Close Job
  8739.  0Ch    Print Get/Set Banner Name
  8740.  
  8741. (Table 1483)
  8742. Call GENERAL.VLM (VLM ID 0043h) with:
  8743. Func    Description/Registers
  8744.  01h    Gen Get Version
  8745.  03h    Gen Statistics
  8746.  04h    Gen Get/Set Primary
  8747.  09h    Gen Return Drive Info
  8748.  
  8749. (Table 1484)
  8750. Call NETX.VLM (VLM ID 0050h) with:
  8751. Func    Description/Registers
  8752.  01h    NetX Get Version
  8753.  03h    NetX Statistics
  8754. --------N-2F7A20BX0001-----------------------
  8755. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM CallA ADDRESS
  8756.     AX = 7A20h
  8757.     BX = 0001h
  8758. Return: AX = 0000h if request was handled
  8759.         ES:BX -> CallA entry point (see #1485)
  8760.  
  8761. (Table 1485)
  8762. Call VLM CallA entry point with:
  8763.     AX = function
  8764.         0000h submit
  8765.         0001h cancel (not implemented)
  8766.     ES:DI -> Overlay Asynchronous Control Block structure (see #1486)
  8767.  
  8768. Format of Overlay Asynchronous Control Block (OACB):
  8769. Offset    Size    Description    (Table 1486)
  8770.  00h    DWORD    link to next OACB, 0000h:0000h if last
  8771.  04h    DWORD    callback address or 0000h:0000h
  8772.  08h    BYTE    InUse flag (00h if complete)
  8773.  09h    BYTE    flag, reserved for VLM use
  8774.  0Ah    WORD    destination VLM
  8775.  0Ch    WORD    destination function
  8776.  0Eh    WORD    temporary storage for VLM.EXE
  8777.  10h  6 BYTEs    reserved
  8778.  16h  6 DWORDs    EAX,EBX,ECX,EDX,ESI,EDI
  8779.  2Eh  4 WORDs    DS,ES,FS,GS (FS and GS not used)
  8780. --------N-2F7A20BX0002-----------------------
  8781. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM MULTIPLEX ADDRESS
  8782.     AX = 7A20h
  8783.     BX = 0002h
  8784. Return: AX = 0000h
  8785.     ES:BX -> VLM multiplex entry point (see #1487)
  8786. Note:    for v1.10, this function is only available while VLM.EXE is loading
  8787.       the .VLM modules, because ES is destroyed on return
  8788.  
  8789. (Table 1487)
  8790. Call DOS Requester entry point with:
  8791.     BX = function???
  8792.         0000h
  8793.         DX = ???
  8794.         DI = ???
  8795.         BP = ???
  8796.         0002h
  8797.         CX = ???
  8798.         0003h
  8799.         DX = ???
  8800.         BP = ???
  8801.         0006h
  8802.         AH = subfunction???
  8803.         AL = ???
  8804.         STACK: variable (0, 4, 10, 14 bytes seen)
  8805. --------N-2F7A20BX0003-----------------------
  8806. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM PARSE API ADDRESS
  8807.     AX = 7A20h
  8808.     BX = 0003h
  8809. Return: AX = 0000h if request was handled
  8810.         ES:BX -> VLM parse API entry point
  8811. --------N-2F7A20BX0004-----------------------
  8812. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM MULTICAST CALLOUT
  8813.     AX = 7A20h
  8814.     BX = 0004h
  8815. Return: AX = 0000h if request was handled
  8816.         ES:BX -> VLM multicast data (see #1488)
  8817.  
  8818. Format of DOS Requester data:
  8819. Offset    Size    Description    (Table 1488)
  8820.  00h    DWORD    pointer to ??? (code)
  8821.  04h  4 BYTEs    ???
  8822.  08h    DWORD    pointer to ??? (code) (see #1489)
  8823.     ???
  8824.  
  8825. (Table 1489)
  8826. Call offset 08h function with:
  8827.     AL = function (00h-07h)
  8828.     ???
  8829. Return: ???
  8830. --------N-2F7A20BX0005-----------------------
  8831. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM INT 24 ADDRESS
  8832.     AX = 7A20h
  8833.     BX = 0005h
  8834. Return: AX = 0000h if request was handled
  8835.         ES:BX -> VLM INT 24 handler
  8836. --------N-2F7A20BX0006-----------------------
  8837. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8838.     AX = 7A20h
  8839.     BX = 0006h
  8840. Return: AX = 0000h if request was handled
  8841.         ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8842. --------N-2F7A20BX0007-----------------------
  8843. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8844.     AX = 7A20h
  8845.     BX = 0007h
  8846. Return: AX = 0000h
  8847.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8848. --------N-2F7A20BX0008-----------------------
  8849. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8850.     AX = 7A20h
  8851.     BX = 0008h
  8852. Return: AX = 0000h
  8853.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8854. --------N-2F7A20BX0080-----------------------
  8855. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8856.     AX = 7A20h
  8857.     BX = 0080h
  8858. Return: AX = 0000h
  8859.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8860. Note:    this function is identical to AX=7A20h/BX=0006h in v1.03 and v1.10
  8861. --------N-2F7A20BX0081-----------------------
  8862. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8863.     AX = 7A20h
  8864.     BX = 0081h
  8865. Return: AX = 0000h
  8866.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8867. Note:    this function is identical to AX=7A20h/BX=0007h in v1.03 and v1.10
  8868. --------N-2F7A20BX0082-----------------------
  8869. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8870.     AX = 7A20h
  8871.     BX = 0082h
  8872. Return: AX = 0000h
  8873.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8874. Note:    this function is identical to AX=7A20h/BX=0008h in v1.03 and v1.10
  8875. --------N-2F7A21-----------------------------
  8876. INT 2F C - Novell NetWare - DOS Requester - BROADCAST CALLBACK
  8877.     AX = 7A21h
  8878.     CX = server connection
  8879. Return: CX = 0000h if broadcast handled
  8880. SeeAlso: AX=7A22h,AX=7A85h
  8881. --------N-2F7A22-----------------------------
  8882. INT 2F C - Novell NetWare - DOS Requester - BROADCAST/SFT3 INFORM
  8883.     AX = 7A22h
  8884.     DL = function
  8885.         21h ('!') broadcast
  8886.         40h ('@') SFT3 inform
  8887. Return: AX = 0000h if event handled
  8888. SeeAlso: AX=7A21h
  8889. --------N-2F7A2F-----------------------------
  8890. INT 2F U - Novell NetWare - IPXODI v2.12 - GET ???
  8891.     AX = 7A2Fh
  8892. Return: AX = 0000h if supported and active
  8893.         BX = version??? (0001h)
  8894.         ES:DI -> entry point (see #1490)
  8895. Note:    IPXODI v2.12 is distributed as part of the Personal NetWare system
  8896.       bundled with Novell DOS 7
  8897. SeeAlso: INT 7A/BX=001Fh
  8898.  
  8899. (Table 1490)
  8900. Call IPXODI entry point with:
  8901.     BX = function
  8902.         0000h ???
  8903.         ES:SI -> ??? data
  8904.         0001h ???
  8905.         AX = ???
  8906.         Return: ES:SI -> ??? data
  8907.         0002h get ??? address
  8908.         Return: ES:SI -> ??? buffer
  8909.         0003h send SPX packet???
  8910.         AL = ???
  8911.         CX = ???
  8912.         DX = ???
  8913.         SI = ???
  8914.         Return: ??? (registers from a call to INT 7A/BX=0016h)
  8915. Return: BX corrupted
  8916. --------N-2F7A2FBX0EDC-----------------------
  8917. INT 2F U - Personal NetWare - HRMIB - UNINSTALL
  8918.     AX = 7A2Fh
  8919.     BX = 0EDCh
  8920. Return: ???
  8921. SeeAlso: AX=7AA0h
  8922. --------N-2F7A40-----------------------------
  8923. INT 2F U - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  8924.     AX = 7A40h
  8925. Return: AX = 7AFFh if installed
  8926.         BX = ??? bit flags (see #1491)
  8927.         CX = version (CH=major, CL=minor)
  8928.         DX = 0000h
  8929.         ES:DI -> entry point for TCP/IP stack (see #1492)
  8930. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  8931.     this function is also supported by the Beame&Whiteside BWLWP40 shim,
  8932.       but it only returns AL and ES:DI, and does not support AX=7A41h
  8933. SeeAlso: AX=7A41h,INT 15/AX=DE2Eh,INT 60"Excelan"
  8934.  
  8935. Bitfields for returned BX:
  8936. Bit(s)    Description    (Table 1491)
  8937.  0    ???
  8938.  1    ???
  8939.  15-2    reserved???
  8940.  
  8941. (Table 1492)
  8942. Call NetWare TCP/IP entry point with:
  8943.     ES:SI -> parameter block (see #1493)
  8944. Return: ES:SI parameter block updated
  8945.  
  8946. Format of NetWare TCP/IP parameter block:
  8947. Offset    Size    Description    (Table 1493)
  8948.  00h  4 BYTEs    ???
  8949.  04h    WORD    (return) ???
  8950.  06h    WORD    (return) ???
  8951.  08h    DWORD    -> FAR routine called if bit 7 of function code set
  8952.  0Ch    BYTE    flags???
  8953.  0Dh  7 BYTEs    ???
  8954.  14h    BYTE    (return) ???
  8955.  15h    BYTE    (call) function code (bit 7 set if ???) (see #1494)
  8956.  16h    BYTE    socket number
  8957.  17h    BYTE    (return) result or error code
  8958.  18h  4 WORDs    parameter words 0 to 3 (see #1494 for usage)
  8959.  20h    WORD    length of packet sent/received
  8960.  22h    WORD    number of pointer/length pairs following
  8961.  24h 6N BYTEs    buffer descriptors, each
  8962.         Offset    Size    Description
  8963.          00h    DWORD    pointer to buffer
  8964.          04h    WORD    length of buffer
  8965.  
  8966. (Table 1494)
  8967. Values for NetWare TCP/IP function code:
  8968.  01h    "accept"
  8969.  02h    "bind"
  8970.  03h    close socket
  8971.     Call:    socket number field set
  8972.  04h    "connect"
  8973.  05h    get IP address
  8974.     Call:    socket number field set to 0000h
  8975.     Return:    parameter words 1 and 2 contain caller's IP address
  8976.  06h    get hardware address
  8977.  07h    "getpeername"
  8978.  08h    get socket name
  8979.  0Ah    get netmask
  8980.  0Bh    "ioctl"
  8981.  0Ch    "listen"
  8982.  0Dh    "select"
  8983.  10h    "shutdown"
  8984.  11h    open socket
  8985.     Call:    socket number field set to 0000h
  8986.         parameter word 0 = desired protocol (6 = TCP, 17 = UDP)
  8987.     Return: socket number set
  8988.  12h    "read"
  8989.  13h    "recvfrom"
  8990.     Call:    socket number set
  8991.         packet length and buffer descriptors set
  8992.     Return:    packet length and receive buffers updated
  8993.         parameter word 1 = source port number
  8994.         parameter words 2 and 3 = source IP address
  8995.  14h    "write"
  8996.  15h    "sendto"
  8997.     Call:    socket number set
  8998.         flags field = ???
  8999.         parameter word 0 = 0000h
  9000.         parameter word 1 = destination port number
  9001.         parameter words 2 and 3 = destination IP address
  9002.         packet length and buffer descriptors set
  9003.  16h    get BOOTP data
  9004. Note:    these functions are based on the Unix socket interface
  9005. --------N-2F7A41-----------------------------
  9006. INT 2F - Novell NetWare - TCP/IP Protocol Stack - WINDOWS SUPPORT???
  9007.     AX = 7A41h
  9008.     ES:DI -> FAR entry point for ??? (will be called with BX=1,2,3,4)
  9009. Return: AX = 7AFFh if supported
  9010.         BX = ??? (see #1491)
  9011.         CX = version (CH=major, CL=minor)
  9012.         DX = 0000h
  9013.         ES:SI -> DWORD containing passed value of ES:DI
  9014.         ES:DI -> entry point for TCP/IP stack
  9015. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  9016.     the pointer which is set to ES:DI is cleared to 0000h:0000h when
  9017.       a Windows exit broadcast is received
  9018. SeeAlso: AX=7A40h
  9019. --------N-2F7A42-----------------------------
  9020. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ??? ENTRY POINT
  9021.     AX = 7A42h
  9022. Return: AX = 7AFFh if supported
  9023.         ES:DI -> ??? entry point (see #1468)
  9024.  
  9025. (Table 1495)
  9026. Call NetWare TCPIP.EXE entry point with:
  9027.     DX = ???
  9028.     ES:DI -> ??? (see #1496)
  9029. Return: AX = 0000h
  9030.     other registers destroyed
  9031.  
  9032. Format of data buffer:
  9033. Offset    Size    Description    (Table 1496)
  9034.  00h    WORD    offset of WORD ??? or 0000h
  9035.  02h    WORD    offset of DWORD ??? or 0000h
  9036.  04h    WORD    offset of DWORD ??? or 0000h
  9037. --------N-2F7A43-----------------------------
  9038. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  9039.     AX = 7A43h
  9040. Return: AX = 7AFFh if supported
  9041.         DX = offset of ???
  9042. SeeAlso: AX=7A44h
  9043. --------N-2F7A44-----------------------------
  9044. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - SET ???
  9045.     AX = 7A44h
  9046.     DX = offset of ??? (see AX=7A43h)
  9047. Return: AX = 7AFFh if supported
  9048. SeeAlso: AX=7A43h
  9049. --------N-2F7A4C-----------------------------
  9050. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  9051.     AX = 7A4Ch
  9052. Return: AX = 7AFFh if supported
  9053.         BX = ??? (0037h)
  9054.         CX = ??? (001Ch)
  9055. --------N-2F7A4DBX0001-----------------------
  9056. INT 2F - Novell NetWare - ???
  9057.     AX = 7A4Dh
  9058.     BX = 0001h
  9059.     ES:DI -> ???
  9060. Return: AL = FFh if ???
  9061.         ES:DI -> ???
  9062. Note:    called by NETBIOS.EXE v3.01
  9063. --------N-2F7A4FBX0001-----------------------
  9064. INT 2F - Novell NetWare - SNMP.EXE - INSTALLATION CHECK
  9065.     AX = 7A4Fh
  9066.     BX = 0001h
  9067. Return: AX = 7AFFh if installed
  9068. --------N-2F7A4FBX0002-----------------------
  9069. INT 2F - Novell NetWare - SNMP.EXE - ???
  9070.     AX = 7A4Fh
  9071.     BX = 0002h
  9072. Return: AL = status
  9073.         4Fh if failed
  9074.         FFh if successful
  9075. --------N-2F7A80-----------------------------
  9076. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  9077.     AX = 7A80h
  9078. Return: nothing
  9079. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  9080.       TSRs that it is unsafe to call the shell in the future.
  9081.     must be passed through so that all interested programs see the exit
  9082.     on receiving this call, IPXODI clears an internal pointer to a
  9083.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  9084.       0000h:0000h and stops calling it
  9085. SeeAlso: AX=7A81h
  9086. --------N-2F7A81-----------------------------
  9087. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  9088.     AX = 7A81h
  9089.     CX:DX -> shell's INT 21h entry point
  9090. Return: nothing
  9091. Notes:    the shell calls this function as it loads to allow interested TSRs
  9092.       and drivers to make a local copy of the shell's entry point
  9093.     must be passed through so that all interested programs see it
  9094. --------N-2F7A85-----------------------------
  9095. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  9096.     AX = 7A85h
  9097.     CX = broadcast server number
  9098. Return: CX = 0000h if broadcast message handled by another program
  9099.     CX unchanged if broadcast not handled
  9100. SeeAlso: AX=7A21h
  9101. --------N-2F7A90-----------------------------
  9102. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  9103.     AX = 7A90h
  9104. Return: AL = 00h if present
  9105.         BX = ???
  9106.         CX = PSP segment of NETBIOS resident code
  9107. SeeAlso: AX=7AFEh
  9108. --------N-2F7AA0-----------------------------
  9109. INT 2F U - Personal NetWare - HRMIB - ???
  9110.     AX = 7AA0h
  9111.     BX = function
  9112.         0000h ???
  9113.         0001h ???
  9114. Return: ???
  9115. SeeAlso: AX=7A2Fh/BX=0EDCh
  9116. --------N-2F7AC1-----------------------------
  9117. INT 2F - LAN HiJack - LHR - DISABLE???
  9118.     AX = 7AC1h
  9119. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  9120.       to take over control of a workstation remotely; LHR is the program
  9121.       run on the slave workstation
  9122. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  9123. --------N-2F7AC2-----------------------------
  9124. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  9125.     AX = 7AC2h
  9126. Note:    sets BIOS keyboard status byte to an internal variable
  9127. SeeAlso: AX=7AC3h,AX=7ACFh
  9128. --------N-2F7AC3-----------------------------
  9129. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  9130.     AX = 7AC3h
  9131. SeeAlso: AX=7AC2h,AX=7ACFh
  9132. --------N-2F7AC8-----------------------------
  9133. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  9134.     AX = 7AC8h
  9135.     BL = function(s) to enable (see #1497)
  9136. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  9137.  
  9138. Bitfields for LAN HiJack function(s) to enable/disable:
  9139. Bit(s)    Description    (Table 1497)
  9140.  0    ???
  9141.  1    remote keyboard enabled
  9142.  2    support remote's mouse
  9143.  3-7    unused
  9144. --------N-2F7AC9-----------------------------
  9145. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  9146.     AX = 7AC9h
  9147.     BL = function(s) to disable (see #1497)
  9148. SeeAlso: AX=7AC1h,AX=7AC8h
  9149. --------N-2F7ACA-----------------------------
  9150. INT 2F - LAN HiJack - LHJ - ???
  9151.     AX = 7ACAh
  9152.     BL = ???
  9153. Return: ???
  9154. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  9155.       to take over control of a workstation remotely; LHJ is the program
  9156.       run on the controlling workstation
  9157. --------N-2F7ACB-----------------------------
  9158. INT 2F - LAN HiJack - LHJ - ???
  9159.     AX = 7ACBh
  9160.     BX = ???
  9161. Return: ???
  9162. Note:    this function appears to be related to the keyboard
  9163. SeeAlso: AX=7ACCh
  9164. --------N-2F7ACC-----------------------------
  9165. INT 2F - LAN HiJack - LHJ - ???
  9166.     AX = 7ACCh
  9167.     BX = ???
  9168. Return: ???
  9169. Note:    this function appears to be related to the mouse
  9170. SeeAlso: AX=7ACBh
  9171. --------N-2F7ACFBX0000-----------------------
  9172. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  9173.     AX = 7ACFh
  9174.     BX = 0000h
  9175. Return: BX = segment of resident code if installed
  9176. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  9177.       to take over control of a workstation remotely; LHR is the program
  9178.       run on the slave workstation
  9179. --------N-2F7AF0-----------------------------
  9180. INT 2F - Novell NetWare - DOSNP.EXE v1.30G - INSTALLATION CHECK
  9181.     AX = 7AF0h
  9182. Return: AL = FFh if present
  9183.         ES = 7AF0h
  9184.         CX = PSP segment of resident code
  9185. --------N-2F7AF1-----------------------------
  9186. INT 2F - Novell NetWare - Access Server Driver - INSTALLATION CHECK
  9187.     AX = 7AF1h
  9188.     BL = sequence number (01h first driver, 02h second, 00h no driver)
  9189. Return: AX <> 7AF1h if present
  9190.         BH = total number of drivers
  9191.         ---if BL nonzero on entry---
  9192.         AL = number of ports provided by specified driver
  9193.         ES:DI -> driver entry point
  9194.               (see #1498,#1499,#1500,#1501,#1502,#1503,#1504,#1505)
  9195.         ES:DX -> ID string
  9196. SeeAlso: INT 7A/BX=001Ch
  9197.  
  9198. (Table 1498)
  9199. Call Access Server driver "initialize port" function with:
  9200.     AH = 01h
  9201.     AL = port number (00h-0Fh)
  9202.     ES:BX -> configuration parameter block (see #1511)
  9203.     interrupts disabled
  9204. Return: CF clear if successful
  9205.     CF set on error
  9206.  
  9207. (Table 1499)
  9208. Call Access Server driver "get port status" function with:
  9209.     AH = 02h
  9210.     AL = port number (00h-0Fh)
  9211.     interrupts disabled
  9212. Return: CF clear if successful
  9213.         BL = transmitter status (see #1508)
  9214.         BH = receiver status (see #1509)
  9215.         DL = external status signals (see #1510)
  9216.     CF set on error
  9217.     interrupts disabled
  9218.  
  9219. (Table 1500)
  9220. Call Access Server driver "get input from port" function with:
  9221.     AH = 03h
  9222.     AL = port number (00h-0Fh)
  9223.     CX = size of data buffer
  9224.     ES:BX -> buffer for data
  9225.     interrupts disabled
  9226. Return: CF clear if successful
  9227.     CF set on error
  9228.     interrupts disabled
  9229.     CX = number of bytes read
  9230. Note:    the driver will add a NUL to the buffer when a break signal is detected
  9231.  
  9232. (Table 1501)
  9233. Call driver "send output data to port" function with:
  9234.     AH = 04h
  9235.     AL = port number (00h-0Fh)
  9236.     CX = number of bytes to send
  9237.     ES:BX -> buffer containing data
  9238.     interrupts disabled
  9239. Return: CF clear if successful
  9240.     CF set on error
  9241.     interrupts disabled
  9242.     CX = number of bytes actually written
  9243.  
  9244. (Table 1502)
  9245. Call driver "get I/O character counts" function with:
  9246.     AH = 05h
  9247.     AL = port number (00h-0Fh)
  9248.     interrupts disabled
  9249. Return: CF clear if successful
  9250.         BX = number of bytes pending transmission
  9251.         CX = number of bytes available for reading
  9252.     CF set on error
  9253.     interrupts disabled
  9254.  
  9255. (Table 1503)
  9256. Call driver "control XON/XOFF" function with:
  9257.     AH = 06h
  9258.     AL = port number (00h-0Fh)
  9259.     DL = new state
  9260.         (00h software flow control disabled, else enabled)
  9261.     interrupts disabled
  9262. Return: CF clear if successful
  9263.     CF set on error
  9264.     interrupts disabled
  9265.  
  9266. (Table 1504)
  9267. Call driver "get error counts and statistics" function with:
  9268.     AH = 07h
  9269.     AL = port number (00h-0Fh)
  9270.     ES:BX -> buffer for statistics (see #1512)
  9271.     interrupts disabled
  9272. Return: CF clear if successful
  9273.         ES:BX buffer filled
  9274.     CF set on error
  9275.     interrupts disabled
  9276.  
  9277. (Table 1505)
  9278. Call driver "general request" function with:
  9279.     AH = 08h
  9280.     AL = port number (00h-0Fh)
  9281.     DX = requested operations
  9282.         bit 0: flush transmit buffers
  9283.         bit 1: flush receive buffers
  9284.         bit 4: define XON/XOFF characters
  9285.     ES:BX -> XON/XOFF characters (see #1513) if DX bit 4 set
  9286.     interrupts disabled
  9287. Return: CF clear if successful
  9288.     CF set on error
  9289.     interrupts disabled
  9290.  
  9291. (Table 1506)
  9292. Call driver "deadman timer management" function with:
  9293.     AH = 09h
  9294.     AL = port number (00h-0Fh)
  9295.     BX = next time interval in seconds (0000h to disable timer)
  9296.     interrupts disabled
  9297. Return: CF clear
  9298.     interrupts disabled
  9299.  
  9300. (Table 1507)
  9301. Call driver "get buffer sizes" function with:
  9302.     AH = 0Ah
  9303.     AL = port number (00h-0Fh)
  9304.     interrupts disabled
  9305. Return: CF clear if successful
  9306.        BX = size of transmit buffer
  9307.        CX = size of receive buffer
  9308.     CF set on error
  9309.     interrupts disabled
  9310.  
  9311. (Table 1508)
  9312. Values for Access Server transmitter status:
  9313.  00h    uninitialized
  9314.  01h    ready, not transmitting
  9315.  02h    transmitting
  9316.  03h    XOFF received
  9317.  04h    transmitting, buffer full
  9318.  05h    XOFF received and buffer full
  9319.  
  9320. (Table 1509)
  9321. Values for Access Server receiver status:
  9322.  00h    uninitialized
  9323.  01h    ready
  9324.  02h    receive buffer full, data may have been lost
  9325.  
  9326. Bitfields for external status signals:
  9327. Bit(s)    Description    (Table 1510)
  9328.  7,6    undefined
  9329.  5    CTS active
  9330.  4    DSR active
  9331.  3    DCD active
  9332.  2,1    undefined
  9333.  0    ring indicator
  9334.  
  9335. Format of Access Server configuration parameter block:
  9336. Offset    Size    Description    (Table 1511)
  9337.  00h    BYTE    receive baud rate index
  9338.         00h 50 bps, 01h 75 bps, 02h 110 bps, 03h 134.5 bps,
  9339.         04h 150 bps, 05h 300 bps, 06h 600 bps, 07h 1200 bps,
  9340.         08h 1800 bps, 09h 2000 bps, 0Ah 2400 bps, 0Bh 3600 bps,
  9341.         0Ch 4800 bps, 0Dh 7200 bps, 0Eh 9600 bps, 0Fh 19200 bps,
  9342.         10h 38400 bps, 11h 57600 bps, 12h 115200 bps
  9343.  01h    BYTE    receive bits per character (0=5 bits..3=8 bits)
  9344.  02h    BYTE    receive stop bits
  9345.  03h    BYTE    receive parity
  9346.         00h none, 01h odd, 02h even, 03h mark, 04h space
  9347.  04h    BYTE    transmit baud rate index (same as receive baud rate)
  9348.  05h    BYTE    transmit bits per character (0=5 bits..3=8 bits)
  9349.  06h    BYTE    transmit stop bits
  9350.  07h    BYTE    transmit parity (same as receive parity)
  9351.  08h    BYTE    DTR state (00h off, 01h on)
  9352.  09h    BYTE    RTS state (00h off, 01h on)
  9353.  0Ah    BYTE    flow control (00h none, 01h XON/XOFF, 02h RTS/CTS, 03h both)
  9354.  0Bh    BYTE    break control (00h off, 01h on)
  9355.  
  9356. Format of Access Server statistics:
  9357. Offset    Size    Description    (Table 1512)
  9358.  00h    BYTE    port number
  9359.  01h    BYTE    external status signals (see #1510)
  9360.  02h    BYTE    transmitter status (see #1508)
  9361.  03h    BYTE    receiver status (see #1509)
  9362.  04h    DWORD    number of characters received
  9363.  08h    DWORD    number of characters transmitted
  9364.  0Ch    WORD    input parity errors
  9365.  0Eh    WORD    input framing errors
  9366.  10h    WORD    lost characters due to hardware overrun
  9367.  12h    WORD    lost characters due to data buffer overrun
  9368. Note:    the counts are not allowed to wrap around; once a count reaches FFFFh
  9369.       or FFFFFFFFh, it is no longer incremented
  9370.  
  9371. Format of Access Server XON/XOFF characters:
  9372. Offset    Size    Description    (Table 1513)
  9373.  00h    BYTE    04h (number of bytes following)
  9374.  01h    BYTE    transmit XON character
  9375.  02h    BYTE    transmit XOFF character
  9376.  03h    BYTE    receive XON character
  9377.  04h    BYTE    receive XOFF character
  9378. --------N-2F7AFE-----------------------------
  9379. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  9380.     AX = 7AFEh
  9381. Return: AL = FFh if present
  9382.         ES = (data???) segment of DOSNP
  9383. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  9384.        NetWare
  9385. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  9386.       present
  9387. SeeAlso: AX=7A90h
  9388. --------N-2F7AFFBX0000-----------------------
  9389. INT 2F - Novell NetWare - TBMI v1.1+ - INSTALLATION CHECK / Windows SUPPORT
  9390.     AX = 7AFFh
  9391.     BX = 0000h
  9392.     CX = 4E65h ("Ne")
  9393.     DX = 7457h ("tW")
  9394.     ES:DI -> Windows support procedure (see #1514)
  9395. Return: AL = FFh if installed
  9396.         CX = configured sockets (14h)
  9397.         DS:SI -> data table ???
  9398.         ES:DI -> IPX far call handler
  9399. Notes:    for IPX/SPX this call reportedly returns DS:SI pointing to the table
  9400.       of pointers to service events queue head and tail
  9401.     this function is also supported by IPXODI; v2.12 does not change DS,
  9402.       but does set SI to an internal address
  9403. SeeAlso: AX=7AFFh/BX=0001h
  9404.  
  9405. (Table 1514)
  9406. Values Windows support procedure called with:
  9407.     BP = function
  9408.         0001h Get ECB
  9409.         BX = socket number
  9410.         Return: ES:SI -> ECB or 0000h:0000h if none available
  9411.         0002h Count Listen ECBs
  9412.         AX = BX = socket
  9413.         Return: CX = number of listen ECBs for socket
  9414.                 (must be >= 2 for SPX to work)
  9415.         0003h ???
  9416.         0004h Inform task switcher of ECB locations
  9417.         Note:    registers other than those listed above are equal
  9418.               to the values when IPX was called
  9419. Note:    the support function will not be called if IPX is called with BX
  9420.       bit 15 set
  9421. --------N-2F7AFFBX0001-----------------------
  9422. INT 2F - Novell NetWare - TBMI v1.1+, shell v3.01d - INSTALLATION CHECK???
  9423.     AX = 7AFFh
  9424.     BX = 0001h
  9425.     CX = 4E65h ("Ne")
  9426.     DX = 7457h ("tW")
  9427. Return: AL = FFh if installed
  9428.         CX = ???  (8000h)
  9429.         SI = ??? (or -> ???) (0002h and 0007h seen)
  9430.         ES:DI -> IPX far call handler
  9431.         ES:DX -> 6-byte data area ???
  9432. Note:    this function is also supported by IPXODI, but IPXODI v2.12 does not
  9433.       return ES:DX
  9434. SeeAlso: AX=7AFFh/BX=0000h
  9435. --------d-2F7F00-----------------------------
  9436. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  9437.     AX = 7F00h
  9438. Return: AL = FFh if installed
  9439. SeeAlso: AX=7F01h,AX=7F02h,AX=7F03h
  9440. --------d-2F7F01-----------------------------
  9441. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  9442.     AX = 7F01h
  9443.     DS:DX -> command record (see #1515)
  9444. Return: AL = status
  9445.         00h successful
  9446.         else error code
  9447. SeeAlso: AX=7F00h,AX=7F02h,INT 11/AH=FFh"SDLP",INT 21/AX=4402h"ASPI"
  9448. SeeAlso: INT 4F/AX=8100h
  9449.  
  9450. Format of CD-ROM redirector command record:
  9451. Offset    Size    Description    (Table 1515)
  9452.  00h    BYTE    ID
  9453.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation
  9454.  0Bh    WORD    segment of buffer
  9455.  0Dh    WORD    offset of buffer
  9456.  0Fh    BYTE    status
  9457.  10h    BYTE    sense
  9458.  12h    WORD    count
  9459. --------d-2F7F02-----------------------------
  9460. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  9461.     AX = 7F02h
  9462. SeeAlso: AX=7F00h,AX=7F01h
  9463. --------d-2F7F03-----------------------------
  9464. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  9465.     AX = 7F03h
  9466. Return: AL = status
  9467.         00h successful
  9468.         01h unable to uninstall
  9469. SeeAlso: AX=7F00h
  9470. ----------2F7F24-----------------------------
  9471. INT 2F - Multiplex - ???
  9472.     AX = 7F24h
  9473.     ???
  9474. Return: ???
  9475. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  9476. ----------2F7F26-----------------------------
  9477. INT 2F - Multiplex - ???
  9478.     AX = 7F26h
  9479.     ???
  9480. Return: ???
  9481. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  9482. --------!---Section--------------------------
  9483.