home *** CD-ROM | disk | FTP | other *** search
/ Hot Shareware 32 / hot34.iso / ficheros / DTOOL / INTER57C.ZIP / INTERRUP.J < prev    next >
Text File  |  1998-03-22  |  357KB  |  9,602 lines

  1. Interrupt List, part 10 of 16
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997,1998 Ralf Brown
  3. --------N-2A00-------------------------------
  4. INT 2A - NETWORK - INSTALLATION CHECK
  5.     AH = 00h
  6. Return: AH <> 00h if installed
  7.     CF set if NetWare v2.15 NetBIOS emulator installed
  8. Note:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  9.       etc.
  10. SeeAlso: INT 5C"NetBIOS"
  11. --------N-2A0000-----------------------------
  12. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  13.     AX = 0000h
  14. Return: AH = DDh
  15. SeeAlso: INT 5B"Extended NetBIOS"
  16. --------N-2A01-------------------------------
  17. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  18.     AH = 01h
  19.     ES:BX -> NCB (see #2920 at INT 5C"NetBIOS")
  20. Return: AL = NetBIOS error code
  21.     AH = status
  22.         00h no error
  23.         01h error occurred
  24. SeeAlso: AH=04h,AX=0500h,INT 5B"Extended NetBIOS",INT 5C"NetBIOS"
  25. --------N-2A02-------------------------------
  26. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  27.     AH = 02h
  28.     ???
  29. Return: ???
  30. --------N-2A0300-----------------------------
  31. INT 2A - NETWORK - CHECK DIRECT I/O
  32.     AX = 0300h
  33.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  34.           must include the colon)
  35. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  36.     CF set if access via files only
  37. Notes:    do not use direct disk accesses if this function returns CF set or the
  38.       device is redirected (INT 21/AX=5F02h)
  39.     use AH=00h to determine whether the network is installed; if not,
  40.       direct physical access is allowed
  41.     may take some time to execute, so programs which need to check
  42.       frequently should save the result of the first call
  43.     this function is called by the DOS kernel on INT 25 and INT 26
  44.     supported by PC LAN Program, LAN Manage, LANtastic, NetWare, 10NET,
  45.       etc.
  46. SeeAlso: INT 13/AH=02h,INT 13/AH=03h,INT 25,INT 26,INT 21/AX=5F02h
  47. --------N-2A04-------------------------------
  48. INT 2A - NETWORK - EXECUTE NetBIOS REQUEST
  49.     AH = 04h
  50.     AL = error retry
  51.         00h automatically retry request on errors 09h, 12h, and 21h
  52.           (see #2919 at INT 5C"NetBIOS")
  53.         01h no retry
  54.         02h ???
  55.     ES:BX -> Network Control Block (see #2920 at INT 5C"NetBIOS")
  56. Return: AX = 0000h if successful
  57.     AH = 01h on error
  58.         AL = error code
  59. Notes:    invokes either INT 5B or INT 5C as appropriate
  60.     supported by PC LAN Program, LANtastic, LAN Manager, NetWare, 10NET,
  61.       etc.
  62.     NetWare 2.15 NetBIOS emulator returns CF clear if successful, CF set
  63.       on error
  64.     PC LAN Program defines any non-zero return value in AH as an error
  65.       indicator for subfunction 00h, and any non-zero return value in AX
  66.       as an error indicator for subfunction 01h
  67. SeeAlso: AH=00h,AH=01h,AX=0500h,INT 5B"Extended NetBIOS",INT 5C"NetBIOS"
  68. --------N-2A0500-----------------------------
  69. INT 2A - NETWORK - GET NETWORK RESOURCE AVAILABILITY
  70.     AX = 0500h
  71. Return: AX reserved
  72.     BX = number of network names available
  73.     CX = number of network control blocks available
  74.     DX = number of network sessions available
  75. Notes:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  76.       etc.
  77.     the application should call this function before using any network
  78.       resources, and maintain its own count to avoid exceeding the
  79.       network's resource limits
  80. SeeAlso: AH=00h,AH=01h,AH=04h,INT 5C"NetBIOS"
  81. --------N-2A06-------------------------------
  82. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  83.     AH = 06h
  84.     AL = function
  85.         01h set concatenation mode
  86.         all printer output put in one job until return to DOS prompt
  87.         02h set truncation mode (default)
  88.         printer open/close or BIOS/DOS output switch starts new job
  89.         03h flush printer output and start new print job
  90. Return: CF set on error
  91.         AX = error code
  92.     CF clear if successful
  93. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  94.     supported by PC LAN Program, LANtastic, NetWare, 10NET, etc.
  95.     LANtastic v4.x no longer supports this call
  96.     this function sets the printer mode for all redirected printers
  97. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  98. --------N-2A07-------------------------------
  99. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  100.     AH = 07h
  101.     ???
  102. Return: ???
  103. Program: PC Network is an early networking package which was renamed the
  104.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  105. SeeAlso: AH=86h
  106. --------N-2A2001-----------------------------
  107. INT 2A - MS Networks or NETBIOS - ???
  108.     AX = 2001h
  109.     ???
  110. Return: ???
  111. Note:    intercepted by DESQview 2.x
  112. --------N-2A2002-----------------------------
  113. INT 2A - NETWORK - ???
  114.     AX = 2002h
  115.     ???
  116. Return: ???
  117. Note:    called by MS-DOS 3.30-6.00 APPEND
  118. --------N-2A2003-----------------------------
  119. INT 2A - NETWORK - ???
  120.     AX = 2003h
  121.     ???
  122. Return: ???
  123. Note:    called by MS-DOS 3.30-6.00 APPEND
  124. --------N-2A4147DX0000-----------------------
  125. INT 2A U - NetSoft DOS-NET v1.20+ - INSTALLATION CHECK
  126.     AX = 4147h ('AG')
  127.     DX = 0000h
  128. Return: DX = 4147h if installed
  129.         DS:SI -> configuration data (see #2242)
  130. Program: DOS-NET is a shareware networking package by Albert Graham
  131. Note:    this call is supported by CLIENT.COM, SERVER.COM, ROUTER.COM, and
  132.       NETDOS.COM
  133. SeeAlso: INT 65/DX=4147h,INT 65/DX=4741h
  134.  
  135. Format of DOS-NET v1.20 configuration data area:
  136. Offset    Size    Description    (Table 2242)
  137.  00h    BYTE    ???
  138.  01h    BYTE    interrupt number used by DOS-NET APIs
  139.  02h    WORD    function number to place in AX for above interrupt
  140.  04h    BYTE    minor version as two BCD digits (e.g. 20h for v1.20)
  141.  05h    BYTE    major version number (01h for v1.20)
  142.  06h  2 BYTEs    ???
  143.  08h    WORD    ??? (used by ARCNET.COM)
  144.         bit 15: ??? (set by MACTEST.COM)
  145.  0Ah    WORD    ??? (used by NDIS.COM and ODI.COM)
  146.  0Ch 22 BYTEs    ???
  147.  24h    DWORD    -> ??? function (set by PROTECT.COM)
  148.  28h 12 BYTEs    ???
  149.  34h    DWORD    -> ??? function (set by FASTVIEW.COM)
  150.  38h    DWORD    -> ??? function (set by FASTVIEW.COM)
  151.  58h    DWORD    -> ??? (offsets 04h and 1Ah from value are used by NETFILES)
  152.     ???
  153.  7Ch    WORD    ???
  154.  7Eh    WORD    ??? (may be high half of a DWORD at 7Ch)
  155.     ???
  156.  A8h    DWORD    -> ??? (used by SM.COM)
  157.     ???
  158. 114h    WORD    ???
  159. 116h    WORD    ??? (may be high half of a DWORD at 114h)
  160.     ???
  161. 1BDh    BYTE    ??? flags
  162.         bit 0: ???
  163.         bit 6: ???
  164.     ???
  165. 1E1h    BYTE    ???
  166.     ???
  167. 208h    WORD    ??? (used by SM.COM, MACTEST)
  168. 282h    WORD    ???
  169. 284h  2 BYTEs    ???
  170. 286h    WORD    ??? flags
  171.         bit 0: ???
  172.     ???
  173. 31Eh    WORD    ???
  174. 320h    WORD    ??? (used by NDIS.COM and ODI.COM)
  175. 322h  8 BYTEs    ???
  176. 32Ah    WORD    ??? (used by NDIS.COM and ODI.COM)
  177.     ???
  178. 33Eh  4 BYTEs    ??? (used by ODI.COM)
  179. 342h  N BYTEs    ??? (used by NDIS.COM)
  180.     ???
  181. 3CFh    BYTE    ??? flags
  182.         bit 2: ???
  183. 3D2h    BYTE    installed-component flags
  184.         bit 0: PROTECT installed
  185.         bit 1: NETCACHE installed
  186.         bit 3: SM.COM installed
  187.         bit 7: NETDEBUG installed
  188. 3D3h    BYTE    installed-component flags
  189.         bit 0: NETFILES installed
  190.         bit 6: FASTVIEW installed
  191.     ???
  192. 3FFh    BYTE    ??? (used by NDIS.COM)
  193. 400h    BYTE    ???
  194. 401h    BYTE    ??? (used by SM.COM)
  195. 402h    BYTE    ??? (used by SM.COM)
  196.     ???
  197. 448h    BYTE    ???
  198. 449h    BYTE    ??? (used by MACTEST)
  199. 44Ah    BYTE    ??? (used by PROTECT)
  200. 44Bh    BYTE    ???
  201. 44Ch    BYTE    ???
  202. 44Dh    BYTE    ??? (used by SM.COM)
  203. 44Eh    BYTE    ??? (used by SM.COM, MACTEST)
  204.     ???
  205. --------N-2A7802-----------------------------
  206. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  207.     AX = 7802h
  208.     ES:DI -> 8-byte buffer to be filled
  209. Return: AL = 00h if no user logged on to Extended Services
  210.     AL <> 00h if user logged on to Extended Services
  211.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  212. --------D-2A80-------------------------------
  213. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  214.     AH = 80h
  215.     AL = critical section number (00h-0Fh) (see #2243)
  216. Notes:    normally hooked to avoid interrupting a critical section, rather than
  217.       called
  218.     the handler should ensure that none of the critical sections are
  219.       reentered, usually by suspending a task which attempts to reenter
  220.       an active critical section
  221.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  222.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  223.       beginning at offset -11 from the Swappable Data Area
  224.       (see #1373 at INT 21/AX=5D06h); each word contains the offset within
  225.       the DOS data segment of a byte which must be changed from C3h (RET)
  226.       to 50h (PUSH AX) under DOS 3.x or from 00h to a nonzero value under
  227.       DOS 4.0+ to enable use of critical sections.    For DOS 4.0+, all
  228.       words in this list point at the byte at offset 0D0Ch.
  229.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  230.       far calls to its own handler, and does not reflect the calls back
  231.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  232.       ModifyDOSInt2A=0 in the [386Enh] section
  233.     Novell NETX does not issue INT 2A/AH=80h and INT 2A/AH=81h calls when
  234.       it intercepts INT 21 calls and processes them itself
  235. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  236.  
  237. (Table 2243)
  238. Values for DOS critical section number:
  239.  01h    DOS kernel, SHARE.EXE, DOSMGR
  240.     apparently for maintaining the integrity of DOS/SHARE/NET
  241.       data structures
  242.  02h    DOS kernel, DOSMGR
  243.     ensures that no multitasking occurs while DOS is calling an
  244.       installable device driver
  245.  05h    network redirector
  246.  06h    DOS 4.x only IFSFUNC
  247.  08h    ASSIGN.COM
  248.  0Ah    MSCDEX, CORELCDX
  249.  0Fh    IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  250. --------D-2A81-------------------------------
  251. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  252.     AH = 81h
  253.     AL = critical section number (00h-0Fh) (see #2243)
  254. Notes:    normally hooked rather than called
  255.     the handler should reawaken any tasks which were suspended due to an
  256.       attempt to enter the specified critical section
  257.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  258.       far calls to its own handler, and does not reflect the calls back
  259.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  260.       ModifyDOSInt2A=0 in the [386Enh] section
  261. SeeAlso: AH=80h,AH=82h,AX=8700h
  262. --------D-2A82-------------------------------
  263. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  264.     AH = 82h
  265. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  266.       greater than 0Ch except 59h, and on process termination
  267.     the handler should reawaken any tasks which were suspended due to an
  268.       attempt to enter one of the critical sections 0 through 7
  269. SeeAlso: AH=81h
  270. --------N-2A84-------------------------------
  271. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  272.     AH = 84h
  273. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  274.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  275.       software to process requests
  276. SeeAlso: INT 28
  277. --------N-2A86-------------------------------
  278. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  279.     AH = 86h
  280.     ???
  281. Return: ???
  282. SeeAlso: AH=07h,AH=C4h
  283. --------P-2A8700-----------------------------
  284. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  285.     AX = 8700h
  286.     CF clear
  287. Return: CF clear if OK to print in background now
  288.     CF set if background printing not allowed at this time
  289. Desc:    used to inform interested programs that PRINT is about to start its
  290.       background processing, and allow those programs to postpone the
  291.       processing if necessary
  292. Notes:    when PRINT gains control and wants to begin printing, it calls this
  293.       function.  If CF is clear on return, PRINT begins its background
  294.       processing, and calls AX=8701h when it is done.  If CF is set on
  295.       return, PRINT will relinquish control immediately, and will not
  296.       call AX=8701h
  297.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  298.       prevent background printing while its own code is active
  299. SeeAlso: AH=80h,AH=81h,AX=8701h
  300. --------P-2A8701-----------------------------
  301. INT 2A CU - PRINT - END BACKGROUND PRINTING
  302.     AX = 8701h
  303. Desc:    used to inform interested programs that PRINT has completed its
  304.       background processing
  305. Note:    called by PRINT after it has performed some background printing; not
  306.       called if AX=8700h returned with CF set.
  307. SeeAlso: AX=8700h
  308. --------N-2A89-------------------------------
  309. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  310.     AH = 89h
  311.     AL = ???  (ASSIGN uses 08h)
  312.     ???
  313. Return: ???
  314. --------I-2A90-------------------------------
  315. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  316.     AH = 90h
  317.     ???
  318. Return: ???
  319. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  320.       03h-07h,0Ch-11h
  321. --------N-2AC2-------------------------------
  322. INT 2A U - Network - ???
  323.     AH = C2h
  324.     AL = subfunction
  325.         07h ???
  326.         08h ???
  327.     BX = 0001h
  328.     ???
  329. Return: ???
  330. Note:    this function is called by the DOS 3.30-6.00 APPEND
  331. --------N-2AC4-------------------------------
  332. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  333.     AH = C4h
  334.     AL = subfunction
  335.         07h ???
  336.         08h ???
  337.     BX = ???
  338.     ???
  339. Return: ???
  340. SeeAlso: AH=86h
  341. --------N-2AD800-----------------------------
  342. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  343.     AX = D800h
  344. Return: nothing
  345. Desc:    sets ??? flag, and sets ??? to initial value
  346. Note:    called by CLIENT
  347. SeeAlso: AX=D801h,AX=D850h
  348. --------N-2AD801-----------------------------
  349. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  350.     AX = D801h
  351. Return: nothing
  352. Desc:    clears the ??? flag set by AX=D800h
  353. Note:    called by CLIENT
  354. SeeAlso: AX=D800h,AX=D850h
  355. --------N-2AD850-----------------------------
  356. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  357.     AX = D850h
  358. Return: nothing
  359. Desc:    increments an internal byte-sized counter
  360. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  361.       Advanced NetWare 4.0 DOS Requester
  362. SeeAlso: AX=D851h
  363. --------N-2AD851-----------------------------
  364. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  365.     AX = D851h
  366. Return: nothing
  367. Desc:    resets an internal byte-sized counter to zero
  368. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  369.       Advanced NetWare 4.0 DOS Requester
  370. SeeAlso: AX=D850h
  371. --------N-2AD852-----------------------------
  372. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  373.     AX = D852h
  374. Return: ???
  375. Note:    calls the NetWare Lite SERVER installation check, and sets ??? pointer
  376. SeeAlso: AX=D853h,INT 2F/AX=D880h
  377. --------N-2AD853-----------------------------
  378. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  379.     AX = D853h
  380. Return: ???
  381. Note:    clears the pointer set by AX=D852h
  382. SeeAlso: AX=D852h
  383. --------N-2AE0-------------------------------
  384. INT 2A U - PC Network 1.00 - ???
  385.     AH = E0h
  386.     AL = subfunction??? (01h,02h, maybe others)
  387.     ???
  388. Return: ???
  389. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  390. --------N-2AFF90-----------------------------
  391. INT 2A - PC/TCP PREDIR.EXE - ???
  392.     AX = FF90h
  393. Return: AX = ???
  394. Note:    PREDIR.EXE is the network printer redirector included as part of the
  395.       PC/TCP system by FTP Software, Inc.
  396. --------N-2AFF91-----------------------------
  397. INT 2A - PC/TCP PREDIR.EXE - ???
  398.     AX = FF91h
  399.     BX = ???
  400. Return: AX = status???
  401. --------N-2AFF92-----------------------------
  402. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  403.     AX = FF92h
  404. Return: AX = 0000h if installed
  405.        BX = redirected printer port (FFFFh if no printers redirected)
  406.        CX = version (CH = major, CL = minor)
  407. Note:    PREDIR.EXE is the network printer redirector included as part of the
  408.       PC/TCP system by FTP Software, Inc.
  409. --------N-2AFF93-----------------------------
  410. INT 2A - PC/TCP PREDIR.EXE - ???
  411.     AX = FF93h
  412. Return: AX = ???
  413. --------N-2AFF94-----------------------------
  414. INT 2A - PC/TCP PREDIR.EXE - ???
  415.     AX = FF94h
  416.     BX = ???
  417.     CX = ???
  418.     DX = ???
  419. Return: AX = ???
  420. Note:    PREDIR.EXE is the network printer redirector included as part of the
  421.       PC/TCP system by FTP Software, Inc.
  422. --------N-2AFF95-----------------------------
  423. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  424.     AX = FF95h
  425.     CX = what to get
  426.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  427.         0001h spooling program
  428.         0002h ???
  429.         0003h spool file name
  430.         0004h swap file name
  431. Return: AX = status
  432.         0000h successful
  433.     BX:DX -> ASCIZ configuration string
  434. --------N-2AFF96-----------------------------
  435. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  436.     AX = FF96h
  437.     CX = what to set
  438.         0000h ???
  439.         0001h print-on-hotkey state
  440.         0002h print-on-exit state
  441.         0003h print job timeout in clock ticks
  442.         0004h print-on-EOF state
  443.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  444. Return: AX = ???
  445. SeeAlso: AX=FF97h
  446. Note:    PREDIR.EXE is the network printer redirector included as part of the
  447.       PC/TCP system by FTP Software, Inc.
  448. --------N-2AFF97-----------------------------
  449. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  450.     AX = FF97h
  451.     CX = what to get
  452.         0000h ???
  453.         0001h print-on-hotkey state
  454.         0002h print-on-exit state
  455.         0003h print job timeout in clock ticks
  456.         0004h print-on-EOF state
  457. Return: AX = status
  458.         0000h successful
  459.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  460. SeeAlso: AX=FF96h
  461. --------D-2B---------------------------------
  462. INT 2B - DOS 2+ - RESERVED
  463. Note:    this vector is not used in MS-DOS versions <= 6.22, and points at an
  464.       IRET instruction
  465. --------D-2B---------------------------------
  466. INT 2B - IBM ROM-DOS v4.0 - ???
  467.     AH = function
  468.         00h ??? (modifies data in IBMBIO.COM)
  469.         01h internal operations
  470.         02h ???
  471.         AL = index (00h-0Ch)
  472.         Return: AX = ??? or (CMOS 2Dh and CMOS 2Eh)
  473.         03h get ??? data
  474.         Return: AX = (CMOS 2Dh and CMOS 2Eh)
  475.             BX = FFFFh
  476.         other does nothing
  477. Note:    function 03h is called by ROMSHELL.COM; if BX != 0, then the ES:DI from
  478.       INT 2F/AX=1982h points at valid data
  479. SeeAlso: INT 2F/AX=1982h
  480. --------D-2C---------------------------------
  481. INT 2C - DOS 2+ - RESERVED
  482. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  483. --------O-2C---------------------------------
  484. INT 2C - STARLITE architecture - KERNEL API
  485. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  486.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  487.       be released in 1991.    The interrupt number is subject to change
  488.       before the actual release.
  489. --------m-2C---------------------------------
  490. INT 2C R - Cloaking - CALL PROTECTED-MODE PASSALONG CHAIN
  491. Notes:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  492.       in a chain of protected-mode handlers, and will only pass execution
  493.       to the V86-mode INT 2C handler if none of the handlers in the
  494.       passalong chain handle the call instead.  This is the method by which
  495.       the real-mode stub of a cloaked application communicates with the
  496.       protected-mode portion.
  497.     the cloaking host calls the passalong chain with EAX=58494E33h ('WIN3')
  498.       when MS Windows starts up and with EAX=334E4958h ('3NIW') when
  499.       Windows shuts down; between these two broadcasts, the additional
  500.       Windows-only Cloaking services are available
  501.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  502.       memory manager included in Helix Software's Netroom
  503. SeeAlso: INT 2C/AX=0009h,INT 2F/AX=4310h"Cloaking"
  504. --------m-2C0000-----------------------------
  505. INT 2C P - Cloaking - ALLOCATE GDT SELECTOR
  506.     AX = 0000h
  507.     EBX = base address
  508.     CL = access mode byte
  509.     CH = extended access mode byte (omit limit field)
  510.     EDX = segment limit
  511. Return: CF clear if successful
  512.         AX = selector
  513.     CF set on error
  514.         AX = error code (see #2244)
  515. Notes:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  516.     to access extended memory, set the base address to the desired
  517.       physical address plus 400000h (4M)
  518.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  519.       memory manager included in Helix Software's Netroom
  520. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h,#0427
  521.  
  522. (Table 2244)
  523. Values for Cloaking error code:
  524.  0001h    no more selectors
  525.  0002h    not a GDT ring 0 selector
  526.  0003h    invalid selector (out of range, not user selector)
  527.  0004h    selector not allocated
  528. --------m-2C0001-----------------------------
  529. INT 2C P - Cloaking - FREE GDT SELECTOR
  530.     AX = 0001h
  531.     SI = selector
  532. Return: CF clear if successful
  533.     CF set on error
  534.         AX = error code (see #2244)
  535. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  536. SeeAlso: AX=0000h,INT 2F/AX=4310h"Cloaking"
  537. --------m-2C0002-----------------------------
  538. INT 2C P - Cloaking - SET SEGMENT BASE ADDRESS
  539.     AX = 0002h
  540.     SI = selector
  541.     EBX = new physical base addres
  542. Return: CF clear if successful
  543.     CF set on error
  544.         AX = error code (see #2244)
  545. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  546. SeeAlso: AX=0000h,AX=0003h,AX=0004h,INT 31/AX=0007h,#0427
  547. --------m-2C0003-----------------------------
  548. INT 2C P - Cloaking - SET SEGMENT LIMIT
  549.     AX = 0003h
  550.     SI = selector
  551.     EBX = new limit
  552. Return: CF clear if successful
  553.     CF set on error
  554.         AX = error code (see #2244)
  555. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  556. SeeAlso: AX=0000h,AX=0002h,AX=0004h,INT 31/AX=0008h
  557. --------m-2C0004-----------------------------
  558. INT 2C P - Cloaking - SET SEGMENT ACCESS MODE
  559.     AX = 0004h
  560.     SI = selector
  561.     CL = new access mode byte (see #0428)
  562. Return: CF clear if successful
  563.     CF set on error
  564.         AX = error code (see #2244)
  565. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  566. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h,INT 31/AX=0009h
  567. --------m-2C0005-----------------------------
  568. INT 2C P - Cloaking - SET SEGMENT EXTENDED ACCESS MODE
  569.     AX = 0005h
  570.     SI = selector
  571.     CL = new extended access mode byte (limit field ignored) (see #2245)
  572. Return: CF clear if successful
  573.     CF set on error
  574.         AX = error code (see #2244)
  575. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  576. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h,INT 31/AX=0009h
  577.  
  578. Bitfields for extended access mode byte:
  579. Bit(s)    Description    (Table 2245)
  580.  7    4K granularity instead of byte granularity
  581.  6    32-bit code segment
  582.  5    reserved (0)
  583.  4    segment available to system
  584. SeeAlso: #0429
  585. --------m-2C0006-----------------------------
  586. INT 2C P - Cloaking - GET PROTECTED-MODE INTERRUPT VECTOR
  587.     AX = 0006h
  588.     CL = vector (00h-7Fh)
  589. Return: CF clear
  590.     DX:EBX -> current interrupt handler
  591. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  592. SeeAlso: AX=0007h,INT 31/AX=0204h
  593. --------m-2C0007-----------------------------
  594. INT 2C P - Cloaking - SET PROTECTED-MODE INTERRUPT VECTOR
  595.     AX = 0007h
  596.     CL = vector (00h-7Fh)
  597.     DX:EBX -> interrupt handler
  598. Return: CF clear
  599. Notes:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  600.     the IDT entry's type remains unchanged
  601. SeeAlso: AX=0006h,INT 31/AX=0205h
  602. --------m-2C0008-----------------------------
  603. INT 2C P - Cloaking - GET PASSALONG ADDRESS
  604.     AX = 0008h
  605. Return: CF clear
  606.     DX:EBX = current passalong address
  607. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  608. SeeAlso: AX=0009h,AX=002Ch,INT 2F/AX=4310h"Cloaking"
  609. --------m-2C0009-----------------------------
  610. INT 2C P - Cloaking - SET PASSALONG ADDRESS
  611.     AX = 0009h
  612.     DX:EBX = new value for passalong address (see #2246)
  613. Return: CF clear
  614. Notes:    when an INT 2C instruction is executed in V86 mode, the Cloaking host
  615.       calls the passalong address.    The handler should check whether the
  616.       upcall is of interest to it, and if not it should jump to the old
  617.       passalong address (retrieved with AX=0008h before the handler was
  618.       installed).  The final handler should return with CF clear to cause
  619.       the interrupt to be reflected back to V86 mode if none of the
  620.       passalong handlers is triggered
  621.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  622. SeeAlso: AX=0008h,AX=002Dh,INT 2C"PASSALONG CHAIN"
  623.  
  624. (Table 2246)
  625. Values Cloaking passalong address is called with:
  626.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  627.     SS:EBX -> caller registers (see #2247)
  628.     CF clear
  629.     others undefined
  630. Return: CF clear: pass along to V86-mode INT 2C handler
  631.     CF set: return immediately to V86 mode
  632.  
  633. Format of Cloaking caller registers:
  634. Offset    Size    Description    (Table 2247)
  635.  00h    DWORD    EDI
  636.  04h    DWORD    ESI
  637.  08h    DWORD    EBP
  638.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  639.  10h    DWORD    EBX
  640.  14h    DWORD    EDX
  641.  18h    DWORD    ECX
  642.  1Ch    DWORD    EAX
  643.  20h    DWORD    error code
  644.  24h    DWORD    EIP
  645.  28h    WORD    CS
  646.  2Ah    WORD    padding
  647.  2Ch    DWORD    EFLAGS
  648.  30h    DWORD    ESP
  649.  34h    WORD    SS
  650.  36h    WORD    padding
  651. --remainder not available if protected-mode ring3 trap---
  652.  38h    WORD    ES
  653.  3Ah    WORD    padding
  654.  3Ch    WORD    DS
  655.  3Eh    WORD    padding
  656.  40h    WORD    FS
  657.  42h    WORD    padding
  658.  44h    WORD    GS
  659.  46h    WORD    padding
  660. --------m-2C000A-----------------------------
  661. INT 2C P - Cloaking - GET BASE ADDRESS OF GDT SELECTOR
  662.     AX = 000Ah
  663.     SI = selector
  664. Return: CF clear if successful
  665.         EBX = segment base address
  666.     CF set on error
  667.         AX = error code (see #2244)
  668. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  669.       memory manager included in Helix Software's Netroom
  670. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  671. --------m-2C000B-----------------------------
  672. INT 2C P - Cloaking - GET SELECTOR LIMIT
  673.     AX = 000Bh
  674.     SI = selector
  675. Return: CF clear if successful
  676.         EBX = segment base address
  677.     CF set on error
  678.         AX = error code (see #2244)
  679. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  680. SeeAlso: AX=000Ah,INT 2F/AX=4310h"Cloaking"
  681. --------m-2C---------------------------------
  682. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  683.     AX = function (000Ch-001Fh)
  684. --------m-2C000F-----------------------------
  685. INT 2C P - Cloaking v1.01 - "Simulate_Shell_Event"
  686.     AX = 000Fh
  687.     ECX = event code (see #2248)
  688.     DX = subfunction for event
  689.     EDX high word = boost value (see #2249)
  690.     SI:EDI -> completion procedure
  691. Return: CF clear if successful (event scheduled)
  692.     CF set on error
  693. Note:    this function is only available while MS Windows is running
  694. SeeAlso: AX=0011h,AX=0012h,INT 2F/AX=1605h,INT 2F/AX=4310h"Cloaking"
  695.  
  696. (Table 2248)
  697. Values for Cloaking shell event code:
  698.  0414h    Hot key event
  699.     subevent 0000h: Alt-Space
  700.     subevent 0001h: Alt-Enter
  701.     subevent 0002h: Dir-VM
  702.  0415h    Switch context
  703.     subevent 0000h for DOS VM context, nonzero for System VM context
  704.  0416h    Clipboard event
  705.  0417h    Termination event
  706.     subevent 0000h for normal termination, nonzero for error
  707.  0418h    Display message
  708.     subevent 0000h for normal message, nonzero for system model ASAP
  709.  0419h    Crash
  710.  041Ah    Paste complete
  711.     subevent 0000h: normal
  712.     subevent 0001h: cancelled by user
  713.     subevent 0002h: cancelled
  714.  041Bh    Contention event
  715.  041Ch    Screen switch
  716.     subevent 0000h: forward
  717.     subevent 0001h: back
  718.  041Dh    Filesystem change
  719.  041Eh    Check Focus
  720.  041Fh    Panic
  721.  
  722. Bitfields for boost value:
  723. Bit(s)    Description    (Table 2249)
  724.  0    boost system VM until focus changes
  725.  1    boost system VM on Switcher screen
  726.  2    boost system VM until response
  727.  3    boost system VM during clipboard activity
  728.  4    boost system VM during print screen
  729.  5    boost system VM during update
  730. --------m-2C0011-----------------------------
  731. INT 2C P - Cloaking v1.01 - "Switch_VMs_and_Call_back"
  732.     AX = 0011h
  733.     EBX = handle of VM to be made active
  734.     SI:EDI -> 32-bit FAR completion procedure
  735. Return: CF clear if successful (scheduled)
  736.     CF set on error
  737. Notes:    this function is only available while MS Windows is running
  738.     the completion procedure is called with CF clear if the specified
  739.       VM has been made active, or with CF set on error
  740. SeeAlso: AX=000Fh,AX=0012h
  741. --------m-2C0012-----------------------------
  742. INT 2C P - Cloaking v1.01 - "Query_Current_VM"
  743.     AX = 0012h
  744. Return: CF clear
  745.     EBX = handle of active VM
  746.     ESI = handle of system VM
  747.     ECX = VM status flags (see #2250)
  748.     EDX = shell flags (see #2251)
  749. Note:    this function is only available while MS Windows is running in enhanced
  750.       mode
  751. SeeAlso: AX=000Fh,AX=0011h,AX=0013h
  752.  
  753. Bitfields for VM status flags:
  754. Bit(s)    Description    (Table 2250)
  755.  0    in exclusive mode
  756.  1    runs in background
  757.  2    being created
  758.  3    suspended
  759.  4    not executable
  760.  5    executing in protected mode
  761.  6    contains PM application
  762.  7    32-bit PM application
  763.  8    called from VxD
  764.  9    high priority background
  765.  10    blocked on semaphore
  766.  11    awakening
  767.  12    has pageable V86
  768.  13    has locked V86
  769.  14    is scheduled
  770.  15    idle
  771.  16    closing
  772.  
  773. Bitfields for shell flags:
  774. Bit(s)    Description    (Table 2251)
  775.  2    windowed
  776.  5    Alt-Tab reserved
  777.  6    Alt-Esc reserved
  778.  7    Alt-Space reserved
  779.  8    Alt-PrtSc reserved
  780.  9    Alt-Enter reserved
  781.  10    Alt-PrtSc reserved
  782.  11    PrtSc reserved
  783.  12    polling enabled
  784.  13    no HMA
  785.  14    has shortcut key
  786.  15    locked EMS handles
  787.  16    locked XMS handles
  788.  17    fast paste enabled
  789.  18    locked V86 memory
  790.  30    close-on-exit enabled
  791. --------m-2C0013-----------------------------
  792. INT 2C P - Cloaking v1.01 - "Issue_System_Modal_Message"
  793.     AX = 0013h
  794.     EDX = message box flags (see #2252)
  795.     DS:ECX -> ASCIZ message text
  796.     DS:EDI -> ASCIZ caption
  797. Return: CF clear
  798.     EAX = response code
  799. Note:    this function is only available while MS Windows is running in enhanced
  800.       mode
  801. SeeAlso: AX=000Fh,AX=0012h
  802.  
  803. Bitfields for message box flags:
  804. Bit(s)    Description    (Table 2252)
  805.  3-0    response codes (see #2253)
  806.  7-4    icon codes
  807.     1 = Warning hand
  808.     2 = exclamation mark
  809.     4 = asterisk
  810.  9-8    default response (0 = first button, 1 = second, 2 = third)
  811.  12    message is system model
  812.  15    don't change focus
  813.  29    hang with interrupts enabled
  814.  30    do not window
  815.  31    execute ASAP
  816.  
  817. (Table 2253)
  818. Values for response codes:
  819.  00h    OK
  820.  01h    OK, Cancel
  821.  02h    Abort, Retry, Ignore
  822.  03h    Yes, No, Cancel
  823.  04h    Yes, No
  824.  05h    Retry, Cancel
  825. --------m-2C001D-----------------------------
  826. INT 2C P - Cloaking v1.01 - GET INT 2C API HANDLER ENTRY POINT
  827.     AX = 001Dh
  828. Return: CF clear
  829.     DX:EBX = selector:offset of Cloaking host INT 2C handler
  830. Desc:    get the Cloaking host's entry point to bypass any other programs
  831.       which may have hooked INT 2C in protected mode
  832. Note:    the returned entry point must be called with a simulated INT, i.e.
  833.       a PUSHD must precede the far call to the handler
  834. SeeAlso: INT 2F/AX=4310h"Cloaking"
  835. --------m-2C001E-----------------------------
  836. INT 2C P - Cloaking v1.01 - CLEAR CRITICAL SECTION
  837.     AX = 001Eh
  838. Return: CF clear
  839. Desc:    allow MS Windows to switch to another VM after having prevented it
  840.       by invoking a critical section
  841. SeeAlso: AX=001Fh,INT 15/AX=101Ch,INT 2F/AX=1682h
  842. --------m-2C001F-----------------------------
  843. INT 2C P - Cloaking v1.01 - SET CRITICAL SECTION
  844.     AX = 001Fh
  845. Return: CF clear
  846. Desc:    prevent MS Windows from switching to another VM
  847. SeeAlso: AX=001Eh,INT 15/AX=101Bh,INT 2F/AX=1681h
  848. --------m-2C0020-----------------------------
  849. INT 2C P - Cloaking - GET SIZE OF PROTECTED-MODE STATE
  850.     AX = 0020h
  851. Return: EAX = number of bytes required for storing state
  852. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  853. SeeAlso: AX=0021h,AX=0022h
  854. --------m-2C0021-----------------------------
  855. INT 2C P - Cloaking - SAVE PROTECTED-MODE STATE
  856.     AX = 0021h
  857.     ES:EDI -> buffer for protected-mode state
  858. Return: CF clear
  859.     buffer filled
  860. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  861. SeeAlso: AX=0020h,AX=0022h
  862. --------m-2C0022-----------------------------
  863. INT 2C P - Cloaking - RESTORE PROTECTED-MODE STATE
  864.     AX = 0022h
  865.     DS:ESI -> buffer containing previously-saved protected-mode state
  866. Return: CF clear if successful
  867.         state restored
  868.     CF set on error (invalid buffer contents)
  869. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  870. SeeAlso: AX=0020h,AX=0021h
  871. --------m-2C0023-----------------------------
  872. INT 2C P - Cloaking - ISSUE PROTECTED-MODE XMS CALL
  873.     AX = 0023h
  874. Notes:    not currently implemented--NOP in RM386 v6.00
  875.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  876. --------m-2C0024-----------------------------
  877. INT 2C P - Cloaking - SET V86-MODE STACK
  878.     AX = 0024h
  879.     DX:EBX = new value for V86-mode SS:ESP
  880. Return: nothing
  881. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  882. --------m-2C0025-----------------------------
  883. INT 2C P - Cloaking - CALL V86-MODE PROCEDURE
  884.     AX = 0025h
  885.     DS:EBX -> client register structure (see #2247)
  886. Return: CF clear if successful
  887.         client register structure updated
  888.     CF set if no more nested procedure call space available
  889. Notes:    this call uses the V86-mode stack supplied in the client structure, and
  890.       calls the routine specified by CS:IP in the client structure
  891.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  892. SeeAlso: AX=0026h,AX=0027h,INT 31/AX=0301h
  893. --------m-2C0026-----------------------------
  894. INT 2C P - Cloaking - CALL V86-MODE INTERRUPT HANDLER
  895.     AX = 0026h
  896.     DS:EBX -> client register structure (see #2247)
  897.     CX = interrupt number
  898. Return: CF clear if successful
  899.         client register structure updated
  900.     CF set if no more nested procedure call space available
  901. Notes:    this call uses the V86-mode stack supplied in the client structure
  902.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  903. SeeAlso: AX=0025h,AX=0027h,INT 31/AX=0300h
  904. --------m-2C0027-----------------------------
  905. INT 2C P - Cloaking - CHAIN TO V86-MODE INTERRUPT HANDLER
  906.     AX = 0027h
  907.     DS:EBX -> client register structure (see #2247)
  908. Return: CF clear if successful
  909.         client register structure updated
  910.     CF set if no more nested procedure call space available
  911. Notes:    this call uses the V86-mode stack supplied in the client structure,
  912.       and jumps to the address specified by CS:IP in the client structure
  913.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  914. SeeAlso: AX=0025h,AX=0026h
  915. --------m-2C0028-----------------------------
  916. INT 2C P - Cloaking - GET ESP0 FROM TSS
  917.     AX = 0028h
  918. Return: CF clear
  919.     EAX = TSS's ESP0
  920. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  921.       memory manager included in Helix Software's Netroom
  922. --------m-2C0029-----------------------------
  923. INT 2C P - Cloaking - SET SECONDARY STACK
  924.     AX = 0029h
  925.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  926. Return: CF clear
  927. Desc:    inform RM386 of the ring 3 interrupt stack location
  928. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  929. --------m-2C002A-----------------------------
  930. INT 2C P - Cloaking - SET 8259 IRQ BASE VECTORS
  931.     AX = 002Ah
  932.     BL = base vector of master interrupt controller
  933.     CL = base vector of slave interrupt controller
  934. Notes:    this call merely informs RM386 that the caller has changed the
  935.       interrupt mappings
  936.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  937. SeeAlso: INT 67/AX=DE0Bh
  938. --------m-2C002BCH81-------------------------
  939. INT 2C P - Cloaking - PROTECTED-MODE VIRTUAL DMA SERVICES
  940.     AX = 002Bh
  941.     CH = 81h
  942.     CL = subfunction (02h-0Ch)
  943.     other registers as appropriate for subfunction
  944. Return: varies by function
  945.     CF set on error
  946. Notes:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  947.       with the same numbers
  948.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  949. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  950. --------m-2C002C-----------------------------
  951. INT 2C P - Cloaking - GET PORT-TRAPPING PASSALONG
  952.     AX = 002Ch
  953. Return: CF clear
  954.     DX:EBX = current I/O trapping passalong address
  955. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  956. SeeAlso: AX=0008h,AX=002Dh
  957. --------m-2C002D-----------------------------
  958. INT 2C P - Cloaking - SET PORT-TRAPPING PASSALONG
  959.     AX = 002Dh
  960.     DX:EBX = new I/O trapping passalong address (see #2254)
  961. Return: CF clear
  962. Notes:    RM386 calls the passalong address whenever an access to a monitored
  963.       I/O port is attempted; the handler should check whether it is a port
  964.       that it is interested in, and if not call the previous passalong
  965.       address (which was retrieved with AX=002Ch before installing the
  966.       new handler)
  967.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  968. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  969.  
  970. (Table 2254)
  971. Values Cloaking port-trapping passalong address is called with:
  972.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  973.         ring 3)
  974.     SS:EBX -> caller register structure (see #2247)
  975.         check EFLAGS V86-mode bit for type
  976.     CX = first two bytes of I/O instruction which was trapped
  977.     DX = port to which I/O is being performed
  978.     CF clear
  979. Return: CF clear if RM386 should perform I/O operation
  980.     CF set if I/O should be skipped
  981. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  982.       should not modify the client CS:EIP
  983. --------m-2C002E-----------------------------
  984. INT 2C P - Cloaking - TRAP I/O PORT
  985.     AX = 002Eh
  986.     DX = port number to trap
  987. Return: CF clear if successful
  988.     CF set on error (port out of range or reserved)
  989. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  990. SeeAlso: AX=002Fh,AX=0030h
  991. --------m-2C002F-----------------------------
  992. INT 2C PU - Cloaking - UNTRAP I/O PORT
  993.     AX = 002Fh
  994.     DX = port number for which to cancel trapping
  995. Return: CF clear if successful
  996.     CF set on error (port out of range or reserved)
  997. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  998. SeeAlso: AX=002Eh,AX=0030h
  999. --------m-2C0030-----------------------------
  1000. INT 2C PU - Cloaking - GET TRAPPING STATE OF SPECIFIED PORT
  1001.     AX = 0030h
  1002.     DX = port number
  1003. Return: CF clear if successful
  1004.        BX = current state (0000h not trapped, 0001h trapped)
  1005.     CF set on error (port out of range or reserved)
  1006. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1007. SeeAlso: AX=002Eh,AX=002Fh
  1008. --------m-2C0031-----------------------------
  1009. INT 2C PU - RM386 v6.00 - BUG
  1010.     AX = 0031h
  1011. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix
  1012.       Software's Netroom
  1013. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  1014.       invoked with this function
  1015. --------m-2C0031-----------------------------
  1016. INT 2C P - Cloaking v1.01 - ALLOCATE V86 CALLBACK
  1017.     AX = 0031h
  1018.     DX:EBX = CS:EIP of protected-mode routine to be invoked by callback
  1019. Return: CF clear if successful
  1020.         EBX = CS:IP of V86-mode callback handler
  1021.     CF set on error
  1022. SeeAlso: AX=0032h
  1023. --------m-2C0032-----------------------------
  1024. INT 2C P - Cloaking v1.01 - FREE V86 CALLBACK
  1025.     AX = 0032h
  1026.     EBX = CS:IP of V86-mode callback handler
  1027. Return: CF clear if successful
  1028.     CF set on error
  1029.         AX = error code
  1030.         0005h invalid callback address
  1031.         0006h callback already free
  1032. SeeAlso: AX=0032h
  1033. --------m-2C0033-----------------------------
  1034. INT 2C P - Cloaking v1.01 - REGISTER CLOAKING CLIENT
  1035.     AX = 0033h
  1036.     DS:EDX -> client registration structure (see #2255)
  1037. Return: CF clear if successful
  1038.     CF set on error (linked list corrupt)
  1039. SeeAlso: AX=0034h,#2465 at INT 2F/AX=4310h"Cloaking"
  1040.  
  1041. Format of client registration structure:
  1042. Offset    Size    Description    (Table 2255)
  1043.  00h    PWORD    link to next structure
  1044.  06h    PWORD    link to previous structure
  1045.  0Ch  2 BYTEs    client version (major, minor)
  1046.  0Eh 20 BYTEs    client name
  1047.  22h    DWORD    physical address of client start
  1048.  26h    DWORD    client's total size in bytes
  1049. Note:    the link area should not be modified once the structure has been
  1050.       used for the registration call
  1051. --------m-2C0034-----------------------------
  1052. INT 2C P - Cloaking v1.01 - UNREGISTER CLOAKING CLIENT
  1053.     AX = 0034h
  1054.     DS:EDX -> client registration structure (see #2255)
  1055. Return: CF clear if successful
  1056.     CF set on error (linked list corrupt)
  1057. Note:    the client must unregister before freeing the XMS block containing
  1058.       its registration structure(s)
  1059. SeeAlso: AX=0033h,#2465 at INT 2F/AX=4310h"Cloaking"
  1060. --------D-2D---------------------------------
  1061. INT 2D - DOS 2+ - RESERVED
  1062. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1063. BUG:    RM386 v6.00-6.02 (as distributed with Helix's Netroom v3.x) contains
  1064.       a stack bug in its protected-mode INT 2D handler which causes a crash
  1065.       when INT 2D is invoked from V86 mode
  1066. --------t-2D---------------------------------
  1067. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.6]
  1068.     AH = multiplex number
  1069.     AL = function
  1070.         00h installation check
  1071.         01h get private entry point
  1072.         02h uninstall
  1073.         03h request popup
  1074.         04h determine chained interrupts
  1075.         05h get hotkey list
  1076.         06h get device-driver information
  1077.         07h-0Fh reserved for future enhancements
  1078.         Return: AL = 00h (not implemented)
  1079.         other  application-dependent
  1080.     other registers vary by function (also see individual entries below)
  1081. Return: varies by function
  1082. Notes:    programs should not use fixed multiplex numbers; rather, a program
  1083.       should scan all multiplex numbers from 00h to FFh, remembering the
  1084.       first unused multiplex in case the program is not yet installed.
  1085.       For multiplex numbers which are in use, the program should compare
  1086.       the first 16 bytes of the signature string to determine whether it
  1087.       is already installed on that multiplex number.  If not previously
  1088.       installed, it should use the first free multiplex number.
  1089.     functions other than 00h are not valid unless a program is installed
  1090.       on the selected multiplex number
  1091.     to be considered fully compliant with version 3.6 of the specification,
  1092.       programs must implement at least functions 00h, 02h (no resident
  1093.       uninstall code required), and 04h (return value 04h).     TSRs that
  1094.       provide hotkeys with which the user can activate them must also
  1095.       implement function 05h.  TSRs which provide DOS device drivers must
  1096.       also implement function 06h.    The absolute minimum fully-compliant
  1097.       implementation has an overhead of 64 bytes (80 bytes with function
  1098.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  1099.       protocol header and hook list entry).
  1100.     the signature string and description may be used by memory mappers
  1101.       to display the installed programs
  1102.     to be considered fully compliant, users of this specification must
  1103.       adhere to the IBM interrupt sharing protocol (see #2256), which will
  1104.       permit removal of TSRs in arbitrary order and interrupt handler
  1105.       reordering.  All TSRs following this specification should be
  1106.       removable unless they are loaded from CONFIG.SYS, though they need
  1107.       not keep the code for removing themselves resident; it is acceptable
  1108.       for a separate program to perform the interrupt unhooking and
  1109.       memory-freeing steps of removal.
  1110.     A sample public-domain implementation including example TSRs and
  1111.       utility programs may be found in a separate package distributed as
  1112.       AMISLnnn.ZIP (AMISL092.ZIP as of this writing).
  1113.     Please let me know if you choose to follow this proposal.  The
  1114.       signature and a list of the private API calls you use would be
  1115.       appreciated, as well.
  1116. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1117. SeeAlso: INT 2D/AL=05h,INT 2D/AL=06h,INT 2F"NOTES"
  1118.  
  1119. Format of interrupt sharing protocol interrupt handler entry point:
  1120. Offset    Size    Description    (Table 2256)
  1121.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  1122.           following this data block (EBh 10h)
  1123.  02h    DWORD    address of next handler in chain
  1124.  06h    WORD    signature 424Bh
  1125.  08h    BYTE    EOI flag
  1126.         00h software interrupt or secondary hardware interrupt handler
  1127.         80h primary hardware interrupt handler (will issue EOI)
  1128.  09h  2 BYTEs    short jump to hardware reset routine
  1129.         must point at a valid FAR procedure (may be just RETF)
  1130.  0Bh  7 BYTEs    reserved (0) by IBM for future expansion
  1131. Note:    when chaining to the prior handler, the interrupt handler must perform
  1132.       an indirect jump/call using the address at offset 02h in the
  1133.       ISP header.  This permits another AMIS TSR to hook itself into
  1134.       the chain at a position other than as the first handler to receive
  1135.       an interrupt.
  1136. SeeAlso: INT F1/AH=01h"Common ISDN API",INT F1/AH=06h"CAPI",#3708
  1137. --------t-2D--00-----------------------------
  1138. INT 2D - AMIS v3.0+ - INSTALLATION CHECK
  1139.     AL = 00h
  1140.     AH = multiplex number for program
  1141. Return: AL = 00h if free
  1142.     AL = FFh if multiplex number in use
  1143.         CX = binary version number (CH = major, CL = minor)
  1144.         DX:DI -> signature string (see #2257) identifying the program
  1145.           using the multiplex number
  1146. SeeAlso: INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1147. SeeAlso: INT 2D/AL=06h
  1148. Index:    installation check;Alternate Multiplex Interrupt Specification
  1149. Index:    installation check;AMIS|installation check;FASTMOUS
  1150. Index:    installation check;SPELLER|installation check;Monitor
  1151. Index:    installation check;NOLPT|installation check;NOTE
  1152. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  1153. Index:    installation check;VGABLANK|installation check;EATMEM
  1154. Index:    installation check;RECALL|installation check;XPTR2
  1155.  
  1156. Format of AMIS signature string:
  1157. Offset    Size    Description    (Table 2257)
  1158.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  1159.  08h  8 BYTEs    blank-padded product name
  1160.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  1161. Note:    it is not necessary to reserve a full 64 bytes for the description,
  1162.       just enough to store the actual ASCIZ string
  1163. SeeAlso: #2258
  1164.  
  1165. (Table 2258)
  1166. Values for AMIS signatures known to be in use:
  1167.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  1168.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  1169.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  1170.  'CPH1995 ' 'CDTSR   '    resident CD-Audio player
  1171.  'CPH1996 ' 'DSAPI   '
  1172.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  1173.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  1174.               in product description field, if desired)
  1175.             (see also INT 2D/AL=DCh)
  1176.  'DTown SD' 'DTU     '    DTown Software Development's DTown Utilities
  1177.             (see also INT 2D/AL=20h)
  1178.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  1179.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  1180.  'heathh  ' 'Monitor '
  1181.  'Helge O '        TSRs by Helge Olav Helgesen
  1182.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  1183.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  1184.  'M Better' 'iHPFS   '    Marcus Better's HPFS filesystem driver for DOS
  1185.  'M. Paul ' 'FREEVER '    DOS version-faking TSR by Matthias Paul
  1186.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  1187.  'Pino Nav' 'ALTMENU '    activate any program's menu bar by pressing Alt key
  1188.  'Pino Nav' 'Keybit  '    Pino Navato's KEYBIT Lite Italian keyboard driver v4+
  1189.  'PowrQuot' 'CAPRILOG'
  1190.  'PowrQuot' 'CAPRITSR'
  1191.  'PowrQuot' 'CAPRIWIN'
  1192.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  1193.  'Ralf B  ' 'disaXXYY'    RBdisabl -- disable key scancode XX w/ shift states YY
  1194.  'Ralf B  ' 'DUALVGA '    dual-VGA support, screen blanker, and DPMS driver
  1195.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  1196.  'Ralf B  ' 'NoBreak '    disable Ctrl-@, Ctrl-C, and Ctrl-Break keys
  1197.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  1198.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  1199.  'Ralf B  ' 'RBclock '    RBclock -- on-screen real-time clock
  1200.  'Ralf B  ' 'RBclockE'    RBclock -- on-screen elapsed-time clock
  1201.  'Ralf B  ' 'RBdvorak'    Dvorak keyboard mapping w/ opt Esc/~, LCtrl/CapsLk swap
  1202.  'Ralf B  ' 'RBkcount'    display count of keystrokes on screen
  1203.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  1204.  'Ralf B  ' 'RBnoboot'    disable Ctrl-Alt-Del key combination
  1205.  'Ralf B  ' 'ShftCaps'    require Shift-CapsLock to turn on CapsLock
  1206.  'Ralf B  ' 'ShftNumL'    require Shift-NumLock to turn off NumLock
  1207.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  1208.  'Ralf B  ' 'VGABLANK'    VGA-only screen blanker
  1209.  'Ralf B  ' 'WINTAME '    yield CPU when program in Win95 DOS box is idle
  1210.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  1211.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  1212.  'SRT      ' 'STOPBOOT'    reboot preventer by Steve Talbot
  1213.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  1214.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  1215.             testing programs (v1.1+)
  1216.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  1217.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  1218.  'WlkngOwl' 'NoiseSYS'    NOISE.SYS random-number generator
  1219. SeeAlso: #2257
  1220. --------t-2D--01-----------------------------
  1221. INT 2D - AMIS v3.0+ - GET PRIVATE ENTRY POINT
  1222.     AL = 01h
  1223.     AH = multiplex number for program
  1224. Return: AL = 00h if all API calls via INT 2D
  1225.     AL = FFh if entry point supported
  1226.         DX:BX -> entry point for bypassing interrupt chain
  1227. Note:    this function is not valid unless a program is installed on the
  1228.       specified multiplex number; use INT 2D/AL=00h to check
  1229. SeeAlso: INT 2D/AL=00h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1230. SeeAlso: INT 2D/AL=06h
  1231. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  1232. --------t-2D--02-----------------------------
  1233. INT 2D - AMIS v3.0+ - UNINSTALL
  1234.     AL = 02h
  1235.     AH = multiplex number for program
  1236.     DX:BX = return address for successful uninstall (may be    ignored by TSR)
  1237. Return: AL = status
  1238.         00h not implemented (makes TSR non-compliant with specification)
  1239.         01h unsuccessful
  1240.         02h can not uninstall yet, will do so when able
  1241.         03h safe to remove, but no resident uninstaller
  1242.           (TSR still enabled)
  1243.         BX = segment of memory block with resident code
  1244.         04h safe to remove, but no resident uninstaller
  1245.           (TSR now disabled)
  1246.         BX = segment of memory block with resident code
  1247.         05h not safe to remove now, try again later
  1248.         06h disabled, but can not be removed from memory
  1249.           because loaded from CONFIG.SYS
  1250.         07h safe to remove, but no resident device-driver
  1251.           uninstaller.    Caller must unlink device
  1252.           drivers from DOS device chain as well as
  1253.           unhooking interrupts and freeing memory
  1254.         BX = segment of memory block with resident code
  1255.         FFh successful
  1256.     return at DX:BX with AX destroyed if successful and TSR honors
  1257.       specific return address
  1258. Note:    this function is not valid unless a program is installed on the
  1259.       specified multiplex number; use INT 2D/AL=00h to check
  1260. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1261. SeeAlso: INT 2D/AL=06h
  1262. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  1263. --------t-2D--03-----------------------------
  1264. INT 2D - AMIS v3.0+ - REQUEST POP-UP
  1265.     AL = 03h
  1266.     AH = multiplex number for program
  1267. Return: AL = status
  1268.         00h not implemented or TSR is not a pop-up
  1269.         01h can not pop up at this time, try again later
  1270.         02h can not pop up yet, will do so when able
  1271.         03h already popped up
  1272.         04h unable to pop up, user intervention required
  1273.         BX = standard reason code
  1274.             0000h unknown failure
  1275.             0001h interrupt chain passes through memory
  1276.               which must be swapped out to pop up
  1277.             0002h swap-in failed
  1278.         CX = application's reason code if nonzero
  1279.         FFh TSR popped up and was exited by user
  1280.         BX = return value
  1281.             0000h no return value
  1282.             0001h TSR unloaded
  1283.             0002h-00FFh reserved
  1284.             0100h-FFFFh application-dependent
  1285. Note:    this function is not valid unless a program is installed on the
  1286.       specified multiplex number; use INT 2D/AL=00h to check
  1287. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=04h,INT 2D/AL=05h
  1288. SeeAlso: INT 2D/AL=06h
  1289. --------t-2D--04-----------------------------
  1290. INT 2D - AMIS v3.0+ - DETERMINE CHAINED INTERRUPTS
  1291.     AL = 04h
  1292.     AH = multiplex number for program
  1293.     BL = interrupt number (except 2Dh)
  1294. Return: AL = status
  1295.         00h not implemented (makes TSR non-compliant with specification)
  1296.         01h (obsolete) unable to determine
  1297.         02h (obsolete) interrupt hooked
  1298.         03h (obsolete) interrupt hooked, address returned
  1299.         DX:BX -> TSR's interrupt BL handler
  1300.         04h list of hooked interrupts returned
  1301.         DX:BX -> interrupt hook list (see #2259)
  1302.         FFh interrupt not hooked
  1303. Notes:    BL is ignored if the TSR returns AL=04h; in that case, the caller
  1304.       needs to scan the return list rather than making additional calls
  1305.       to this function.  If the return is not 00h or 04h, then the caller
  1306.       must cycle through the remaining interrupt numbers it wishes to
  1307.       check.
  1308.     return values 01h through 03h may not be used by AMIS v3.6-compliant
  1309.       programs; they are included here solely for compatibility with
  1310.       version 3.3, though they were probably never used in any
  1311.       implementation
  1312.     for return values 01h through 03h, since INT 2D is known to be hooked,
  1313.       the resident code need not test for BL=2Dh (to minimize its size),
  1314.       and the return value is therefore undefined in that case.
  1315.     this function is not valid unless a program is installed on the
  1316.       specified multiplex number; use INT 2D/AL=00h to check
  1317. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=05h
  1318. SeeAlso: INT 2D/AL=06h
  1319.  
  1320. Format of AMIS interrupt hook list [array]:
  1321. Offset    Size    Description    (Table 2259)
  1322.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  1323.  01h    WORD    offset within hook list's segment of the interrupt handler
  1324.         this will point at the initial short jump of the interrupt
  1325.           sharing protocol header (see #2256)
  1326. SeeAlso: #2260
  1327. --------t-2D--05-----------------------------
  1328. INT 2D - AMIS v3.5+ - GET HOTKEYS
  1329.     AL = 05h
  1330.     AH = multiplex number for program
  1331. Return: AL = status
  1332.         00h not implemented
  1333.         FFh supported
  1334.         DX:BX -> hotkey list (see #2260)
  1335. Notes:    this function is not valid unless a program is installed on the
  1336.       specified multiplex number; use INT 2D/AL=00h to check
  1337.     programs which provide hotkeys are required to provide this function
  1338.       to be fully compliant with this specification
  1339. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1340. SeeAlso: INT 2D/AL=06h
  1341.  
  1342. Format of AMIS hotkey list:
  1343. Offset    Size    Description    (Table 2260)
  1344.  00h    BYTE    type of hotkey checking (see #2261)
  1345.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  1346.  02h 6N BYTEs    array of hotkey definitions
  1347.         (one per hotkey, first should be primary hotkey)
  1348.         Offset    Size    Description
  1349.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  1350.                 hotkey triggers on release if bit 7 set
  1351.          01h    WORD    required shift states (see #2262)
  1352.          03h    WORD    disallowed shift states (see #2262)
  1353.          05h    BYTE    hotkey flags (see #2263)
  1354. Notes:    except for bit 7, the shift states correspond exactly to the return
  1355.       values from INT 16/AH=12h.  A set bit in the required states word
  1356.       indicates that the corresponding shift state must be active when the
  1357.       hotkey's scan code is received for the hotkey to be recognized; a
  1358.       clear bit means that the corresponding state may be ignored.    A set
  1359.       bit in the disallowed shift states word indicates that the
  1360.       corresponding shift state must be inactive.
  1361.     for the disallowed-states word, if one of the "either" bits is set,
  1362.       then both the corresponding left bit and right bit must be set
  1363.     examples:
  1364.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  1365.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  1366.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  1367. Index:    hotkeys;AMIS
  1368. SeeAlso: #0005
  1369.  
  1370. Bitfields for type of AMIS hotkey checking:
  1371. Bit(s)    Description    (Table 2261)
  1372.  0    checks before chaining INT 09
  1373.  1    checks after chaining INT 09
  1374.  2    checks before chaining INT 15/AH=4Fh
  1375.  3    checks after chaining INT 15/AH=4Fh
  1376.  4    checks on INT 16/AH=00h,01h,02h
  1377.  5    checks on INT 16/AH=10h,11h,12h
  1378.  6    checks on INT 16/AH=20h,21h,22h
  1379.  7    reserved (0)
  1380. SeeAlso: #2260
  1381.  
  1382. Bitfields for AMIS shift states:
  1383. Bit(s)    Description    (Table 2262)
  1384.  0    right shift pressed
  1385.  1    left shift pressed
  1386.  2    either control key pressed
  1387.  3    either Alt key pressed
  1388.  4    ScrollLock active
  1389.  5    NumLock active
  1390.  6    CapsLock active
  1391.  7    either shift key pressed
  1392.  8    left control key pressed
  1393.  9    left Alt key pressed
  1394.  10    right control key pressed
  1395.  11    right Alt key pressed
  1396.  12    ScrollLock pressed
  1397.  13    NumLock pressed
  1398.  14    CapsLock pressed
  1399.  15    SysReq key pressed
  1400. Notes:    if bit 2 is set, either control key may be pressed for the hotkey; if
  1401.       bits 8 and 10 are both set, then both control keys must be pressed.
  1402.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  1403.     the SysReq key is often labeled SysRq
  1404. SeeAlso: #2260,#2263
  1405.  
  1406. Bitfields for AMIS hotkey flags:
  1407. Bit(s)    Description    (Table 2263)
  1408.  0    hotkey chained before processing
  1409.  1    hotkey chained after processing
  1410.  2    others should pass through this hotkey so that it can be monitored
  1411.  3    hotkey will not activate if other keys pressed/released before hotkey
  1412.       press is completed
  1413.  4    this key is remapped into some other key
  1414.  5    this key is conditionally chained (sometimes passed on, sometimes
  1415.       swallowed)
  1416.  6-7    reserved (0)
  1417. SeeAlso: #2260,#2262
  1418. --------t-2D--06-----------------------------
  1419. INT 2D - AMIS v3.6 - GET DEVICE-DRIVER INFORMATION
  1420.     AL = 06h
  1421.     AH = multiplex number for program
  1422. Return: AL = number of device driver headers supplied by prog.
  1423.     AH = device-driver flags (see #2264)
  1424.     DX:BX -> first device driver header (see #1332)
  1425. Program: AMIS is the Alternate Multiplex Interrupt Specification promulgated
  1426.       by Ralf Brown
  1427. Notes:    if AL=00h, AH,BX,DX are meaningless and may be destroyed
  1428.     this function is not valid unless a program is installed on the
  1429.       specified multiplex number; use INT 2D/AL=00h to check
  1430.     programs which provide device drivers are required to support this
  1431.       function to be considered fully compliant with v3.6+ of the
  1432.       specification
  1433. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1434. SeeAlso: INT 2D/AL=05h
  1435.  
  1436. Bitfields for AMIS device-driver information flags:
  1437. Bit(s)    Description    (Table 2264)
  1438.  0    program loaded from CONFIG.SYS, and thus can not be removed from memory
  1439.     (leave clear if unable to determine)
  1440.  1    device driver headers have not been linked into DOS device chain
  1441.  2    reentrant device driver(s)
  1442. --------N-2D--10-----------------------------
  1443. INT 2D - RATSR 2.0+ - GET STATUS
  1444.     AL = 10h
  1445.     AH = AMIS multiplex number for RATSR
  1446. Return: AL = status
  1447.         01h listening (no connection)
  1448.         02h receiving          \
  1449.         03h sending               > station being monitored
  1450.         04h initializing receive  /
  1451.     AH = keyboard lock status (00h unlocked, 01h locked)
  1452. Program: RATSR is a utility by James Berry provided with
  1453.       RemoteAccess/Professional, a commercial bulletin board system, that
  1454.       allows remote control of a station over a network
  1455. SeeAlso: INT 2D"AMIS"
  1456. --------d-2D--10-----------------------------
  1457. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  1458.     AL = 10h
  1459.     AH = AMIS multiplex number for dLite
  1460. Return: CF clear if successful
  1461.         ES:BX -> parameter block (see #2265)
  1462.     CF set on error
  1463. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  1464.       expands compressed files when they are read
  1465. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  1466.  
  1467. Format of dLite parameter block:
  1468. Offset    Size    Description    (Table 2265)
  1469.  00h    BYTE    TSR flags (see #2266)
  1470.  01h    WORD    maximum number of programs needing original filesize
  1471.  03h    WORD    current number of programs needing original filesize
  1472.  05h    WORD    maximum number of files that can be handled by dLite (should
  1473.           be the same as FILES= in CONFIG.SYS)
  1474.  07h    WORD    offset (in the same segment as the parameter block) of the
  1475.           table of programs needing the original filesize (8 bytes
  1476.           each,    without path or extension, uppercase, and zero \
  1477.           terminated if    shorter than 8 bytes)
  1478.  
  1479. Bitfields for dLite TSR flags:
  1480. Bit(s)    Description    (Table 2266)
  1481.  0    deny FCB access
  1482.  1    dLite sleeping rather than activated
  1483.  2    always indicate original filesize when reading directory entries,
  1484.       rather than only for specified programs
  1485.  3-7    reserved
  1486. SeeAlso: #2265
  1487. --------V-2D--10-----------------------------
  1488. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  1489.     AL = 10h
  1490.     AH = AMIS multiplex number for Burnout Plus
  1491. Return: AL = 01h
  1492.     BX = Burnout Plus status (see #2267)
  1493.     CX = record of features loaded (see #2268)
  1494.     ES:DI -> Burnout Plus control structure (see #2269)
  1495. Program: Burnout Plus is a DOS screen saver from Cove Software
  1496. SeeAlso: INT 14/AX=AA01h,INT 2D"AMIS"
  1497. Index:    screen saver;Burnout Plus
  1498.  
  1499. Bitfields for Burnout Plus status:
  1500. Bit(s)    Description    (Table 2267)
  1501.  0    screen is blanked
  1502.  1    MS Windows is active (Burnout Plus deactivated)
  1503.  2-15    reserved
  1504.  
  1505. Bitfields for Burnout Plus features loaded/features enabled:
  1506. Bit(s)    Description    (Table 2268)
  1507.  0    mouse activity monitor
  1508.  1    passkey support
  1509.  2    password support
  1510.  3    continuous clear
  1511.  4    software blanking
  1512.  5    video activity monitor
  1513.  6    disk activity monitor
  1514.  7    activating keystroke suppression
  1515. SeeAlso: #2269
  1516.  
  1517. Format of Burnout Plus control structure:
  1518. Offset    Size    Description    (Table 2269)
  1519.  00h    BYTE    size of structure in bytes
  1520.  01h    WORD    Burnout Plus version
  1521.  03h    WORD    screen blanking reset count in clock ticks
  1522.  05h    WORD    current countdown value in clock ticks
  1523.  07h    BYTE    type of timeout specification
  1524.  08h    BYTE    instant-blank hotkey
  1525.  09h    WORD    extended status information (see #2270)
  1526.         the bits for password, passkey, and software blanking are
  1527.           ignored and cannot be enabled or disabled externally
  1528.  0Bh    WORD    features enabled (see #2268)
  1529. Note:    all fields except the first two may be modified by external programs
  1530.       to affect the operation of Burnout Plus
  1531. Index:    hotkeys;Burnout Plus
  1532.  
  1533. Bitfields for extended Burnout Plus status information:
  1534. Bit(s)    Description    (Table 2270)
  1535.  0    Burnout Plus disabled
  1536.  1    force screen to blank on next clock tick
  1537.  2    restore screen if currently blanked
  1538.  3-15    reserved
  1539. Note:    1 and 2 are automatically cleared by Burnout Plus after blanking
  1540.       or restoring the screen
  1541. SeeAlso: #2269
  1542. --------V-2D--10-----------------------------
  1543. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  1544.     AL = 10h
  1545.     AH = AMIS multiplex number for Screen Thief
  1546. Return: nothing
  1547. Program: Screen Thief is a graphics screen grabber
  1548. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  1549.       does not release the low-memory stub; this may be used to effect a
  1550.       partial uninstall if INT 2D/AL=02h fails
  1551. SeeAlso: INT D8"Screen Thief"
  1552. --------i-2D--10-----------------------------
  1553. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  1554.     AL = 10h
  1555.     AH = AMIS multiplex number for RAMLIGHT
  1556. Return: ES:BX -> array of fake device driver headers used in monitoring
  1557.     CX = number of drives being monitored???
  1558. --------U-2D--10-----------------------------
  1559. INT 2D - DTown Utilities v1.40+ - EXTENDED API INSTALLATION CHECK
  1560.     AL = 10h
  1561. Return: AL = FFh
  1562.     BL = extended API availability (00h no, 01h API is loaded)
  1563. SeeAlso: INT 2D/AL=11h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  1564. --------s-2D--10-----------------------------
  1565. INT 2D - CDTSR - GET INTERNAL VARIABLE TABLE
  1566.     AL = 10h
  1567.     AH = AMIS multiplex number for CDTSR
  1568. Return: CX:DX -> CDTSR internal variable structure (see #2271)
  1569. Program: CDTSR is a resident audio CD player by Colin Hill
  1570. SeeAlso: INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  1571.  
  1572. Format of CDTSR internal variable structure:
  1573. Offset    Size    Description    (Table 2271)
  1574.  00h    BYTE    hotkey scan code (see #0005)
  1575.  01h    BYTE    hotkey shift states
  1576.  02h    BYTE    flag: repeat
  1577.  03h    BYTE    flag: custom repeat
  1578.  04h    BYTE    flag: background polling
  1579.  05h    DWORD    (read-only) internal timing variable
  1580.  09h    DWORD    current track play position, in frames
  1581.  0Dh    DWORD    current disk play position, in frames
  1582.  11h    BYTE    number of entries in track program
  1583.  12h    BYTE    index into track program currently playing (FFh if not playing)
  1584.  13h 100 BYTEs    track program (each byte contains one track number)
  1585.  77h    BYTE    saved cursor end scan line
  1586.  78h    BYTE    saved cursor start scan line
  1587.  79h    BYTE    currently playing track
  1588.  7Ah    BYTE    CD driver media-change flag
  1589.  7Bh    WORD    video base segment during last popup
  1590.  7Dh    WORD    video page offset during last popup
  1591.  7Fh    BYTE    currently-selected track
  1592.  80h    DWORD    begin of custom repeat, in frames
  1593.  84h    DWORD    end of custom repeat, in frames
  1594.  88h    WORD    track program index of top list item
  1595. --------K-2D--10-----------------------------
  1596. INT 2D - KEYBIT Lite v5+ - GET POINTER TO STATUS BYTE
  1597.     AL = 10h
  1598.     AH = AMIS multiplex number for KEYBIT Lite
  1599. Return: DX:BX -> status byte (see #2272)
  1600. Program: KEYBIT Lite is an enhanced Italian keyboard driver by Pino Navato.
  1601. SeeAlso: INT 2D"AMIS"
  1602.  
  1603. Bitfields for KEYBIT Lite status byte:
  1604. Bit(s)    Description    (Table 2272)
  1605.  7    KEYBIT Lite active
  1606.  6    E-mail support active
  1607.  5-0    reserved
  1608. Notes:    E-mail support is one of the original features of KEYBIT Lite.    It is
  1609.       the automatic conversion of the 8-bits ASCII chars produced by some
  1610.       keys available on Italian keyboards to couples of 7-bits chars.
  1611.     Message editors should always enable e-mail support, they should also
  1612.       restore its original status before exiting.
  1613.     The user can change both status bits by hotkeys.
  1614. --------K-2D--10-----------------------------
  1615. INT 2D - ALTMENU - GET POINTER TO KEY CODE
  1616.     AL = 10h
  1617.     AH = AMIS multiplex number for signature 'Pino Nav' 'ALTMENU '
  1618. Return: DX:BX -> WORD key code to insert in keyboard buffer on Alt-key tap
  1619. Program: Pino Navato's freeware ALTMENU permits activating the menu bar of
  1620.       any program by pressing the Alt key alone.
  1621. Notes:    The value in the key code word will be returned in AX by a call to
  1622.       INT 16/AH=00h after the Alt key is pressed by itself
  1623.     ALTMENU may be disabled by setting the key code equal to 0000h
  1624. SeeAlso: INT 16/AH=00h,INT 2D"AMIS"
  1625. --------d-2D--11-----------------------------
  1626. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  1627.     AL = 11h
  1628.     AH = AMIS multiplex number for dLite
  1629.     BX = file handle
  1630. Return: CF clear if successful
  1631.         DX:AX = size of uncompressed file
  1632.     CF set on error (not dPressed file)
  1633. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  1634. --------U-2D--11-----------------------------
  1635. INT 2D - DTown Utilities v1.40+ - UTILITY INSTALLATION CHECK
  1636.     AL = 11h
  1637.     BL = function
  1638.         00h get number of installed utilities
  1639.         Return: BL = number of utilities
  1640.         01h get installed utilities
  1641.         DX:DI -> buffer containing one byte for each utility
  1642.         Return: DX:DI buffer filled with flags (0=no,1=yes) indicating
  1643.               whether the corresponding utility is loaded
  1644. Return: AL = FFh if supported
  1645. Note:    this function is only available if the extended API has been installed
  1646.       in the resident portion
  1647. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h
  1648. --------s-2D--11-----------------------------
  1649. INT 2D - CDTSR - REPROGRAM CDTSR
  1650.     AL = 11h
  1651.     AH = AMIS multiplex number for CDTSR
  1652. Return: nothing
  1653. Program: CDTSR is a resident audio CD player by Colin Hill
  1654. Desc:    reprograms CDTSR based on the values in the internal variable
  1655.       structure (see #2271), which may have been changed by an application
  1656. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  1657. --------d-2D--12-----------------------------
  1658. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  1659.     AL = 12h
  1660.     AH = AMIS multiplex number for dLite
  1661.     BX = file handle
  1662. Return: CF clear if successful
  1663.         DX:AX = size of compressed file
  1664.     CF set on error (not dPressed file)
  1665. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  1666. --------s-2D--12-----------------------------
  1667. INT 2D - CDTSR - DISABLE POPUP
  1668.     AL = 12h
  1669.     AH = AMIS multiplex number for CDTSR
  1670. Return: nothing
  1671. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=13h"CDTSR"
  1672. --------U-2D--12-----------------------------
  1673. INT 2D - FREEVER - GET ORIGINAL DOS VERSION INFO
  1674.     AL = 12h
  1675.     AH = AMIS multiplex number for FREEVER
  1676. Return: AL = FFh if successful
  1677.         BH = major DOS version
  1678.         BL = minor DOS version
  1679.         CH = DOS version flag
  1680.         CL = OEM number
  1681.         DH = major DR DOS version number (FFh if unknown)
  1682.         DL = minor DR DOS version number (FFh if unknown)
  1683. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  1684.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  1685. SeeAlso: INT 2D/AL=13h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=17h"FREEVER"
  1686. --------s-2D--13-----------------------------
  1687. INT 2D - CDTSR - ENABLE POPUP
  1688.     AL = 13h
  1689.     AH = AMIS multiplex number for CDTSR
  1690. Return: nothing
  1691. Program: CDTSR is a resident audio CD player by Colin Hill
  1692. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR"
  1693. --------U-2D--13-----------------------------
  1694. INT 2D - FREEVER - SET VERSION NUMBERS
  1695.     AL = 13h
  1696.     AH = AMIS multiplex number for FREEVER
  1697.     BH = new major DOS version
  1698.     BL = new minor DOS version
  1699.     CH = new DOS version flag
  1700.     CL = new DOS revision number
  1701.     DH = new OEM number
  1702. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=17h"FREEVER"
  1703. --------U-2D--14-----------------------------
  1704. INT 2D - FREEVER - ENABLE TSR
  1705.     AL = 14h
  1706.     AH = AMIS multiplex number for FREEVER
  1707. Return: AL = FFh if successful
  1708. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=16h"FREEVER"
  1709. --------U-2D--15-----------------------------
  1710. INT 2D - FREEVER - DISABLE TSR
  1711.     AL = 15h
  1712.     AH = AMIS multiplex number for FREEVER
  1713. Return: AL = FFh if successful
  1714. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=16h"FREEVER"
  1715. --------U-2D--16-----------------------------
  1716. INT 2D - FREEVER - GET TSR STATUS
  1717.     AL = 16h
  1718.     AH = AMIS multiplex number for FREEVER
  1719. Return: AL = FFh if successful
  1720.         BL = status
  1721.         01h resident and active
  1722.         02h resident and inactive
  1723. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=17h"FREEVER"
  1724. --------U-2D--17-----------------------------
  1725. INT 2D - FREEVER - GET TaskMAX STATUS AT INSTALLATION
  1726.     AL = 17h
  1727.     AH = AMIS multiplex number for FREEVER
  1728. Return: AL = FFh if successful
  1729.         BL = status
  1730.         00h if TaskMAX not loaded before SETDRVER
  1731.         FFh if TaskMAX was loaded before SETDRVER
  1732. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  1733.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  1734. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=16h"FREEVER"
  1735. --------U-2D--20-----------------------------
  1736. INT 2D - DTown Utilities v1.40+ - GET POP-UP HANDLER ADDRESS
  1737.     AL = 20h
  1738. Return: AL = FFh if available
  1739.         DX:DI -> DTU popup-handler
  1740. Program: DTown Utilities is a freeware programmer's utility TSR by Jeroen van
  1741.       Disseldorp
  1742. Note:    this function is only available if the extended API has been installed
  1743.       in the resident portion
  1744. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=21h,INT 2D/AL=50h,INT 2D/AL=51h
  1745. SeeAlso: INT 03"DTown"
  1746. --------U-2D--21-----------------------------
  1747. INT 2D - DTown Utilities v1.40+ - POP UP
  1748.     AL = 21h
  1749.     BL = which utility to bring up
  1750.         00h active utility
  1751.         01h help screen
  1752.         0Ah ASCII table
  1753.         0Bh memory view
  1754.         0Ch CPU status
  1755.         0Dh calculator
  1756.         0Eh miscellaneous
  1757.         0Fh file viewer
  1758.         10h disassembler
  1759. Return: AL = status
  1760.         00h already active
  1761.         FFh popped up successfully
  1762.     BX = 0000h
  1763. Note:    this function is only available if the extended API has been installed
  1764.       in the resident portion
  1765. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  1766. --------U-2D--50-----------------------------
  1767. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET ADDRESS
  1768.     AL = 50h
  1769.     CX:DX = new address for start of memory view utility's display
  1770. Note:    this function is only available if the extended API has been installed
  1771.       in the resident portion
  1772. Return: AL = FFh if supported
  1773. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=21h,INT 2D/AL=51h
  1774. --------U-2D--51-----------------------------
  1775. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET REFERENCE
  1776.     AL = 51h
  1777.     BL = reference ("bookmark") number
  1778.     CX:DX = new address for reference
  1779. Return: AL = status
  1780.         00h invalid index
  1781.         FFh reference set
  1782. Note:    this function is only available if the extended API has been installed
  1783.       in the resident portion
  1784. Program: DTown Utilities is a shareware programmer's utility TSR by Jeroen van
  1785.       Disseldorp
  1786. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  1787. --------b-2D--DC-----------------------------
  1788. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  1789.     AL = DCh
  1790.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  1791.     DL = LPT Port Rescanned
  1792. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  1793.       conforming to the IEEE 1284.3 Committee's daisy chain specification.
  1794. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  1795.       warn parallel port device drivers that their daisy chain ID may
  1796.       have been changed.
  1797. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  1798. SeeAlso: INT 17/AX=0200h"Enhanced Parallel Port",#0557,#2258
  1799. --------l-2E---------------------------------
  1800. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  1801.     DS:SI -> commandline to execute (see #2273)
  1802. Return: all registers except CS:IP destroyed
  1803.     AX = status (4DOS v4.0)
  1804.        0000h successful
  1805.        FFFFh error before processing command (not enough memory, etc)
  1806.        other error number returned by command
  1807. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  1808.       internal commands) without loading another copy of COMMAND.COM
  1809.     if COMMAND.COM is the user's command interpreter, the primary copy
  1810.       executes the command; this allows the master environment to be
  1811.       modified by issuing a "SET" command, but changes in the master
  1812.       environment will not become effective until all programs descended
  1813.       from the primary COMMAND.COM terminate
  1814.     since COMMAND.COM processes the string as if typed from the keyboard,
  1815.       the transient portion needs to be present, and the calling program
  1816.       must ensure that sufficient memory to load the transient portion can
  1817.       be allocated by DOS if necessary
  1818.     results are unpredictable if invoked by a program run from a batch file
  1819.       because this call is not reentrant and COMMAND.COM uses the same
  1820.       internal variables when processing a batch file
  1821.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  1822.       has been loaded
  1823.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  1824.  
  1825. Format of DOS commandline:
  1826. Offset    Size    Description    (Table 2273)
  1827.  00h    BYTE    length of command string, not counting trailing CR
  1828.  01h    var    command string
  1829.   N    BYTE    0Dh (CR)
  1830. --------O-2E---------------------------------
  1831. INT 2E UP - Windows NT - NATIVE API
  1832.     EAX = function number (see #3871)
  1833.     EDX = address of parameter block
  1834. Return: ???
  1835.  
  1836. (Table 3871)
  1837. Values for Windows NT NTOS function number:
  1838.  000h    AcceptConnectPort    (24 bytes of parameters)
  1839.  001h    AccessCheck        (32 bytes of parameters)
  1840.  002h    AccessCheckAndAuditAlarm    (44 bytes of parameters)
  1841.  003h    AddAtom            (8 bytes of parameters)
  1842.  004h    AdjustGroupsToken    (24 bytes of parameters)
  1843.  005h    AdjustPrivilegesToken    (24 bytes of parameters)
  1844.  006h    AlertResumeThread    (8 bytes of parameters)
  1845.  007h    AlertThread        (4 bytes of parameters)
  1846.  008h    AllocateLocallyUniqueId    (4 bytes of parameters)
  1847.  009h    AllocateUuids        (12 bytes of parameters)
  1848.  00Ah    AllocateVirtualMemory    (24 bytes of parameters)
  1849.  00Bh    CallbackReturn        (12 bytes of parameters)
  1850.  00Ch    CancelIoFile        (8 bytes of parameters)
  1851.  00Dh    CancelTimer        (8 bytes of parameters)
  1852.  00Eh    ClearEvent        (4 bytes of parameters)
  1853.  00Fh    Close            (4 bytes of parameters)
  1854.  010h    CloseObjectAuditAlarm    (12 bytes of parameters)
  1855.  011h    CompleteConnectPort    (4 bytes of parameters)
  1856.  012h    ConnectPort        (32 bytes of parameters)
  1857.  013h    Continue        (8 bytes of parameters)
  1858.  014h    CreateDirectoryObject    (12 bytes of parameters)
  1859.  015h    CreateEvent        (20 bytes of parameters)
  1860.  016h    CreateEventPair        (12 bytes of parameters)
  1861.  017h    CreateFile        (44 bytes of parameters)
  1862.  018h    CreateIoCompletion    (16 bytes of parameters)
  1863.  019h    CreateKey        (28 bytes of parameters)
  1864.  01Ah    CreateMailslotFile    (32 bytes of parameters)
  1865.  01Bh    CreateMutant        (16 bytes of parameters)
  1866.  01Ch    CreateNamedPipeFile    (56 bytes of parameters)
  1867.  01Dh    CreatePagingFile    (16 bytes of parameters)
  1868.  01Eh    CreatePort        (20 bytes of parameters)
  1869.  01Fh    CreateProcess        (32 bytes of parameters)
  1870.  020h    CreateProfile        (36 bytes of parameters)
  1871.  021h    CreateSection        (28 bytes of parameters)
  1872.  022h    CreateSemaphore        (20 bytes of parameters)
  1873.  023h    CreateSymbolicLinkObject    (16 bytes of parameters)
  1874.  024h    CreateThread        (32 bytes of parameters)
  1875.  025h    CreateTimer        (16 bytes of parameters)
  1876.  026h    CreateToken        (52 bytes of parameters)
  1877.  027h    DelayExecution        (8 bytes of parameters)
  1878.  028h    DeleteAtom        (4 bytes of parameters)
  1879.  029h    DeleteFile        (4 bytes of parameters)
  1880.  02Ah    DeleteKey        (4 bytes of parameters)
  1881.  02Bh    DeleteObjectAuditAlarm    (12 bytes of parameters)
  1882.  02Ch    DeleteValueKey        (8 bytes of parameters)
  1883.  02Dh    DeviceIoControlFile    (40 bytes of parameters)
  1884.  02Eh    DisplayString        (4 bytes of parameters)
  1885.  02Fh    DuplicateObject        (28 bytes of parameters)
  1886.  030h    DuplicateToken        (24 bytes of parameters)
  1887.  031h    EnumerateKey        (24 bytes of parameters)
  1888.  032h    EnumerateValueKey    (24 bytes of parameters)
  1889.  033h    ExtendSection        (8 bytes of parameters)
  1890.  034h    FindAtom        (8 bytes of parameters)
  1891.  035h    FlushBuffersFile    (8 bytes of parameters)
  1892.  036h    FlushInstructionCache    (12 bytes of parameters)
  1893.  037h    FlushKey        (4 bytes of parameters)
  1894.  038h    FlushVirtualMemory    (16 bytes of parameters)
  1895.  039h    FlushWriteBuffer    (no parameters)
  1896.  03Ah    FreeVirtualMemory    (16 bytes of parameters)
  1897.  03Bh    FsControlFile        (40 bytes of parameters)
  1898.  03Ch    GetContextThread    (8 bytes of parameters)
  1899.  03Dh    GetPlugPlayEvent    (16 bytes of parameters)
  1900.  03Eh    GetTickCount        (no parameters)
  1901.  03Fh    ImpersonateClientOfPort    (8 bytes of parameters)
  1902.  040h    ImpersonateThread    (12 bytes of parameters)
  1903.  041h    InitializeRegistry    (4 bytes of parameters)
  1904.  042h    ListenPort        (8 bytes of parameters)
  1905.  043h    LoadDriver        (4 bytes of parameters)
  1906.  044h    LoadKey    (8 bytes of parameters)
  1907.  045h    LoadKey2        (12 bytes of parameters)
  1908.  046h    LockFile        (40 bytes of parameters)
  1909.  047h    LockVirtualMemory    (16 bytes of parameters)
  1910.  048h    MakeTemporaryObject    (4 bytes of parameters)
  1911.  049h    MapViewOfSection    (40 bytes of parameters)
  1912.  04Ah    NotifyChangeDirectoryFile    (36 bytes of parameters)
  1913.  04Bh    NotifyChangeKey        (40 bytes of parameters)
  1914.  04Ch    OpenDirectoryObject    (12 bytes of parameters)
  1915.  04Dh    OpenEvent        (12 bytes of parameters)
  1916.  04Eh    OpenEventPair        (12 bytes of parameters)
  1917.  04Fh    OpenFile        (24 bytes of parameters)
  1918.  050h    OpenIoCompletion    (12 bytes of parameters)
  1919.  051h    OpenKey            (12 bytes of parameters)
  1920.  052h    OpenMutant        (12 bytes of parameters)
  1921.  053h    OpenObjectAuditAlarm    (48 bytes of parameters)
  1922.  054h    OpenProcess        (16 bytes of parameters)
  1923.  055h    OpenProcessToken    (12 bytes of parameters)
  1924.  056h    OpenSection        (12 bytes of parameters)
  1925.  057h    OpenSemaphore        (12 bytes of parameters)
  1926.  058h    OpenSymbolicLinkObject    (12 bytes of parameters)
  1927.  059h    OpenThread        (16 bytes of parameters)
  1928.  05Ah    OpenThreadToken        (16 bytes of parameters)
  1929.  05Bh    OpenTimer        (12 bytes of parameters)
  1930.  05Ch    PlugPlayControl        (16 bytes of parameters)
  1931.  05Dh    PrivilegeCheck        (12 bytes of parameters)
  1932.  05Eh    PrivilegedServiceAuditAlarm    (20 bytes of parameters)
  1933.  05Fh    PrivilegeObjectAuditAlarm    (24 bytes of parameters)
  1934.  060h    ProtectVirtualMemory    (20 bytes of parameters)
  1935.  061h    PulseEvent        (8 bytes of parameters)
  1936.  062h    QueryInformationAtom    (20 bytes of parameters)
  1937.  063h    QueryAttributesFile    (8 bytes of parameters)
  1938.  064h    QueryDefaultLocale    (8 bytes of parameters)
  1939.  065h    QueryDirectoryFile    (44 bytes of parameters)
  1940.  066h    QueryDirectoryObject    (28 bytes of parameters)
  1941.  067h    QueryEaFile        (36 bytes of parameters)
  1942.  068h    QueryEvent        (20 bytes of parameters)
  1943.  069h    QueryFullAttributesFile    (8 bytes of parameters)
  1944.  06Ah    QueryInformationFile    (20 bytes of parameters)
  1945.  06Bh    QueryIoCompletion    (20 bytes of parameters)
  1946.  06Ch    QueryInformationPort    (20 bytes of parameters)
  1947.  06Dh    QueryInformationProcess    (20 bytes of parameters)
  1948.  06Eh    QueryInformationThread    (20 bytes of parameters)
  1949.  06Fh    QueryInformationToken    (20 bytes of parameters)
  1950.  070h    QueryIntervalProfile    (8 bytes of parameters)
  1951.  071h    QueryKey        (20 bytes of parameters)
  1952.  072h    QueryMultipleValueKey    (24 bytes of parameters)
  1953.  073h    QueryMutant        (20 bytes of parameters)
  1954.  074h    QueryObject        (20 bytes of parameters)
  1955.  075h    QueryOleDirectoryFile    (44 bytes of parameters)
  1956.  076h    QueryPerformanceCounter    (8 bytes of parameters)
  1957.  077h    QuerySection        (20 bytes of parameters)
  1958.  078h    QuerySecurityObject    (20 bytes of parameters)
  1959.  079h    QuerySemaphore        (20 bytes of parameters)
  1960.  07Ah    QuerySymbolicLinkObject    (12 bytes of parameters)
  1961.  07Bh    QuerySystemEnvironmentValue    (16 bytes of parameters)
  1962.  07Ch    QuerySystemInformation    (16 bytes of parameters)
  1963.  07Dh    QuerySystemTime        (4 bytes of parameters)
  1964.  07Eh    QueryTimer        (20 bytes of parameters)
  1965.  07Fh    QueryTimerResolution    (12 bytes of parameters)
  1966.  080h    QueryValueKey        (24 bytes of parameters)
  1967.  081h    QueryVirtualMemory    (24 bytes of parameters)
  1968.  082h    QueryVolumeInformationFile    (20 bytes of parameters)
  1969.  083h    QueueApcThread        (20 bytes of parameters)
  1970.  084h    RaiseException        (12 bytes of parameters)
  1971.  085h    RaiseHardError        (24 bytes of parameters)
  1972.  086h    ReadFile        (36 bytes of parameters)
  1973.  087h    ReadFileScatter        (36 bytes of parameters)
  1974.  088h    ReadRequestData        (24 bytes of parameters)
  1975.  089h    ReadVirtualMemory    (20 bytes of parameters)
  1976.  08Ah    RegisterThreadTerminatePort    (4 bytes of parameters)
  1977.  08Bh    ReleaseMutant        (8 bytes of parameters)
  1978.  08Ch    ReleaseSemaphore    (12 bytes of parameters)
  1979.  08Dh    RemoveIoCompletion    (20 bytes of parameters)
  1980.  08Eh    ReplaceKey        (12 bytes of parameters)
  1981.  08Fh    ReplyPort        (8 bytes of parameters)
  1982.  090h    ReplyWaitReceivePort    (16 bytes of parameters)
  1983.  091h    ReplyWaitReplyPort    (8 bytes of parameters)
  1984.  092h    RequestPort        (8 bytes of parameters)
  1985.  093h    RequestWaitReplyPort    (12 bytes of parameters)
  1986.  094h    ResetEvent        (8 bytes of parameters)
  1987.  095h    RestoreKey        (12 bytes of parameters)
  1988.  096h    ResumeThread        (8 bytes of parameters)
  1989.  097h    SaveKey    (8 bytes of parameters)
  1990.  098h    SetIoCompletion        (20 bytes of parameters)
  1991.  099h    SetContextThread    (8 bytes of parameters)
  1992.  09Ah    SetDefaultHardErrorPort    (4 bytes of parameters)
  1993.  09Bh    SetDefaultLocale    (8 bytes of parameters)
  1994.  09Ch    SetEaFile        (16 bytes of parameters)
  1995.  09Dh    SetEvent        (8 bytes of parameters)
  1996.  09Eh    SetHighEventPair    (4 bytes of parameters)
  1997.  09Fh    SetHighWaitLowEventPair    (4 bytes of parameters)
  1998.  0A0h    ???            (??? bytes of parameters)
  1999.  0A1h    SetInformationFile    (20 bytes of parameters)
  2000.  0A2h    SetInformationKey    (16 bytes of parameters)
  2001.  0A3h    SetInformationObject    (16 bytes of parameters)
  2002.  0A4h    SetInformationProcess    (16 bytes of parameters)
  2003.  0A5h    SetInformationThread    (16 bytes of parameters)
  2004.  0A6h    SetInformationToken    (16 bytes of parameters)
  2005.  0A7h    SetIntervalProfile    (8 bytes of parameters)
  2006.  0A8h    SetLdtEntries        (24 bytes of parameters)
  2007.  0A9h    SetLowEventPair        (4 bytes of parameters)
  2008.  0AAh    SetLowWaitHighEventPair    (4 bytes of parameters)
  2009.  0ABh    ???            (??? bytes of parameters)
  2010.  0ACh    SetSecurityObject    (12 bytes of parameters)
  2011.  0ADh    SetSystemEnvironmentValue    (8 bytes of parameters)
  2012.  0AEh    SetSystemInformation    (12 bytes of parameters)
  2013.  0AFh    SetSystemPowerState    (12 bytes of parameters)
  2014.  0B0h    SetSystemTime        (8 bytes of parameters)
  2015.  0B1h    SetTimer        (28 bytes of parameters)
  2016.  0B2h    SetTimerResolution    (12 bytes of parameters)
  2017.  0B3h    SetValueKey        (24 bytes of parameters)
  2018.  0B4h    SetVolumeInformationFile    (20 bytes of parameters)
  2019.  0B5h    ShutdownSystem        (4 bytes of parameters)
  2020.  0B6h    SignalAndWaitForSingleObject    (16 bytes of parameters)
  2021.  0B7h    StartProfile        (4 bytes of parameters)
  2022.  0B8h    StopProfile        (4 bytes of parameters)
  2023.  0B9h    SuspendThread        (8 bytes of parameters)
  2024.  0BAh    SystemDebugControl    (24 bytes of parameters)
  2025.  0BBh    TerminateProcess    (8 bytes of parameters)
  2026.  0BCh    TerminateThread        (8 bytes of parameters)
  2027.  0BDh    TestAlert        (no parameters)
  2028.  0BEh    UnloadDriver        (4 bytes of parameters)
  2029.  0BFh    UnloadKey        (4 bytes of parameters)
  2030.  0C0h    UnlockFile        (20 bytes of parameters)
  2031.  0C1h    UnlockVirtualMemory    (16 bytes of parameters)
  2032.  0C2h    UnmapViewOfSection    (8 bytes of parameters)
  2033.  0C3h    VdmControl        (8 bytes of parameters)
  2034.  0C4h    WaitForMultipleObjects    (20 bytes of parameters)
  2035.  0C5h    WaitForSingleObject    (12 bytes of parameters)
  2036.  0C6h    WaitHighEventPair    (4 bytes of parameters)
  2037.  0C7h    WaitLowEventPair    (4 bytes of parameters)
  2038.  0C8h    WriteFile        (36 bytes of parameters)
  2039.  0C9h    WriteFileGather        (36 bytes of parameters)
  2040.  0CAh    WriteRequestData    (24 bytes of parameters)
  2041.  0CBh    WriteVirtualMemory    (20 bytes of parameters)
  2042.  0CCh    W32Call            (20 bytes of parameters)
  2043.  0CDh    CreateChannel        (8 bytes of parameters)
  2044.  0CEh    ListenChannel        (8 bytes of parameters)
  2045.  0CFh    OpenChannel        (8 bytes of parameters)
  2046.  0D0h    ReplyWaitSendChannel    (12 bytes of parameters)
  2047.  0D1h    SendWaitReplyChannel    (16 bytes of parameters)
  2048.  0D2h    SetContextChannel    (4 bytes of parameters)
  2049.  0D3h    YieldExecution        (no parameters)
  2050. --------l-2E----BXE22E-----------------------
  2051. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  2052.     BX = E22Eh
  2053.     DS:SI -> zero byte
  2054. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  2055. ----------2F---------------------------------
  2056. INT 2F - Multiplex - NOTES
  2057.     AH = identifier of program which is to handle the interrupt
  2058.        00h-7Fh reserved for DOS
  2059.        B8h-BFh reserved for networks
  2060.        C0h-FFh reserved for applications
  2061.     AL is the function code
  2062.    This is a general mechanism for verifying the presence of a TSR and
  2063.    communicating with it.  When searching for a free identifier code for AH
  2064.    using the installation check (AL=00h), the calling program should set
  2065.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  2066.    and SS:SP to be valid on return, since numerous programs now use additional
  2067.    registers on input and/or output for the installation check.
  2068. Notes:    Since the multiplex chain is growing so long, and beginning to
  2069.       experience multiplex number collisions, I have proposed an alternate
  2070.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  2071.       multiplex, please let me know.
  2072.     DOS and some other programs return values in the flags register, so
  2073.       any TSR which chains by calling the previous handler rather than
  2074.       jumping to it should ensure that the returned flags are preserved
  2075.       and passed back to the original caller
  2076. SeeAlso: INT 2D"ALTERNATE MULTIPLEX"
  2077. --------t-2F---------------------------------
  2078. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  2079.     AH = xx (dynamically assigned based upon a search for a multiplex
  2080.          number which doesn't answer installed)
  2081.     AL = 00h installation check
  2082.     ES:DI = EBEBh:BEBEh
  2083. Return: AL = 00h not installed
  2084.          01h not installed, not OK to install
  2085.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  2086.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  2087.          short form of the manufacturer's name, PPPPPPPP is a product
  2088.          name and NNNN is the product's version number
  2089. --------t-2F---------------------------------
  2090. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  2091.     AH = programmer-selected multiplex number
  2092.     AL = function
  2093.         00h installation check
  2094.         Return: AL = FFh if installed
  2095.         01h get TSR interrupt vectors
  2096.         Return: DX:AX -> vector table (see #2274)
  2097.         02h get TSR code segment
  2098.         Return: AX = code segment for all interrupt handlers
  2099.         03h call user exit routine and release TSR's memory
  2100.         04h get signature string
  2101.         Return: DX:AX -> counted string containing signature
  2102.         05h get TSR's INT 2F handler
  2103.         Return: DX:AX -> INT 2F handler
  2104.         06h enable/disable TSR
  2105.         BL = new state (00h disabled, 01h enabled)
  2106.         07h activate TSR (popup if not disabled)
  2107.         08h get hotkeys
  2108.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2109.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  2110.         09h set hotkey
  2111.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2112.         CX = new hotkey (CH = keyflags, CL = scancode)
  2113.         0Ah-1Fh reserved
  2114. Index:    installation check;Ross Wentworth POPUP library
  2115. Index:    hotkeys;Ross Wentworth POPUP library
  2116.  
  2117. Format of POPUP vector table entry:
  2118. Offset    Size    Description    (Table 2274)
  2119.  00h    BYTE    vector number (00h = end of table)
  2120.  01h    DWORD    original vector
  2121.  05h    WORD    offset of interrupt handler in TSR's code segment
  2122. --------t-2F---------------------------------
  2123. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  2124.     AH = xx (dynamically assigned based upon a search for a multiplex
  2125.          number from C0h to FFh which doesn't answer installed)
  2126.     AL = 00h installation check
  2127.     ES:DI = 1492h:1992h
  2128. Return: AL = 00h not installed
  2129.          01h not installed, not OK to install
  2130.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  2131.            point to author_name_ver table (see #2275)
  2132.     AH = FFh
  2133. Note:    this interface permits advanced communication with TSRs: it is possible
  2134.       to make a generic uninstall utility, advanced TSR relocator programs
  2135.       in order to fit fragmented memory areas, etc.
  2136. See also: INT 2D"AMIS",INT 2F"Compuscience"
  2137. Index:    installation check;CiriSOFT TSR interface
  2138. Index:    uninstall;CiriSOFT TSR interface
  2139.  
  2140. Format of CiriSOFT author_name_ver table:
  2141. Offset    Size    Description    (Table 2275)
  2142.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  2143.           with PSP, XMS upper memory segment if installed as UMB...)
  2144.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  2145.           in *.COM programs and 0 in upper memory TSR's).
  2146.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  2147.           used by TSR is possible to determine if hooked vectors are
  2148.           still pointing it (and if it is safe to uninstall).
  2149.  -10    BYTE    characteristics byte (see #2276)
  2150.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  2151.           that the TSR must use THIS variable in it's INT 2Fh handler.
  2152.  -8    WORD    offset to vector_area table (see #2277)
  2153.  -6    WORD    offset to extra_area table (see #2278,#2276 [bit 7])
  2154.  -4   4 BYTEs    signature string "*##*"
  2155.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  2156.           is used in order to determine if the TSR is already resident
  2157.           and it's version code; the ':' char is used as delimiter)
  2158.  
  2159. Bitfields for CiriSOFT characteristics byte:
  2160. Bit(s)    Description    (Table 2276)
  2161.  0-2    type
  2162.     000 normal program (with PSP)
  2163.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  2164.           when uninstalling)
  2165.     010 device driver (*.SYS)
  2166.     011 device driver in EXE format
  2167.     1xx others (reserved)
  2168.  3-6    reserved
  2169.  7    set if extra_table defined and supported (see #2278)
  2170. SeeAlso: #2275
  2171.  
  2172. Format of CiriSOFT vector_area table:
  2173. Offset    Size    Description    (Table 2277)
  2174.  -1    BYTE    number of vectors intercepted by TSR
  2175.  00h    BYTE    first vector number
  2176.  01h    DWORD    first vector pointer before installing the TSR
  2177.  05h    BYTE    second vector number
  2178.  06h    DWORD    second vector pointer before installing the TSR
  2179.  0Ah    ...    (and so on)
  2180. Note:    the TSR must use these variables to invoke the previous interrupt
  2181.       handler routines
  2182. SeeAlso: #2275
  2183.  
  2184. Format of extra_area table (needed only to improve relocation feature):
  2185. Offset    Size    Description    (Table 2278)
  2186.  00h    WORD    offset to external_ctrl table (see #2279)
  2187.         0000h if not supported
  2188.  02h    WORD    reserved for future use (0)
  2189. SeeAlso: #2275
  2190.  
  2191. Format of CiriSOFT external_ctrl table:
  2192. Offset    Size    Description    (Table 2279)
  2193.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  2194.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  2195.  ---And if bit 0 in offset 00h is off:
  2196.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  2197.           /SR parameter (silent installation & inhibit)
  2198.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  2199.           from the previous TSR still resident
  2200.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  2201. --------c-2F00-------------------------------
  2202. INT 2F U - DOS 2.x only PRINT.COM - SUBMIT FILE FOR PRINTING
  2203.     AH = 00h
  2204.     DS:DX -> opened FCB (see #1034 at INT 21/AX=0Fh)
  2205. Return: AH = number of files currently in print queue
  2206.     AL = status
  2207.         00h file successfully added
  2208.         01h queue is full
  2209.     ES:BX -> print queue (10 FCBs; first byte of FFh indicates unused)
  2210.     ES:DX -> currently-printing FCB (if DX=FFFFh, none printing)
  2211. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2212.     values in AH other than 00h or 01h cause PRINT to return the number of
  2213.       files in the queue in AH
  2214. SeeAlso: AH=01h"PRINT",AX=0102h
  2215. --------P-2F00-------------------------------
  2216. INT 2F U - PSPRINT - PRINT JOB CONTROL
  2217.     AH = 00h
  2218.     ???
  2219. Return: ???
  2220. --------c-2F0080-----------------------------
  2221. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  2222.     AX = 0080h
  2223. Return: after PRINT executes
  2224. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  2225.     this function is not supported by the Novell DOS 7 PRINT.COM
  2226. --------N-2F00D8-----------------------------
  2227. INT 2F - Personal NetWare - VLM - ???
  2228.     AX = 00D8h
  2229.     ???
  2230. Return: ???
  2231. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  2232.       NOP
  2233. --------c-2F01-------------------------------
  2234. INT 2F U - DOS 2.x only PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  2235.     AH = 01h
  2236.     DS:DX -> FCB (see #1034 at INT 21/AH=0Fh) for file to be canceled
  2237. Return: AH = number of files currently in print queue
  2238.     AL = 00h (successful)
  2239.     ES:BX -> print queue (10 FCBs; first byte of FFh indicates unused)
  2240.     ES:DX -> currently-printing FCB (if DX=FFFFh, none printing)
  2241. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2242.     values in AH other than 00h or 01h cause PRINT to return the number of
  2243.       files in the queue in AH
  2244. SeeAlso: AH=00h"PRINT.COM",AX=0103h
  2245. --------c-2F0100-----------------------------
  2246. INT 2F - DOS 3.0+ PRINT - INSTALLATION CHECK
  2247.     AX = 0100h
  2248. Return: AL = status
  2249.         00h not installed
  2250.         01h not installed, but not OK to install
  2251.         FFh installed
  2252.         AH = 00h (Novell DOS 7)
  2253. SeeAlso: AX=0101h
  2254. --------c-2F0100SI20D6-----------------------
  2255. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  2256.     AX = 0100h
  2257.     SI = 20D6h
  2258.     DI = 8761h
  2259. Return: AX = 00FFh if installed
  2260.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  2261.         SI = resident code segment
  2262. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  2263.       LaserTools' PrintCache memory/disk-based print spooler package
  2264. Note:    if either of SI or DI differ from the indicated magic values, only AX
  2265.       will be modified on return, for compatibility with DOS PRINT
  2266. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  2267. --------c-2F0101-----------------------------
  2268. INT 2F - DOS 3.0+ PRINT - SUBMIT FILE FOR PRINTING
  2269.     AX = 0101h
  2270.     DS:DX -> submit packet (see #2280)
  2271. Return: CF clear if successful
  2272.         AL = status
  2273.         01h added to queue
  2274.         9Eh now printing
  2275.     CF set on error
  2276.         AX = error code (see #2281,#1366 at INT 21/AH=59h/BX=0000h)
  2277. SeeAlso: AX=0102h
  2278.  
  2279. Format of PRINT submit packet:
  2280. Offset    Size    Description    (Table 2280)
  2281.  00h    BYTE    level (must be 00h)
  2282.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  2283.  
  2284. (Table 2281)
  2285. Values for PRINT error code:
  2286.  0001h    invalid function
  2287.  0002h    file not found
  2288.  0003h    path not found
  2289.  0004h    out of file handles
  2290.  0005h    access denied
  2291.  0008h    print queue full
  2292.  0009h    spooler busy
  2293.  000Ch    name too long
  2294.  000Fh    invalid drive
  2295. --------c-2F0101SI20D6-----------------------
  2296. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  2297.     AX = 0101h
  2298.     SI = 20D6h
  2299.     DI = 8761h
  2300.     DS:DX -> submit packet (see #2280)
  2301.     CL = print options
  2302.         bit 4: use default options
  2303. Return: CF clear if successful
  2304.         AL = status
  2305.         01h added to queue
  2306.         9Eh now printing
  2307.     CF set on error
  2308.         AX = error code (see #2281)
  2309. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  2310.       LaserTools' PrintCache memory/disk-based print spooler package
  2311. Note:    if either SI or DI differs from the indicated magic values on entry,
  2312.       PrintCache will use the default print options for the file for
  2313.       compatibility with DOS PRINT
  2314. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AH=00h"PRINT",AX=0107h"PrintCache"
  2315. --------c-2F0102-----------------------------
  2316. INT 2F - DOS 3.0+ PRINT - REMOVE FILE FROM PRINT QUEUE
  2317.     AX = 0102h
  2318.     DS:DX -> ASCIZ filename (wildcards allowed)
  2319. Return: CF clear if successful
  2320.     CF set on error
  2321.         AX = error code (see #2281)
  2322. SeeAlso: AX=0101h,AX=0103h,AH=01h"PRINT"
  2323. --------c-2F0103-----------------------------
  2324. INT 2F - DOS 3.0+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  2325.     AX = 0103h
  2326. Return: CF clear if successful
  2327.     CF set on error
  2328.         AX = error code (see #2281)
  2329. SeeAlso: AX=0102h
  2330. --------c-2F0104-----------------------------
  2331. INT 2F - DOS 3.0+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  2332.     AX = 0104h
  2333. Return: CF clear if successful
  2334.         DX = error count since status last read
  2335.         DS:SI -> print queue
  2336.     CF set on error
  2337.         AX = error code (see #2281)
  2338. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  2339.       to avoid changing the list while it is being examined
  2340. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  2341.       an empty filename; the first name is the file currently being printed
  2342.     printing is stopped until AX=0105h is called to prevent the queue
  2343.       from changing while the filenames are being read
  2344. SeeAlso: AX=0101h,AX=0105h
  2345. --------c-2F0105-----------------------------
  2346. INT 2F - DOS 3.0+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  2347.     AX = 0105h
  2348. Return: CF clear if successful
  2349.     CF set on error
  2350.         AX = error code (see #2281)
  2351. Desc:    restart PRINT's activities once an application finishes examining the
  2352.       print queue
  2353. SeeAlso: AX=0104h
  2354. --------c-2F0106-----------------------------
  2355. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  2356.     AX = 0106h
  2357. Return: CF set if files in print queue
  2358.         AX = error code 0008h (queue full)
  2359.         DS:SI -> device driver header (see #1332)
  2360.     CF clear if print queue empty
  2361.         AX = 0000h
  2362. Desc:    determine which device, if any, PRINT is currently using for output
  2363. Notes:    undocumented prior to the release of MS-DOS 5.0
  2364.     this function can be used to allow a program to avoid printing to the
  2365.       printer on which PRINT is currently performing output
  2366. SeeAlso: AX=0104h
  2367. --------c-2F0107-----------------------------
  2368. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  2369.     AX = 0107h
  2370.     CL bit 0: output form feed between print jobs
  2371. Return: AL destroyed
  2372. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  2373. --------N-2F0200-----------------------------
  2374. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  2375.     AX = 0200h
  2376. Return: AL = FFh if installed
  2377. Desc:    determine whether the PC LAN Program redirector is installed
  2378. SeeAlso: AX=0201h,AX=0203h
  2379. --------N-2F0201-----------------------------
  2380. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2381.     AX = 0201h
  2382. Return: nothing???
  2383. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2384.     AX=0202h appears to be the opposite function
  2385.     these functions are supposedly used to signal opening and closing of
  2386.       printers
  2387. SeeAlso: AX=0202h
  2388. --------N-2F0202-----------------------------
  2389. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2390.     AX = 0202h
  2391.     ???
  2392. Return: nothing???
  2393. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2394.     these functions are supposedly used to signal opening and closing of
  2395.       printers
  2396. SeeAlso: AX=0201h
  2397. --------N-2F0203-----------------------------
  2398. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2399.     AX = 0203h
  2400. Return: nothing???
  2401. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2402.     AX=0204h appears to be the opposite function
  2403.     these functions are supposedly used to signal opening and closing of
  2404.       printers
  2405. SeeAlso: AX=0200h,AX=0204h
  2406. --------N-2F0204-----------------------------
  2407. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2408.     AX = 0204h
  2409.     ???
  2410. Return: nothing???
  2411. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2412.     AX=0203h appears to be the opposite function
  2413.     these functions are supposedly used to signal opening and closing of
  2414.       printers
  2415. SeeAlso: AX=0200h,AX=0203h
  2416. --------N-2F---------------------------------
  2417. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2418.     AX = 02xxh
  2419.     ???
  2420. Return: ???
  2421. --------l-2F0500-----------------------------
  2422. INT 2F U - DOS 3.0+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  2423.     AX = 0500h
  2424. Return: AL = status
  2425.         00h not installed, OK to install
  2426.         01h not installed, can't install
  2427.         FFh installed
  2428.     BX destroyed (MSCDEX v2.21-2.25)
  2429.     CF clear (MSCDEX v2.21-2.25)
  2430. Desc:    determine whether a critical error message override is installed
  2431. Note:    this set of functions allows a user program to partially or completely
  2432.       override the default critical error handler's message in COMMAND.COM
  2433. SeeAlso: AH=05h,INT 24
  2434. --------l-2F05-------------------------------
  2435. INT 2F CU - DOS 3.0+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  2436.     AH = 05h
  2437. ---DOS 3.x---
  2438.     AL = extended error code (not zero)
  2439. ---DOS 4.0+ ---
  2440.     AL = error type
  2441.         01h DOS extended error code
  2442.         02h parameter error
  2443.     BX = error code
  2444. Return: CF clear if successful
  2445.         ES:DI -> ASCIZ error message (read-only)
  2446.         AL = completion state
  2447.         00h message requires completion with device name, drive, etc.
  2448.         01h message is complete as returned
  2449.     CF set if error code can't be converted to string
  2450.         AX,DI,ES destroyed
  2451.     other flags corrupted
  2452. Notes:    called at start of COMMAND.COM's default critical error handler if
  2453.       installed by a user program, allowing partial or complete overriding
  2454.       of the default error messages
  2455.     subfunction 02h is called by many DOS 4 external programs
  2456.     DR DOS's COMMAND.COM appends additional info ("0 files copied") to the
  2457.       returned string
  2458. SeeAlso: AX=0500h,AX=122Eh,INT 24
  2459. --------U-2F0600-----------------------------
  2460. INT 2F - DOS 3.0+ ASSIGN - INSTALLATION CHECK
  2461.     AX = 0600h
  2462. Return: AL = status
  2463.         00h not installed
  2464.         01h not installed, but not OK to install
  2465.         FFh installed
  2466. Notes:    ASSIGN is not a TSR in DR DOS 5.0; it is internally replaced by SUBST
  2467.       (see INT 21/AH=52h)
  2468.     undocumented prior to the release of DOS 5.0
  2469. SeeAlso: AX=0601h,INT 21/AH=52h
  2470. --------U-2F0601-----------------------------
  2471. INT 2F U - DOS 3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  2472.     AX = 0601h
  2473. Return: ES = segment of ASSIGN work area and assignment table
  2474. Note:    the 26 bytes starting at ES:0103h specify which drive each of A: to Z:
  2475.       is mapped to.     Initially set to 01h 02h 03h....
  2476. SeeAlso: AX=0600h,AX=AF14h"WinDOS"
  2477. --------D-2F0800-----------------------------
  2478. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  2479.     AX = 0800h
  2480. Return: AL = status
  2481.         00h not installed, OK to install
  2482.         01h not installed, not OK to install
  2483.         FFh installed
  2484. Desc:    determine whether the internal support code used by DRIVER.SYS is
  2485.       present; it is always present in DOS 3.2+
  2486. Note:    supported by DR DOS 5.0 and Novell DOS 7
  2487. --------D-2F0801-----------------------------
  2488. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  2489.     AX = 0801h
  2490.     DS:DI -> drive data table (see #2288,#2289,#2290)
  2491. Return: AX,BX,SI,ES destroyed
  2492. Notes:    moves down internal list of drive data tables, copying and modifying
  2493.       the drive description flags word for tables referencing same physical
  2494.       drive
  2495.     the data table is appended to the chain of tables
  2496.     supported by DR DOS 5.0 and Novell DOS 7
  2497. SeeAlso: AX=0803h
  2498. --------D-2F0802-----------------------------
  2499. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  2500.     AX = 0802h
  2501.     ES:BX -> device driver request header (see #2284)
  2502. Return: request header updated as per requested operation
  2503.     STACK:    WORD    original flags from INT call (left by RETF in device
  2504.               driver, at least in DOS 5.0-6.22)
  2505. Notes:    supported by DR DOS 5.0
  2506.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  2507.       DOS 4.0+ executes this function on AL=02h and AL=04h-F7h
  2508.     the command codes (see #2282) and structures described below apply
  2509.       to all drivers which support the appropriate commands; this call is
  2510.       just one of a number of ways in which a device driver request may
  2511.       be invoked
  2512.     supported by Novell DOS 7
  2513. SeeAlso: AX=0800h,AX=0801h,AX=0803h,AX=1510h,INT 21/AH=52h,INT 21/AH=99h
  2514. SeeAlso: INT 21/AH=9Ah
  2515.  
  2516. (Table 2282)
  2517. Values for device driver command code:
  2518.  00h (0)  INIT
  2519.  01h (1)  MEDIA CHECK (block devices)
  2520.  02h (2)  BUILD BPB (block devices)
  2521.  03h (3)  IOCTL INPUT
  2522.  04h (4)  INPUT
  2523.  05h (5)  NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  2524.  06h (6)  INPUT STATUS (character devices)
  2525.  07h (7)  INPUT FLUSH (character devices)
  2526.  08h (8)  OUTPUT
  2527.  09h (9)  OUTPUT WITH VERIFY
  2528.  0Ah (10) OUTPUT STATUS (character devices)
  2529.  0Bh (11) OUTPUT FLUSH (character devices)
  2530.  0Ch (12) IOCTL OUTPUT
  2531.  0Dh (13) (DOS 3.0+) DEVICE OPEN
  2532.  0Eh (14) (DOS 3.0+) DEVICE CLOSE
  2533.  0Fh (15) (DOS 3.0+) REMOVABLE MEDIA (block devices)
  2534.  10h (16) (DOS 3.0+) OUTPUT UNTIL BUSY (character devices)
  2535.  11h (17) (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  2536.  12h (18) (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  2537.  13h (19) (DOS 3.2+) GENERIC IOCTL
  2538.  14h (20) unused
  2539.  15h (21) (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  2540.  16h (22) unused
  2541.  17h (23) (DOS 3.2+) GET LOGICAL DEVICE
  2542.  18h (24) (DOS 3.2+) SET LOGICAL DEVICE
  2543.  19h (25) (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  2544.  80h (128)(CD-ROM) READ LONG
  2545.  81h (129)(CD-ROM) reserved
  2546.  82h (130)(CD-ROM) READ LONG PREFETCH
  2547.  83h (131)(CD-ROM) SEEK
  2548.  84h (132)(CD-ROM) PLAY AUDIO
  2549.  85h (133)(CD-ROM) STOP AUDIO
  2550.  86h (134)(CD-ROM) WRITE LONG
  2551.  87h (135)(CD-ROM) WRITE LONG VERIFY
  2552.  88h (136)(CD-ROM) RESUME AUDIO
  2553.  
  2554. Bitfields for device request status:
  2555. Bit(s)    Description    (Table 2283)
  2556.  15    error
  2557.  14-11    reserved
  2558.  10    ??? set by DOS kernel on entry to some driver calls
  2559.  9    busy
  2560.  8    done (may be clear on return under European MS-DOS 4.0)
  2561.  7-0    error code if bit 15 set (see #2285)
  2562.  
  2563. Format of device driver request header:
  2564. Offset    Size    Description    (Table 2284)
  2565.  00h    BYTE    length of request header
  2566.  01h    BYTE    subunit within device driver
  2567.  02h    BYTE    command code (see #2282)
  2568.  03h    WORD    status (filled in by device driver) (see #2283)
  2569. ---DOS---
  2570.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  2571.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  2572.               device's request queue
  2573.         (other versions) reserved (unused in DOS 2.x and 3.x)
  2574. ---STARLITE architecture---
  2575.  05h    DWORD    pointer to next request header
  2576.  09h  4 BYTEs    reserved
  2577. ---command code 00h---
  2578.  0Dh    BYTE    (ret) number of units
  2579.  0Eh    DWORD    (call) pointer to DOS device helper function (see #2286)
  2580.               (European MS-DOS 4.0 only)
  2581.         (call) pointer past end of memory available to driver (DOS 5+)
  2582.         (ret) address of first free byte following driver
  2583.  12h    DWORD    (call) pointer to commandline arguments
  2584.         (ret) pointer to BPB array (block drivers) or
  2585.               0000h:0000h (character drivers)
  2586.  16h    BYTE    (DOS 3.0+) drive number for first unit of block driver (0=A)
  2587.    ---European MS-DOS 4.0---
  2588.  17h    DWORD    pointer to function to save registers on stack
  2589.    ---DOS 5+ ---
  2590.  17h    WORD    (ret) error-message flag
  2591.         0001h MS-DOS should display error msg on init failure
  2592. ---command code 01h---
  2593.  0Dh    BYTE    media descriptor
  2594.  0Eh    BYTE    (ret) media status
  2595.         00h don't know
  2596.         01h media has not changed
  2597.         FFh media has been changed
  2598.  0Fh    DWORD    (ret, DOS 3.0+) pointer to previous volume ID if the
  2599.           OPEN/CLOSE/RM bit in device header is set and disk changed
  2600. ---command code 02h---
  2601.  0Dh    BYTE    media descriptor
  2602.  0Eh    DWORD    transfer address
  2603.         -> scratch sector if NON-IBM FORMAT bit in device header set
  2604.         -> first FAT sector otherwise
  2605.  12h    DWORD    pointer to BPB (set by driver) (see #1349 at INT 21/AH=53h)
  2606. ---command codes 03h,0Ch---
  2607.           (see also INT 21/AX=4402h"DOS 2+",INT 21/AX=4403h"DOS")
  2608.  0Dh    BYTE    media descriptor (block devices only)
  2609.  0Eh    DWORD    transfer address
  2610.  12h    WORD    (call) number of bytes to read/write
  2611.         (ret) actual number of bytes read or written
  2612. ---command codes 04h,08h,09h (except Compaq DOS 3.31, DR DOS 6)---
  2613.  0Dh    BYTE    media descriptor (block devices only)
  2614.  0Eh    DWORD    transfer address
  2615.  12h    WORD    byte count (character devices) or sector count (block devices)
  2616.  14h    WORD    starting sector number (block devices only)
  2617.  16h    DWORD    (DOS 3.0+) pointer to volume ID if error 0Fh returned
  2618.  1Ah    DWORD    (DOS 4.0+) 32-bit starting sector number (block devices with
  2619.           device attribute word bit 1 set only) if starting sector
  2620.           number above is FFFFh (see INT 21/AH=52h)
  2621. ---command codes 04h,08h,09h (Compaq DOS 3.31, DR DOS 6)---
  2622.  0Dh    BYTE    media descriptor (block devices only)
  2623.  0Eh    DWORD    transfer address
  2624.  12h    WORD    byte count (character devices) or sector count (block devices)
  2625.  14h    DWORD    32-bit starting sector number (block devices only)
  2626.     Note:    to reliably determine which variant of the request block for
  2627.           functions 04h,08h,09h has been passed to the driver, check
  2628.           the length field as well as the word at offset 14h.  If the
  2629.           length is 1Eh and 14h=FFFFh, use the DWORD at 1Ah as the
  2630.           starting sector number; if the length is 18h, use the DWORD
  2631.           at 14h; otherwise, use the WORD at 14h.
  2632. ---command code 05h---
  2633.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  2634. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  2635.  no further fields
  2636. ---command code 10h---
  2637.  0Dh    BYTE    unused
  2638.  0Eh    DWORD    transfer address
  2639.  12h    WORD    (call) number of bytes to write
  2640.         (ret) actual number of bytes written
  2641. ---command codes 11h,12h---
  2642.  0Dh    BYTE    reserved
  2643. ---command code 15h---
  2644.  no further fields
  2645. ---command codes 13h,19h---
  2646.  0Dh    BYTE    category code
  2647.         00h unknown
  2648.         01h COMn:
  2649.         03h CON
  2650.         05h LPTn:
  2651.         07h mouse (European MS-DOS 4.0)
  2652.         08h disk
  2653.         9Eh (STARLITE) Media Access Control driver
  2654.  0Eh    BYTE    function code
  2655.         00h (STARLITE) MAC Bind request
  2656.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  2657.         SI contents (European MS-DOS 4.0)
  2658.  11h    WORD    offset of device driver header (see #1332)
  2659.         DI contents (European MS-DOS 4.0)
  2660.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  2661. ---command codes 80h,82h---
  2662.  0Dh    BYTE    addressing mode
  2663.         00h HSG (default)
  2664.         01h Phillips/Sony Red Book
  2665.  0Eh    DWORD    transfer address (ignored for command 82h)
  2666.  12h    WORD    number of sectors to read
  2667.         (if 0 for command 82h, request is an advisory seek)
  2668.  14h    DWORD    starting sector number
  2669.         logical sector number in HSG mode
  2670.         frame/second/minute/unused in Red Book mode
  2671.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  2672.  18h    BYTE    data read mode
  2673.         00h cooked (2048 bytes per frame)
  2674.         01h raw (2352 bytes per frame, including EDC/ECC)
  2675.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2676.  1Ah    BYTE    interleave skip factor
  2677.         (number of sectors between consecutive portions)
  2678. ---command code 83h---
  2679.  0Dh    BYTE    addressing mode
  2680.         00h HSG (default)
  2681.         01h Phillips/Sony Red Book
  2682.  0Eh    DWORD    transfer address (ignored)
  2683.  12h    WORD    number of sectors to read (ignored)
  2684.  14h    DWORD    starting sector number (see also above)
  2685. ---command code 84h---
  2686.  0Dh    BYTE    addressing mode
  2687.         00h HSG (default)
  2688.         01h Phillips/Sony Red Book
  2689.  0Eh    DWORD    starting sector number (see also above)
  2690.  12h    DWORD    number of sectors to play
  2691. ---command codes 85h,88h---
  2692.  no further fields
  2693. ---command codes 86h,87h---
  2694.  0Dh    BYTE    addressing mode
  2695.         00h HSG (default)
  2696.         01h Phillips/Sony Red Book
  2697.  0Eh    DWORD    transfer address (ignored in write mode 0)
  2698.  12h    WORD    number of sectors to write
  2699.  14h    DWORD    starting sector number (also see above)
  2700.  18h    BYTE    write mode
  2701.         00h mode 0 (write all zeros)
  2702.         01h mode 1 (default) (2048 bytes per sector)
  2703.         02h mode 2 form 1 (2048 bytes per sector)
  2704.         03h mode 2 form 2 (2336 bytes per sector)
  2705.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2706.  1Ah    BYTE    interleave skip factor
  2707.         (number of sectors between consecutive portions)
  2708.  
  2709. (Table 2285)
  2710. Values for device driver error code:
  2711.  00h    write-protect violation
  2712.  01h    unknown unit
  2713.  02h    drive not ready
  2714.  03h    unknown command
  2715.  04h    CRC error
  2716.  05h    bad drive request structure length
  2717.  06h    seek error
  2718.  07h    unknown media
  2719.  08h    sector not found
  2720.  09h    printer out of paper
  2721.  0Ah    write fault
  2722.  0Bh    read fault
  2723.  0Ch    general failure
  2724.  0Dh    reserved
  2725.  0Eh    (CD-ROM) media unavailable
  2726.  0Fh    invalid disk change
  2727.  
  2728. (Table 2286)
  2729. Call European MS-DOS 4.0 device helper function with:
  2730.     DL = function
  2731.         00h "SchedClock" called on each timer tick
  2732.         AL = tick interval in milliseconds
  2733.         01h "DevDone" device I/O complete
  2734.         ES:BX -> request header
  2735.         Note:    must update status word first; may be called from
  2736.               an interrupt handler
  2737.         02h "PullRequest" pull next request from queue
  2738.         DS:SI -> DWORD pointer to start of device's request queue
  2739.         Return: ZF clear if pending request
  2740.                 ES:BX -> request header
  2741.             ZF set if no more requests
  2742.         03h "PullParticular" remove specific request from queue
  2743.         DS:SI -> DWORD pointer to start of device's request queue
  2744.         ES:BX -> request header
  2745.         Return: ZF set if request header not found
  2746.         04h "PushRequest" push the request onto the queue
  2747.         DS:SI -> DWORD pointer to start of device's request queue
  2748.         ES:BX -> request header
  2749.         interrupts disabled
  2750.         05h "ConsInputFilter" keyboard input check
  2751.         AX = character (high byte 00h if PC ASCII character)
  2752.         Return: ZF set if character should be discarded
  2753.             ZF clear if character should be handled normally
  2754.         Note:    called by keyboard interrupt handler so DOS can scan
  2755.               for special input characters
  2756.         06h "SortRequest" push request in sorted order by starting sector
  2757.         DS:SI -> DWORD pointer to start of device's request queue
  2758.         ES:BX -> request header
  2759.         interrupts disabled
  2760.         07h "SigEvent" send signal on keyboard event
  2761.         AH = event identifier
  2762.         Return: AL,FLAGS destroyed
  2763.         09h "ProcBlock" block on event
  2764.         AX:BX = event identifier (typically a pointer)
  2765.         CX = timeout in ms or 0000h for never
  2766.         DH = interruptable flag (nonzero if pause may be interrupted)
  2767.         interrupts disabled
  2768.         Return: after corresponding ProcRun call
  2769.             CF clear if event wakeup, set if unusual wakeup
  2770.             ZF set if timeout wakeup, clear if interrupted
  2771.             AL = wakeup code, nonzero if unusual wakeup
  2772.             interrupts enabled
  2773.             BX,CX,DX destroyed
  2774.         Note:    block process and schedules another to run
  2775.         0Ah "ProcRun" unblock process
  2776.         AX:BX = event identifier (typically a pointer)
  2777.         Return: AX = number of processes awakened
  2778.             ZF set if no processes awakened
  2779.             BX,CX,DX destroyed
  2780.         0Bh "QueueInit" initialize/clear character queue
  2781.         DS:BX -> character queue structure (see #2287)
  2782.         Note:    the queue size field must be set before calling
  2783.         0Dh "QueueWrite" put a character in the queue
  2784.         DS:BX -> character queue (see #2287)
  2785.         AL = character to append to end of queue
  2786.         Return: ZF set if queue is full
  2787.             ZF clear if character stored
  2788.         0Eh "QueueRead" get a character from the queue
  2789.         DS:BX -> character queue (see #2287)
  2790.         Return: ZF set if queue is empty
  2791.             ZF clear if characters in queue
  2792.                 AL = first character in queue
  2793.         10h "GetDOSVar" return pointer to DOS variable
  2794.         AL = index of variable
  2795.             03h current process ID
  2796.         BX = index into variable if AL specifies an array
  2797.         CX = expected length of variable
  2798.         Return: CF clear if successful
  2799.                 DX:AX -> variable
  2800.             CF set on error
  2801.                 AX,DX destroyed
  2802.             BX,CX destroyed
  2803.         Note:    the variables may not be modified
  2804.         14h "Yield" yield CPU if higher-priority task ready to run
  2805.         Return: FLAGS destroyed
  2806.         1Bh "CritEnter" begin system critical section
  2807.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2808.         Return: AX,BX,CX,DX destroyed
  2809.         1Ch "CritLeave" end system critical section
  2810.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2811.         Return: AX,BX,CX,DX destroyed
  2812.         Note:    must be called in the context of the process which
  2813.               called CritEnter on the semaphore
  2814. Note:    the DWORD pointing at the request queue must be allocated by the driver
  2815.       and initialized to 0000h:0000h.  It always points at the next request
  2816.       to be executed
  2817.  
  2818. Format of European MS-DOS 4.0 character queue:
  2819. Offset    Size    Description    (Table 2287)
  2820.  00h    WORD    size of queue in bytes
  2821.  02h    WORD    index of next character out
  2822.  04h    WORD    count of characters in the queue
  2823.  06h  N BYTEs    queue buffer
  2824. --------D-2F0803-----------------------------
  2825. INT 2F U - DOS 4.0+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  2826.     AX = 0803h
  2827. Return: DS:DI -> first drive data table in list (see #2288,#2289,#2290)
  2828. Note:    not available under DR DOS 5.0, but supported by Novell DOS 7 (using
  2829.       the MS-DOS 4+ data table format)
  2830. SeeAlso: AX=0801h
  2831.  
  2832. Format of DOS 3.30 drive data table:
  2833. Offset    Size    Description    (Table 2288)
  2834.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2835.  04h    BYTE    physical unit number (for INT 13)
  2836.  05h    BYTE    logical drive number (0=A:)
  2837.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2838.         Offset    Size    Description
  2839.          00h    WORD    bytes per sector
  2840.          02h    BYTE    sectors per cluster, FFh if unknown
  2841.          03h    WORD    number of reserved sectors
  2842.          05h    BYTE    number of FATs
  2843.          06h    WORD    number of root dir entries
  2844.          08h    WORD    total sectors
  2845.          0Ah    BYTE    media descriptor, 00h if unknown
  2846.          0Bh    WORD    sectors per FAT
  2847.          0Dh    WORD    sectors per track
  2848.          0Fh    WORD    number of heads
  2849.          11h    WORD    number of hidden sectors
  2850.  19h    BYTE    flags
  2851.         bit 6: 16-bit FAT instead of 12-bit FAT
  2852.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  2853.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2854.           fixed media)
  2855.  27h    BYTE    terminating null for volume label???
  2856.  28h    BYTE    device type (see #1248 at INT 21/AX=440Dh"DOS 3.2+")
  2857.  29h    WORD    bit flags describing drive (see #2291)
  2858.  2Bh    WORD    number of cylinders
  2859.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  2860.  40h  3 BYTEs    ???
  2861.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  2862.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  2863.           media and PC-DOS 3.30)
  2864.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  2865. ---removable media---
  2866.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2867. ---fixed media---
  2868.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  2869.  4Fh    WORD    absolute cylinder number of partition's start on physical
  2870.           drive (always FFFFh if primary partition)
  2871. SeeAlso: #2289,#2290
  2872.  
  2873. Format of COMPAQ DOS 3.31 drive data table:
  2874. Offset    Size    Description    (Table 2289)
  2875.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2876.  04h    BYTE    physical unit number (for INT 13)
  2877.  05h    BYTE    logical drive number (0=A:)
  2878.  06h 25 BYTEs    BIOS Parameter Block (see #2290)
  2879.  1Fh  6 BYTEs    reserved fields from BPB above???
  2880.  25h    BYTE    flags
  2881.         bit 6: 16-bit FAT instead of 12-bit FAT
  2882.         bit 5: large volume???
  2883.  26h    WORD    device-open count???
  2884.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2885.           fixed media)
  2886.  33h    BYTE    terminating null for volume label
  2887.  34h    BYTE    device type (see #1248 at INT 21/AX=440Dh"DOS 3.2+")
  2888.  35h    WORD    bit flags describing drive (see #2291)
  2889.  37h    WORD    number of cylinders
  2890.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  2891.  52h  6 BYTEs    ??? apparently always zeros
  2892.  58h    BYTE    least-significant byte of last-accessed cylinder number
  2893. ---removable media---
  2894.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2895. ---fixed media---
  2896.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  2897.  5Bh    WORD    absolute cylinder number of partition's start on physical
  2898.           drive (always FFFFh if primary partition)
  2899. SeeAlso: #2288,#2290
  2900.  
  2901. Format of DOS 4.0-7.0 drive data table:
  2902. Offset    Size    Description    (Table 2290)
  2903.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2904.  04h    BYTE    physical unit number (for INT 13)
  2905.  05h    BYTE    logical drive number (0=A:)
  2906.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2907.         Offset    Size    Description
  2908.          00h    WORD    bytes per sector
  2909.          02h    BYTE    sectors per cluster, FFh if unknown
  2910.          03h    WORD    number of reserved sectors
  2911.          05h    BYTE    number of FATs
  2912.          06h    WORD    number of root dir entries
  2913.          08h    WORD    total sectors (refer to offset 15h if zero)
  2914.          0Ah    BYTE    media descriptor, 00h if unknown
  2915.          0Bh    WORD    sectors per FAT
  2916.          0Dh    WORD    sectors per track
  2917.          0Fh    WORD    number of heads
  2918.          11h    DWORD    number of hidden sectors
  2919.          15h    DWORD    total sectors if WORD at 08h is zero
  2920.  1Fh    BYTE    flags
  2921.         bit 6: 16-bit FAT instead of 12-bit
  2922.         bit 7: unsupportable disk (all accesses will return Not Ready)
  2923.  20h    WORD    device-open count
  2924.  22h    BYTE    device type (see #1248 at INT 21/AX=440Dh"DOS 3.2+")
  2925.  23h    WORD    bit flags describing drive (see #2291)
  2926.  25h    WORD    number of cylinders (for partition only, if hard disk)
  2927.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  2928.  40h  6 BYTEs    reserved (part of BPB above)
  2929.  46h    BYTE    last track accessed
  2930. ---removable media---
  2931.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2932. ---fixed media---
  2933.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  2934.         always 0001h for DOS 5+
  2935.  49h    WORD    absolute cylinder number of partition's start on physical drive
  2936.         (FFFFh if primary partition in DOS 4.x)
  2937. ------
  2938.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  2939.           extended boot record rather than root directory)
  2940.  56h    BYTE    terminating null for volume label
  2941.  57h    DWORD    serial number
  2942.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  2943.  63h    BYTE    terminating null for filesystem type
  2944. SeeAlso: #2288,#2289
  2945.  
  2946. Bitfields for flags describing drive:
  2947. Bit(s)    Description    (Table 2291)
  2948.  0    fixed media
  2949.  1    door lock ("changeline") supported
  2950.  2    current BPB locked
  2951.  3    all sectors in a track are the same size
  2952.  4    physical drive has multiple logical units
  2953.  5    current logical drive for shared physical drive
  2954.  6    disk change detected
  2955.  7    device parameters were changed (set DASD before formatting)
  2956.     (see #1247 at INT 21/AX=440Dh"DOS 3.2+")
  2957.  8    disk reformatted (BPB of current media was changed)
  2958.  9    access flag (fixed media only, disables reads and writes)
  2959.     (see #1253 at INT 21/AX=440Dh"DOS 3.2+")
  2960. --------f-2F1000-----------------------------
  2961. INT 2F - SHARE - INSTALLATION CHECK
  2962.     AX = 1000h
  2963. Return: AL = status
  2964.         00h not installed, OK to install
  2965.         01h not installed, not OK to install
  2966.         FFh installed
  2967. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  2968.       (08E9: OR  AL,AL
  2969.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  2970.     values of AL other than described here put PC-DOS 4.00 into the same
  2971.       loop (the buggy instructions are the same)
  2972. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2973.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  2974.       inactive state (due to the undocumented /NC flag used by the autoload
  2975.       code) until this call is made
  2976.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  2977.     Windows Enhanced mode hooks this call and reports that SHARE is
  2978.       installed even when it is not
  2979. SeeAlso: AX=1080h,INT 21/AH=52h,INT 21/AX=4457h/DX=FFFFh
  2980. --------d-2F1001-----------------------------
  2981. INT 2F U - DR DOS 6.0 SHARE internal - SET ???
  2982.     AX = 1001h
  2983.     DX:BX -> ???function
  2984. Notes:    this function is also supported by SuperStor, a disk-compression
  2985.       program by Addstor which is bundled with DR DOS 6.0, and the
  2986.       Novell DOS 7 DELWATCH.EXE
  2987.     the default handler for the pointer set by this call under DELWATCH
  2988.       simply returns with CF set
  2989. SeeAlso: AX=1000h,AX=F800h
  2990. --------f-2F1040-----------------------------
  2991. INT 2F U - DOS 4 only SHARE internal - ???
  2992.     AX = 1040h
  2993.     ???
  2994. Return: AL = FFh???
  2995. SeeAlso: AX=1000h
  2996. --------f-2F1080-----------------------------
  2997. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  2998.     AX = 1080h
  2999. Return: AL = status
  3000.         F0h successful
  3001.         FFh checking was already on
  3002. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  3003.       and file sharing checks.  The undocumented commandline flag /NC can
  3004.       be used to disable the sharing code.
  3005. SeeAlso: AX=1000h,AX=1081h
  3006. --------f-2F1081-----------------------------
  3007. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  3008.     AX = 1081h
  3009. Return: AL = status
  3010.         F0h successful
  3011.         FFh checking was already off
  3012. Note:    (see AX=1080h)
  3013. SeeAlso: AX=1000h,AX=1080h
  3014. --------O-2F10FE-----------------------------
  3015. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  3016.     AX = 10FEh
  3017. Return: AX = 20FFh if installed and active
  3018.         DX:BX -> private entry point (see #2292)
  3019. SeeAlso: #1041,INT 21/AX=4306h,INT 21/AX=5704h
  3020.  
  3021. (Table 2292)
  3022. Call DELWATCH private entry point with:
  3023.     AH = function
  3024.         00h NOP???
  3025.         Return: AX = 0000h
  3026.             CX = 0004h (unsupported function)
  3027.         01h disable DELWATCH on drive
  3028.         AL = drive number (00h = A:)
  3029.         Return: AX = status (0000h if failed, FFFFh if successful)
  3030.         02h ???
  3031.         AL = drive number (00h = A:)
  3032.         ???
  3033.         Return: ???
  3034.         03h    ???
  3035.         AL = drive number (00h = A:)
  3036.         CX = ??? (0000h/0001h)
  3037.         ???
  3038.         Return: ???
  3039.         04h ???
  3040.         AL = drive number (00h = A:)
  3041.         ???
  3042.         Return: ???
  3043.         05h ???
  3044.         AL = drive number (00h = A:)
  3045.         ???
  3046.         Return: ???
  3047.         06h enable DELWATCH on drive
  3048.         AL = drive number with bit 7 set (80h = A:, etc.)
  3049.         BX = maximum files of same name in one directory to save
  3050.         CX = maximum files to save on this disk
  3051.         ???
  3052.         Return: AX = status
  3053.                 0000h failed
  3054.                 FFFFh successful
  3055.             CX = error code on failure
  3056.                 (0004h if AL < 80h on entry)
  3057.         07h ???
  3058.         08h set file extensions list
  3059.         AL = sense (00h exclude named extensions, 01h only named ext.)
  3060.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  3061.               per extension)
  3062.         Return: AX = FFFFh (successful)
  3063.         09h    ???
  3064.         AL = drive number (00h = A:)
  3065.         ???
  3066.         Return: ???
  3067.         0Ah ???
  3068.         AL = drive number (00h = A:)
  3069.         ???
  3070.         Return: ???
  3071.         0Bh reset ???
  3072.         Return: AX = FFFFh (successful)
  3073.         see also function 0Dh
  3074.         0Ch check if drive enabled
  3075.         AL = drive number with bit 7 set (80h = A:, etc.)
  3076.         Return: AX = state
  3077.                 0000h disabled or error (check CX)
  3078.                 0001h drive enabled
  3079.             CX = error code (0004h invalid drive number)
  3080.         0Dh set ???
  3081.         BX = ???
  3082.         Return: AX = FFFFh (successful)
  3083.         see also function 0Bh
  3084.         0Eh ???
  3085.         AL = drive number (00h = A:)
  3086.         ???
  3087.         Return: ???
  3088. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  3089.     registers unchanged if AH >= 0Fh on entry
  3090. --------O-2F10FF-----------------------------
  3091. INT 2F U - Multiplex - DR DOS 5.0 - ???
  3092.     AX = 10FFh
  3093.     ES:BX -> ???
  3094. Note:    sets pointer in kernel
  3095. --------N-2F1100-----------------------------
  3096. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  3097.     AX = 1100h
  3098. Return: AL = status
  3099.         00h not installed, OK to install
  3100.         01h not installed, not OK to install
  3101.         FFh installed
  3102.         AH = product identifier (ad hoc by various manufacturers)
  3103.             00h if PC Tools v8 DRIVEMAP
  3104.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  3105.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  3106. Notes:    this function is called by the DOS 3.1+ kernel
  3107.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  3108.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  3109.       redirector
  3110.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  3111.       only supports AL=00h-27h
  3112. --------d-2F1100SFDADA-----------------------
  3113. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  3114.     AX = 1100h subfn DADAh
  3115.     STACK: WORD DADAh
  3116. Return: AL = status
  3117.         00h not installed, OK to install
  3118.         STACK unchanged
  3119.         01h not installed, not OK to install
  3120.         STACK unchanged
  3121.         FFh installed
  3122.         STACK: WORD    ADADh if MSCDEX installed
  3123.                 DADBh if Lotus CD/Networker installed
  3124. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  3125.       than DADAh is considered to mean that MSCDEX is already installed;
  3126.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  3127.       thinking it is already installed when it is in fact CD/Networker
  3128.       that is installed
  3129. Index:    installation check;Lotus CD/Networker
  3130. Index:    Lotus CD/Networker;installation check
  3131. --------N-2F1101-----------------------------
  3132. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  3133.     AX = 1101h
  3134.     SS = DOS DS
  3135.     SDA first filename pointer -> fully-qualified directory name
  3136.     SDA CDS pointer -> current directory structure for drive with dir
  3137. Return: CF set on error
  3138.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3139.     CF clear if successful
  3140. Note:    this function is called by the DOS 3.1+ kernel
  3141. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  3142. --------N-2F1102-----------------------------
  3143. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  3144.     AX = 1102h
  3145.     SS = DOS DS
  3146.     SDA first filename pointer -> fully-qualified directory name
  3147.     SDA CDS pointer -> current directory structure for drive with dir
  3148. Return: CF set on error
  3149.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3150.     CF clear if successful
  3151. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  3152.       this function "SEQ_RMDIR"
  3153. SeeAlso: AX=1101h
  3154. --------N-2F1103-----------------------------
  3155. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  3156.     AX = 1103h
  3157.     SS = DOS DS
  3158.     SDA first filename pointer -> fully-qualified directory name
  3159.     SDA CDS pointer -> current directory structure for drive with dir
  3160. Return: CF set on error
  3161.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3162.     CF clear if successful
  3163. Note:    this function is called by the DOS 3.1+ kernel
  3164. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  3165. --------N-2F1104-----------------------------
  3166. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  3167.     AX = 1104h
  3168.     SS = DOS DS
  3169.     SDA first filename pointer -> fully-qualified directory name
  3170.     SDA CDS pointer -> current directory structure for drive with dir
  3171. Return: CF set on error
  3172.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3173.     CF clear if successful
  3174. Note:    appears to be identical to AX=1103h
  3175. SeeAlso: AX=1103h
  3176. --------N-2F1105-----------------------------
  3177. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  3178.     AX = 1105h
  3179.     SS = DOS DS
  3180.     SDA first filename pointer -> fully-qualified directory name
  3181.     SDA CDS pointer -> current directory structure for drive with dir
  3182. Return: CF set on error
  3183.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3184.     CF clear if successful
  3185.         CDS updated with new path
  3186. Notes:    this function is called by the DOS 3.1+ kernel
  3187.     directory string in CDS should not have a terminating backslash unless
  3188.       the current directory is the root
  3189. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  3190. --------N-2F1106-----------------------------
  3191. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  3192.     AX = 1106h
  3193.     BX = device info word from SFT
  3194.     ES:DI -> SFT
  3195.         SFT DPB field -> DPB of drive containing file
  3196. Return: CF set on error
  3197.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3198.     CF clear if successful
  3199.         SFT updated (redirector must decrement open count, which may be
  3200.           done with INT 2F/AX=1208h)
  3201. Note:    this function is called by the DOS 3.1+ kernel
  3202. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  3203. --------N-2F1107-----------------------------
  3204. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  3205.     AX = 1107h
  3206.     ES:DI -> SFT
  3207.         SFT DPB field -> DPB of drive containing file
  3208. Return: CF set on error
  3209.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3210.     CF clear if successful
  3211.         all buffers for file flushed
  3212.         directory entry updated
  3213. Note:    this function is called by the DOS 3.1+ kernel
  3214. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  3215. --------N-2F1108-----------------------------
  3216. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  3217.     AX = 1108h
  3218.     ES:DI -> SFT
  3219.         SFT DPB field -> DPB of drive containing file
  3220.     CX = number of bytes
  3221.     SS = DOS DS
  3222.     SDA DTA field -> user buffer
  3223. Return: CF set on error
  3224.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3225.     CF clear if successful
  3226.         CX = number of bytes read (0000h = end of file)
  3227.         SFT updated
  3228. Note:    this function is called by the DOS 3.1+ kernel
  3229. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh"DOS",INT 21/AX=5D06h
  3230. --------N-2F1109-----------------------------
  3231. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  3232.     AX = 1109h
  3233.     ES:DI -> SFT
  3234.         SFT DPB field -> DPB of drive containing file
  3235.     CX = number of bytes
  3236.     SS = DOS DS
  3237.     SDA DTA field -> user buffer
  3238. Return: CF set on error
  3239.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3240.     CF clear if successful
  3241.         CX = number of bytes written
  3242.         SFT updated
  3243. Notes:    this function is called by the DOS 3.1+ kernel
  3244.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  3245.       the Device Driver Header field points at PCACHE, but does not
  3246.       intercept any other network redirector functions
  3247. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  3248. --------N-2F110A-----------------------------
  3249. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  3250.     AX = 110Ah
  3251.     BX = file handle
  3252.     CX:DX = starting offset
  3253.     SI = high word of size
  3254.     STACK: WORD low word of size
  3255.     ES:DI -> SFT
  3256.         SFT DPB field -> DPB of drive containing file
  3257.     SS = DOS DS
  3258. Return: CF set on error
  3259.        AL = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3260.     STACK unchanged
  3261. Notes:    this function is called by the DOS 3.10-3.31 kernel
  3262.     the redirector is expected to resolve lock conflicts
  3263. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3264. --------N-2F110A-----------------------------
  3265. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - LOCK/UNLOCK REGION OF FILE
  3266.     AX = 110Ah
  3267.     BL = function
  3268.         00h lock
  3269.         01h unlock
  3270.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  3271.     DS:DX -> parameter block (see #2293)
  3272.     ES:DI -> SFT
  3273.         SFT DPB field -> DPB of drive containing file
  3274.     SS = DOS DS
  3275. Return: CF set on error
  3276.        AL = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3277. Notes:    this function is called by the DOS 4.0+ kernel
  3278.     the redirector is expected to resolve lock conflicts
  3279. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3280.  
  3281. Format of parameter block entry [array, but currently limited to single entry]:
  3282. Offset    Size    Description    (Table 2293)
  3283.  00h    DWORD    start offset
  3284.  04h    DWORD    size of region
  3285. --------N-2F110B-----------------------------
  3286. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  3287.     AX = 110Bh
  3288.     BX = file handle
  3289.     CX:DX = starting offset
  3290.     SI = high word of size
  3291.     STACK: WORD low word of size
  3292.     ES:DI -> SFT for file
  3293.         SFT DPB field -> DPB of drive containing file
  3294. Return: CF set on error
  3295.        AL = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3296.     STACK unchanged
  3297. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls
  3298.       AX=110Ah instead
  3299. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  3300. --------N-2F110C-----------------------------
  3301. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  3302.     AX = 110Ch
  3303.     ES:DI -> current directory structure for desired drive
  3304. Return: CF clear if data valid
  3305.         AL = sectors per cluster
  3306.         AH = media ID byte
  3307.         BX = total clusters
  3308.         CX = bytes per sector
  3309.         DX = number of available clusters
  3310.     CF set if data invalid
  3311. Note:    this function is called by the DOS 3.1+ kernel
  3312. SeeAlso: INT 21/AH=36h
  3313. --------N-2F110D-----------------------------
  3314. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  3315.     AX = 110Dh
  3316.     SDA first filename pointer -> name of file
  3317.     ???
  3318. Return: ???
  3319. Note:    similar to AX=110Eh
  3320. SeeAlso: AX=110Eh
  3321. --------N-2F110E-----------------------------
  3322. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  3323.     AX = 110Eh
  3324.     SS = DOS DS
  3325.     SDA first filename pointer -> fully-qualified name of file
  3326.     SDA CDS pointer -> current directory structure for drive with file
  3327.     STACK: WORD new file attributes
  3328. Return: CF set on error
  3329.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3330.     CF clear if successful
  3331.     STACK unchanged
  3332. Note:    this function is called by the DOS 3.1+ kernel
  3333. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  3334. --------N-2F110F-----------------------------
  3335. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3336.     AX = 110Fh
  3337.     SS = DOS DS
  3338.     SDA first filename pointer -> fully-qualified name of file
  3339.     SDA CDS pointer -> current directory structure for drive with file
  3340. Return: CF set on error
  3341.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3342.     CF clear if successful
  3343.         AX = file attributes
  3344.         BX:DI = file size
  3345. Note:    this function is called by the DOS 3.1+ kernel
  3346. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  3347. --------N-2F1110-----------------------------
  3348. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3349.     AX = 1110h
  3350.     SDA first filename pointer -> name of file
  3351.     ???
  3352. Return: ???
  3353. Note:    appears to be similar to AX=110Fh
  3354. SeeAlso: AX=110Eh
  3355. --------N-2F1111-----------------------------
  3356. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  3357.     AX = 1111h
  3358.     SS = DS = DOS DS
  3359.     SDA first filename pointer = offset of fully-qualified old name
  3360.     SDA second filename pointer = offset of fully-qualified new name
  3361.     SDA CDS pointer -> current directory structure for drive with file
  3362. Return: CF set on error
  3363.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3364.     CF clear if successful
  3365. Note:    this function is called by the DOS 3.1+ kernel
  3366. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  3367. --------N-2F1112-----------------------------
  3368. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  3369.     AX = 1112h
  3370.     SS = DS = DOS DS
  3371.     SDA first filename pointer -> name of file
  3372.     ???
  3373. Return: ???
  3374. Note:    similar to AX=1111h
  3375. SeeAlso: AX=1111h
  3376. --------N-2F1113-----------------------------
  3377. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  3378.     AX = 1113h
  3379.     SS = DS = DOS DS
  3380.     SDA first filename pointer -> fully-qualified filename in DOS DS
  3381.     SDA CDS pointer -> current directory structure for drive with file
  3382. Return: CF set on error
  3383.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3384.     CF clear if successful
  3385. Notes:    this function is called by the DOS 3.1+ kernel
  3386.     the filespec may contain wildcards
  3387. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  3388. --------N-2F1114-----------------------------
  3389. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  3390.     AX = 1114h
  3391.     SDA first filename pointer -> name of file
  3392.     ???
  3393. Return: ???
  3394. Note:    similar to AX=1113h
  3395. SeeAlso: AX=1113h
  3396. --------N-2F1115-----------------------------
  3397. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  3398.     AX = 1115h
  3399.     SS = DOS DS
  3400.     ES:DI -> SFT ???
  3401.     ???
  3402. Return: ???
  3403. Note:    similar to AX=1116h
  3404. SeeAlso: AX=1116h,AX=112Eh
  3405. --------N-2F1116-----------------------------
  3406. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  3407.     AX = 1116h
  3408.     ES:DI -> uninitialized SFT
  3409.     SS = DOS DS
  3410.     SDA first filename pointer -> fully-qualified name of file to open
  3411.     STACK: WORD file access and sharing modes (see #1090 at INT 21/AH=3Dh)
  3412. Return: CF set on error
  3413.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3414.     CF clear if successful
  3415.         SFT filled (except handle count, which DOS manages itself)
  3416.     STACK unchanged
  3417. Note:    this function is called by the DOS 3.1+ kernel
  3418. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  3419. SeeAlso: INT 21/AH=60h
  3420. --------N-2F1117-----------------------------
  3421. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  3422.     AX = 1117h
  3423.     ES:DI -> uninitialized SFT
  3424.     SS = DOS DS
  3425.     SDA first filename pointer -> fully-qualified name of file to open
  3426.     SDA CDS pointer -> current directory structure for drive with file
  3427.     STACK: WORD file creation mode
  3428.             low byte = file attributes (see #1089 at INT 21/AH=3Ch)
  3429.             high byte = 00h normal create, 01h create new file
  3430. Return: CF set on error
  3431.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3432.     CF clear if successful
  3433.         SFT filled (except handle count, which DOS manages itself)
  3434.     STACK unchanged
  3435. Note:    this function is called by the DOS 3.1+ kernel
  3436. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  3437. --------N-2F1118-----------------------------
  3438. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  3439.     AX = 1118h
  3440.     ES:DI -> uninitialized SFT
  3441.     SS = DOS DS
  3442.     SDA first filename pointer -> fully-qualified name of file
  3443.     STACK: WORD file creation mode
  3444.             low byte = file attributes
  3445.             high byte = 00h normal create, 01h create new file
  3446. Return: ???
  3447.     STACK unchanged
  3448. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  3449.       on a drive for which the SDA CDS pointer has offset FFFFh
  3450. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  3451. --------N-2F1119-----------------------------
  3452. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  3453.     AX = 1119h
  3454.     SS = DS = DOS DS
  3455.     [DTA] = uninitialized 21-byte findfirst search data
  3456.           (see #1312 at INT 21/AH=4Eh)
  3457.     SDA first filename pointer -> fully-qualified search template
  3458.     SDA search attribute = attribute mask for search
  3459. Return: CF set on error
  3460.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3461.     CF clear if successful
  3462.         [DTA] = updated findfirst search data
  3463.             (bit 7 of first byte must be set)
  3464.         [DTA+15h] = standard directory entry for file (see #1041)
  3465. Notes:    this function is called by the DOS 3.1+ kernel
  3466.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  3467. SeeAlso: AX=111Ah,AX=111Bh,INT 21/AH=1Ah
  3468. --------N-2F111A-----------------------------
  3469. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  3470.     AX = 111Ah
  3471.     ???
  3472. Return: CF set
  3473.         AX = error code (03h for DOS 4.01 IFSFUNC)
  3474. Note:    use AX=111Ch for DOS 5+
  3475. SeeAlso: AX=1119h,AX=111Ch
  3476. --------N-2F111B-----------------------------
  3477. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  3478.     AX = 111Bh
  3479.     SS = DS = DOS DS
  3480.     [DTA] = uninitialized 21-byte findfirst search data
  3481.           (see #1312 at INT 21/AH=4Eh)
  3482.     SDA first filename pointer -> fully-qualified search template
  3483.     SDA CDS pointer -> current directory structure for drive with file
  3484.     SDA search attribute = attribute mask for search
  3485. Return: CF set on error
  3486.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3487.     CF clear if successful
  3488.         [DTA] = updated findfirst search data
  3489.             (bit 7 of first byte must be set)
  3490.         [DTA+15h] = standard directory entry for file (see #1041)
  3491. Note:    this function is called by the DOS 3.1+ kernel
  3492. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=1Ah,INT 21/AH=4Eh,INT 21/AH=60h
  3493. --------N-2F111C-----------------------------
  3494. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  3495.     AX = 111Ch
  3496.     SS = DS = DOS DS
  3497.     ES:DI -> CDS
  3498.     ES:DI -> DTA (MSDOS v5.0)
  3499.     [DTA] = 21-byte findfirst search data
  3500.           (see #1312 at INT 21/AH=4Eh)
  3501. Return: CF set on error
  3502.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3503.     CF clear if successful
  3504.         [DTA] = updated findfirst search data
  3505.             (bit 7 of first byte must be set)
  3506.         [DTA+15h] = standard directory entry for file (see #1041)
  3507. Note:    this function is called by the DOS 3.1+ kernel
  3508. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=1Ah,INT 21/AH=4Fh
  3509. --------N-2F111D-----------------------------
  3510. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  3511.     AX = 111Dh
  3512.     SS = DOS DS
  3513.     SDA PSP segment field = PSP of terminating process
  3514. Return: nothing
  3515. Notes:    used when a process is aborted; the process being terminated is
  3516.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  3517.     this function is called by the DOS 3.1+ kernel
  3518.     closes all FCBs opened by process
  3519. SeeAlso: INT 21/AX=5D04h
  3520. --------N-2F111E-----------------------------
  3521. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  3522.     AX = 111Eh
  3523.     SS = DOS DS
  3524.     STACK: WORD function to execute
  3525.         5F00h  get redirection mode
  3526.             BL = type (03h printer, 04h disk)
  3527.             Return: BH = state (00h off, 01h on)
  3528.         5F01h  set redirection mode
  3529.             BL = type (03h printer, 04h disk)
  3530.             BH = state (00h off, 01h on)
  3531.         5F02h  get redirection list entry
  3532.             BX = redirection list index
  3533.             DS:SI -> 16-byte local device name buffer
  3534.             ES:DI -> 128-byte network name buffer
  3535.             Return: must set user's BX to device type and CX to
  3536.                 stored parameter value, using AX=1218h to get
  3537.                 stack frame address
  3538.         5F03h  redirect device
  3539.             BL = device type (see INT 21/AX=5F03h)
  3540.             CX = stored parameter value
  3541.             DS:SI -> ASCIZ source device name
  3542.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  3543.         5F04h  cancel redirection
  3544.             DS:SI -> ASCIZ device name or network path
  3545.         5F05h  get redirection list extended entry
  3546.             BX = redirection list index
  3547.             DS:SI -> buffer for ASCIZ source device name
  3548.             ES:DI -> buffer for destination ASCIZ network path
  3549.             Return: BH = status flag
  3550.                 BL = type (03h printer, 04h disk)
  3551.                 CX = stored parameter value
  3552.                 BP = NETBIOS local session number
  3553.         5F06h  similar to 5F05h???
  3554. Return: CF set on error
  3555.         AX = error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3556.     STACK unchanged
  3557. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  3558.       (including LAN Manager calls)
  3559.     the PC Network 1.00 redirector does not support function 5F06h
  3560. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  3561. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  3562. --------N-2F111F-----------------------------
  3563. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  3564.     AX = 111Fh
  3565.     STACK: WORD function
  3566.         5E02h  set printer setup
  3567.         5E03h  get printer setup
  3568.         5E04h  set printer mode
  3569.         5E05h  get printer mode
  3570. Return: CF set on error
  3571.         AX = error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3572.     STACK unchanged
  3573. Note:    this function is called by the DOS 3.1+ kernel
  3574. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  3575. --------N-2F1120-----------------------------
  3576. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  3577.     AX = 1120h
  3578.     DS = DOS DS
  3579.     ???
  3580. Return: CF clear (successful)
  3581. Notes:    this function is called by the DOS 3.1+ kernel
  3582.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  3583. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  3584. --------N-2F1121-----------------------------
  3585. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  3586.     AX = 1121h
  3587.     CX:DX = offset (in bytes) from end
  3588.     ES:DI -> SFT
  3589.         SFT DPB field -> DPB of drive with file
  3590.     SS = DOS DS
  3591. Return: CF set on error
  3592.         AL = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3593.     CF clear if successful
  3594.         DX:AX = new file position
  3595. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  3596.       from the end of a file opened with sharing modes set in such a
  3597.       manner that another process is able to change the size of the file
  3598.       while it is already open
  3599. SeeAlso: AX=1228h,INT 21/AH=42h
  3600. --------N-2F1122-----------------------------
  3601. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  3602.     AX = 1122h
  3603.     SS = DOS DS
  3604.     DS = PSP of process about to terminate
  3605. Return: ???
  3606. Notes:    this function is called by the DOS 3.1+ kernel
  3607.     after calling this function, the kernel calls INT 2F/AX=111Dh
  3608. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  3609. --------N-2F1123-----------------------------
  3610. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  3611.     AX = 1123h
  3612.     DS:SI -> ASCIZ filename to canonicalize
  3613.     ES:DI -> 128-byte buffer for qualified name
  3614. Return: CF set if not resolved
  3615. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR DOS 5.0 unless the
  3616.       filename matches the name of a character device
  3617.     called first when DOS attempts to resolve a filename (unless inside an
  3618.       AX=5D00h server call); if this fails, DOS resolves the name locally
  3619. SeeAlso: AX=1221h,INT 21/AH=60h
  3620. --------N-2F1124-----------------------------
  3621. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  3622.     AX = 1124h
  3623.     ES:DI -> SFT
  3624.     SS = DOS DS
  3625.     ???
  3626. Return: CX = ???
  3627. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h
  3628.       returns CF set
  3629. SeeAlso: AX=1126h
  3630. --------N-2F1125-----------------------------
  3631. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  3632.     AX = 1125h
  3633.     STACK: WORD subfunction
  3634.         5D07h get print stream state
  3635.             Return: DL = current state
  3636.         5D08h set print stream state
  3637.             DL = new state
  3638.         5D09h finish print job
  3639. Return: CF set on error
  3640.         AX = error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3641.     STACK unchanged
  3642. Note:    this function is called by the DOS 3.1+ kernel
  3643. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  3644. --------N-2F1126-----------------------------
  3645. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  3646.     AX = 1126h
  3647.     ES:DI -> SFT for file handle 4???
  3648.     SS = DOS DS???
  3649.     ???
  3650. Return: CF set on error
  3651. Notes:    this function is called by the DOS 3.1+ kernel
  3652.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  3653.       bit 11 of the device information word in the SFT set
  3654. SeeAlso: AX=1124h
  3655. --------N-2F1127-----------------------------
  3656. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3657.     AX = 1127h
  3658. Return: CF set
  3659.         AX = 0001h (invalid function) (see #1366 at INT 21/AH=59h/BX=0000h)
  3660. --------N-2F1127BX4E57-----------------------
  3661. INT 2F - NetWare 4.0 - REMOTE FILE COPY
  3662.     AX = 1127h
  3663.     BX = 4E57h ('NW') (signature identifying this as a NetWare call)
  3664.     SI = source file handle
  3665.     DI = destination file handle
  3666.     DX:CX = number of bytes to copy, starting at current file position
  3667. Return: CF clear if successful
  3668.     CF set on error
  3669.         AX = error code (05h,06h,0Bh,11h,3Bh) (see #1366)
  3670.     DX:CX = number of bytes successfully copied (file position updated)
  3671. Notes:    this is the only call which may be made directly to the NetWare
  3672.       redirector from an application
  3673.     COMMAND.COM's COPY and DOS's XCOPY reportedly call INT 21/AX=1127h in
  3674.       order to speed up copies between files on the same network server;
  3675.       if error code 11h (not same device) is returned, the copy is
  3676.       performed in the usual manner.  However, no such calls appear to
  3677.       be present in MS-DOS 6.22.
  3678. --------N-2F1128-----------------------------
  3679. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3680.     AX = 1128h
  3681. Return: CF set
  3682.         AX = 0001h (invalid function) (see #1366 at INT 21/AH=59h/BX=0000h)
  3683. --------N-2F1129-----------------------------
  3684. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3685.     AX = 1129h
  3686. Return: CF set
  3687.         AX = 0001h (invalid function) (see #1366 at INT 21/AH=59h/BX=0000h)
  3688. --------N-2F112A-----------------------------
  3689. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  3690.     AX = 112Ah
  3691.     DS = DOS DS
  3692.     ???
  3693. Return: ???
  3694. Note:    does something to each IFS driver
  3695. --------N-2F112B-----------------------------
  3696. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  3697.     AX = 112Bh
  3698.     SS = DOS DS
  3699.     CX = function/category
  3700.     DS:DX -> parameter block
  3701.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  3702.     ???
  3703. Return: CF set on error
  3704.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3705.     CF clear if successful
  3706. Note:    this function is called by the DOS 4.0 kernel
  3707. --------N-2F112C-----------------------------
  3708. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - "UPDATE_CB" - ???
  3709.     AX = 112Ch
  3710.     SS = DOS DS
  3711.     SDA current SFT pointer -> SFT for file
  3712.     ???
  3713. Return: CF set on error
  3714. Note:    called by SHARE in DOS 5.0-6.0
  3715. --------N-2F112D-----------------------------
  3716. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  3717.     AX = 112Dh
  3718.     BL = subfunction (value of AL on INT 21)
  3719.         02h get extended attributes
  3720.         03h get extended attribute properties
  3721.         04h set extended attributes
  3722.         Return: CF clear
  3723.         else ???
  3724.         Return: CX = ??? (00h or 02h for DOS 4.01)
  3725.     ES:DI -> SFT for file
  3726.     SS = DOS DS
  3727. Return: DS = DOS DS
  3728. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  3729.       INT 21/AX=5703h, and INT 21/AX=5704h
  3730. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  3731. --------N-2F112E-----------------------------
  3732. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - EXTENDED OPEN/CREATE FILE
  3733.     AX = 112Eh
  3734.     SS = DS = DOS DS
  3735.     ES:DI -> uninitialized SFT for file
  3736.     STACK: WORD file attribute for created/truncated file
  3737.             low byte = file attributes
  3738.             high byte = 00h normal create/open, 01h create new file
  3739.     SDA first filename pointer -> fully-qualified filename
  3740.     SDA extended file open action = action code
  3741.           (see #1459 at INT 21/AX=6C00h)
  3742.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  3743. Return: CF set on error
  3744.         AX = error code
  3745.     CF clear if successful
  3746.         CX = result code
  3747.         01h file opened
  3748.         02h file created
  3749.         03h file replaced (truncated)
  3750.         SFT initialized (except handle count, which DOS manages itself)
  3751. Note:    this function is called by the DOS 4.0+ kernel
  3752. BUG:    this function is not called correctly under some DOS versions
  3753.       (at least 5.0 and 6.2):
  3754.         the file attribute on the stack is not correct if the action
  3755.           code is 11h,
  3756.         the result code in CX is not passed back to the application.
  3757. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  3758. --------N-2F112F-----------------------------
  3759. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  3760.     AX = 112Fh
  3761.     SS = DOS DS
  3762.     STACK: WORD function in low byte
  3763.         00h ???
  3764.             DS:SI -> Current Directory Structure???
  3765.             CL = drive (1=A:)
  3766.         01h ???
  3767.             DS:SI -> ???
  3768.             CL = file handle???
  3769.         02h ???
  3770.             DS:SI -> Current Directory Structure???
  3771.             DI = ???
  3772.             CX = drive (1=A:)
  3773.     ???
  3774. Return: CF set on error
  3775.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  3776.     CF clear if successful
  3777. Note:    this function is called by the DOS 4.0 kernel
  3778. SeeAlso: INT 21/AH=6Bh
  3779. --------N-2F1130-----------------------------
  3780. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  3781.     AX = 1130h
  3782. Return: ES = CS of resident IFSFUNC
  3783. --------N-2F1180-----------------------------
  3784. INT 2F - LAN Manager Enhanced DOS Services - ???
  3785.     AX = 1180h
  3786.     ???
  3787. Return: ???
  3788. SeeAlso: AX=1100h,AX=1181h,AX=118Eh
  3789. --------N-2F1181-----------------------------
  3790. INT 2F - LAN Manager Enhanced DOS Services - SET USER NAME???
  3791.     AX = 1181h
  3792.     ???
  3793. Return: ???
  3794. SeeAlso: AX=1100h,AX=1180h
  3795. --------N-2F1182-----------------------------
  3796. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  3797.     AX = 1182h
  3798.     ???
  3799. Return: ???
  3800. SeeAlso: AX=1100h,AX=1180h
  3801. --------N-2F1184-----------------------------
  3802. INT 2F - LAN Manager Enhanced DOS - ???
  3803.     AX = 1184h
  3804.     ???
  3805. Return: ???
  3806. --------N-2F1186-----------------------------
  3807. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  3808.     AX = 1186h
  3809.     DS:SI -> stack frame (see #2294)
  3810. Return: CF clear if successful
  3811.     CF set if error
  3812.         AX = error code
  3813. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  3814.       file/printer services
  3815. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  3816.  
  3817. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  3818. Offset    Size    Description    (Table 2294)
  3819.  00h    DWORD    -> number of bytes read
  3820.  04h    WORD    size of buffer
  3821.  06h    DWORD    -> buffer
  3822.  0Ah    DWORD    -> return code
  3823.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3824.  12h    WORD    handle
  3825. --------N-2F118A-----------------------------
  3826. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  3827.     AX = 118Ah
  3828.     BX = function (0000h or 0001h)
  3829. Return: CF clear if successful
  3830.         AX = 1100h success
  3831.     CF set if error
  3832.         AX = 0001h, etc.
  3833. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  3834. --------N-2F118B-----------------------------
  3835. INT 2F - LAN Manager Enhanced DOS - ???
  3836.     AX = 118Bh
  3837.     ???
  3838. Return: ???
  3839. --------N-2F118C-----------------------------
  3840. INT 2F - LAN Manager Enhanced DOS - ???
  3841.     AX = 118Ch
  3842.     ???
  3843. Return: ???
  3844. --------N-2F118E-----------------------------
  3845. INT 2F - LAN Manager Enhanced DOS - ???
  3846.     AX = 118Eh
  3847.     ???
  3848. Return: ???
  3849. --------N-2F118F-----------------------------
  3850. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  3851.     AX = 118Fh
  3852.     DS:SI -> stack frame (see #2295)
  3853. Return: CF clear if successful
  3854.     CF set if error
  3855.         AX = error code
  3856. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  3857.  
  3858. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  3859. Offset    Size    Description    (Table 2295)
  3860.  00h    DWORD    -> number of bytes read
  3861.  04h    WORD    Size of buffer
  3862.  06h    DWORD    -> buffer
  3863.  0Ah    DWORD    -> return code
  3864.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3865.  12h    WORD    handle
  3866. --------N-2F1190-----------------------------
  3867. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  3868.     AX = 1190h
  3869.     DS:SI -> stack frame (see #2296)
  3870. Return: CF clear if successful
  3871.     CF set if error
  3872.         AX = error code
  3873. SeeAlso: AX=1186h,AX=1191h
  3874.  
  3875. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  3876. Offset    Size    Description    (Table 2296)
  3877.  00h    DWORD    -> number of bytes read
  3878.  04h    WORD    size of buffer
  3879.  06h    DWORD    -> buffer
  3880.  0Ah    DWORD    -> return code
  3881.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3882.  12h    WORD    handle
  3883.  14h    DWORD    ???
  3884. --------N-2F1191-----------------------------
  3885. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  3886.     AX = 1191h
  3887.     DS:SI -> stack frame (see #2297)
  3888. Return: CF clear if successful
  3889.     CF set if error
  3890.         AX = error code
  3891. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  3892.  
  3893. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  3894. Offset    Size    Description    (Table 2297)
  3895.  00h    DWORD    -> number of bytes read
  3896.  04h    WORD    size of buffer
  3897.  06h    DWORD    -> buffer
  3898.  0Ah    DWORD    -> return code
  3899.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3900.  12h    WORD    handle
  3901.  14h    DWORD    ???
  3902. --------D-2F1200-----------------------------
  3903. INT 2F U - DOS 3.0+ internal - INSTALLATION CHECK
  3904.     AX = 1200h
  3905. Return: AL = FFh (for compatibility with other INT 2F functions)
  3906. --------D-2F1201-----------------------------
  3907. INT 2F U - DOS 3.0+ internal - CLOSE CURRENT FILE
  3908.     AX = 1201h
  3909.     SS = DOS DS = DOS kernel data seg (must be using a DOS internal stack)
  3910.     SDA current SFT pointer -> SFT of file to close
  3911. Return: CF set on error
  3912.     ES:DI -> SFT for file
  3913.     CX undefined (new reference count of SFT in many versions)
  3914.     BX destroyed
  3915. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  3916. --------D-2F1202-----------------------------
  3917. INT 2F U - DOS 3.0+ internal - GET INTERRUPT ADDRESS
  3918.     AX = 1202h
  3919.     STACK: WORD vector number
  3920. Return: ES:BX -> interrupt vector (DWORD containing handler's address)
  3921.     STACK unchanged
  3922. --------D-2F1203-----------------------------
  3923. INT 2F U - DOS 3.0+ internal - GET DOS DATA SEGMENT
  3924.     AX = 1203h
  3925. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  3926. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  3927.       segment
  3928. --------D-2F1204-----------------------------
  3929. INT 2F U - DOS 3.0+ internal - NORMALIZE PATH SEPARATOR
  3930.     AX = 1204h
  3931.     STACK: WORD character to normalize
  3932. Return: AL = normalized character (forward slash turned to backslash, all
  3933.           others unchanged)
  3934.     ZF set if path separator
  3935.     STACK unchanged
  3936. --------D-2F1205-----------------------------
  3937. INT 2F U - DOS 3.0+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  3938.     AX = 1205h
  3939.     STACK: WORD character to output
  3940. Return: STACK unchanged
  3941. Note:    can be called only from within DOS
  3942. --------D-2F1206-----------------------------
  3943. INT 2F U - DOS 3.0+ internal - INVOKE CRITICAL ERROR
  3944.     AX = 1206h
  3945.     DI = error code
  3946.     BP:SI -> device driver header (see #1332)
  3947.     SS = DOS DS (must be using a DOS internal stack)
  3948.     STACK: WORD value to be passed to INT 24 in AX
  3949. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  3950.     STACK unchanged
  3951. SeeAlso: INT 24
  3952. --------D-2F1207-----------------------------
  3953. INT 2F U - DOS 3.0+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  3954.     AX = 1207h
  3955.     DS:DI -> disk buffer
  3956. Return: nothing
  3957. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  3958.       recently used is first); under DOS 3.3, the buffer is then moved to
  3959.       the start of the disk buffer chain if it was marked unused
  3960. Notes:    can be called only from within DOS
  3961.     this function is nearly the same as AX=120Fh
  3962. SeeAlso: AX=120Fh
  3963. --------D-2F1208-----------------------------
  3964. INT 2F U - DOS 3.0+ internal - DECREMENT SFT REFERENCE COUNT
  3965.     AX = 1208h
  3966.     ES:DI -> SFT
  3967. Return: AX = original value of reference count
  3968. Notes:    if the reference count was 1, it is set to FFFFh ("busy", since 0
  3969.       indicates that the SFT is not in use).  It is the caller's
  3970.       responsibility to set the reference count to zero after cleaning up.
  3971.     used by network redirectors such as MSCDEX
  3972. SeeAlso: AX=1106h
  3973. --------D-2F1209-----------------------------
  3974. INT 2F U - DOS 3.0+ internal - FLUSH AND FREE DISK BUFFER
  3975.     AX = 1209h
  3976.     DS:DI -> disk buffer
  3977. Return: disk buffer marked unused, contents written to disk if buffer dirty
  3978. Note:    can be called only from within DOS
  3979. SeeAlso: AX=120Eh,AX=1215h
  3980. --------D-2F120A-----------------------------
  3981. INT 2F U - DOS 3.0+ internal - PERFORM CRITICAL ERROR INTERRUPT
  3982.     AX = 120Ah
  3983.     DS = SS = DOS DS (must be using a DOS internal stack)
  3984.     STACK: WORD extended error code
  3985. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  3986.     CF clear if retry, set otherwise
  3987.     STACK unchanged
  3988. Notes:    can only be called during a DOS function call, as it uses various
  3989.       fields in the SDA to set up the registers for the INT 24
  3990.     reportedly sets current DPB's first root directory sector to 1
  3991. SeeAlso: INT 24
  3992. --------D-2F120B-----------------------------
  3993. INT 2F U - DOS 3.0+ internal - SIGNAL SHARING VIOLATION TO USER
  3994.     AX = 120Bh
  3995.     ES:DI -> system file table entry for previous open of file
  3996.     STACK: WORD extended error code (should be 20h--sharing violation)
  3997. Return: CF clear if operation should be retried
  3998.     CF set if operation should not be retried
  3999.         AX = error code (20h) (see #1366 at INT 21/AH=59h/BX=0000h)
  4000.     STACK unchanged
  4001. Notes:    can only be called during a DOS function call
  4002.     should only be called if an attempt was made to open an already-open
  4003.       file contrary to the sharing rules
  4004.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  4005.       inheritance allowed
  4006. --------D-2F120C-----------------------------
  4007. INT 2F U - DOS 3.0+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  4008.     AX = 120Ch
  4009.     SDA current SFT pointer -> SFT for file
  4010.     DS = DOS DS
  4011.     SS = DOS DS (must be using a DOS internal stack)
  4012. Return: ES, DI, AX destroyed
  4013. Notes:    invokes "device open" call on device driver for SFT
  4014.     changes owner of last-accessed SFT to calling process if it was opened
  4015.       via FCB
  4016.     called by network redirectors such as MSCDEX
  4017. --------D-2F120D-----------------------------
  4018. INT 2F U - DOS 3.0+ internal - GET DATE AND TIME
  4019.     AX = 120Dh
  4020.     SS = DOS DS (must be using a DOS internal stack)
  4021. Return: AX = current date in packed format (see #1352 at INT 21/AX=5700h)
  4022.     DX = current time in packed format (see #1351 at INT 21/AX=5700h)
  4023. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  4024. --------D-2F120E-----------------------------
  4025. INT 2F U - DOS 3.0+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  4026.     AX = 120Eh
  4027.     SS = DOS DS (must be using a DOS internal stack)
  4028. Return: DS:DI -> first disk buffer
  4029. Notes:    clears "referenced" flag on all disk buffers
  4030.     in DOS 5+, this has become essentially a NOP, invoking the same code
  4031.       used by AX=1224h (SHARING DELAY)
  4032. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  4033. --------D-2F120F-----------------------------
  4034. INT 2F U - DOS 3.0+ internal - MAKE BUFFER MOST RECENTLY USED
  4035.     AX = 120Fh
  4036.     DS:DI -> disk buffer
  4037.     SS = DOS DS (must be using a DOS internal stack)
  4038. Return: DS:DI -> next buffer in buffer list
  4039. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4040.       recently used is first); under DOS 3.3, the buffer is then moved to
  4041.       the start of the disk buffer chain if it was marked unused
  4042. Note:    this function is the same as AX=1207h except that it returns a
  4043.       pointer to the buffer following the specified buffer in the buffer
  4044.       chain
  4045. SeeAlso: AX=1207h
  4046. --------D-2F1210-----------------------------
  4047. INT 2F U - DOS 3.0+ internal - FIND UNREFERENCED DISK BUFFER
  4048.     AX = 1210h
  4049.     DS:DI -> first disk buffer to check
  4050. Return: ZF clear if found
  4051.         DS:DI -> first unreferenced disk buffer
  4052.     ZF set if not found
  4053. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  4054.       used by AX=1224h (SHARING DELAY)
  4055. SeeAlso: AX=120Eh
  4056. --------D-2F1211-----------------------------
  4057. INT 2F U - DOS 3.0+ internal - NORMALIZE ASCIZ FILENAME
  4058.     AX = 1211h
  4059.     DS:SI -> ASCIZ filename to normalize
  4060.     ES:DI -> buffer for normalized filename
  4061. Return: destination buffer filled with uppercase filename, with slashes turned
  4062.     to backslashes
  4063. SeeAlso: AX=121Eh,AX=1221h
  4064. --------D-2F1212-----------------------------
  4065. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4066.     AX = 1212h
  4067.     ES:DI -> ASCIZ string
  4068. Return: CX = length of string
  4069. SeeAlso: AX=1225h
  4070. --------D-2F1213-----------------------------
  4071. INT 2F U - DOS 3.0+ internal - UPPERCASE CHARACTER
  4072.     AX = 1213h
  4073.     STACK: WORD character to convert to uppercase
  4074. Return: AL = uppercase character
  4075.     STACK unchanged
  4076. --------D-2F1214-----------------------------
  4077. INT 2F U - DOS 3.0+ internal - COMPARE FAR POINTERS
  4078.     AX = 1214h
  4079.     DS:SI = first pointer
  4080.     ES:DI = second pointer
  4081. Return: ZF set if pointers are equal, ZF clear if not equal
  4082.     CF clear if pointers equal, CF set if not
  4083. --------D-2F1215-----------------------------
  4084. INT 2F U - DOS 3.0+ internal - FLUSH BUFFER
  4085.     AX = 1215h
  4086.     DS:DI -> disk buffer
  4087.     SS = DOS DS (must be using a DOS internal stack)
  4088.     STACK: WORD drives for which to skip buffer
  4089.         ignore buffer if drive same as high byte, or bytes differ and
  4090.           the buffer is for a drive OTHER than that given in low byte
  4091. Return: STACK unchanged
  4092. Note:    can be called only from within DOS
  4093. SeeAlso: AX=1209h
  4094. --------D-2F1216-----------------------------
  4095. INT 2F U - DOS 3.0+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  4096.     AX = 1216h
  4097.     BX = system file table entry number
  4098. Return: CF clear if successful
  4099.         ES:DI -> system file table entry
  4100.         BX = relative entry number in system file table containing entry
  4101.         AX destroyed
  4102.     CF set if BX greater than FILES=
  4103. Note:    supported by DR DOS 5+
  4104. SeeAlso: AX=1220h
  4105. --------D-2F1217-----------------------------
  4106. INT 2F U - DOS 3.0+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  4107.     AX = 1217h
  4108.     SS = DOS DS (must be using a DOS internal stack)
  4109.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  4110. Return: CF set on error
  4111.         (drive > LASTDRIVE)
  4112.     CF clear if successful
  4113.         DS:SI -> current directory structure for specified drive
  4114.     STACK unchanged
  4115. SeeAlso: AX=1219h
  4116. --------D-2F1218-----------------------------
  4117. INT 2F U - DOS 3.0+ internal - GET CALLER'S REGISTERS
  4118.     AX = 1218h
  4119. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  4120. Note:    only valid while within DOS
  4121. --------D-2F1219-----------------------------
  4122. INT 2F U - DOS 3.0+ internal - SET DRIVE???
  4123.     AX = 1219h
  4124.     SS = DOS DS (must be using a DOS internal stack)
  4125.     STACK: WORD drive (0 = default, 1 = A:, etc)
  4126. Return: ???
  4127.     STACK unchanged
  4128. Notes:    calls AX=1217h
  4129.     builds a current directory structure if inside server call
  4130.       (INT 21/AX=5D00h)
  4131. SeeAlso: AX=1217h,AX=121Fh
  4132. --------D-2F121A-----------------------------
  4133. INT 2F U - DOS 3.0+ internal - GET FILE'S DRIVE
  4134.     AX = 121Ah
  4135.     DS:SI -> filename
  4136. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  4137.     DS:SI -> filename without leading X: (if present)
  4138. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  4139. --------D-2F121B-----------------------------
  4140. INT 2F U - DOS 3.0+ internal - SET YEAR/LENGTH OF FEBRUARY
  4141.     AX = 121Bh
  4142.     CL = year - 1980
  4143. Return: AL = number of days in February
  4144. Note:    requires DS to be set to the DOS data segment
  4145. SeeAlso: INT 21/AH=2Bh"DATE"
  4146. --------D-2F121C-----------------------------
  4147. INT 2F U - DOS 3.0+ internal - CHECKSUM MEMORY
  4148.     AX = 121Ch
  4149.     DS:SI -> start of memory to checksum
  4150.     CX = number of bytes
  4151.     DX = initial checksum
  4152.     SS = DOS DS (must be using a DOS internal stack)
  4153. Return: AX, CX destroyed
  4154.     DX = checksum
  4155.     DS:SI -> first byte after checksummed range
  4156. Notes:    used by DOS to determine day count since 1/1/80 given a date
  4157.     supported by DR DOS 5.0+
  4158. SeeAlso: AX=121Dh
  4159. --------D-2F121D-----------------------------
  4160. INT 2F U - DOS 3.0+ internal - SUM MEMORY
  4161.     AX = 121Dh
  4162.     DS:SI -> memory to add up
  4163.     CX = 0000h
  4164.     DX = limit
  4165. Return: AL = byte which exceeded limit
  4166.     CX = number of bytes before limit exceeded
  4167.     DX = remainder after adding first CX bytes
  4168.     DS:SI -> byte beyond the one which exceeded the limit
  4169. Notes:    used by DOS to determine year or month given day count since 1/1/80
  4170.     supported by DR DOS 5.0+
  4171. SeeAlso: AX=121Ch
  4172. --------D-2F121E-----------------------------
  4173. INT 2F U - DOS 3.0+ internal - COMPARE FILENAMES
  4174.     AX = 121Eh
  4175.     DS:SI -> first ASCIZ filename
  4176.     ES:DI -> second ASCIZ filename
  4177. Return: ZF set if filenames equivalent, ZF clear if not
  4178. Note:    supported by DR DOS 5.0+
  4179. SeeAlso: AX=1211h,AX=1221h
  4180. --------D-2F121F-----------------------------
  4181. INT 2F U - DOS 3.0+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  4182.     AX = 121Fh
  4183.     SS = DOS DS (must be using a DOS internal stack)
  4184.     STACK: WORD drive letter
  4185. Return: ES:DI -> current directory structure (will be overwritten by next call)
  4186.     STACK unchanged
  4187. --------D-2F1220-----------------------------
  4188. INT 2F U - DOS 3.0+ internal - GET JOB FILE TABLE ENTRY
  4189.     AX = 1220h
  4190.     BX = file handle
  4191. Return: CF set on error
  4192.         AL = 6 (invalid file handle)
  4193.     CF clear if successful
  4194.         ES:DI -> JFT entry for file handle in current process
  4195. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  4196.       file handle, or FFh if the handle is not open
  4197.     supported by DR DOS 5.0+
  4198. SeeAlso: AX=1216h,AX=1229h
  4199. --------D-2F1221-----------------------------
  4200. INT 2F U - DOS 3.0+ internal - CANONICALIZE FILE NAME
  4201.     AX = 1221h
  4202.     DS:SI -> file name to be fully qualified
  4203.     ES:DI -> 128-byte buffer for resulting canonical file name
  4204.     SS = DOS DS (must be using a DOS internal stack)
  4205. Return: (see INT 21/AH=60h)
  4206. Note:    identical to INT 21/AH=60h
  4207. SeeAlso: AX=1123h,INT 21/AH=60h
  4208. --------D-2F1222-----------------------------
  4209. INT 2F U - DOS 3.0+ internal - SET EXTENDED ERROR INFO
  4210.     AX = 1222h
  4211.     SS = DOS data segment
  4212.     SS:SI -> 4-byte records
  4213.         BYTE    error code, FFh = last record
  4214.         BYTE    error class, FFh = don't change
  4215.         BYTE    suggested action, FFh = don't change
  4216.         BYTE    error locus, FFh = don't change
  4217.     SDA error code set
  4218. Return: SI destroyed
  4219.     SDA error class, error locus, and suggested action fields set
  4220. Note:    can be called only from within DOS
  4221. SeeAlso: AX=122Dh,INT 21/AH=59h/BX=0000h,INT 21/AX=5D0Ah
  4222. --------D-2F1223-----------------------------
  4223. INT 2F U - DOS 3.0+ internal - CHECK IF CHARACTER DEVICE
  4224.     AX = 1223h
  4225.     DS = DOS DS
  4226.     SS = DOS DS (must be using a DOS internal stack)
  4227.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  4228.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  4229. Return: CF set if no character device by that name found
  4230.     CF clear if found
  4231.         BH = low byte of device attribute word
  4232. Note:    can only be called from within DOS
  4233. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  4234. --------D-2F1224-----------------------------
  4235. INT 2F U - DOS 3.0+ internal - SHARING RETRY DELAY
  4236.     AX = 1224h
  4237.     SS = DOS DS (must be using a DOS internal stack)
  4238. Return: after delay set by INT 21/AX=440Bh, unless in server call
  4239.       (INT 21/AX=5D00h)
  4240. Note:    delay is dependent on the processor speed, and is skipped entirely if
  4241.       inside a server call
  4242. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  4243. --------D-2F1225-----------------------------
  4244. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4245.     AX = 1225h
  4246.     DS:SI -> ASCIZ string
  4247. Return: CX = length of string
  4248. Note:    supported by DR DOS 5.0+
  4249. SeeAlso: AX=1212h
  4250. --------D-2F1226-----------------------------
  4251. INT 2F U - DOS 3.3+ internal - OPEN FILE
  4252.     AX = 1226h
  4253.     CL = access mode
  4254.     DS:DX -> ASCIZ filename
  4255.     SS = DOS DS (must be using a DOS internal stack)
  4256. Return: CF set on error
  4257.         AL = error code (see #1366 at INT 21/AH=59h/BX=0000h)
  4258.     CF clear if successful
  4259.         AX = file handle
  4260. Notes:    can only be called from within DOS
  4261.     equivalent to INT 21/AH=3Dh
  4262.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4263. SeeAlso: AX=1227h,INT 21/AH=3Dh
  4264. --------D-2F1227-----------------------------
  4265. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  4266.     AX = 1227h
  4267.     BX = file handle
  4268.     SS = DOS DS (must be using a DOS internal stack)
  4269. Return: CF set on error
  4270.         AL = 06h invalid file handle
  4271.     CF clear if successful
  4272. Notes:    can only be called from within DOS
  4273.     equivalent to INT 21/AH=3Eh
  4274.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4275. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  4276. --------D-2F1228BP4200-----------------------
  4277. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  4278.     AX = 1228h
  4279.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  4280.     BX = file handle
  4281.     CX:DX = offset in bytes
  4282.     SS = DOS DS (must be using a DOS internal stack)
  4283. Return: as for INT 21/AH=42h
  4284. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  4285.       function call
  4286.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4287.       LSEEK, and restores frame pointer
  4288.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4289. SeeAlso: INT 21/AH=42h
  4290. --------D-2F1229-----------------------------
  4291. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  4292.     AX = 1229h
  4293.     BX = file handle
  4294.     CX = number of bytes to read
  4295.     DS:DX -> buffer
  4296.     SS = DOS DS (must be using a DOS internal stack)
  4297. Return: as for INT 21/AH=3Fh"DOS"
  4298. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  4299.       a DOS function call
  4300.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4301. SeeAlso: AX=1226h,INT 21/AH=3Fh"DOS"
  4302. --------D-2F122A-----------------------------
  4303. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  4304.     AX = 122Ah
  4305.     BX = entry point to set (0001h or 0002h)
  4306.     DS:SI -> FASTOPEN entry point (see #2298,#2299)
  4307.         (entry point not set if SI = FFFFh for DOS 4.0+)
  4308. Return: CF set if specified entry point already set
  4309. Notes:    entry point in BX is ignored under DOS 3.30
  4310.     both entry points set to same handler by DOS 4.01
  4311.     DOS 5.0 and 6.0 only set entry point 1
  4312.  
  4313. (Table 2298)
  4314. Values DOS 3.30+ FASTOPEN entry point is called with:
  4315.     AL = 01h  Lookup
  4316.         CX = ??? seems to be offset
  4317.         DI = ??? seems to be offset
  4318.         SI = offset in DOS DS of filename
  4319.     AL = 02h  insert file into FASTOPEN cache
  4320.     AL = 03h  delete file from FASTOPEN cache
  4321.         SI = offset in DOS DS of filename
  4322.     AL = 04h  purge FASTOPEN cache
  4323.         AH = subfunction (00h,01h,02h)
  4324.         ES:DI -> ???
  4325.         CX = ??? (subfunctions 01h and 02h only)
  4326. Returns: CF set on error or not installed
  4327. Note: function 03h calls function 01h first
  4328. SeeAlso: #2299,#2300
  4329.  
  4330. (Table 2299)
  4331. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  4332.     AL = 04h ???
  4333.         AH = 03h
  4334.         ???
  4335.     AL = 05h ???
  4336.     AL = 0Bh ???
  4337.     AL = 0Ch ???
  4338.     AL = 0Dh ???
  4339.     AL = 0Eh ???
  4340.     AL = 0Fh ???
  4341.     AL = 10h ???
  4342. SeeAlso: #2298,#2300
  4343.  
  4344. (Table 2300)
  4345. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  4346.     AL = 04h  purge FASTOPEN cache
  4347.         AH = 03h
  4348.         ???
  4349.     AL = 05h ???
  4350.         DL = drive (00h = A:)
  4351.         ???
  4352.     AL = 06h ???
  4353.         ???
  4354. SeeAlso: #2298,#2299
  4355. --------D-2F122B-----------------------------
  4356. INT 2F U - DOS 3.3+ internal - IOCTL
  4357.     AX = 122Bh
  4358.     BP = 44xxh
  4359.     SS = DOS DS (must be using a DOS internal stack)
  4360.     additional registers as appropriate for INT 21/AX=44xxh
  4361. Return: as for INT 21/AH=44h
  4362. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  4363.       a DOS function call
  4364.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4365.       IOCTL, and restores frame pointer
  4366.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  4367. SeeAlso: INT 21/AH=44h
  4368. --------D-2F122C-----------------------------
  4369. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  4370.     AX = 122Ch
  4371. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  4372. Note:    although this function exists in DR DOS 5.0 and Novell DOS 7, it
  4373.       always returns 0000h:0000h prior to Novell DOS 7 Update 15
  4374. SeeAlso: INT 21/AH=52h
  4375. --------D-2F122D-----------------------------
  4376. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  4377.     AX = 122Dh
  4378.     SS = DOS DS
  4379. Return: AX = current extended error code
  4380. SeeAlso: AX=1222h,INT 21/AH=59h/BX=0000h
  4381. --------D-2F122E-----------------------------
  4382. INT 2F U - DOS 4.0+ internal - GET OR SET ERROR TABLE ADDRESSES
  4383.     AX = 122Eh
  4384.     DL = subfunction
  4385.         00h get standard DOS error table (see #2301)
  4386.         Return: ES:DI -> error table
  4387.                  (DOS 4: errors 00h-12h,50h-5Bh)
  4388.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  4389.         01h set standard DOS error table
  4390.         ES:DI -> error table
  4391.         02h get parameter error table (errors 00h-0Ah)
  4392.         Return: ES:DI -> error table
  4393.         03h set parameter error table
  4394.         ES:DI -> error table
  4395.         04h get critical/SHARE error table (errors 13h-2Bh)
  4396.         Return: ES:DI -> error table
  4397.         05h set critical/SHARE error table
  4398.         ES:DI -> error table
  4399.         06h get ??? error table
  4400.         Return: ES:DI -> error table or 0000h:0000h
  4401.         07h set ??? error table
  4402.         ES:DI -> error table
  4403.         08h get error message retriever (see #2302)
  4404.         Return: ES:DI -> FAR procedure to fetch error message
  4405.         09h set ??? error table
  4406.         ES:DI -> error table
  4407. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  4408.       the offset of the error message table within COMMAND.COM, and the
  4409.       procedure returned by DL=08h should be called
  4410.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  4411.       with DL odd are ignored); they are always returned with segment 0001h
  4412.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  4413.       into a single error table
  4414. SeeAlso: AX=0500h,INT 21/AH=59h/BX=0000h
  4415.  
  4416. Format of DOS 4.x error table:
  4417. Offset    Size    Description    (Table 2301)
  4418.  00h    BYTE    FFh
  4419.  01h  2 BYTEs    04h,00h (DOS version???)
  4420.  03h    BYTE    number of error headers following
  4421.  04h 2N WORDs    table of all error headers for table
  4422.         Offset    Size    Description
  4423.          00h    WORD    error message number
  4424.          02h    WORD    offset of error message from start of header
  4425.                 error messages are count byte followed by msg
  4426. Note:    DOS 5 error tables consist of one word per error number; each word
  4427.       contains either the offset of a counted string or 0000h
  4428.  
  4429. (Table 2302)
  4430. Call error retrieval function with:
  4431.     AX = error number (see #2303)
  4432.     DI = offset of error table
  4433. Return: ES:DI -> error message (counted string)
  4434. Notes:    this function needs to access COMMAND.COM if the messages were not
  4435.       loaded into memory permanently with /MSG; the caller should assume
  4436.       that the returned message will be overwritten by the next call of
  4437.       the function
  4438.     supported by DR DOS 5.0
  4439.  
  4440. (Table 2303)
  4441. Values for parameter errors:
  4442.  01h    Too many parameters
  4443.  02h    Required Parameter missing
  4444.  03h    Invalid switch
  4445.  04h    Invalid keyword
  4446.  06h    Parameter value not in allowed range
  4447.  07h    Parameter value not allowed
  4448.  08h    Parameter value not allowed
  4449.  09h    Parameter format not correct
  4450.  0Ah    Invalid parameter
  4451.  0Bh    Invalid parameter combination
  4452. --------D-2F122F-----------------------------
  4453. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  4454.     AX = 122Fh
  4455.     DX = DOS version number (0000h = return true DOS version)
  4456. Notes:    not available under DR DOS 5.0 or 6.0, or Novell DOS 7
  4457.     supported by FREEVER.COM, a freeware DOS version faking TSR by Matthias
  4458.       Paul
  4459. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h,INT 2F/AX=E000h"SETDRVER"
  4460. ----------2F1230-----------------------------
  4461. INT 2F U - Windows95 - FIND SFT ENTRY IN INTERNAL FILE TABLES
  4462.     AX = 1230h
  4463.     ES:DI -> SFT entry
  4464. Return: CF clear if SFT found in internal table
  4465.     CF set if SFT not in any internal file table
  4466.         AX = 0000h
  4467.         SI:CX = 32-bit starting cluster number for directory
  4468.         DX = directory entry number
  4469.         BX = index into new file system table
  4470. Note:    the new file system table from which the return values are taken is
  4471.       reported to be statically allocated with 20 entries, and used only
  4472.       for FCB calls
  4473. BUG:    Win95-OSR2 is reported to have a bug that can potentially corrupt
  4474.       memory if SFT tables are "arranged poorly"
  4475. SeeAlso: AX=1231h,AX=1200h
  4476. ----------2F1231-----------------------------
  4477. INT 2F U - Windows95 - SET/CLEAR "REPORT WINDOWS TO DOS PROGRAMS" FLAG
  4478.     AX = 1231h
  4479.     DL = function
  4480.         00h clear "IsWIN386" bit 1
  4481.         01h set "IsWIN386" bit 1
  4482.         02h set byte after "IsWIN386" to 01h
  4483.         else
  4484.             Return:    CF set
  4485.             AX = 0001h
  4486. Return: CF clear
  4487.     AX = 0000h
  4488. SeeAlso: AX=1230h,AX=1200h
  4489. --------O-2F12FFBL00-------------------------
  4490. INT 2F - FreeDOS - FDAK-DDT - INSTALLATION CHECK / STATUS CHECK
  4491.     AX = 12FFh
  4492.     BL = 00h
  4493. Return: AL = DDh if installed
  4494.         BH = state (00h disabled, nonzero enabled)
  4495.         BL = readonly flag (00h writable, nonzero read-only)
  4496. Program: FDAK-DDT is the FreeDOS Alternative Kernel Device Drivers Testing
  4497.       release by Yury A. Semenov
  4498. SeeAlso: AX=12FFh/BL=07h
  4499. --------O-2F12FFBL01-------------------------
  4500. INT 2F - FreeDOS - FDAK-DDT - ENABLE FDAK DRIVERS
  4501.     AX = 12FFh
  4502.     BL = 01h
  4503. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=02h
  4504. --------O-2F12FFBL02-------------------------
  4505. INT 2F - FreeDOS - FDAK-DDT - DISABLE FDAK DRIVERS
  4506.     AX = 12FFh
  4507.     BL = 02h
  4508. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=01h
  4509. --------O-2F12FFBL03-------------------------
  4510. INT 2F - FreeDOS - FDAK-DDT - SWITCH BLOCK DEVICE TO READ-ONLY
  4511.     AX = 12FFh
  4512.     BL = 03h
  4513.     ???
  4514. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=04h
  4515. --------O-2F12FFBL04-------------------------
  4516. INT 2F - FreeDOS - FDAK-DDT - SWITCH BLOCK DEVICE TO READ-WRITE
  4517.     AX = 12FFh
  4518.     BL = 04h
  4519.     ???
  4520. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=03h
  4521. --------O-2F12FFBL05-------------------------
  4522. INT 2F - FreeDOS - FDAK-DDT - TURN ACTIVITY INDICATOR ON
  4523.     AX = 12FFh
  4524.     BL = 05h
  4525. Note:    not yet implemented as of January 1996
  4526. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=06h
  4527. --------O-2F12FFBL06-------------------------
  4528. INT 2F - FreeDOS - FDAK-DDT - TURN ACTIVITY INDICATOR OFF
  4529.     AX = 12FFh
  4530.     BL = 06h
  4531. Note:    not yet implemented as of January 1996
  4532. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=05h
  4533. --------O-2F12FFBL07-------------------------
  4534. INT 2F - FreeDOS - FDAK-DDT - UNINSTALL
  4535.     AX = 12FFh
  4536.     BL = 07h
  4537. Return: ES = segment of FDAK memory block
  4538. Note:    the caller must free the memory block returned in ES
  4539.       (via INT 21/AH=49h)
  4540. SeeAlso: AX=12FFh/BL=00h
  4541. --------O-2F12FFBX0005-----------------------
  4542. INT 2F U - Novell DOS 7 - GET/SET/QUERY MEMORY STATE???
  4543.     AX = 12FFh
  4544.     BX = 0005h
  4545.     CX = 0000h
  4546.     DX = function
  4547.         0000h ???
  4548.         0001h ???
  4549. Note:    called at three separate points inside IBMBIO.COM
  4550. --------m-2F12FFBX0006-----------------------
  4551. INT 2F U - DR DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  4552.     AX = 12FFh
  4553.     BX = 0006h
  4554.     DX = 0000h
  4555.     CX = function
  4556.         0000h get status of video memory space (MEMMAX /V)
  4557.         0001h map memory into video memory space (MEMMAX +V)
  4558.         0002h unmap memory from video memory space (MEMMAX -V)
  4559. Return: CF clear if successful
  4560.         AX = 0000h (successful)
  4561.         BX = segment of reserved video RAM
  4562.         CX = segment of used video RAM
  4563.         DX = segment of first upper MCB
  4564. Notes:    this functionality is provided by EMM386, and partially supported by
  4565.       HIDOS.SYS
  4566.     BL specifies which program handles the call, BH is the function number
  4567. BUG:    4DOS 5.51(a) often hangs the system (reported to be reproducable), if
  4568.       MEMMAX +V is issued from the 4DOS prompt.  To avoid this, one should
  4569.       temporary load COMMAND.COM followed by MEMMAX +v , starting the
  4570.       application, MEMMAX -v and EXIT.  4DOS 5.5c does not show this
  4571.       phenomena on the same systems where 5.51a hangs.
  4572. SeeAlso: AX=D201h/BX=4849h
  4573. --------O-2F12FFBX0000-----------------------
  4574. INT 2F U - Novell DOS 7 - GET ???
  4575.     AX = 12FFh
  4576.     BX = 0000h
  4577. Return: AX = 0000h if supported
  4578.     DX = ??? (internal data)
  4579. SeeAlso: AX=12FFh/BX=0001h
  4580. --------O-2F12FFBX0001-----------------------
  4581. INT 2F U - Novell DOS 7 - SET ???
  4582.     AX = 12FFh
  4583.     BX = 0001h
  4584.     DX = new value for ???
  4585. Return: AX = 0000h if supported
  4586. SeeAlso: AX=12FFh/BX=0000h
  4587. --------O-2F12FFBX0002-----------------------
  4588. INT 2F U - Novell DOS 7 - GET ??? SIZE
  4589.     AX = 12FFh
  4590.     BX = 0002h
  4591. Return: AX = 0000h if supported
  4592.     DX = size of/required-for ??? in paragraphs
  4593. SeeAlso: AX=12FFh/BX=0003h
  4594. --------O-2F12FFBX0003-----------------------
  4595. INT 2F U - Novell DOS 7 - SET ???
  4596.     AX = 12FFh
  4597.     BX = 0003h
  4598.     DX = new value for ???
  4599. Return: AX = 0000h if supported
  4600. SeeAlso: AX=12FFh/BX=0002h
  4601. --------O-2F12FFBX0007-----------------------
  4602. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  4603.     AX = 12FFh
  4604.     BX = 0007h
  4605.     CX = 0000h
  4606. Return: CF clear if installed
  4607.         AX = 0000h
  4608.         BX = ??? (4426h)
  4609.         CX = ??? (0068h)
  4610.         DX = PSP segment of resident code???
  4611.         SI = ??? (4AFAh)
  4612.         ES = resident code segment
  4613. --------O-2F12FFBX0009-----------------------
  4614. INT 2F U - Novell DOS 7 - SET ???
  4615.     AX = 12FFh
  4616.     BX = 0009h
  4617.     DX = new value for ???
  4618. Return: ???
  4619. Note:    the DX value is stored at offset 66h in SYSVARS and offset 18h in
  4620.       the Novell DOS 7 internal variable table
  4621. --------m-2F12FFBX0106-----------------------
  4622. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  4623.     AX = 12FFh
  4624.     BX = 0106h
  4625. Return: CF clear if successful
  4626.         AX = 0000h (successful)
  4627.         BX = EDC0h (signature)
  4628.         CL = memory manager variant (02h,03h)
  4629.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  4630.         CH = ??? (00h)
  4631.         DX = version??? (0300h for v3.0)
  4632.         ES = segment of EMM386 low-memory stub
  4633. Notes:    BL specifies which program handles the call, BH is the function number
  4634.     if the word at ES:0012h is nonzero, if contains the offset within
  4635.       segment ES of the CEMM-compatible entry point (see #2304)
  4636.     if no other program has hooked INT 67, an alternate installation
  4637.       check is to test for the string
  4638.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  4639.       handler's segment; the word immediately preceding this string
  4640.       contains the offset of the API entry point if it is nonzero
  4641. Index:    entry point;Novell EMM386
  4642.  
  4643. (Table 2304)
  4644. Call Novell EMM386.EXE entry point with:
  4645.     AH = 00h get memory manager's status???
  4646.         ???
  4647.     AH = 01h set memory manager's status???
  4648.         ???
  4649.     AH = 02h Weitek coprocessor support???
  4650.         AL = subfunction???
  4651.     more functions???
  4652. SeeAlso: #1200 at INT 21/AX=4402h/SF=02h,#3337 at INT 67/AX=FFA5h
  4653. --------m-2F12FFBL06-------------------------
  4654. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  4655.     AX = 12FFh
  4656.     BL = 06h
  4657.     BH = function (02h-09h)
  4658.     ???
  4659. Return: ???
  4660. --------O-2F12FFBX0EDC-----------------------
  4661. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  4662.     AX = 12FFh
  4663.     BX = 0EDCh ('EDC' = Novell European Development Center)
  4664. Return: AX = 0000h if ??? loaded
  4665.         CF clear
  4666.         BX = 0000h
  4667. Notes:    called by Novell DOS 7 TaskMgr
  4668.     if this function returns with AX=0000h, then the code necessary to
  4669.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  4670.       available for use
  4671.     because the request is handled on the initial trap to the memory
  4672.       manager caused by INT instructions, this function must be invoked
  4673.       with an actual INT 2F instruction instead of some simulation such
  4674.       as a far call to the address in the interrupt vector table
  4675. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  4676. --------D-2F13-------------------------------
  4677. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  4678.     AH = 13h
  4679.     DS:DX -> interrupt handler disk driver calls on read/write
  4680.     ES:BX = address to restore INT 13 to on system halt (exit from root
  4681.          shell) or warm boot (INT 19)
  4682. Return: DS:DX set by previous invocation of this function
  4683.     ES:BX set by previous invocation of this function
  4684. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  4685.       original INT 13 handler.  The first is for disk change detection
  4686.       on floppy drives, the second is for tracking formatting calls and
  4687.       correcting DMA boundary errors, the third is for working around
  4688.       problems in a particular version of IBM's ROM BIOS
  4689.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  4690.       also points there unless IO.SYS has installed a special filter for
  4691.       hard disk reads (on systems with model byte FCh and BIOS date
  4692.       "01/10/84" only), in which case it points at the special filter
  4693.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  4694.       functions are still invoked via an INT 13 instruction
  4695.     this is a dangerous security loophole for any virus-monitoring software
  4696.       which does not trap this call ("INT13", "Nomenklatura", and many
  4697.       Bulgarian viruses are known to use it to get the original ROM entry
  4698.       point)
  4699. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  4700. --------N-2F13-------------------------------
  4701. INT 2F U - MS-NET - ???
  4702.     AH = 13h
  4703.     ???
  4704. Return: ???
  4705. Note:    supposedly used to move (or control the movement of) NCBs
  4706. --------U-2F1400-----------------------------
  4707. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  4708.     AX = 1400h
  4709. Return: AL = 00h not installed, OK to install
  4710.          01h not installed, not OK
  4711.          FFh installed
  4712. Notes:    this function is called by the DOS v3.3+ kernel
  4713.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  4714.     supported by DR DOS 5.0
  4715.     documented for MS-DOS 5+, but undocumented in prior versions
  4716. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  4717. --------D-2F1400-----------------------------
  4718. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  4719.     AX = 1400h
  4720. Return: AX = FFFFh if installed
  4721.         BX = maximum memory required to save screen and keyboard info
  4722.     CF clear if successful
  4723.     CF set on error
  4724.         AX = error code
  4725.         0002h invalid function
  4726.         0004h unknown error
  4727. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  4728.       to communicate with the user
  4729. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  4730. --------U-2F1401-----------------------------
  4731. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  4732.     AX = 1401h
  4733.     DS:SI -> internal code page structure (see #2305)
  4734.     BX = new code page (see #1446 at INT 21/AX=6602h)
  4735.     DX = country code???
  4736. Return: AL = status
  4737.          00h successful
  4738.          else DOS error code
  4739. Note:    this function is called by the DOS v3.3+ kernel
  4740. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  4741.  
  4742. Format of DOS 3.30 internal code page structure:
  4743. Offset    Size    Description    (Table 2305)
  4744.  00h  8 BYTEs    ???
  4745.  08h 64 BYTEs    name of country information file (see #2306)
  4746.  48h    WORD    system code page (see #1446 at INT 21/AX=6602h)
  4747.  4Ah    WORD    number of supported subfunctions
  4748.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  4749.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  4750.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  4751.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  4752.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  4753.  
  4754. Format of MS-DOS/PC-DOS/OS2/WinNT/PTS-DOS COUNTRY.SYS file:
  4755. Offset    Size    Description    (Table 2306)
  4756.  00h    BYTE    ID tag (FFh)
  4757.  01h  7 BYTEs    ASCII "COUNTRY"
  4758.  08h  8 BYTEs    ??? (00h)
  4759.  10h    BYTE    ??? (01h)
  4760.  11h    BYTE    ??? (00h)
  4761.  12h    BYTE    ??? (01h)
  4762.  13h    DWORD    offset of first entry in file (see #2307)
  4763. SeeAlso: #2310
  4764.  
  4765. Format of MS-DOS/PC-DOS/OS2/WinNT/PTS-DOS COUNTRY.SYS entry:
  4766. Offset    Size    Description    (Table 2307)
  4767.  00h    WORD    number of country-codepage entries following
  4768.  02h        N Country-Codepage entries:
  4769.         Offset    Size    Description
  4770.          00h    WORD    length of entry, not counting this word (000Ch)
  4771.          02h    WORD    country ID
  4772.          04h    WORD    codepage ID
  4773.          06h    WORD    ??? (0000h)
  4774.          08h    WORD    ??? (0000h)
  4775.          0Ah    DWORD    offset of country-subfunction-header in file
  4776.                   (see #2308)
  4777. Notes:    multiple codepages for a country are stored consecutively
  4778.     PTS/DOS places a copyright string immediately following this structure,
  4779.       though a copyright at the end of the file is preferable
  4780. SeeAlso: #2306
  4781.  
  4782. Format of MS-DOS/PC-DOS/OS2/WinNT/PTS-DOS COUNTRY.SYS country-subfunc header:
  4783. Offset    Size    Description    (Table 2308)
  4784.  00h    WORD    number of subfunction entries following
  4785.  02h        N subfunction entries
  4786.         Offset    Size    Description
  4787.          00h    WORD    length of subfunction entry, not counting this
  4788.                   word (usually 06h)
  4789.          02h    WORD    subfunction ID
  4790.                 (value passed to INT 21/AH=65h in AL)
  4791.          04h    DWORD    offset within file of subfunction data entry
  4792.                   (see #2309)
  4793. SeeAlso: #2307
  4794.  
  4795. Format of MS-DOS/PC-DOS/OS2/WinNT/PTS-DOS COUNTRY.SYS country-subfunc data::
  4796. Offset    Size    Description    (Table 2309)
  4797.  00h    BYTE    ID-tag (FFh)
  4798.  01h  7 BYTEs    table-type signature (blank-padded)
  4799.         "CTYINFO"    general country info (subfn 01h)
  4800.         "UCASE    "    uppercase table (subfn 02h)
  4801.         "LCASE    "    lowercase table (subfn 03h) (DOS 6.2_)
  4802.         "FUCASE "    filename uppercase table (subfn 04h)
  4803.         "FCHAR    "    filename terminator table (subfn 05h)
  4804.         "COLLATE"    collating sequence (subfn 06h)
  4805.         "DBCS    "    double-byte character table (subfn 07h)
  4806.  08h    WORD    length of following table in bytes
  4807.         (if 0000h for DBCS table, there will still be a word of 0000h)
  4808. ---country info (01h)---
  4809.  0Ah    WORD    country ID (see #1088 at AH=38h)
  4810.  0Ch    WORD    code page (see #1446)
  4811.  0Eh 34 BYTEs    country-dependent info (see #1087 at AH=38h)
  4812. ---uppercase table (02h)---
  4813.  0Ah 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  4814. ---lowercase table (03h)---
  4815.  0Ah 256 BYTEs    lowercase equivalents (if any) of chars 00h to FFh
  4816. ---filename uppercase table (04h)---
  4817.  0Ah 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  4818. ---filename terminator table (05h)---
  4819.  0Ah    BYTE    ??? (01h for MS-DOS 3.30-6.00)
  4820.  0Bh    BYTE    lowest permissible character value for filename
  4821.  0Ch    BYTE    highest permissible character value for filename
  4822.  0Dh    BYTE    ??? (00h for MS-DOS 3.30-6.00)
  4823.  0Eh    BYTE    first excluded character in range \ all characters in this
  4824.  0Fh    BYTE    last excluded character in range  / range are illegal
  4825.  10h    BYTE    ??? (02h for MS-DOS 3.30-6.00)
  4826.  11h    BYTE    number of illegal (terminator) characters
  4827.  12h  N BYTEs    characters which terminate a filename:    ."/\[]:|<>+=;,
  4828. ---collating sequence (06h)---
  4829.  0Ah 256 BYTEs    values used to sort characters 00h to FFh
  4830. ---DBCS table (07h)---
  4831.  0Ah 2N BYTEs    start/end for N lead byte ranges
  4832.     WORD    0000h    (end of table)
  4833. SeeAlso: #2308,#1439,#1440,#1442,#1443,#1444,#1445
  4834.  
  4835. Format of DR DOS/Novell DOS/OpenDOS COUNTRY.SYS file:
  4836. Offset    Size    Description    (Table 2310)
  4837.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z; NUL-padded)
  4838.         the copyright notice starts with the signature
  4839.         "COUNTRY.SYS Rx.xx" where "x.xx" indicates the file format
  4840.         revision, which is checked by the OS (revision is 2.00 for
  4841.         DR DOS 3.41 and 2.01 for all newer versions of DR DOS,
  4842.         Novell DOS, and OpenDOS)
  4843.  7Eh    WORD    signature of file format revision
  4844.         0EDCh = 2.00 (DR DOS 3.41)
  4845.         EDC1h = 2.01 (all newer versions)
  4846.  80h    var    country pointer records (see #2311)
  4847.         (packed array of variable-size records)
  4848. SeeAlso: #2306
  4849.  
  4850. Format of DR DOS/Novell DOS/OpenDOS COUNTRY.SYS country pointer record::
  4851. Offset    Size    Description    (Table 2311)
  4852.  00h    WORD    country code (0000h if end of array)
  4853.  02h    WORD    code page (see #1446)
  4854.  04h    WORD    ??? (0000h)
  4855.  06h  7    WORDs    offsets in file for INT 21/AH=65h subfunctions 01h to 07h, or
  4856.           0000h if no table for that subfunction
  4857.  14h    var    country information
  4858. Notes:    the end-of-file marker is a country pointer record filled entirely with
  4859.       zeros
  4860.     the data at which the pointers point is in the same format as the
  4861.       tables returned by INT 21/AH=65h, except that the general-info
  4862.       table for subfunction 01h does not contain the length word at the
  4863.       beginning
  4864. SeeAlso: #2310
  4865. --------D-2F1401-----------------------------
  4866. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  4867.     AX = 1401h
  4868.     DL = function (00h open, 01h close)
  4869.     DH = wait flag
  4870.         00h block until screen opens
  4871.         01h return error if screen is not available
  4872.         02h urgent--always open screen immediately
  4873. Return: CF clear if successful
  4874.         BX = amount of memory needed to save screen and keyboard info,
  4875.         0000h if default save location can be used (only if DH was 02h)
  4876.     CF set on error
  4877. Note:    the application using the screen is frozen until the popup screen is
  4878.       closed
  4879. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  4880. --------U-2F1402-----------------------------
  4881. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  4882.     AX = 1402h
  4883.     BP = subfunction (same as AL for INT 21/AH=65h)
  4884.     BX = code page (see #1446 at INT 21/AX=6602h)
  4885.     DX = country code (see #1088 at INT 21/AH=38h)
  4886.     DS:SI -> internal code page structure (see #2305)
  4887.     ES:DI -> user buffer
  4888.     CX = size of user buffer
  4889. Return: AL = status
  4890.         00h successful
  4891.         else DOS error code
  4892. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  4893.     code page structure apparently only needed for COUNTRY.SYS pathname
  4894. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  4895. --------D-2F1402-----------------------------
  4896. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  4897.     AX = 1402h
  4898.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  4899. Return: CF clear if successful
  4900.     CF set on error
  4901.         AX = error code (see #2312)
  4902. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  4903.  
  4904. (Table 2312)
  4905. Values for POPUP error code:
  4906.  0001h    process does not own screen
  4907.  0004h    unknown error
  4908.  0005h    invalid pointer
  4909. --------U-2F1403-----------------------------
  4910. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  4911.     AX = 1403h
  4912.     DS:SI -> internal code page structure (see #2305)
  4913.     BX = code page (see #1446 at INT 21/AX=6602h)
  4914.     DX = country code (see #1088 at INT 21/AH=38h)
  4915. Return: AL = status
  4916.          ???
  4917. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  4918. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  4919. --------D-2F1403-----------------------------
  4920. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  4921.     AX = 1403h
  4922.     ES:DI -> buffer containing saved screen
  4923.         (0000h:0000h for default buffer in POPUP)
  4924. Return: CF clear if successful
  4925.     CF set on error
  4926.         AX = error code (see #2312)
  4927. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  4928. --------U-2F1404-----------------------------
  4929. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  4930.     AX = 1404h
  4931.     BX = code page (see #1446 at INT 21/AX=6602h)
  4932.     DX = country code (see #1088 at INT 21/AH=38h)
  4933.     DS:SI -> internal code page structure (see #2305)
  4934.     ES:DI -> user buffer
  4935. Return: AL = status
  4936.          ???
  4937. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  4938.     code page structure apparently only needed for COUNTRY.SYS pathname
  4939. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  4940. --------U-2F14FE-----------------------------
  4941. INT 2F U - DR DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  4942.     AX = 14FEh
  4943.     BX = code page (FFFFh=global code page) (see #1446 at INT 21/AX=6602h)
  4944.     DX = country ID (FFFFh=current country) (see #1088 at INT 21/AH=38h)
  4945.     ES:DI -> country information buffer
  4946.     CL = info ID
  4947.         01h get general internationalization info
  4948.         02h get pointer to uppercase table
  4949.         04h get pointer to filename uppercase table
  4950.         05h get pointer to filename terminator table
  4951.         06h get pointer to collating sequence table
  4952.         07h get pointer to Double-Byte Character Set table
  4953.     CF set (used to return error if not installed)
  4954. Return: CF clear if successful
  4955.         DS:SI -> requested information
  4956.     CF set on error
  4957. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  4958.       or FFh on entry.
  4959.     the DR DOS kernel calls this function on INT 21/AX=6501h
  4960.     the value in CL is not range-checked by the DR DOS 5.0 NLSFUNC
  4961. SeeAlso: #2313,AX=14FFh,INT 21/AH=65h
  4962.  
  4963. Format of DR DOS COUNTRY.SYS file:
  4964. Offset    Size    Description    (Table 2313)
  4965.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  4966.  7Eh    WORD    signature EDC1h
  4967.  80h    var    country pointer records
  4968.     Offset    Size    Description
  4969.      00h    WORD    country code (0000h if end of array)
  4970.      02h    WORD    code page (see #1446 at INT 21/AX=6602h)
  4971.      04h    WORD    ??? (0000h)
  4972.      06h  7 WORDs    offsets in file for data tables for subfunctions
  4973.               01h-07h
  4974.  var    var    country information
  4975. --------U-2F14FF-----------------------------
  4976. INT 2F U - DR DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  4977.     AX = 14FFh
  4978.     BX = code page (see #1446 at INT 21/AX=6602h)
  4979. Return: AX = ???
  4980.     ZF set if AX=0000h
  4981. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  4982.       or FFh on entry.
  4983.     passes codepage preparation request to each character device supporting
  4984.       the generic IOCTL call
  4985. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  4986. --------U-2F1500-----------------------------
  4987. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  4988.     AX = 1500h
  4989. Return: AX = FFFFh
  4990.     ES:DI -> ??? (graphics data?)
  4991. Note:    this installation check conflicts with the CD-ROM Extensions
  4992.       installation check; moved to AX=AC00h in later versions
  4993. SeeAlso: AX=AC00h
  4994. --------d-2F1500BX0000-----------------------
  4995. INT 2F - CD-ROM - INSTALLATION CHECK
  4996.     AX = 1500h
  4997.     BX = 0000h
  4998. Return: BX = number of CD-ROM drive letters used
  4999.     CX = starting drive letter (0=A:)
  5000.     AX = 15FFh (Novell DOS 7 NWCDEX only!)
  5001. Notes:    this installation check DOES NOT follow the format used by other
  5002.       software
  5003.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  5004.       installation check
  5005. BUG:    this function may return an incorrect starting drive letter when
  5006.       INTERLNK is installed
  5007. SeeAlso: AX=150Ch,AX=15FFh,INT 2F/AX=D000h"Lotus"
  5008. --------c-2F1500CH90-------------------------
  5009. INT 2F U - CDBLITZ v2.11 - INSTALLATION CHECK
  5010.     AX = 1500h
  5011.     CH = 90h (function number)
  5012.     BX = 1234h (magic value for CDBLITZ)
  5013. Return: CX = 1234h if installed
  5014.         CF clear
  5015.         DX = BCD version number (DH = major, DL = minor)
  5016. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5017. SeeAlso: AX=1500h/CH=99h
  5018. --------c-2F1500CH91-------------------------
  5019. INT 2F U - CDBLITZ v2.11 - GET STATISTICS
  5020.     AX = 1500h
  5021.     CH = 91h (function number)
  5022.     BX = 1234h (magic value for CDBLITZ)
  5023. Return: CF clear
  5024.     ES:BX -> statistics record (see #2314)
  5025. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=97h
  5026.  
  5027. Format of CDBLITZ statistics record:
  5028. Offset    Size    Description    (Table 2314)
  5029.  00h    WORD    cache mode (see also AX=1500h/CH=94h)
  5030.         0001h 'min', 0002h 'max'
  5031.  02h    DWORD    number of read calls???
  5032.  06h    DWORD    total number of sectors read
  5033.  0Ah    DWORD    unused??? (zero)
  5034.  0Eh    DWORD    number of cache hit sectors
  5035.  12h    WORD    cache size in KB
  5036.  14h    WORD    unused??? (zero)
  5037.  16h    WORD    cache state (0000h disabled, 0001h enabled)
  5038. --------c-2F1500CH92-------------------------
  5039. INT 2F U - CDBLITZ v2.11 - ENABLE CACHE
  5040.     AX = 1500h
  5041.     CH = 92h (function number)
  5042.     BX = 1234h (magic value for CDBLITZ)
  5043. Return: CF clear
  5044. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=93h,AX=1500h/CH=94h
  5045. --------c-2F1500CH93-------------------------
  5046. INT 2F U - CDBLITZ v2.11 - DISABLE CACHE
  5047.     AX = 1500h
  5048.     CH = 93h (function number)
  5049.     BX = 1234h (magic value for CDBLITZ)
  5050. Return: CF clear
  5051. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5052. --------c-2F1500CH94-------------------------
  5053. INT 2F U - CDBLITZ v2.11 - SET 'MAX' MODE (CACHE BOTH DIRECTORIES AND DATA)
  5054.     AX = 1500h
  5055.     CH = 94h (function number)
  5056.     BX = 1234h (magic value for CDBLITZ)
  5057. Return: CF clear
  5058. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5059. --------c-2F1500CH95-------------------------
  5060. INT 2F U - CDBLITZ v2.11 - SET 'MIN' MODE (CACHE ONLY DIRECTORY ENTRIES)
  5061.     AX = 1500h
  5062.     CH = 95h (function number)
  5063.     BX = 1234h (magic value for CDBLITZ)
  5064. Return: CF clear
  5065. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=94h
  5066. --------c-2F1500CH96-------------------------
  5067. INT 2F U - CDBLITZ v2.11 - FLUSH CACHE
  5068.     AX = 1500h
  5069.     CH = 96h (function number)
  5070.     BX = 1234h (magic value for CDBLITZ)
  5071. Return: CF clear
  5072. Note:    this function resets the counts for number of sectors read and number
  5073.       of cache hits, but no other values in the statistics record
  5074.       (see #2314)
  5075. SeeAlso: AX=1500h/CH=90h
  5076. --------c-2F1500CH97-------------------------
  5077. INT 2F U - CDBLITZ v2.11 - GET CACHE STATISTICS
  5078.     AX = 1500h
  5079.     CH = 97h (function number)
  5080.     BX = 1234h (magic value for CDBLITZ)
  5081. Return: CF clear
  5082.     AL = cache mode (01h 'min', 02h 'max') (see also AX=1500h/CH=94h)
  5083.     AH = cache state (00h disabled, 01h enabled)
  5084.     BX = cache size in KB
  5085.     DX:CX = total number of reads
  5086.     DI:SI = number of cache hits
  5087. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=91h
  5088. --------c-2F1500CH99-------------------------
  5089. INT 2F U - CDBLITZ v2.11 - UNINSTALL
  5090.     AX = 1500h
  5091.     CH = 99h (function number)
  5092.     BX = 1234h (magic value for CDBLITZ)
  5093. Return: CF clear
  5094.     ???
  5095. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5096. SeeAlso: AX=1500h/CH=90h
  5097. --------d-2F1501-----------------------------
  5098. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  5099.     AX = 1501h
  5100.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  5101. Return: buffer filled, for each drive letter
  5102.       BYTE    subunit number in driver
  5103.       DWORD address of device driver header (see #1332)
  5104. Note:    reportedly returns AX=0000h and an invalid address under Windows95;
  5105.       other reports say it works fine
  5106. SeeAlso: AX=1510h
  5107. --------d-2F1502-----------------------------
  5108. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  5109.     AX = 1502h
  5110.     ES:BX -> 38-byte buffer for name of copyright file
  5111.     CX = drive number (0=A:)
  5112. Return: CF set if drive is not a CD-ROM drive
  5113.         AX = 000Fh (invalid drive)
  5114.     CF clear if successful
  5115. SeeAlso: AX=1503h
  5116. --------d-2F1503-----------------------------
  5117. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  5118.     AX = 1503h
  5119.     ES:BX -> 38-byte buffer for name of abstract file
  5120.     CX = drive number (0=A:)
  5121. Return: CF set if drive is not a CD-ROM drive
  5122.         AX = 000Fh (invalid drive)
  5123.     CF clear if successful
  5124. SeeAlso: AX=1502h,AX=1504h
  5125. --------d-2F1504-----------------------------
  5126. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  5127.     AX = 1504h
  5128.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  5129.     CX = drive number (0=A:)
  5130. Return: CF set if drive is not a CD-ROM drive
  5131.         AX = 000Fh (invalid drive)
  5132.     CF clear if successful
  5133. SeeAlso: AX=1502h,AX=1503h
  5134. --------d-2F1505-----------------------------
  5135. INT 2F - CD-ROM - READ VTOC
  5136.     AX = 1505h
  5137.     ES:BX -> 2048-byte buffer
  5138.     CX = drive number (0=A:)
  5139.     DX = sector index (0=first volume descriptor,1=second,...)
  5140. Return: CF set on error
  5141.         AX = error code (15=invalid drive,21=not ready)
  5142.     CF clear if successful
  5143.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  5144. Note:    This function was not supported by Novell DOS 7 NWCDEX prior to the
  5145.       08/16/94 update
  5146. --------d-2F1506-----------------------------
  5147. INT 2F - CD-ROM - TURN DEBUGGING ON
  5148.     AX = 1506h
  5149.     BX = debugging function to enable
  5150. Note:    reserved for development
  5151. SeeAlso: AX=1507h
  5152. --------d-2F1507-----------------------------
  5153. INT 2F - CD-ROM - TURN DEBUGGING OFF
  5154.     AX = 1507h
  5155.     BX = debugging function to disable
  5156. Note:    reserved for development
  5157. SeeAlso: AX=1506h
  5158. --------d-2F1508-----------------------------
  5159. INT 2F - CD-ROM - ABSOLUTE DISK READ
  5160.     AX = 1508h
  5161.     ES:BX -> buffer
  5162.     CX = drive number (0=A:)
  5163.     SI:DI = starting sector number
  5164.     DX = number of sectors to read
  5165. Return: CF set on error
  5166.         AL = error code (0Fh invalid drive,15h not ready)
  5167.     CF clear if successful
  5168. Note:    returns error 15h (not ready) under Windows95 if the starting sector
  5169.       number is less than 10h
  5170. SeeAlso: AX=1509h
  5171. --------d-2F1509-----------------------------
  5172. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  5173.     AX = 1509h
  5174.     ES:BX -> buffer
  5175.     CX = drive number (0=A:)
  5176.     SI:DI = starting sector number
  5177.     DX = number of sectors to write
  5178. Note:    corresponds to INT 26h and is currently reserved and nonfunctional,
  5179.       but could be implemented for CD-R and CD-RW drives
  5180. SeeAlso: AX=1508h
  5181. --------d-2F150A-----------------------------
  5182. INT 2F - CD-ROM - RESERVED
  5183.     AX = 150Ah
  5184. --------d-2F150B-----------------------------
  5185. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  5186.     AX = 150Bh
  5187.     CX = drive number (0=A:)
  5188. Return: BX = ADADh if MSCDEX.EXE installed
  5189.         AX = support status
  5190.         0000h if drive not supported
  5191.         nonzero if supported
  5192. SeeAlso: AX=150Dh
  5193. --------d-2F150CBX0000-----------------------
  5194. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION (GET VERSION)
  5195.     AX = 150Ch
  5196.     BX = 0000h
  5197. Return: BH = major version
  5198.     BL = minor version
  5199. Notes:    MSCDEX.EXE versions prior to 2.00 leave BX unchanged, thus BX should
  5200.       be 0000h on entry
  5201.     Corel's CORELCDX.COM v1.01d returns 2.20, v1.12a returns 2.21
  5202.     Meridian Data's CDNETEX.EXE returns its own version number, e.g. 4.70
  5203.     J.M.A. Hall's CDEMU2.COM returns 2.10 (it is an MSCDEX emulator for
  5204.       networked CD-ROM drives)
  5205.     Windows95 returns v2.95
  5206.     Novell DOS 7 NWCDEX.EXE returns the same version number reported in
  5207.       its startup message
  5208. SeeAlso: AX=1500h"CD-ROM",AX=15FFh"CORELCDX"
  5209. --------d-2F150D-----------------------------
  5210. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  5211.     AX = 150Dh
  5212.     ES:BX -> buffer for drive letter list (1 byte per drive)
  5213. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  5214.     to the drive in the same position for function 1501h
  5215. SeeAlso: AX=150Bh
  5216. --------d-2F150E-----------------------------
  5217. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  5218.     AX = 150Eh
  5219.     BX = subfunction
  5220.         00h get preference
  5221.         DX = 0000h
  5222.         Return: DX = preference settings
  5223.         01h set preference
  5224.         DH = volume descriptor preference
  5225.             01h = primary volume descriptor
  5226.             02h = supplementary volume descriptor
  5227.         DL = supplementary volume descriptor preference
  5228.             01h = shift-Kanji
  5229.     CX = drive number (0=A:)
  5230. Return: CF set on error
  5231.         AX = error code (15=invalid drive,1=invalid function)
  5232.     CF clear if successful
  5233. --------d-2F150F-----------------------------
  5234. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  5235.     AX = 150Fh
  5236.     CL = drive number (0=A:)
  5237.     CH bit 0 = copy flag
  5238.         clear if direct copy
  5239.         set if copy to structure which removes ISO/High Sierra diffs
  5240.     ES:BX -> ASCIZ path name
  5241.     SI:DI -> buffer for directory entry (see #2315,#2316)
  5242.         must be 255 bytes for direct copy, 285 bytes for canonical
  5243. Return: CF set on error
  5244.         AX = error code
  5245.     CF clear if successful
  5246.         AX = disk format (0=High Sierra,1=ISO 9660)
  5247. Note:    this function was not supported by Novell DOS 7 NWCDEX prior to the
  5248.       08/16/94 update
  5249.  
  5250. Format of CD-ROM directory entry (direct copy):
  5251. Offset    Size    Description    (Table 2315)
  5252.  00h    BYTE    length of directory entry
  5253.  01h    BYTE    length of XAR in Logical Block Numbers
  5254.  02h    DWORD    LBN of data, Intel (little-endian) format
  5255.  06h    DWORD    LBN of data, Motorola (big-endian) format
  5256.  0Ah    DWORD    length of file, Intel format
  5257.  0Eh    DWORD    length of file, Motorola format
  5258. ---High Sierra---
  5259.  12h  6 BYTEs    date and time
  5260.  18h    BYTE    bit flags
  5261.  19h    BYTE    reserved
  5262. ---ISO 9660---
  5263.  12h  7 BYTEs    date and time
  5264.         (seventh byte is offset from GMT in 15-minute increments)
  5265.  19h    BYTE    bit flags
  5266. ---both formats---
  5267.  1Ah    BYTE    interleave size
  5268.  1Bh    BYTE    interleave skip factor
  5269.  1Ch    WORD    volume set sequence number, Intel format
  5270.  1Eh    WORD    volume set sequence number, Motorola format
  5271.  20h    BYTE    length of file name
  5272.  21h  N BYTEs    file name
  5273.     BYTE    (optional) padding if filename is odd length
  5274.       N BYTEs    system data
  5275. SeeAlso: #2316,#1041
  5276.  
  5277. Format of CD-ROM directory entry (canonicalized):
  5278. Offset    Size    Description    (Table 2316)
  5279.  00h    BYTE    length of XAR in Logical Block Numbers
  5280.  01h    DWORD    Logical Block Number of file start
  5281.  05h    WORD    size of disk in logical blocks
  5282.  07h    DWORD    file length in bytes
  5283.  0Bh  7 BYTEs    date and time
  5284.  12h    BYTE    bit flags
  5285.  13h    BYTE    interleave size
  5286.  14h    BYTE    interleave skip factor
  5287.  15h    WORD    volume set sequence number
  5288.  17h    BYTE    length of file name
  5289.  18h 38 BYTEs    ASCIZ filename
  5290.  3Eh    WORD    file version number
  5291.  40h    BYTE    number of bytes of system use data
  5292.  41h 220 BYTEs    system use data
  5293. SeeAlso: #2315
  5294. --------d-2F1510-----------------------------
  5295. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  5296.     AX = 1510h
  5297.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  5298.     ES:BX -> CD-ROM device driver request header (see #2284 at AX=0802h)
  5299. Return: CF clear if device driver has been called (check the request header's
  5300.           status word to determine whether an error has occurred)
  5301.         ES:BX request header updated
  5302.     CF set if device driver has not been called
  5303.         AX = error code (000Fh = invalid drive, 0001h = invalid function)
  5304.         ES:BX request header unchanged
  5305. Notes:    MSCDEX initializes the device driver request header's subunit field
  5306.       based on the drive number specified in CX
  5307.     MSCDEX v2.21 through v2.25 (at least) return error code AX=0001h if
  5308.       nested calls are attempted
  5309. BUGS:    Novell DOS 7 NWCDEX prior to the 12/13/94 update did not initialize
  5310.       the subunit field
  5311.     Windows95 sets CF if CX isn't a CD-ROM drive but leaves CF unchanged
  5312.       if the drive is in fact a CD-ROM
  5313. SeeAlso: AX=0802h
  5314. --------d-2F15FFBX0000-----------------------
  5315. INT 2F - CD-ROM - CORELCDX - INSTALLATION CHECK
  5316.     AX = 15FFh
  5317.     BX = 0000h
  5318. Return: BX = ABCDh if CORELCDX loaded
  5319. Note:    Corel's CORELCDX.COM is a replacement for MSCDEX.EXE; it also supports
  5320.       the standard MSCDEX installation check calls AX=1500h and AX=150Ch
  5321. SeeAlso: AX=1500h"CD-ROM",AX=150Ch
  5322. --------W-2F1600-----------------------------
  5323. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  5324.     AX = 1600h
  5325. Return: AL = status
  5326.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  5327.         01h Windows/386 2.x running
  5328.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  5329.           mode nor Windows/386 2.x running) (obsolete--see note)
  5330.         FFh Windows/386 2.x running
  5331.     AL = anything else
  5332.         AL = Windows major version number >= 3
  5333.         AH = Windows minor version number
  5334. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  5335.       drivers, TSRs, and applications) to cooperate with multitasking
  5336.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  5337.     certain calls are also supported in the Microsoft 80286 DOS extender in
  5338.       Windows standard mode
  5339.     this function served as the installation check and AX=1610h served to
  5340.       get the driver entry point for XMS version 1, which is now obsolete.
  5341.       Use AX=4300h and AX=4310h instead
  5342. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  5343. Index:    installation check;XMS version 1
  5344. --------W-2F1602-----------------------------
  5345. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  5346.     AX = 1602h
  5347. Return: ES:DI -> Windows/386 2.x API procedure entry point
  5348. Notes:    this interface is supported in Windows 3.x and Windows95 only for 2.x
  5349.       compatibility
  5350.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  5351.         AX = 0000h
  5352.         ES:DI -> return address
  5353.         JUMP to address returned from INT 2F/AX=1602h
  5354.     After JUMP, at return address:
  5355.         BX = current VM ID.
  5356. SeeAlso: AX=C020h
  5357. --------W-2F1603-----------------------------
  5358. INT 2F C - MS Windows/386 - GET INSTANCE DATA
  5359.     AX = 1603h
  5360. Return: AX = 5248h ('RH') if supported
  5361.         DS:SI -> Windows/386 instance data (see #2317)
  5362. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  5363.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  5364.       supported, as is the case in DOS versions prior to 5.0
  5365.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5366.       this function, DOSMGR's behavior, and instancing in general
  5367. SeeAlso: AX=1607h/BX=0015h
  5368.  
  5369. Format of Windows/386 instance data:
  5370. Offset    Size    Description    (Table 2317)
  5371.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  5372.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  5373.         0000h if not applicable
  5374.  04h    WORD    number of instance data entries (max 32)
  5375.  06h    Array of instance data entries
  5376.     Offset    Size    Description
  5377.      00h    WORD    segment (0002h = DOS kernel)
  5378.      02h    WORD    offset
  5379.      04h    WORD    size
  5380. --------W-2F1605-----------------------------
  5381. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  5382.     AX = 1605h
  5383.     ES:BX = 0000h:0000h
  5384.     DS:SI = 0000h:0000h
  5385.     CX = 0000h
  5386.     DX = flags
  5387.         bit 0 = 0 if Windows enhanced-mode initialization
  5388.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  5389.         bits 1-15 reserved (undefined)
  5390.     DI = version number (major in upper byte, minor in lower)
  5391. Return: CX = 0000h if okay for Windows to load
  5392.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  5393.     CX <> 0 if Windows should not load
  5394.     ES:BX -> startup info structure (see #2318)
  5395.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  5396.           (see #2321)
  5397. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  5398.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  5399.       driver or TSR can watch for this broadcast and return the appropriate
  5400.       values.  If the driver or TSR returns CX <> 0, it is also its
  5401.       responsibility to display an error message (however, Windows95 is
  5402.       reported to load regardless of the returned CX).
  5403.     each handler must first chain to the prior INT 2F handler with
  5404.       registers unchanged before processing the call
  5405.     if the handler requires local data on a per-VM basis, it must store the
  5406.       returned ES:BX in the "next" field of a startup info structure and
  5407.       return a pointer to that structure in ES:BX
  5408.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  5409.       already nonzero, the TSR must fail the initialization by setting CX
  5410.       nonzero
  5411.     MSD checks for Windows 3.0 running in standard mode by testing whether
  5412.       CX=FFFFh and other registers are unchanged on return
  5413.     Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
  5414.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5415.     Microsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
  5416.       changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
  5417.       active
  5418. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  5419.  
  5420. Format of Windows Startup Information Structure:
  5421. Offset    Size    Description    (Table 2318)
  5422.  00h  2 BYTEs    major, minor version of info structure
  5423.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  5424.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  5425.  0Ah    DWORD    virtual device reference data (see #2320)
  5426.         (only used if above nonzero)
  5427.  0Eh    DWORD    pointer to instance data records (see #2319) or 0000h:0000h
  5428.  
  5429. Format of one Instance Item in array:
  5430. Offset    Size    Description    (Table 2319)
  5431.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  5432.  04h    WORD    size of instance data
  5433.  
  5434. Format of Virtual Device Reference Data:
  5435. Offset    Size    Description    (Table 2320)
  5436.  00h    DWORD    physical address of ??? or 00000000h
  5437.  04h    DWORD    physical address of ??? table
  5438.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  5439.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  5440.         00000000h = end of table
  5441. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  5442.       chain, the second pointer to a field of 40h bytes followed by a
  5443.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  5444.       the start segment of the UMB area
  5445.  
  5446. (Table 2321)
  5447. Values Windows virtual mode enable/disable procedure is called with:
  5448.     AX = 0000h disable V86 mode
  5449.     AX = 0001h enable V86 mode
  5450.     interrupts disabled
  5451. Return: CF set on error
  5452.     CF clear if successful
  5453.     interrupts disabled
  5454. --------W-2F1606-----------------------------
  5455. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  5456.     AX = 1606h
  5457.     DX = flags
  5458.         bit 0 = 0 if Windows enhanced-mode exit
  5459.         bit 0 = 1 if Microsoft 286 DOS extender exit
  5460.         bits 1-15 reserved (undefined)
  5461. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  5462.       broadcast will be issued immediately.
  5463.     this call will be issued in real mode
  5464.     Novell DOS v7.0 (Update 8 - Update 15) TASKMGR in multitasking mode
  5465.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5466. SeeAlso: AX=1605h,AX=1609h
  5467. --------W-2F1607-----------------------------
  5468. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  5469.     AX = 1607h
  5470.     BX = virtual device ID (see #2329)
  5471.     CX = (usually) callout subfunction
  5472. Return: (usually) AX,BX,CX,DX,ES contain results
  5473. Notes:    more of a convention than an API, this call specifies a standard
  5474.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  5475.       to DOS device drivers and TSRs
  5476.     see below for details on several virtual devices
  5477. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5478. SeeAlso: AX=1607h/BX=0018h,AX=1684h"DEVICE API",AX=C020h
  5479. --------W-2F1607BX0006-----------------------
  5480. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  5481.     AX = 1607h
  5482.     BX = 0006h (VxD identifier of "V86MMGR")
  5483.     CX = 0000h
  5484. Return: AX = status
  5485.         0000h if local A20 state changed
  5486.         1607h if A20 unchanged
  5487.         other if global A20 state changed
  5488. SeeAlso: AX=1607h"CALL OUT API"
  5489. --------W-2F1607BX000C-----------------------
  5490. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  5491.     AX = 1607h
  5492.     BX = 000Ch (VxD identifier of "VMD")
  5493. Return: CX = nonzero if mouse driver already virtualized
  5494. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  5495.       nonzero; if yes, it will not automatically virtualize the mouse
  5496.       driver.  This would be used if MOUSE.COM already virtualizes
  5497.       itself using the Windows API.
  5498. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5499. --------W-2F1607BX000D-----------------------
  5500. INT 2F C - MS Windows95 - "VKD" VIRTUAL DEVICE - ??? CALLOUT
  5501.     AX = 1607h
  5502.     BX = 000Dh (VxD ID for VKD)
  5503.     ???
  5504. Return: ???
  5505. SeeAlso: AX=1607h"CALL OUT API",#2329
  5506. --------W-2F1607BX0010-----------------------
  5507. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  5508.     AX = 1607h
  5509.     BX = 0010h (VxD identifier of "BLOCKDEV")
  5510.     CX = function
  5511.         0001h starting FastDisk compatibility tests
  5512.         0002h ending FastDisk compatibility tests
  5513.         0003h check if FastDisk installation allowed
  5514.         Return: CX = 0000h if allowed
  5515. Note:    this interface is called by the Windows FastDisk driver (such as
  5516.       WDCTRL) when it thinks that the INT 13h handler immediately below
  5517.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  5518.       program which hooks itself underneath IO.SYS's INT 13h code with
  5519.       INT 2F/AH=13h
  5520. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  5521. --------W-2F1607BX0014-----------------------
  5522. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  5523.     AX = 1607h
  5524.     BX = 0014h (VxD identifier of "VNETBIOS")
  5525. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  5526.         command code (see #2322)
  5527. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  5528.       the NetBIOS has an extensions Windows should know about
  5529. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  5530.  
  5531. (Table 2322)
  5532. Values for VNETBIOS action code:
  5533.  00h    "VN_Unknown" unknown command
  5534.  04h    "VN_No_Map"  no memory mapping necessary
  5535.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  5536.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  5537.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  5538.  14h    "VN_Chain_Send"     the chain-send command
  5539.  18h    "VN_Cancel"    special case for cancel command
  5540.  1Ch    "VN_Buffer_In"    buffer is incoming
  5541.  20h    "VN_Buffer_Out" buffer is outgoing
  5542.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  5543. --------D-2F1607BX0015-----------------------
  5544. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  5545.     AX = 1607h
  5546.     BX = 0015h (VxD identifier of "DOSMGR")
  5547.     CX = function
  5548.         0000h query instance processing
  5549.         DX = 0000h
  5550.         Return: CX = state
  5551.                 0000h not instanced
  5552.                 other instanced (DOS 5+ kernel returns 0001h)
  5553.                 DX = segment of DOS drivers or 0000h for
  5554.                     default of 0070h
  5555.                 ES:BX -> patch table (see #2324)
  5556.         0001h set patches in DOS
  5557.         DX = bit mask of patch requests (see #2323)
  5558.         Return: AX = B97Ch
  5559.             BX = bit mask of patches applied (see #2323)
  5560.             DX = A2ABh
  5561.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  5562.         DX = bit mask of patch requests (see #2323)
  5563.         Return: CX = 0000h (DOS 5-6)
  5564.         Note:    return values are ignored by DOSMGR in Windows 3.1
  5565.         0003h get size of DOS data structures
  5566.         DX = bit mask of request (only one bit can be set)
  5567.             bit 0: Current Directory Structure size
  5568.         Return: if supported request:
  5569.                 AX = B97Ch
  5570.                 CX = size in bytes of requested structure
  5571.                 DX = A2ABh
  5572.             else:
  5573.                 CX = 0000h
  5574.                 all other registers preserved
  5575.         0004h determine instanced data structures
  5576.         Return: AX = B97Ch if supported
  5577.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  5578.             BX = bit mask of instanced items
  5579.                 bit 0: CDS
  5580.                 bit 1: SFT
  5581.                 bit 2: device list
  5582.                 bit 3: DOS swappable data area
  5583.         0005h get device driver size
  5584.         ES = segment of device driver
  5585.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  5586.             DX:AX = A2ABh:B97Ch if successful
  5587.                 BX:CX = size of device driver in bytes
  5588. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  5589.       been instanced via this API and will not perform its own default
  5590.       instancing of the normal DOS/BIOS data if so; if this API is not
  5591.       supported, DOSMGR will also try to access instancing data through
  5592.       INT 2F/AX=1603h
  5593.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  5594.       tables of instancing information for earlier versions of DOS
  5595.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5596.       DOSMGR's behavior and instancing in general
  5597. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h
  5598. SeeAlso: AX=1684h"DEVICE API"
  5599.  
  5600. Bitfields for DOSMGR patch requests:
  5601. Bit(s)    Description    (Table 2323)
  5602.  0    enable critical sections
  5603.  1    NOP setting/checking user ID
  5604.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  5605.  3    trap stack fault in "SYSINIT" to WIN386
  5606.  4    BIOS patch to trap "Insert disk X:" to WIN386
  5607.  
  5608. Format of DOSMGR patch table:
  5609. Offset    Size    Description    (Table 2324)
  5610.  00h  2 BYTEs    DOS version (major, minor)
  5611.  02h    WORD    offset in DOS data segment of "SAVEDS"
  5612.  04h    WORD    offset in DOS data segment of "SAVEBX"
  5613.  06h    WORD    offset in DOS data segment of InDOS flag
  5614.  08h    WORD    offset in DOS data segment of User ID word
  5615.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  5616.           critical section calls (see INT 2A/AH=80h)
  5617.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  5618.           containing segment of last MCB in conventional memory
  5619. --------W-2F1607BX0018-----------------------
  5620. INT 2F C - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
  5621.     AX = 1607h
  5622.     BX = 0018h (VMPoll VxD ID) (see #2329)
  5623.     CX = 0000h
  5624. Return: AX = status
  5625.         0000h if timeslice used
  5626.         nonzero if timeslice not needed
  5627. Note:    when VMPoll makes this callout, all virtual machines are idle, and any
  5628.       interested TSR can use the opportunity to perform background
  5629.       processing
  5630. SeeAlso: AX=1607h"CALL OUT API",AX=1689h
  5631. --------W-2F1607BX0021--------------------------------------
  5632. INT 2F C - MS Windows - "PageFile" VIRTUAL DEVICE - GET LOCK BYTE
  5633.     AX = 1607h
  5634.     BX = 0021h (PageFile VxD ID)
  5635.     CX = 0000h
  5636. Return: AX = status
  5637.         0000h success
  5638.         ES:DI -> cache lock byte in disk cacher
  5639.         other no disk cache or unsupported
  5640. Notes:    PageFile issues this call on real-mode initialization in order to allow
  5641.       disk caches to provide it with a byte which it can use to temporarily
  5642.       lock the disk cache; VMPOLL also issues this call, so it is made
  5643.       twice each time Windows starts up
  5644.     if this call fails, PageFile falls back to other techniques for locking
  5645.       the disk cache
  5646. SeeAlso: AX=1607h"CALL OUT API"
  5647. --------W-2F1607BX002D-----------------------
  5648. INT 2F C - MS Windows - "W32S" VIRTUAL DEVICE - ??? CALLOUT
  5649.     AX = 1607h
  5650.     BX = 002Dh (VxD ID for W32S)
  5651.     ???
  5652. Return: ???
  5653. SeeAlso: AX=1607h"CALL OUT API",#2329
  5654. --------W-2F1607BX0040-----------------------
  5655. INT 2F C - MS Windows - "IFSMgr" VIRTUAL DEVICE - ??? CALLOUT
  5656.     AX = 1607h
  5657.     BX = 0040h (VxD ID for IFSMgr)
  5658.     ???
  5659. Return: ???
  5660. SeeAlso: AX=1607h"CALL OUT API",#2329
  5661. --------W-2F1607BX0446-----------------------
  5662. INT 2F C - MS Windows - "VADLIBD" VIRTUAL DEVICE - ??? CALLOUT
  5663.     AX = 1607h
  5664.     BX = 0446h (VxD ID for VADLIBD)
  5665.     ???
  5666. Return: ???
  5667. SeeAlso: AX=1607h"CALL OUT API",#2329
  5668. --------W-2F1607BX0484-----------------------
  5669. INT 2F C - MS Windows - "IFSMgr" VIRTUAL DEVICE - ??? CALLOUT
  5670.     AX = 1607h
  5671.     BX = 0484h (VxD ID for IFSMgr)
  5672.     ???
  5673. Return: ???
  5674. SeeAlso: AX=1607h"CALL OUT API",#2329
  5675. --------W-2F1607BX0487-----------------------
  5676. INT 2F C - MS Windows - "NWSUP" VIRTUAL DEVICE - ??? CALLOUT
  5677.     AX = 1607h
  5678.     BX = 0487h (VxD ID for NWSUP)
  5679.     ???
  5680. Return: ???
  5681. SeeAlso: AX=1607h"CALL OUT API",#2329
  5682. --------E-2F1607BX22C0-----------------------
  5683. INT 2F C - Rational Systems DOS/4GW - ???
  5684.     AX = 1607h
  5685.     BX = 22C0h
  5686.     ???
  5687. Return: ???
  5688. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h,#2329
  5689. --------W-2F1607BX28A1-----------------------
  5690. INT 2F C - MS Windows - "PharLap" VIRTUAL DEVICE - ??? CALLOUT
  5691.     AX = 1607h
  5692.     BX = 28A1h (VxD ID for PharLap)
  5693.     ???
  5694. Return: ???
  5695. SeeAlso: AX=1607h"CALL OUT API",#2329
  5696. --------W-2F1607BX7A5F-----------------------
  5697. INT 2F C - MS Windows - "SIWVID" VIRTUAL DEVICE - ??? CALLOUT
  5698.     AX = 1607h
  5699.     BX = 7A5Fh (VxD ID for SIWVID)
  5700.     ???
  5701. Return: ???
  5702. SeeAlso: AX=1607h"CALL OUT API",#2329
  5703. --------W-2F1608-----------------------------
  5704. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  5705.     AX = 1608h
  5706. Notes:    called after all installable devices have been initialized
  5707.     real-mode software may be called between the Windows enhanced-mode init
  5708.       call (AX=1605h) and this call; the software must detect this
  5709.       situation
  5710. SeeAlso: AX=1605h,AX=1609h
  5711. --------W-2F1609-----------------------------
  5712. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  5713.     AX = 1609h
  5714. Note:    called at the beginning of a normal exit sequence; not made in the
  5715.       event of a fatal system crash
  5716. SeeAlso: AX=1606h,AX=1608h
  5717. --------W-2F160A-----------------------------
  5718. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  5719.     AX = 160Ah
  5720. Return: AX = 0000h if call supported
  5721.         BX = version (BH=major, BL=minor)
  5722.         CX = mode (0002h = standard, 0003h = enhanced)
  5723. SeeAlso: AX=1600h,AX=4680h
  5724. --------W-2F160B-----------------------------
  5725. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  5726.     AX = 160Bh
  5727.     ES:DI = 0000h:0000h
  5728. Return: ES:DI -> TSR information structure (see #2325)
  5729. Desc:    this call allows Windows-aware TSRs to make themselves known to
  5730.       Windows.
  5731. Note:    the TSR should first chain to the previous INT 2F handler, then
  5732.       allocate a communication structure, place the returned ES:DI
  5733.       pointer in the first field, and return a pointer to the new
  5734.       structure
  5735. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  5736.  
  5737. Format of TSR-to-Windows information structure:
  5738. Offset    Size    Description    (Table 2325)
  5739.  00h    DWORD    pointer to next structure
  5740.  04h    WORD    PSP segment
  5741.  06h    WORD    API version ID (0100h)
  5742.  08h    WORD    EXEC flags (how to load command specified by "exec_cmd")
  5743.         bit 0: "WINEXEC"
  5744.         bit 1: "LOADLIBRARY"
  5745.         bit 2: "OPENDRIVER"
  5746.  0Ah    WORD    "exec_cmd_show" (see #2326)
  5747.  0Ch    DWORD    "exec_cmd" pointer to command line to be executed
  5748.  10h  4 BYTEs    reserved (0)
  5749.  14h    DWORD    pointer to TSR ID block (see #2327)
  5750.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  5751.  
  5752. (Table 2326)
  5753. Values for TSR information structure "exec_cmd_show":
  5754.  00h    HIDE
  5755.  01h    SHOWNORMAL
  5756.  02h    SHOWMINIMIZED
  5757.  03h    SHOWMAXIMIZED
  5758.  04h    SHOWNOACTIVE
  5759.  05h    SHOW
  5760.  06h    MINIMIZE
  5761.  07h    SHOWMINNOACTIVE
  5762.  08h    SHOWNA
  5763.  09h    RESTORE
  5764. Note:    this value is passed as the second parameter to the WinExec(),
  5765.       LoadLibrary(), or OpenDriver() call used to execute a requested
  5766.       command line
  5767. SeeAlso: #2325
  5768.  
  5769. Format of Norton Utilities 6.0 TSR ID block:
  5770. Offset    Size    Description    (Table 2327)
  5771.  00h    WORD    length of name string
  5772.  02h  N BYTEs    name of TSR's executable
  5773. SeeAlso: #2325
  5774. --------W-2F160C-----------------------------
  5775. INT 2F - MS Windows 3.1 - DETECT ROMs
  5776.     AX = 160Ch
  5777.     ???
  5778. Return: ???
  5779. Note:    used by ROM Windows; appears to be a NOP under standard Windows95
  5780. SeeAlso: AX=160Bh,INT 21/AH=6Dh"ROM"
  5781. --------D-2F160E-----------------------------
  5782. INT 2F U - MS-DOS 7 kernel - BOOT LOGO SUPPORT???
  5783.     AX = 160Eh
  5784.     BL = subfunction
  5785.         00h get ???
  5786.         AX = state of flag manipulated by subfn 04h and 05h
  5787.             0000h clear
  5788.             FFFFh set
  5789.         DX = ??? (0000h)
  5790.         01h link in INT 10h??? handlers
  5791.         02h unlink INT 10h??? handlers
  5792.         03h ???
  5793.         04h set ??? flag
  5794.         05h clear ??? flag
  5795. Return: AX = 0000h if supported
  5796.         ???
  5797. SeeAlso: AX=160Fh,AX=1611h,AX=1614h
  5798. --------D-2F160F-----------------------------
  5799. INT 2F U - MS-DOS 7 kernel - GET/SET ??? HANDLER
  5800.     AX = 160Fh
  5801.     BL = subfunction
  5802.         00h get ??? handler
  5803.         Return: AX = 0000h if supported
  5804.                 CX:DX -> handler to which control is passed after
  5805.                       ??? executes
  5806.         01h set ??? handler
  5807.         CX:DX -> new handler for ???
  5808.         Return: AX = 0000h if supported
  5809. Notes:    this function is not supported if ??? in the IO.SYS drivers portion of
  5810.       the kernel is an IRET instruction (as is the case on my system)
  5811.       rather than a FAR JMP
  5812.     the indicated handler seems to be related to INT 10 processing
  5813. SeeAlso: AX=160Eh,AX=1611h,AX=1614h
  5814. --------m-2F1610-----------------------------
  5815. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  5816.     AX = 1610h
  5817.     details unavailable
  5818. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  5819.       obsolete.  Use AX=4300h and AX=4310h instead
  5820. SeeAlso: AX=1600h,AX=4310h
  5821. --------D-2F1611-----------------------------
  5822. INT 2F U - MS-DOS 7 kernel - GET SHELL PARAMETERS
  5823.     AX = 1611h
  5824. Return: AX = 0000h if supported
  5825.         DS:DX -> primary shell's executable name
  5826.         DS:SI -> prinary shell command line (counted string)
  5827.         BH = ??? (00h)
  5828.         BL = ??? (00h)
  5829. Desc:    return the program name and commandline from the CONFIG.SYS SHELL=
  5830.       statement
  5831. SeeAlso: AX=160Eh,AX=160Fh,AX=1612h,AX=4A33h
  5832. --------D-2F1612-----------------------------
  5833. INT 2F U - MS-DOS 7 kernel - GET ???
  5834.     AX = 1612h
  5835. Return: AX = 0000h if supported
  5836.         ES:BX -> ??? data (see #2328)
  5837. Note:    called by VTD.VXD
  5838. SeeAlso: AX=160Fh,AX=1611h,AX=1613h
  5839.  
  5840. Format of DOS7 ??? kernel data:
  5841. Offset    Size    Description    (Table 2328)
  5842.  00h    WORD    ??? (0001h)
  5843.  02h    DWORD    -> ??? function (call with DS=high word of this field)
  5844.         the indicated function vectors through the INT 13 hook at
  5845.           0070h:00B4h and then forces the A20 gate open
  5846.     ???
  5847. --------D-2F1613-----------------------------
  5848. INT 2F - MS-DOS 7 kernel - GET SYSTEM.DAT (REGISTRY FILE) PATHNAME
  5849.     AX = 1613h
  5850.     ES:DI -> buffer for full ASCIZ pathname to Windows95 SYSTEM.DAT
  5851.     CX = buffer size in bytes
  5852. Return: AX = 0000h if supported
  5853.         ES:DI buffer filled
  5854.         CX = number of bytes copied into buffer
  5855. SeeAlso: AX=160Eh,AX=1611h,AX=1612h,AX=1614h,AX=1690h
  5856. --------D-2F1614-----------------------------
  5857. INT 2F U - MS-DOS 7 kernel - SET SYSTEM.DAT (REGISTRY FILE) PATHNAME
  5858.     AX = 1614h
  5859.     ES:DI -> ASCIZ pathname to Windows95 SYSTEM.DAT
  5860. Return: AX = status
  5861.         0000h if successful
  5862.         1614h not supported
  5863.         other: maximum length of pathname (004Eh for v4.00.950)
  5864. SeeAlso: AX=160Eh,AX=1611h,AX=1613h,AX=1690h
  5865. ----------2F1615-----------------------------
  5866. INT 2F - Windows95 - SAVE32.COM - INSTALLATION CHECK
  5867.     AX = 1615h
  5868. Return: AX = 0000h if installed
  5869.         BX = segment of resident code
  5870. Program: SAVE32.COM is a TSR included in the Windows95 distribution which
  5871.       preserves the contents of 32-bit registers across invocations of
  5872.       all of the hardware interrupt handlers (which, for some older BIOSes
  5873.       and TSRs, do not properly preserve the high words of the 32-bit
  5874.       registers)
  5875. --------W-2F1680-----------------------------
  5876. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  5877.     AX = 1680h
  5878. Return: AL = status
  5879.         00h if the call is supported
  5880.         80h (unchanged) if the call is not supported
  5881. Notes:    programs can use this function in idle loops to enhance performance
  5882.       under multitaskers; this call is supported by MS Windows 3+, DOS 5+,
  5883.       DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications
  5884.     does not block the program; it just gives up the remainder of the time
  5885.       slice
  5886.     should not be used by Windows-specific programs
  5887.     when called very often without intermediate screen output under
  5888.       MS Windows 3.x, the VM will go into an idle-state and will not
  5889.       receive the next slice before 8 seconds have elapsed. This time can
  5890.       be changed in SYSTEM.INI through "IdleVMWakeUpTime=<seconds>".
  5891.       Setting it to zero results in a long wait.
  5892.     this function has no effect under OS/2 2.10-4.0 if the DOS box has an
  5893.       "Idle Sensitivity" setting of 100
  5894. SeeAlso: AX=1689h,INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  5895. --------W-2F1681-----------------------------
  5896. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  5897.     AX = 1681h
  5898. Notes:    used to prevent a task switch from occurring
  5899.     should be followed by an INT 2F/AX=1682h call as soon as possible
  5900.     nested calls are allowed, and must be followed by an appropriate number
  5901.       of "end critical section" calls
  5902.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  5903.       increment by hand.
  5904. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  5905. --------W-2F1682-----------------------------
  5906. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  5907.     AX = 1682h
  5908. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  5909.       and decrement by hand, taking care not to decrement InDOS flag
  5910.       through zero
  5911. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  5912. --------W-2F1683-----------------------------
  5913. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  5914.     AX = 1683h
  5915. Return: BX = current virtual machine (VM) ID
  5916. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  5917.     VM IDs are reused when VMs are destroyed
  5918.     an ID of 0 will never be returned
  5919. SeeAlso: AX=1684h"DEVICE API",AX=1685h,AX=168Bh
  5920. --------W-2F1684-----------------------------
  5921. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  5922.     AX = 1684h
  5923.     BX = virtual device (VxD) ID (see #2329)
  5924.     ES:DI = 0000h:0000h
  5925. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  5926. Note:    some Windows enhanced-mode virtual devices provide services that
  5927.       applications can access.  For example, the Virtual Display Device
  5928.       (VDD) provides an API used in turn by WINOLDAP.
  5929. SeeAlso: AX=1684h/BX=0001h,AX=1684h/BX=0015h,AX=1683h,AX=4011h,INT 20"Windows"
  5930.  
  5931. (Table 2329)
  5932. Values for MS Windows VxD ID:
  5933. Value    Name   CallOut V86 PM    Description
  5934.  0000h    ACT200L            IrDA Infrared ActiSys framer VxD
  5935.  0000h    ACT220L            IrDA Infrared ActiSys 220 framer VxD
  5936.  0000h    ADAPTEC            IrDA Infrared Adaptec framer VxD
  5937.  0000h    AM1500T        N  N    (Win95)
  5938.  0000h    ATI        N  N    (Win95) ATI display driver
  5939.  0000h    CDFS        N  N
  5940.  0000h    CDTSD        N  N    (Win95) CD-ROM Type-Specific Driver
  5941.  0000h    CE2NDIS3    N  N    (W4Wg)
  5942.  0000h    CENDIS        N  N    (W4Wg)
  5943.  0000h    CHIPS        N  N    (Win95) Chips&Tech display driver
  5944.  0000h    CIRRUS        N  N    (Win95) Cirrus display driver
  5945.  0000h    CTNDW        N  N    (W4Wg)
  5946.  0000h    CTVSD        N  N    (Win95) CD-ROM Vendor-Specific Driver
  5947.  0000h    CM2NDIS3    N  N    (W4Wg)
  5948.  0000h    COMBUFF        N  N    (Win95)
  5949.  0000h    COMPAQ        N  N    (Win95) Compaq display driver
  5950.  0000h    CPQNDIS3    N  N    (W4Wg)
  5951.  0000h    CRYSTAL            IrDA Infrared Crystal framer VxD
  5952.  0000h    DBKVSSD        N  N    (Win95) Databook PCMCIA socket services???
  5953.  0000h    DDOM95        N  N
  5954.  0000h    DECLAN        N  N    (W4Wg)
  5955.  0000h    DiskTSD        N  N    (Win95) hard-disk Type-Specific Driver
  5956.  0000h    DiskVSD        N  N    (Win95) hard-disk Vendor-Specific Driver
  5957.  0000h    DMICTVXD    N  N
  5958.  0000h    DRVSPACX    N  N    (Win95)
  5959.  0000h    E30N3        N  N    (W4Wg)
  5960.  0000h    E31N3        N  N    (W4Wg)
  5961.  0000h    EE16        N  N    (W4Wg)
  5962.  0000h    EISA        N  N    (Win95)
  5963.  0000h    EL59X        N  N    (Win95)
  5964.  0000h    ELNK16        N  N    (W4Wg)
  5965.  0000h    ELNK3        N  N    (Win95)
  5966.  0000h    ELNKII        N  N    (W4Wg)
  5967.  0000h    ELNKMC        N  N    (W4Wg)
  5968.  0000h    ELPC3        N  N    (W4Wg)
  5969.  0000h    ENABLE2        N  N    (Win95)
  5970.  0000h    ENABLE4        N  N    (Win95)
  5971.  0000h    EPRO        N  N    (Win95)
  5972.  0000h    ES1488V        N  N    (Win95)
  5973.  0000h    ES1688V        N  N    (Win95)
  5974.  0000h    ES488V        N  N    (Win95)
  5975.  0000h    ES688V        N  N    (Win95)
  5976.  0000h    ESI            IrDA Infrared ESI framer VxD
  5977.  0000h    FILEMON        N  N    DOS386 File Monitor
  5978.  0000h    FLS1MTD        N  N    (Win95) flash-memory driver???
  5979.  0000h    FLS2MTD        N  N    (Win95) flash-memory driver???
  5980.  0000h    HPEISA        N  N    (W4Wg)
  5981.  0000h    HPFEND        N  N    (W4Wg)
  5982.  0000h    HPISA        N  N    (W4Wg)
  5983.  0000h    HPMCA        N  N    (W4Wg)
  5984.  0000h    HSFLOP        N  N
  5985.  0000h    IBMTOK        N  N    (W4Wg)
  5986.  0000h    IBMTOK4        N  N    (Win95)
  5987.  0000h    IRCOMM            IrDA Infrared Virtual COM/LPT driver
  5988.  0000h    IRLAMPEX        IrDA Infrared Protocol VxD
  5989.  0000h    IRLAPFRM        IrDA Infrared Virtual COM/LPT frame driver
  5990.  0000h    IRMATRAK    N  N    (W4Wg)
  5991.  0000h    JAVASUP        N  N    Internet Explorer JAVA support
  5992.  0000h    KEYREMAP    N  N    (Windows95 PowerToys) shift-key remapper
  5993.  0000h    LPT         N    N  N    (Win4Workgroups 3.11) DOS386 LPT Device
  5994.  0000h    LPTENUM        N  N
  5995.  0000h    MONVSD
  5996.  0000h    MGA        N  N    (Win95) Matrox MGA display driver
  5997.  0000h    MSMINI        N  N    (Win95)
  5998.  0000h    MSODISUP     N    N  N    (Win4Workgroups 3.11) MS ODI Support
  5999.  0000h    mvpas        N  N    (Win95) Pro Audio Spectrum driver
  6000.  0000h    NECATAPI    N  N    (Win95)
  6001.  0000h    NICE        N  N    (Win95)
  6002.  0000h    NWNBLINK     N    N  N    (Win4Workgroups 3.11) Netware NetBIOS
  6003.  0000h    OAK        N  N    (Win95) Oak Tech display driver
  6004.  0000h    OCTK32        N  N    (W4Wg)
  6005.  0000h    OTCETH        N  N    (W4Wg)
  6006.  0000h    PARALINK    N  N    (Win95)
  6007.  0000h    PARALLAX        IrDA Infrared Parallax framer VxD
  6008.  0000h    PCNTN3        N  N    (W4Wg)
  6009.  0000h    PE3NDIS        N  N    (W4Wg)
  6010.  0000h    PPM        N  N    (Win95)
  6011.  0000h    PROTEON        N  N    (W4Wg)
  6012.  0000h    QEMMFix        N  N
  6013.  0000h    QIC117        N  N    (Win95) QIC-117 floppy-ctrl tape drive
  6014.  0000h    QPI        N  N    QEMM Programming Interface (see INT 67/AH=3Fh)
  6015.  0000h    RMM        N  N    Real-Mode Mapper for hw with real-mode drivers
  6016.  0000h    S3        N  N    (Win95) S3 display driver
  6017.  0000h    S3INFO        N  N
  6018.  0000h    S3MINI        N  N    S3 display driver
  6019.  0000h    SAGE        N  N    (Plus!) System Agent
  6020.  0000h    scsi1hlp    N  N    (Win95)
  6021.  0000h    SERENUM        N  N
  6022.  0000h    SERIAL         N    N  N    (Win4Workgroups 3.11) DOS386 Serial Device
  6023.  0000h    SERWAVE        N  N
  6024.  0000h    SETP3        N  N    (Win95) Silicon Ethernet Pocket Adapter
  6025.  0000h    SMC8000W    N  N    (W4Wg)
  6026.  0000h    SMC80PC        N  N    (W4Wg)
  6027.  0000h    SMC8100W    N  N    (W4Wg)
  6028.  0000h    SMC8232W    N  N    (W4Wg)
  6029.  0000h    SMC9000        N  N    (W4Wg)
  6030.  0000h    SNIP        N  N    (W4Wg)
  6031.  0000h    SOCKET        N  N    (W4Wg)
  6032.  0000h    SOCKETSV    N  N    (Win95)
  6033.  0000h    SPAP        Y  Y    (Win95)
  6034.  0000h    SPENDIS        N  N    (Win95)
  6035.  0000h    SRAMMTD        N  N    (Win95) flash-memory driver???
  6036.  0000h    STLTH64        N  N    Diamond Stealth64 driver
  6037.  0000h    STLTHMON    N  N
  6038.  0000h    T20N3        N  N    (W4Wg)
  6039.  0000h    T30N3        N  N    (W4Wg)
  6040.  0000h    TCTOK        N  N    (W4Wg)
  6041.  0000h    TSENG        N  N    (Win95) Tseng Labs display driver
  6042.  0000h    UBNEI        N  N    (W4Wg)
  6043.  0000h    UNIMODEM        (Win95) Universal Modem Driver
  6044.  0000h    VDEF        N  N    (Win95)
  6045.  0000h    VGATEWAY    N  Y    (Win95) dialin gateway
  6046.  0000h    VIDEO7        N  N    (Win95) Video7 display driver
  6047.  0000h    VRomD        N  N    (Win95)
  6048.  0000h    VStDspcD        Quarterdeck Stealth D*Space
  6049.  0000h    VXDMON
  6050.  0000h    WD        N  N    (Win95)
  6051.  0000h    WINTOP        N  N    (Windows95 Power Toys)
  6052.  0000h    WSHTCP        N  N
  6053.  0000h    XGA        N  N    (Win95) XGA display driver
  6054.  0001h    VMM        N  N    Virtual Machine Manager
  6055.  0001h    VMM        Y  Y    Windows95 Virtual Machine Manager
  6056.  0002h    Debug
  6057.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  6058.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  6059.  0005h    VTD        Y  Y    Virtual Timer Device
  6060.  0006h    V86MMGR         Y    N  N    (Windows3.x) Virtual 8086 Mode Device
  6061.  0006h    V86MMGR        N  Y    (Win95) Virtual 8068 Mode Device
  6062.  0007h    PageSwap    N  N    Paging Device
  6063.  0008h    Parity        N  N    Parity-check trapper
  6064.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  6065.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  6066.  000Bh    VSD        N  N    Virtual Sound Device
  6067.  000Ch    VMD         Y    Y  Y    Virtual Mouse Device
  6068.  000Dh    VKD        N  Y    Virtual Keyboard Device
  6069.  000Eh    VCD        N  Y    Virtual COMM Device
  6070.  000Fh    VPD        N  Y    Virtual Printer Device
  6071.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  6072.  0010h    BLOCKDEV     Y    N  N    Virtual Hard Disk Device (Windows 3.1)
  6073.  0010h    IOS         N    N  N    (Win4Workgroups 3.11) DOS386 IOS Device
  6074.  0010h    IOS        Y  Y    Windows95 I/O Supervisor
  6075.  0011h    VMCPD        Y  Y    (Windows3.x) Virtual Math CoProcessor Device
  6076.  0011h    VMCPD        N  Y    (Win95) Virtual Math CoProcessor Device
  6077.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  6078.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  6079.  0014h    VNETBIOS     Y    N  N    Virtual NetBIOS Device
  6080.  0015h    DOSMGR         Y    Y  N    DOS data instancing (see #2343)
  6081.  0016h    WINLOAD
  6082.  0017h    SHELL        N  Y    (Windows3)
  6083.  0017h    SHELL        Y  Y    (Win95)
  6084.  0018h    VMPOLL         Y    N  N
  6085.  0019h    VPROD
  6086.  001Ah    DOSNET        N  N    assures network integrity across VMs
  6087.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  6088.  001Bh    VFD        N  N    Virtual Floppy Device
  6089.  001Ch    VDD2            Secondary display adapter
  6090.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  6091.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  6092.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  6093.  001Dh    WINDEBUG    N  Y
  6094.  001Dh    TDDebug        N  Y
  6095.  001Eh    TSRLoad            TSR instance utility
  6096.  001Fh    BiosHook        BIOS interrupt hooker VxD
  6097.  0020h    Int13         N    N  N
  6098.  0021h    PageFile     Y    N  Y    Paging File device
  6099.  0022h    SCSI
  6100.  0022h    APIX        N  Y    (Win95)
  6101.  0023h    MCA_POS            Microchannel Programmable Option Select
  6102.  0024h    SCSIFD            SCSI FastDisk device
  6103.  0025h    VPEND            Pen device
  6104.  0026h    APM            Advanced Power Management
  6105.  0026h    VPOWERD        Y  Y    (Win95) power management
  6106.  0027h    VXDLDR         N    Y  Y    (Win4Wg 3.11/Win95) VXD Loader
  6107.  0028h    NDIS         N    Y  Y    (Win4Wg 3.11) Network Driver Interface Spec
  6108.  0029h    ???
  6109.  002Ah    VWIN32        N  Y    (Win95)
  6110.  002Bh    VCOMM         N    Y  Y    (Win4Workgroups 3.11) DOS386 VCOMM Device
  6111.  002Ch    SPOOLER        N  N    Windows95 print spooler
  6112.  002Dh    W32S         Y    N  Y    WIN32s 32-bit extension to Windows API
  6113.  002Eh    ???
  6114.  002Fh    ???
  6115.  0030h    MACH32         N    N  Y    ATI Mach32 video card
  6116.  0031h    NETBEUI         N    N  N    (Win4Workgroups 3.11) NETBEUI
  6117.  0032h    SERVER         N    Y  Y    (Win4Workgroups 3.11) Int21 File Server
  6118.  0032h    VSERVER        N  Y    (Win95) Int21 File Server
  6119.  0033h    CONFIGMG    Y  Y    (Win95)
  6120.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  6121.  0034h    DWCFGMG.SYS    Y    DOS Plug-and-Play configuration manager
  6122.  0035h    SCSIPORT    N  N    (Win95) virtualized access to SCSI adapter
  6123.  0036h    VFBACKUP    Y  Y    (Win95)
  6124.  0037h    ENABLE        Y  Y    (Win95)
  6125.  0038h    VCOND        Y  Y    (Win95)
  6126.  0039h    ???
  6127.  003Ah    VPMTD         N    N  Y    (Win4Workgroups 3.11) IFAX Scheduler Device
  6128.  003Bh    DSVXD        Y  N    DoubleSpace VxD from MS-DOS v6.x
  6129.  003Ch    ISAPNP        N  N    (Win95)
  6130.  003Dh    BIOS        Y  Y    (Win95)
  6131.  003Eh    WSOCK        Y  Y    (Win95) WinSock
  6132.  003Fh    WSIPX        N  N    (Win95) IPX WinSock
  6133.  0040h    IFSMGR        N  N    (Win95)
  6134.  0041h    VCDFSD        N  N    (Win95) CD-ROM File System Driver (MSCDEX)
  6135.  0042h    MRCI2        N  N    (Win95) DriveSpace3
  6136.  0043h    PCI        N  N    (Win95)
  6137.  0048h    PERF        N  N    (Win95)
  6138.  0051h    ISAPNP        N  N    (Win95) ISA Plug-and-Play manager
  6139.  008Dh    ESDI_506    N  N    (Win95) MFM/RLL/ESDI disk driver
  6140.  0090h    voltrack    N  N    (Win95) Volume Tracker
  6141.  00FDh    FAKEIDE        N  N    (Chicago)
  6142.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  6143.  011Fh    VFLATD        N  Y    (Win95)
  6144.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  6145.  0200h    VTEMPD            dummy template driver by Ray Patch
  6146.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  6147.  0202h    WINICE        Y  Y    SoftICE/W
  6148.  0202h    SICE        Y  Y
  6149.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  6150.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  6151.  0205h    BCW        Y  Y    Nu-Mega Bounds Checker for Windows
  6152.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  6153.  0207h    DPMS         N    Y  N    Novell DOS Protected Mode Services
  6154.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  6155.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  6156.  0443h    ???
  6157.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  6158.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  6159.  0446h    VADLIBD         Y    Y  Y    MMSys Win386 AdLib Device (v3.x)
  6160.  0447h    ???
  6161.  0448h    SETULTRA        Gravis UltraSound setup
  6162.  0449h    vjoyd        N  Y    (Win95) joystick
  6163.  044Ah    mmdevldr    Y  Y    (Win95)
  6164.  044Bh    ???
  6165.  044Ch    msmpu401    N  N    (Win95) MPU-401 MIDI driver
  6166.  044Dh    msopl        N  N    (Win95) OPL-3 (SoundBlaster FM) driver
  6167.  044Eh    mssblst        N  N    (Win95) SoundBlaster MIDI driver
  6168.  045Dh    VflatD        N  Y    dva.386, part of WIN32s
  6169.  045Eh    ???
  6170.  045Fh    mssndsys        Microsoft Sound System audio driver
  6171.  045Fh    azt16        Y  Y    Aztech Sound Galaxy 16 audio driver
  6172.  0460h    UNIMODEM    N  Y    Universal Modem driver
  6173.  0480h    VNetSup         N    Y  Y    (Win4Workgrps 3.11) Virtual Network Support
  6174.  0481h    VRedir         N    N  N    (Win4Workgroups 3.11) Redirector File System
  6175.  0481h    VREDIR        N  N    (Win95) Redirector File System driver
  6176.  0482h    VBrowse        Y  Y    Win386 Virtual Browser
  6177.  0482h    SNAPVXD        Y  Y    (Win95)
  6178.  0483h    VSHARE        N  N    (Win4Workgroups) Virtual SHARE
  6179.  0483h    VSHARE        Y  Y    (Win95) Virtual SHARE
  6180.  0484h    IFSMgr         Y    N  Y    (Win4Wg 3.11) Installable File System Manager
  6181.  0485h    ???            ???
  6182.  0486h    VFAT         N    Y  Y    (Win4Workgroups 3.11) Win386 HPFS Driver
  6183.  0487h    NWLINK        Y  Y    Win386 Virtual Packet Exchange Protocol
  6184.  0487h    NWSUP         Y    N  N    NetWare Vnetbios shim
  6185.  0488h    VTDI        N  N    (Win95)
  6186.  0489h    VIP        Y  N    (Win95)
  6187.  0489h    FTCVIP        Y  Y    Frontier Technologies' VIP
  6188.  048Ah    VTCP        Y
  6189.  048Ah    MSTCP        Y  N    (Win95) TCP stack
  6190.  048Ah    FTCTDI        Y  Y    Future Technologies' TCP stack
  6191.  048Bh    VCache         N    Y  Y    (Win4Workgroups 3.11) Virtual File Cache
  6192.  048Bh    VCACHE        Y  Y    (Win95) disk cache
  6193.  048Ch    ???            ???
  6194.  048Dh    RASMAC        Y  Y    enhanced mode Win4Workgroups RASMAC device
  6195.  048Eh    NWREDIR        Y  Y    (Win95)
  6196.  048Fh    ???            ???
  6197.  0490h    ???            ???
  6198.  0491h    FILESEC            (Win95) File Access Control Manager
  6199.  0492h    NWSERVER        (Win95)
  6200.  0493h    SECPROV            (Win95) Security Provider
  6201.  0494h    NSCL        Y  Y    (Win95)
  6202.  0495h    AFVXD        N  N    (Win95)
  6203.  0496h    NDIS2SUP        (W4Wg???)
  6204.  0497h    MSODISUP    N  N    (W4Wg???)
  6205.  0498h    Splitter    N  N    (Win95)
  6206.  0499h    PPPMAC        Y  Y    (Win95)
  6207.  049Ah    VDHCP        Y  Y    (Win95)
  6208.  049Bh    VNBT        Y  Y    (Win95) NetBIOS-over-TCP/IP driver
  6209.  049Ch    ???
  6210.  049Dh    LOGGER            (Win95)
  6211.  04A2h    IRLAMP            IrDA Infrared Enumerator VxD
  6212.  097Ch    PCCARD        N  Y    (Win95) (see INT 20/VxD=097Ch)
  6213.  1020h    VCV            Microsoft C/C++ 7.00 CodeView
  6214.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  6215.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  6216.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  6217.  2020h    PIPE        Y  Y    by Thomas W. Olson, in Windows/DOS DevJrn 5/92
  6218.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  6219.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  6220.  22C0h    ???         Y        Rational Systems DOS/4GW ???
  6221.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  6222.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  6223.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  6224.  24A2h    SYMEvent    Y  Y    Norton Utilities v8
  6225.  2540h    VILD        Y  N    INTERLNK client from MS-DOS v6.x
  6226.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  6227.  2860h    COMMTASK     N    N  Y    Windows 386-mode preemptive tasker by James
  6228.                   A. Kenemuth of Interabang Computing
  6229.  28A0h    PHARLAPX    Y    PharLap inter-VM communications DLL
  6230.  28A1h    PharLap         Y    Y  Y    PharLap 386|DOS-Extender DOSXNT.386
  6231.  28C0h    VXD         N    Y  Y    Generic VxD for real and protected mode by
  6232.                   Andrew Schulman in MSJ February 1993
  6233.  28C1h    PUSHKEYS        VKD_Force_Keys device
  6234.  28C2h    VCR3D            Virtual CR3, by A.Schulman in MSJ October 1992
  6235.  2925h    EDOS        Y  Y    Enhanced DOS by Firefly Software
  6236.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  6237.  295Ah    GRVSULTR    Y  Y    Gravis UltraSound / UltraSound ACE
  6238.  3048h    FTCTCPIP    N  Y    Frontier Technologies' TCP/IP stack
  6239.  3049h    ???            (called by FNFSC32.VXD, FrontierTech's VNFSD)
  6240.  304Ch    DWCFGMG.SYS    Y    Plug-and-Play configuration access
  6241.  3098h    VstlthD         N    N  N    for QEMM Stealth ROM mode
  6242.  3099h    VVidramD    Y  N    for QEMM VIDRAM support
  6243.  30F6h    WSVV        N  Y    (Win95) WinSock for Voice-View Modems???
  6244.  310Eh    WPS        N  Y    MS DevNet CD-ROM: Windows Process Status
  6245.  3110h    VGSSD        Y  Y    VSGLX16.386 for Aztech Sound Galaxy 16
  6246.  313Bh    PMC            Power Management Coordinator
  6247.  318Ah    LMOUSE        Y  Y    (Win95) Logitech mouse???
  6248.  31CFh    STAT.386        Ton Plooy's processor statistics VxD
  6249.  3202h    VdspD        N  N    (Win95)
  6250.  3203h    vpasd        N  N    (Win95) Pro Audio Spectrum driver
  6251.  32A4h    SBAWE        Y  Y    (Win95) SoundBlaster AWE driver
  6252.  32A5h    VSB16        N  N    (Win95) SoundBlaster 16 driver
  6253.  32CBh    VFRAD        Y  Y    Dr.Franz - Simultan's diagnotics VFRAD.386
  6254.  33AAh    DECCORE        Y  Y    (Win95) DEC Pathworks core VxD
  6255.  33B4h    DECLICL        N  N    (Win95)
  6256.  33F0h    VIWD        Y  Y    Gravis UltraSound Plug-n-Play Interwave v1.x
  6257.  33FCh    ASPIENUM    N  N    (Win95)
  6258.  34DCh    MAGNARAM    N  Y    Quarterdeck MagnaRAM (MAGNA31.VXD/MAGNA95.VXD)
  6259.  357Eh    DSOUND        Y  Y    (Win95) DirectSound
  6260.  35C5h    LUGEPS        Y  Y    Lugaru's Epsilon editor
  6261.  36AEh    AIB-PC.386    Y  Y    Sunset Laboratory interface hardware driver
  6262.  377Bh    MX1501HAD        Cherry keyboard chipcard reader
  6263.  38DAh    VIWD        Y  Y    UltraSond PnP InterWave driver v2.0beta
  6264.  4321h    POSTMSG        Y  Y    (see #2399)
  6265.  4321h    VPCD        N  N    PCache
  6266.  4321h    avvxp500    N  N    (Win95) VxP500 driver
  6267.  6001h    REGVXD        Y  Y    Windows95 Registry Monitor helper
  6268.  7A5Fh    SIWVID         Y    Y  Y    Soft-ICE for Windows video driver
  6269.  7FE0h    VSWITCHD    Y  N    by Jeff Prosise
  6270.  7FE0h    VWFD         N    Y  Y    reports windowed/fullscreen state; by Neil
  6271.                   Sandlin of Microsoft, shipped with ANSIPLUS
  6272.  7FE1h    VWATCHD         N    Y  Y    basic driver w/ no functionality except tracing
  6273.                   by Keith Jin of Microsoft PSS
  6274.  7FE5h    VFINTD         N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  6275.                   Sandlin of Microsoft
  6276.  7FE7h    VMPAGES         N    Y  Y    demonstration of exporting VxD services, by
  6277.                   Neil Sandlin of Microsoft
  6278.  7FE8h    VPOSTD        Y  Y    PostMessage() demo by Curtis J. Palmer of MS
  6279.  7FE9h    VIdleD         N    N  N    demonstration of Call_When_Idle function, by
  6280.                   Bernie McIlroy of Microsoft
  6281.  7FEBh    VMIOD         N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  6282.                   Sandlin of Microsoft
  6283.  7FEDh    VMIRQD         N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  6284.                   Sandlin of Microsoft
  6285.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  6286.  EEEEh    VEPSD        N  N    Virtual Extended Paging Services for
  6287.                   Borland C++ v4.0
  6288. Notes:    The high bit of the VxD ID is reserved for future use. Originally,
  6289.       the next 10 bits were the OEM number which was assigned by Microsoft,
  6290.       and the low 5 bits were the device number.  Currently, Microsoft
  6291.       assigns VxD IDs individually for each driver; send blank email to
  6292.       vxdid@microsoft.com for more information.
  6293.     "CallOut"=Y indicates that the VxD uses the INT 2F/AX=1607h/BX=VxDID
  6294.       device callout interface; "PM" and "V86" indicate whether the VxD
  6295.       provides an API entry point in protected mode and Virtual-86 mode
  6296.       (e.g. DOS boxes)
  6297. --------W-2F1684BX0001-----------------------
  6298. INT 2F - MS Windows95 - VMM - GET API ENTRY POINT
  6299.     AX = 1684h
  6300.     BX = 0001h (virtual device ID for VMM) (see #2329)
  6301.     ES:DI = 0000h:0000h
  6302. Return: ES:DI -> VxD API entry point (see #2330)
  6303.           0000h:0000h if the VxD does not support an API
  6304. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6305.  
  6306. (Table 2330)
  6307. Call Windows VMM 16-bit entry point with:
  6308.     AX = function number
  6309.         ---registry functions---
  6310.         0100h "RegOpenKey"
  6311.         STACK:    DWORD    -> DWORD for returned key handle
  6312.             DWORD    -> ASCIZ registry key name
  6313.             DWORD    HKEY (see #2331)
  6314.         0101h "RegCreateKey"
  6315.         STACK:    DWORD    -> DWORD for returned key handle
  6316.             DWORD    -> ASCIZ registry key name
  6317.             DWORD    HKEY (see #2331)
  6318.         0102h "RegCloseKey"
  6319.         STACK:    DWORD    key handle from RegOpenKey or RegCreateKey
  6320.         0103h "RegDeleteKey"
  6321.         STACK:    DWORD    -> ASCIZ registry key name
  6322.             DWORD    HKEY (see #2331)
  6323.         0104h "RegSetValue"
  6324.         STACK:    DWORD    ???
  6325.             DWORD    -> ???
  6326.             DWORD    ???
  6327.             DWORD    -> ???
  6328.             DWORD    HKEY (see #2331)
  6329.         0105h "RegQueryValue"
  6330.         STACK:    DWORD    -> DWORD for ???
  6331.             DWORD    -> ASCIZ ???
  6332.             DWORD    -> ASCIZ ???
  6333.             DWORD    HKEY (see #2331)
  6334.         0106h "RegEnumKey"
  6335.         STACK:    DWORD    ???
  6336.             DWORD    -> ASCIZ ???
  6337.             DWORD    ???
  6338.             DWORD    HKEY (see #2331)
  6339.         0107h "RegDeleteValue"
  6340.         0108h "RegEnumValue"
  6341.         STACK:    DWORD    -> DWORD for ???
  6342.             DWORD    -> BYTE ???
  6343.             DWORD    -> DWORD for ???
  6344.             DWORD    -> DWORD for ???
  6345.             DWORD    -> DWORD for ???
  6346.             DWORD    -> ASCIZ ???
  6347.             DWORD    ???
  6348.             DWORD    HKEY (see #2331)
  6349.         0109h "RegQueryValueEx"
  6350.         010Ah "RegSetValueEx"
  6351.         010Bh "RegFlushKey"
  6352.         010Ch "RegLoadKey"
  6353.         010Dh "RegUnLoadKey"
  6354.         010Eh "RegSaveKey"
  6355.         010Fh "RegRestore"
  6356.         0110h "RegRemapPreDefKey"
  6357. Return: parameters popped from stack
  6358.     DX:AX = return value
  6359.  
  6360. (Table 2331)
  6361. Values for Windows95 VMM predefined HKEY values:
  6362.  80000000h    HKEY_CLASSES_ROOT
  6363.  80000001h    HKEY_CURRENT_USER
  6364.  80000002h    HKEY_LOCAL_MACHINE
  6365.  80000003h    HKEY_USERS
  6366.  80000004h    HKEY_PERFORMANCE_DATA
  6367.  80000005h    HKEY_CURRENT_CONFIG
  6368.  80000006h    HKEY_DYN_DATA
  6369. SeeAlso: #2330
  6370. --------W-2F1684BX0003-----------------------
  6371. INT 2F - MS Windows - VPICD - GET API ENTRY POINT
  6372.     AX = 1684h
  6373.     BX = 0003h (virtual device ID for VPICD device) (see #2329)
  6374.     ES:DI = 0000h:0000h
  6375. Return: ES:DI -> VxD API entry point (see #2332)
  6376.           0000h:0000h if the VxD does not support an API
  6377. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6378.  
  6379. (Table 2332)
  6380. Call VPICD API entry point with:
  6381.     EAX = function number
  6382.         0000h get version
  6383.         Return: AX = binary version (AH=major, AL=minor)
  6384.         0001h virtualize timer???
  6385.         0002h unvirtualize timer???
  6386. --------W-2F1684BX0005-----------------------
  6387. INT 2F - MS Windows - VTD - GET API ENTRY POINT
  6388.     AX = 1684h
  6389.     BX = 0005h (virtual device ID for VTD device) (see #2329)
  6390.     ES:DI = 0000h:0000h
  6391. Return: ES:DI -> VxD API entry point (see #2333)
  6392.           0000h:0000h if the VxD does not support an API
  6393. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6394.  
  6395. (Table 2333)
  6396. Call VTD.386/VTD.VXD entry point with:
  6397.     AX = function number
  6398.         0000h get VTD version number
  6399.         Return: CF clear
  6400.             AH = major version
  6401.             AL = minor version
  6402.         0100h get current clock tick time
  6403.         Return: EDX:EAX = clock tick time in 840ns units since Windows
  6404.                   was started
  6405.         0101h get current system time in milliseconds
  6406.         Return: EAX = time in milliseconds that Windows has been
  6407.                   running
  6408.         0102h get current virtual machine time
  6409.         Return: EAX = cumulative amount of time the virtual machine has
  6410.                   been active, in milliseconds
  6411. Note:    this entry point should only be called directly when TOOLHELP.DLL
  6412.       TimerCount() cannot be called
  6413. SeeAlso: #0964,#0966,#0965 at INT 20"Windows"
  6414. --------W-2F1684BX0006-----------------------
  6415. INT 2F P - MS Windows95 - V86MMGR - GET API ENTRY POINT
  6416.     AX = 1684h
  6417.     BX = 0006h (virtual device ID for V86MMGR device) (see #2329)
  6418.     ES:DI = 0000h:0000h
  6419. Return: ES:DI -> VxD API entry point (see #2334)
  6420.           0000h:0000h if the VxD does not support API in current mode
  6421. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6422.  
  6423. (Table 2334)
  6424. Call V86MMGR entry point with:
  6425.     EAX = function number
  6426.         0000h get V86MMGR version
  6427.         Return: CF clear
  6428.             AH = major version
  6429.             AL = minor version
  6430.         0001h get ???
  6431.         Return: CF clear
  6432.             EAX = status bits
  6433.                 bit 0: ???
  6434.                 bit 1: ???
  6435.                 bit 2: ???
  6436.                 bit 3: ???
  6437.                 bit 4: ???
  6438.         else
  6439.         Return: CF set
  6440. --------W-2F1684BX0009-----------------------
  6441. INT 2F P - MS Windows - REBOOT - GET API ENTRY POINT
  6442.     AX = 1684h
  6443.     BX = 0009h (virtual device ID for REBOOT device) (see #2329)
  6444.     ES:DI = 0000h:0000h
  6445. Return: ES:DI -> VxD API entry point (see #2335)
  6446.           0000h:0000h if the VxD does not support an API
  6447. SeeAlso: INT 14/AH=17h"FOSSIL",INT 16/AX=E0FFh
  6448.  
  6449. (Table 2335)
  6450. Call REBOOT protected-mode entry point with:
  6451.     AX = function
  6452.         0100h warm boot
  6453.         Return: never
  6454.         Note:    broadcasts "Reboot_Processor" message, which is caught
  6455.               by the VKD device
  6456.         0201h set KERNEL Ctrl-Alt-Del handler
  6457.         ES:DI -> new Ctrl-Alt-Del handler
  6458.         DS:SI -> KERNEL reboot sanity check byte
  6459.         Return: CF clear
  6460.         Notes:    if an application installs its own handler and then
  6461.               chains to Windows' handler, Windows will no longer
  6462.               be able to detect hung applications, and will always
  6463.               produce an "Application not responding" dialog
  6464.             DS must contain a writable, fixed selector because
  6465.               the provided address is converted to a linear address
  6466.               before being stored
  6467.             when Ctrl-Alt-Del is pressed in the system VM, Reboot
  6468.               sets the sanity check byte to zero, schedules a
  6469.               750ms wait, and then tests whether the check byte is
  6470.               still zero; if not, it displays a message that there
  6471.               is no hung application and then exits
  6472.         0202h get KERNEL Ctrl-Alt-Del handler
  6473.         Return: CF clear
  6474.             ES:DI -> current Ctrl-Alt-Del handler
  6475.         Note:    the default handler is located in KERNEL
  6476.         0203h display "Application not responding" dialog box
  6477.         ES:DI -> ASCIZ name of hung application
  6478.         Return: never if user pressed Ctrl-Alt-Del a second time
  6479.             CF clear
  6480.             AX = result
  6481.                 0000h user pressed Esc
  6482.                 0001h user pressed Enter
  6483.         Note:    this function is used by the default Windows
  6484.               Ctrl-Alt-Del handler
  6485.         0204h set/reset protected-mode INT 01 handler
  6486.         CX:EDX -> new protected-mode INT 01 handler
  6487.         CX = 0000h restore protected-mode INT 01 handler
  6488.         Return: CF clear
  6489.         Notes:    if CX is nonzero, the current handler address is saved
  6490.               internally before the new handler is set; this saved
  6491.               address is then used when CX is zero on entry
  6492.             used by Windows' default Ctrl-Alt-Del handler; actual
  6493.               fatal exit to DOS will be done on next INT 01
  6494.         Warning: opened files are not closed and remain open as
  6495.               orphaned files in DOS
  6496. Note:    functions 0201h and 0203h are not useful outside the system VM
  6497. SeeAlso: #0967,#0969
  6498. --------W-2F1684BX000A-----------------------
  6499. INT 2F P - MS Windows - VDD - GET API ENTRY POINT
  6500.     AX = 1684h
  6501.     BX = 000Ah (virtual device ID for VDD device) (see #2329)
  6502.     ES:DI = 0000h:0000h
  6503. Return: ES:DI -> VxD API entry point (see #2336)
  6504.           0000h:0000h if the VxD does not support API in current mode
  6505. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6506.  
  6507. (Table 2336)
  6508. Call VDD entry point with:
  6509.     EAX = function
  6510.         0000h get VDD version
  6511.         Return: CF clear
  6512.             AH = major version
  6513.             AL = minor version
  6514.         Note:    also performs an internal initialization
  6515.         0001h ???
  6516.         Return: ECX = ???
  6517.             ???
  6518.         0002h
  6519.         0003h
  6520.         0004h
  6521.         0005h
  6522.         0006h
  6523.         0007h
  6524.         0008h
  6525.         0009h
  6526.         0080h
  6527.         0081h
  6528.         0082h
  6529.         0083h
  6530.         0084h
  6531.         0085h
  6532.         0086h
  6533.         0087h
  6534.         0088h
  6535.         0089h
  6536.         else
  6537.         Return: nothing
  6538. --------W-2F1684BX000C-----------------------
  6539. INT 2F - MS Windows - VMD - GET API ENTRY POINT
  6540.     AX = 1684h
  6541.     BX = 000Ch (virtual device ID for VMD device) (see #2329)
  6542.     ES:DI = 0000h:0000h
  6543. Return: ES:DI -> VxD API entry point (see #2337)
  6544.           0000h:0000h if the VxD does not support API in current mode
  6545. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6546.  
  6547. (Table 2337)
  6548. Call VMOUSE entry point with:
  6549.     EAX = function number
  6550.         0000h get VMOUSE version
  6551.         Return: CF clear
  6552.             AH = major version
  6553.             AL = minor version
  6554.         0001h
  6555.         EBX = ???
  6556.         ECX = ???
  6557.         Return: CF clear if successful
  6558.             CF set on error (e.g. fn 0003h not yet called)
  6559.         0002h ??? (calls "test system VM handle")
  6560.         Return: CF clear if successful (in system VM)
  6561.             CF set on error
  6562.         0003h ???
  6563.         ECX = ???
  6564.         DX = ???
  6565.         Return: CF clear
  6566.         0004h ???
  6567.         Note: invokes Call_Priority_VM_Event
  6568.         0005h get mouse port data
  6569.         Return: CF clear
  6570.             AL = ??? (04h)
  6571.             AH = mouse IRQ interrupt number (IRQ4=0Ch,etc.)
  6572.             CX = mouse I/O port address (e.g. 03F8h)
  6573.             DX = COM port number??? (0001h for mouse on COM1)
  6574.         0100h NOP???
  6575.         Return: CF clear
  6576.         0101h init???
  6577.         Return: CF clear
  6578.         Note:    appears to be the same as fn 0005h, but returns no data
  6579.         0102h unimplemented
  6580.         Return: CF set
  6581.         0103h check ???
  6582.         Return: AX = status (0000h/0001h)
  6583.         Note:    checks flag set by fn 0003h
  6584.         else
  6585.         Return: CF set
  6586. SeeAlso: #2336,#2338
  6587. --------W-2F1684BX000D-----------------------
  6588. INT 2F P - MS Windows - VKD - GET API ENTRY POINT
  6589.     AX = 1684h
  6590.     BX = 000Dh (virtual device ID for VKD device) (see #2329)
  6591.     ES:DI = 0000h:0000h
  6592. Return: ES:DI -> VxD API entry point (see #2338)
  6593.           0000h:0000h if the VxD does not support API in current mode
  6594. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6595.  
  6596. (Table 2338)
  6597. Call VKD entry point with:
  6598.     EAX = function
  6599.         0000h get VKD version
  6600.         Return: CF clear
  6601.             AH = major version
  6602.             AL = minor version
  6603.         0001h ???
  6604.         EBX = VM handle or 00000000h to use ??? VM handle
  6605.         CH = ???
  6606.         CL = ???
  6607.         EDX = ??? or FFFFFFFFh
  6608.         Return: CF clear if successful
  6609.             CF set on error
  6610.         else
  6611.         Return: CF set
  6612. SeeAlso: #2337,#2339
  6613. --------W-2F1684BX000E-----------------------
  6614. INT 2F P - MS Windows - VCD - GET API ENTRY POINT
  6615.     AX = 1684h
  6616.     BX = 000Eh (virtual device ID for VCD device) (see #2329)
  6617.     ES:DI = 0000h:0000h
  6618. Return: ES:DI -> VxD API entry point (see #2339)
  6619.           0000h:0000h if the VxD does not support API in current mode
  6620. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6621.  
  6622. (Table 2339)
  6623. Call VCD entry point with:
  6624.     EDX = function number
  6625.         0000h get VCD version
  6626.         Return: CF clear
  6627.             AH = major version
  6628.             AL = minor version
  6629.         0001h get ???
  6630.         Return: CF clear
  6631.             AX = bit mask of ???
  6632.         0002h get ???
  6633.         CX = COM port number
  6634.         Return: CF clear
  6635.             DX:AX -> ???
  6636.         0003h set ???
  6637.         CX = COM port number
  6638.         DX:AX -> new ???
  6639.         Return: CF clear
  6640.         0004h acquire COM port
  6641.         AX = ???
  6642.         CX = COM port number
  6643.         Return: CF clear
  6644.             AX = ???
  6645.             EBX = ???
  6646.             DX = ???
  6647.         0005h release COM port
  6648.         CX = COM port number
  6649.         Return: CF clear
  6650.         0006h ???
  6651.         Return: CF set
  6652.             AL = 00h
  6653.         else
  6654.         Return: CF set
  6655.             EAX = FFFFFFFFh
  6656. Note:    these functions are apparently only available from the system VM,
  6657.       returning CF set and EAX=FFFFFFFFh otherwise
  6658. SeeAlso: #2338,#2340
  6659. --------W-2F1684BX000F-----------------------
  6660. INT 2F P - MS Windows - VPD - GET API ENTRY POINT
  6661.     AX = 1684h
  6662.     BX = 000Fh (virtual device ID for VPD device) (see #2329)
  6663.     ES:DI = 0000h:0000h
  6664. Return: ES:DI -> VxD API entry point (see #2340)
  6665.           0000h:0000h if the VxD does not support API in current mode
  6666. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6667.  
  6668. (Table 2340)
  6669. Call VPD entry point with:
  6670.     EDX = function number
  6671.         0000h get VPD version
  6672.         Return: CF clear
  6673.             AH = major version
  6674.             AL = minor version
  6675.             DX = ??? (CB01h)
  6676.         0001h get valid??? printers
  6677.         Return: CF clear
  6678.             AX = bitmask of ??? printers (bits 0-2)
  6679.         0002h get ??? for printer
  6680.         CX = printer port (0-2)
  6681.         Return: CF clear if successful
  6682.                 BX:AX = ???
  6683.             CF set on error (invalid port number)
  6684.         0003h set ??? for printer
  6685.         CX = printer port (0-2)
  6686.         BX:AX = ???
  6687.         Return:    CF clear if successful
  6688.             CF set on error (invalid port number)
  6689.         0004h ???
  6690.         CX = printer port (0-2)
  6691.         EAX = VM handle
  6692.         Return:    CF clear if successful
  6693.             CF set on error (invalid port number)
  6694.         0005h ???
  6695.         CX = printer port (0-2)
  6696.         EAX = VM handle
  6697.         Return:    CF clear if successful
  6698.             CF set on error (invalid port number or ???)
  6699.         0006h-000Eh unused
  6700.         Return: CF set
  6701.         000Fh ???
  6702.         CX = printer port (0-2)
  6703.         AX = ???
  6704.         Return:    CF clear if successful
  6705.             CF set on error (e.g. invalid port number)
  6706.         0010h ???
  6707.         CX = printer port (0-2)
  6708.         Return:    CF clear if successful
  6709.             CF set on error (e.g. invalid port number)
  6710.         0011h ???
  6711.         CX = printer port (0-2)
  6712.         Return:    CF clear if successful
  6713.             CF set on error (e.g. invalid port number)
  6714.         0012h get port status
  6715.         CX = printer port (0-2)
  6716.         Return:    CF clear if successful
  6717.                 AX = port status (see #P263 at PORT 03BCh"LPT")
  6718.             CF set on error (e.g. invalid port number)
  6719.         else
  6720.         Return: CF set
  6721. Note:    these functions are apparently only available from the system VM,
  6722.       returning CF set
  6723. SeeAlso: #2339,#2341
  6724. --------W-2F1684BX0010-----------------------
  6725. INT 2F - MS Windows - IOS - GET API ENTRY POINT
  6726.     AX = 1684h
  6727.     BX = 0010h (virtual device ID for IOS device) (see #2329)
  6728.     ES:DI = 0000h:0000h
  6729. Return: ES:DI -> VxD API entry point (see #2341)
  6730.           0000h:0000h if the VxD does not support API in current mode
  6731. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6732.  
  6733. (Table 2341)
  6734. Call IOS entry point with:
  6735.     EAX = function number
  6736.         0000h ???
  6737.         Return: CF clear if successful
  6738.                 AX = 0000h
  6739.             CF set on error
  6740.                 AX = FFFFh
  6741.         0001h check if ???
  6742.         Return: CF clear if successful
  6743.                 AX = 0000h
  6744.             CF set on error
  6745.                 AX = FFFFh
  6746.         0002h requestor services???
  6747.         DL = service number???
  6748.         Return: CF clear if successful
  6749.                 AX = 0000h
  6750.                 DX = ???
  6751.             CF set on error
  6752.                 AX = FFFFh
  6753.         Note:    calls "IOS_Requestor_Service" (see INT 20"Windows")
  6754.         0003h ??? (copies five bytes of data internally)
  6755.         Return: CF clear if successful
  6756.                 AX = 0000h
  6757.                 EDX = ???
  6758.             CF set on error
  6759.                 AX = FFFFh
  6760.         else
  6761.         Return: CF set
  6762.             AX = FFFFh
  6763. SeeAlso: #2340,#2342
  6764. --------W-2F1684BX0011-----------------------
  6765. INT 2F - MS Windows - VMCPD - GET API ENTRY POINT
  6766.     AX = 1684h
  6767.     BX = 0011h (virtual device ID for VMCPD device) (see #2329)
  6768.     ES:DI = 0000h:0000h
  6769. Return: ES:DI -> VxD API entry point (see #2342)
  6770.           0000h:0000h if the VxD does not support API in current mode
  6771. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6772.  
  6773. (Table 2342)
  6774. Call Windows95 VMCPD protected-mode entry point with:
  6775.     EAX = function number
  6776.         0000h get VMCPD version
  6777.         Return: CF clear
  6778.             AH = major version
  6779.             AL = minor version
  6780.         0001h get ??? flags
  6781.         Return: CF clear
  6782.             AX = ??? flags
  6783.                 bit 0: ???
  6784.                 bit 1: ???
  6785.                 bit 2: ???
  6786.                 bit 3: ???
  6787.         else
  6788.         Return: CF set
  6789. SeeAlso: #2341,#2343
  6790. --------W-2F1684BX0015-----------------------
  6791. INT 2F - MS Windows - DOSMGR - GET API ENTRY POINT
  6792.     AX = 1684h
  6793.     BX = 0015h (virtual device ID for DOSMGR device) (see #2329)
  6794.     ES:DI = 0000h:0000h
  6795. Return: ES:DI -> VxD API entry point (see #2343,#0978)
  6796.           0000h:0000h if the VxD does not support an API
  6797. SeeAlso: #0978 at INT 20"Windows"
  6798.  
  6799. (Table 2343)
  6800. Call DOSMGR entry point with:
  6801.     AX = 0000h get DOSMGR version
  6802.         Return: CF clear
  6803.             AX = version (AH = major, AL = minor)
  6804.     AX = 0001h set critical focus
  6805.         Return: CF clear
  6806.     AX = 0002h crash current virtual machine
  6807.         Return: never
  6808.         Note:   displays message box stating that "application has been
  6809.               stopped by the DOSMGR device"
  6810.     AX = 0003h enter critical section
  6811.         Note:   this function assumes that the code for INT 2A/AX=8001h
  6812.               and INT 2A/AX=8002h have been modified for Windows
  6813.     AX = 0004h get VM ID byte
  6814.         Return: CF clear if successful
  6815.             ES:DI -> VM ID byte
  6816.             CF set on error
  6817.         Note:   this function fails if the INT 2A modifications have not
  6818.               yet been applied
  6819.     AX = 0005h inform Windows of possible media change
  6820.         BL = drive number (00h=A:)
  6821.         Return: CF clear if successful
  6822.             CF set on error
  6823. SeeAlso: #0978 at INT 20"Windows",#2342,#2344
  6824. --------W-2F1684BX0017-----------------------
  6825. INT 2F U - MS Windows - SHELL - GET API ENTRY POINT
  6826.     AX = 1684h
  6827.     BX = 0017h (virtual device ID for SHELL device) (see #2329)
  6828.     ES:DI = 0000h:0000h
  6829. Return: ES:DI -> VxD API entry point (see #2344)
  6830.           0000h:0000h if the VxD does not support an API
  6831. SeeAlso: AX=1684h/BX=0021h,#0979 at INT 20"Windows"
  6832.  
  6833. (Table 2344)
  6834. Call SHELL entry point with:
  6835.     EDX = function number (0000h-0027h,0100h-0108h, mostly unknown)
  6836.         0000h get version number
  6837.         Return: AX = version number
  6838.             EBX = system VM handle
  6839.         0001h "SHELL_Get_SYSVM_Info" get system VM information
  6840.         Return: CF clear
  6841.             AX bit 0 set if system VM executing exclusively
  6842.             BX = background time slice priority
  6843.             CX = foreground time slice priority
  6844.             SI = minimum time slice in milliseconds
  6845.         0002h "SHELL_Set_SYSVM_Info" set system VM information
  6846.         AX bit 0 set if system VM should execute exclusively (ignored?)
  6847.         BX = background time slice priority (1-10000)
  6848.         CX = foreground time slice priority (1-10000)
  6849.         SI = minimum time slice in milliseconds (1-10000)
  6850.         Return: CF clear if successful
  6851.         0003h "SHELL_Crt_VM" create a virtual machine
  6852.         ES:EDI -> SEB structure (see #2345)
  6853.         Return: CF clear if successful
  6854.                EAX = VM handle
  6855.             CF set on error
  6856.                EDX,EAX = result from GetSetDetailedVMError()
  6857.         0004h "SHELL_Destroy_VM" destroy a virtual machine
  6858.         EBX = VM handle (not system VM)
  6859.         Return: nothing
  6860.         0005h "SHELL_Set_Focus"
  6861.         EBX = VM handle
  6862.         ECX = ???
  6863.         Return: nothing
  6864.         0006h "SHELL_Get_VM_State"
  6865.         EBX = VM handle (not system VM)
  6866.         ES:EDI -> ??? structure
  6867.         Return: CF clear if successful
  6868.         0007h "SHELL_Set_VM_State"
  6869.         EBX = VM handle (not system VM)
  6870.         ES:EDI -> ??? structure
  6871.         0008h "SHELL_Debug_Out"
  6872.         ???
  6873.         Return: ???
  6874.         Note:    dummy function in retail version of MS Windows
  6875.         0009h "SHELL_VMDA_Init"
  6876.         ???
  6877.         Return: ???
  6878.         000Ah "SHELL_VMDA_Exit"
  6879.         ???
  6880.         Return: ???
  6881.         000Bh "SHELL_Get_Message_Txt"
  6882.         ???
  6883.         Return: ???
  6884.         000Ch "SHELL_Event_Complete"
  6885.         ???
  6886.         Return: ???
  6887.         000Dh "SHELL_Get_Contention_Info"
  6888.         ???
  6889.         Return: ???
  6890.         000Eh "SHELL_Get_Clip_Info"
  6891.         ???
  6892.         Return: ???
  6893.         000Fh "SHELL_Set_Paste"
  6894.         ???
  6895.         Return: ???
  6896.         0010h "SHELL_Switcher_Assist"
  6897.         ???
  6898.         Return: ???
  6899.         0011h "SHELL_Get_FileSysChng"
  6900.         ???
  6901.         Return: ???
  6902.         0012h "SHELL_Query_Destroy"
  6903.         ???
  6904.         Return: ???
  6905.         0013h "SHELL_SetFocus_Cur_VM" set input focus to current VM
  6906.         ???
  6907.         Return: ???
  6908.         0014h "SHELL_User_Busy_API"
  6909.         ???
  6910.         Return: ???
  6911.         0015h "SHELL_Chng_Hot_Key"
  6912.         ???
  6913.         Return: ???
  6914.         0016h "SHELL_Get_TermInfo"
  6915.         ???
  6916.         Return: ???
  6917.         ---Windows95---
  6918.         0017h ???
  6919.         0018h ???
  6920.         0019h ???
  6921.         001Ah ???
  6922.         001Bh ???
  6923.         001Ch ???
  6924.         001Dh ???
  6925.         001Eh ???
  6926.         001Fh ???
  6927.         0020h ???
  6928.         0021h ???
  6929.         0022h ???
  6930.         0023h ???
  6931.         0024h ???
  6932.         0025h ???
  6933.         0026h ???
  6934.         Note:    makes VxDCALL 00178002h (see INT 20"Windows")
  6935.         0027h ???
  6936.         0100h get ??? version
  6937.         Return: AX = version??? (0400h for Windows95)
  6938.         0101h not implemented
  6939.         Return: CF set
  6940.             EAX = FFFFFFFFh
  6941.         0102h not implemented
  6942.         Return: CF set
  6943.             EAX = FFFFFFFFh
  6944.         0103h not implemented
  6945.         Return: CF set
  6946.             EAX = FFFFFFFFh
  6947.         0104h ???
  6948.         0105h ???
  6949.         0106h ???
  6950.         ???
  6951.         Return: CF clear if successful
  6952.             CF set on error
  6953.         0107h get SDK version for VxD
  6954.         AX = VxD identifier
  6955.         Return: EAX = VxD ID (high word) and SDK version (low)
  6956.                 00000000h if no such VxD loaded
  6957.         Note:    makes a VMMCALL 0001013Fh (see INT 20"Windows")
  6958.               followed by ???
  6959.         0108h ???
  6960. Return: CF set if called from VM other than system VM
  6961.         EAX = FFFFFFFFh
  6962. Note:    except for functions 0013h,0026h,and 010xh, this API may only be
  6963.       called from the system VM
  6964. SeeAlso: #0979 at INT 20"Windows"
  6965.  
  6966. Format of Shell Execution Block (SEB):
  6967. Offset    Size    Description    (Table 2345)
  6968.  00h    DWORD    PIF flags (see #2346)
  6969.  04h    DWORD    display flags (see #2347)
  6970.  08h    PWORD    -> pathname of .EXE to run
  6971.  0Eh    PWORD    -> argument list
  6972.  14h    PWORD    -> working drive/directory
  6973.  1Ah    WORD    desired number of V86 pages for virtual machine
  6974.  1Ch    WORD    minimum number of V86 pages for VM
  6975.  1Eh    WORD    foreground priority
  6976.  20h    WORD    background priority
  6977.  22h    WORD    maximum KB of EMS
  6978.  24h    WORD    minimum KB of EMS
  6979.  26h    WORD    maximum KB of XMS
  6980.  28h    WORD    minimum KB of XMS
  6981.  2Ah    WORD    maximum KB of DPMI???
  6982.  2Ch    WORD    minimum KB of DPMI???
  6983.  2Eh 128 BYTEs    title
  6984. Note:    the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset
  6985.       followed by a WORD selector
  6986.  
  6987. Bitfields for 386 Enhanced Mode PIF flags:
  6988. Bit(s)    Description    (Table 2346)
  6989.  0    exclusive use of processor when VM is fullscreen
  6990.  1    VM runs in background
  6991.  2    VM runs in window
  6992.  3-4    ???
  6993.  5    Alt-Tab reserved
  6994.  6    Alt-Esc reserved
  6995.  7    Alt-Space reserved
  6996.  8    Alt-Enter reserved
  6997.  9    Alt-PrtSc reserved
  6998.  10    PrtSc reserved
  6999.  11    Ctrl-Esc reserved
  7000.  12    VM will release idle time slice
  7001.  13    VM not allowed to use high memory
  7002.  14    ???
  7003.  15    VM expanded memory not pageable
  7004.  16    VM extended memory not pageable
  7005.  17    Fast paste from clipboard enabled
  7006.  18    VM application memory not pageable
  7007.  30    Close VM when application exits
  7008. SeeAlso: #2345,#2347
  7009.  
  7010. Bitfields for SHELL display options:
  7011. Bit(s)    Description    (Table 2347)
  7012.  0    emulate text mode
  7013.  1    monitor text port
  7014.  2    monitor low graphics port
  7015.  3    monitor high graphics port
  7016.  7    Retain video memory
  7017. SeeAlso: #2345,#2346
  7018. --------W-2F1684BX001A-----------------------
  7019. INT 2F - MS Windows - VNETWARE - GET API ENTRY POINT
  7020.     AX = 1684h
  7021.     BX = 001Ah (virtual device ID for VNETWARE device) (see #2329)
  7022.     ES:DI = 0000h:0000h
  7023. Return: ES:DI -> VxD API entry point
  7024.           0000h:0000h if the VxD does not support API in current mode
  7025. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7026. --------W-2F1684BX001D-----------------------
  7027. INT 2F P - MS Windows - WINDEBUG - GET API ENTRY POINT
  7028.     AX = 1684h
  7029.     BX = 001Dh (virtual device ID for WINDEBUG device) (see #2329)
  7030.     ES:DI = 0000h:0000h
  7031. Return: ES:DI -> VxD API entry point
  7032.           0000h:0000h if the VxD does not support API in current mode
  7033. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7034. --------W-2F1684BX0021-----------------------
  7035. INT 2F PU - MS Windows - PAGEFILE - GET API ENTRY POINT
  7036.     AX = 1684h
  7037.     BX = 0021h (virtual device ID for PAGEFILE device) (see #2329)
  7038.     ES:DI = 0000h:0000h
  7039. Return: ES:DI -> VxD API entry point (see #2348)
  7040.           0000h:0000h if the VxD does not support an API
  7041. SeeAlso: AX=1684h/BX=0017h,#0985 at INT 20"Windows"
  7042.  
  7043. (Table 2348)
  7044. Call PAGEFILE entry point with:
  7045.     AX = function
  7046.         0000h get version
  7047.         Return: CF clear
  7048.             AX = version (AH = major, AL = minor)
  7049.         0001h get swap file info
  7050.         DS:SI -> 128-byte buffer for swap file full pathname
  7051.         DS:DI -> 128-byte buffer for SPART.PAR full pathname
  7052.         Return: CF clear
  7053.             AL = pager type (see #2349)
  7054.             AH = flags
  7055.                 bit 7: swap file corrupted
  7056.             ECX = maximum size of swap file
  7057.             DS:SI buffer filled if paging enabled
  7058.             DS:DI buffer filled if permanent swap file
  7059.         0002h delete permanent swap file on exit
  7060.         Return: CF clear
  7061.         0003h get current temporary swap file size
  7062.         Return: CF clear
  7063.             DX:AX = current swap file size in bytes
  7064.                 0000h:0000h if permanent swap file
  7065. Note:    this API is only available in protected mode, and may only be called
  7066.       from the system VM
  7067. SeeAlso: #0985 at INT 20"Windows",#2350
  7068.  
  7069. (Table 2349)
  7070. Values for MS Windows PAGEFILE pager type:
  7071.  00h    paging disabled
  7072.  01h    MSDOS
  7073.  02h    BIOS
  7074.  03h    32-bit disk access
  7075. SeeAlso: #2348
  7076. --------W-2F1684BX0022-----------------------
  7077. INT 2F P - MS Windows - APIX - GET API ENTRY POINT
  7078.     AX = 1684h
  7079.     BX = 0022h (virtual device ID for APIX device) (see #2329)
  7080.     ES:DI = 0000h:0000h
  7081. Return: ES:DI -> VxD API entry point (see #2350)
  7082.           0000h:0000h if the VxD does not support API in current mode
  7083. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7084.  
  7085. (Table 2350)
  7086. Call APIX protected-mode entry point with:
  7087.     AH = function number
  7088.         00h get APIX version
  7089.         Return: CF clear
  7090.             AH = major version
  7091.             AL = minor version
  7092.         01h ???
  7093.         Return: CF clear
  7094.             AX = number of ???
  7095.         02h NOP
  7096.         Return: CF clear
  7097.         03h ???
  7098.         Return: CF clear
  7099.             AX = 0000h/FFFFh
  7100.         else
  7101.         Return: CF clear (bug?)
  7102. SeeAlso: #2348,#2353
  7103. --------W-2F1684BX0026-----------------------
  7104. INT 2F P - MS Windows - VPOWERD - GET API ENTRY POINT
  7105.     AX = 1684h
  7106.     BX = 0026h (virtual device ID for VPOWERD device) (see #2329)
  7107.     ES:DI = 0000h:0000h
  7108. Return: ES:DI -> VxD API entry point (see #2351)
  7109.           0000h:0000h if the VxD does not support API in current mode
  7110. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7111.  
  7112. (Table 2351)
  7113. Call VPOWERD.VXD entry point with:
  7114.     AX = function number
  7115.         0000h get VPOWERD version
  7116.         Return: DX = 0000h
  7117.             AX = version (AH = major, AL = minor)
  7118.         0001h get APM BIOS version
  7119.         Return: DX:AX = APM BIOS version
  7120.         0002h get current power management level
  7121.         Return: DX:AX = power management level
  7122.         0003h enable/disable power management (see INT 15/AX=5308h)
  7123.         ??? = new state of power management
  7124.         Return: DX:AX = 0000h:0000h if successful
  7125.                else error code (see #2352)
  7126.         0004h set power state (see INT 15/AX=5307h)
  7127.         Return: DX:AX = 0000h:0000h if successful
  7128.                else error code (see #2352)
  7129.         0005h set system power status
  7130.         Return: DX:AX = 0000h:0000h if successful
  7131.                else error code (see #2352)
  7132.         0006h restore APM power-on defaults (see INT 15/AX=5309h)
  7133.         Return: DX:AX = 0000h:0000h if successful
  7134.                else error code (see #2352)
  7135.         0007h get power status (see INT 15/AX=530Ah)
  7136.         Return: ???
  7137.         0008h get APM 1.1 power state (see INT 15/AX=530Ch)
  7138.         Return: ???
  7139.         0009h invoke OEM APM function
  7140.         ??? -> buffer containing parameters for INT 15/AX=5380h
  7141.         Return: DX:AX = 0000h:0000h or error code (see #2352)
  7142.             buffer updated if successful
  7143.         000Ah register power handler
  7144.         ???
  7145.         Return: DX:AX = 0000h:0000h or error code
  7146.         000Bh deregister power handler
  7147.         ???
  7148.         Return: DX:AX = 0000h:0000h or error code (see #2352)
  7149.         000Ch Win32 get system power status
  7150.         000Dh Win32 set system power status
  7151.         else
  7152.         Return: DX = 0000h
  7153.             AX = 00FFh
  7154. SeeAlso: #2350,#2353
  7155.  
  7156. (Table 2352)
  7157. Values for VPOWERD.VXD error code:
  7158.  000000xxh    APM error code
  7159.  000000FFh    function number out of range
  7160.  80000001h    ??? (service 05h)
  7161.  80000002h    ??? (service 0Dh)
  7162.  80000003h    specified NULL buffer pointer (service 07h,08h,09h)
  7163.  80000005h    ??? (service 03h)
  7164.  80000006h    ??? (service 04h)
  7165.  80000007h    ??? (service 05h)
  7166.  80000008h    ??? (service 05h)
  7167.  80000009h    out of memory (service 0Ah)
  7168.  8000000Ah    ??? (service 0Ah)
  7169.  8000000Bh    invalid power handler (service 0Bh)
  7170.  8000000Ch    unsupported/disabled??? function
  7171. SeeAlso: #2351,#0986
  7172. --------W-2F1684BX0027-----------------------
  7173. INT 2F - MS Windows95 - VXDLDR - GET API ENTRY POINT
  7174.     AX = 1684h
  7175.     BX = 0027h (virtual device ID for VXDLDR device) (see #2329)
  7176.     ES:DI = 0000h:0000h
  7177. Return: ES:DI -> VxD API entry point (see #2353)
  7178.           0000h:0000h if the VxD does not support API in current mode
  7179. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7180.  
  7181. (Table 2353)
  7182. Call VXDLDR entry point with:
  7183.     EAX = function number
  7184.         0000h get VXDLDR version
  7185.         Return: CF clear
  7186.             AX = 0000h (successful)
  7187.             DH = major version
  7188.             DL = minor version
  7189.         0001h load device
  7190.         BX = ASCIZ 8.3 filename of dynamically-loadable VxD (must
  7191.               reside in Windows system directory)
  7192.         Return: CF clear if successful
  7193.                 AX = 0000h
  7194.                 ES:DI -> VxD API entry point
  7195.             CF set on error
  7196.                 AX = error code (see #2354)
  7197.         0002h unload device
  7198.         BX = ASCIZ 8.3 filename of dynamically-loadable VxD (must
  7199.               reside in Windows system directory)
  7200.         Return: CF clear if successful
  7201.                 AX = 0000h
  7202.             CF set on error
  7203.                 AX = error code (see #2354)
  7204.         else
  7205.         Return: CF set
  7206.             AX = 000Bh
  7207. SeeAlso: #2351,#2355
  7208.  
  7209. (Table 2354)
  7210. Values for VXDLDR error code:
  7211.  0000h    successful
  7212.  000Bh    invalid function number
  7213. SeeAlso: #2353
  7214. --------W-2F1684BX0028-----------------------
  7215. INT 2F - MS Windows - NDIS - GET API ENTRY POINT
  7216.     AX = 1684h
  7217.     BX = 0028h (virtual device ID for NDIS device) (see #2329)
  7218.     ES:DI = 0000h:0000h
  7219. Return: ES:DI -> VxD API entry point (see #2355)
  7220.           0000h:0000h if the VxD does not support API in current mode
  7221. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7222.  
  7223. (Table 2355)
  7224. Call NDIS.VXD entry point with:
  7225.     ??? = function number
  7226.         0000h set ??? to ???
  7227.         ??? = new ???
  7228.         Return: DX:AX = 0000h:0001h
  7229.         0002h ???
  7230.         ???
  7231.         Return: DX:AX -> ???
  7232.         0003h reset ??? to default
  7233.         Return: DX:AX = 0000h:0001h
  7234.         else
  7235.         Return: DX:AX = 0000h:0000h
  7236. SeeAlso: #2353,#2356
  7237. --------W-2F1684BX002A-----------------------
  7238. INT 2F P - MS Windows - VWIN32 - GET API ENTRY POINT
  7239.     AX = 1684h
  7240.     BX = 002Ah (virtual device ID for VWIN32 device) (see #2329)
  7241.     ES:DI = 0000h:0000h
  7242. Return: ES:DI -> VxD API entry point (see #2356)
  7243.           0000h:0000h if the VxD does not support API in current mode
  7244. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7245.  
  7246. (Table 2356)
  7247. Call VWIN32.VXD entry point with:
  7248.     AH = function number
  7249.         00h get VWIN32 version and ???
  7250.         Return: CF clear
  7251.             AH = major version
  7252.             AL = minor version
  7253.             EDX = ???
  7254.         01h ???
  7255.         EBX = ???
  7256.         ECX = ???
  7257.         Return: CF clear
  7258.             EAX = ???
  7259.         02h ???
  7260.         Return: CF clear
  7261.             AX = ??? or 0000h
  7262.         03h address allocation
  7263.         DS:??? -> buffer containing/for page data
  7264.         ECX = length of buffer
  7265.         AL = subfunction
  7266.             00h reserve page(s)
  7267.             01h commit page(s)
  7268.             02h decommit page(s)
  7269.             03h free page(s)
  7270.         Return: CF clear if successful
  7271.             CF set on error
  7272.         Note:    this function uses ECX bytes of stack
  7273.         04h get ???
  7274.         Return: CF clear
  7275.             EAX = ???
  7276.         05h ???
  7277.         EBX = ???
  7278.         Return: CF clear
  7279.             EAX = ???
  7280.         06h ???
  7281.         EBX = ???
  7282.         Return: CF clear
  7283.             EAX = ???
  7284.         07h ???
  7285.         EBX = ???
  7286.         Return: CF clear
  7287.             EAX = ???
  7288.         08h get ???
  7289.         Return: CF clear
  7290.             AX = ???
  7291.         09h ???
  7292.         EBX = ???
  7293.         ECX = ???
  7294.         Return: CF clear
  7295.         0Ah ???
  7296.         EBX = ???
  7297.         Return: CF clear
  7298.         0Bh ???
  7299.         EBX = ???
  7300.         Return: CF clear
  7301.         0Ch ???
  7302.         EBX = ???
  7303.         ECX = ???
  7304.         EDX = ???
  7305.         ???
  7306.         Return: CF clear if successful
  7307.                 EAX = ???
  7308.             CF set on error
  7309.         0Dh clear ???
  7310.         Return: CF clear
  7311.         0Eh ???
  7312.         EBX = ???
  7313.         ECX = ???
  7314.         Return: CF clear
  7315.         0Fh ???
  7316.         EBX = ???
  7317.         ECX = ???
  7318.         Return: CF clear
  7319.         10h ???
  7320.         Return: CF clear
  7321.         Note:    invokes VMMcall 00010184h
  7322.         11h ???
  7323.         Return: CF clear
  7324.         Note:    invokes VMMcall 00010160h
  7325.         12h ???
  7326.         ???
  7327.         13h pop up system error dialogue
  7328.         Return: CF clear
  7329.             AX = ??? or 0000h
  7330.         14h "IFSMgr_GetConversionTablePtrs"
  7331.         Return:    CF clear
  7332.             DX:AX -> ???
  7333.         Note:    invokes VxDcall 00400051h
  7334.         15h "Boost_With_Decay"
  7335.         EBX = ???
  7336.         ECX = ???
  7337.         EDX = ???
  7338.         Return: CF clear
  7339.         else
  7340.         Return: CF set
  7341. SeeAlso: #2355,#2357
  7342. --------W-2F1684BX002B-----------------------
  7343. INT 2F - MS Windows - VCOMM - GET API ENTRY POINT
  7344.     AX = 1684h
  7345.     BX = 002Bh (virtual device ID for VCOMM device) (see #2329)
  7346.     ES:DI = 0000h:0000h
  7347. Return: ES:DI -> VxD API entry point (see #2357)
  7348.           0000h:0000h if the VxD does not support API in current mode
  7349. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7350.  
  7351. (Table 2357)
  7352. Call VCOMM.VXD entry point with:
  7353.     AX = function number
  7354.         0000h open COM/LPT port
  7355.         BX = port number (00h-7Fh = COMx, 80h-FFh = LPTx)
  7356.         Return: DX:AX = handle???
  7357.         0001h set comm state
  7358.         ???
  7359.         Return: AX = ???
  7360.         0002h setup comm port
  7361.         ???
  7362.         Return: AX = status (0000h failed, FFFFh success)
  7363.         0003h transmit character
  7364.         EBX = handle???
  7365.         CL = character to transmit
  7366.         Return: AX = status???
  7367.         0004h close comm port
  7368.         EBX = handle???
  7369.         Return: ???
  7370.         0005h clear comm error
  7371.         EBX = handle???
  7372.         EAX = ???
  7373.         Return: AX = status???
  7374.         0006h "EscapeCommFunction"
  7375.         EBX = handle???
  7376.         CX = ???
  7377.         EAX = ???
  7378.         Return: DX:AX = ???
  7379.         0007h purge buffers
  7380.         EBX = handle???
  7381.         CX = ???
  7382.         Return: AX = status???
  7383.         0008h set comm event mask
  7384.         EBX = handle???
  7385.         CX = new event mask
  7386.         Return: AX = status???
  7387.         0009h get comm event mask
  7388.         EBX = handle???
  7389.         Return: AX = current event mask
  7390.         000Ah ???
  7391.         EBX = handle???
  7392.         Return: ???
  7393.         000Bh "WriteComm"
  7394.         EBX = handle???
  7395.         CX = number of characters to write
  7396.         ES???:BX -> buffer (if CX > 1)
  7397.         SI??? low byte contains character if CX=1
  7398.         Return: AX = status
  7399.             EAX high word may be destroyed
  7400.         000Ch "ReadComm"
  7401.         EBX = handle???
  7402.         CX = number of bytes to read
  7403.         ES???:DI -> buffer
  7404.         Return: AX = status ???
  7405.             ZF = ???
  7406.         000Dh set ??? callback
  7407.         EBX = handle???
  7408.         CX = ???
  7409.         DX = ???
  7410.         Return: AX = status???
  7411.         else
  7412.         Return: AX = 0000h
  7413. SeeAlso: #2356,#2358
  7414. --------W-2F1684BX002D-----------------------
  7415. INT 2F P - MS Windows - W32S - GET API ENTRY POINT
  7416.     AX = 1684h
  7417.     BX = 002Dh (virtual device ID for W32S device) (see #2329)
  7418.     ES:DI = 0000h:0000h
  7419. Return: ES:DI -> VxD API entry point
  7420.           0000h:0000h if the VxD does not support API in current mode
  7421. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7422. --------W-2F1684BX0030-----------------------
  7423. INT 2F P - MS Windows - MACH32 - GET API ENTRY POINT
  7424.     AX = 1684h
  7425.     BX = 0030h (virtual device ID for MACH32 device) (see #2329)
  7426.     ES:DI = 0000h:0000h
  7427. Return: ES:DI -> VxD API entry point
  7428.           0000h:0000h if the VxD does not support API in current mode
  7429. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7430. --------W-2F1684BX0032-----------------------
  7431. INT 2F - MS Windows - SERVER / VSERVER - GET API ENTRY POINT
  7432.     AX = 1684h
  7433.     BX = 0032h (virtual device ID for SERVER device) (see #2329)
  7434.     ES:DI = 0000h:0000h
  7435. Return: ES:DI -> VxD API entry point (see #2358)
  7436.           0000h:0000h if the VxD does not support API in current mode
  7437. SeeAlso: AX=1684h"DEVICE API",#0992 at INT 20"Windows"
  7438.  
  7439. (Table 2358)
  7440. Call Windows95 VSERVER.VXD protected-mode entry point with:
  7441.     AX = function number
  7442.         0003h NOP
  7443.         Return: AX = 0000h
  7444.         0004h NOP
  7445.         Return: AX = 0000h
  7446.         0007h NOP
  7447.         Return: AX = 0000h
  7448.         0008h NOP
  7449.         Return: nothing
  7450.         000Fh ???
  7451.         Return: AX = status
  7452.                 0000h successful
  7453.                 0842h on error
  7454.         0010h ???
  7455.         Return: AX = status
  7456.                 0000h successful
  7457.                 0842h on error
  7458.         else
  7459.         Return: AX = 0032h
  7460. SeeAlso: #2357,#2359
  7461. --------W-2F1684BX0033-----------------------
  7462. INT 2F - MS Windows - CONFIGMG - GET API ENTRY POINT
  7463.     AX = 1684h
  7464.     BX = 0033h (virtual device ID for CONFIGMG device) (see #2329)
  7465.     ES:DI = 0000h:0000h
  7466. Return: ES:DI -> VxD API entry point (see #2359)
  7467.           0000h:0000h if the VxD does not support API in current mode
  7468. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7469.  
  7470. (Table 2359)
  7471. Call CONFIGMG.VXD entry point with:
  7472.     AX = function number
  7473.         0000h get CONFIGMG version
  7474.         Return: CF clear
  7475.             AH = major version
  7476.             AL = minor version
  7477.         ...
  7478.         005Ah
  7479.         else
  7480.         Return: CF set
  7481.             AX = 0020h
  7482. SeeAlso: #0993 at INT 20"Windows",#2358,#2360
  7483. --------x-2F1684BX0034-----------------------
  7484. INT 2F - Intel Plug-and-Play - CONFIGURATION MANAGER - GET ENTRY POINT
  7485.     AX = 1684h
  7486.     BX = 0034h (ID for Configuration Manager) (see #2329)
  7487.     ES:DI = 0000h:0000h
  7488. Return: ES:DI -> API entry point (see #2360)
  7489.           0000h:0000h if Configuration Manager not loaded
  7490. Note:    this API is often provided by a DOS device driver, in which case it
  7491.       is available whether or not MSWindows is running
  7492. Index:    installation check;Plug-and-Play Configuration Manager
  7493. SeeAlso: AX=1684h/BX=304Ch
  7494.  
  7495. (Table 2360)
  7496. Call Configuration Manager entry point with:
  7497.     AX = function
  7498.         0000h "CM_GetVersion" get supported DDI version
  7499.         Return: AH = BCD major version
  7500.             AL = BCD minor version
  7501.             BX = number of devices identified by configuration
  7502.         Note:    returns AX = 0000h if no config manager installed
  7503.         0001h "CM_GetConfig" get device configuration
  7504.         BX = device index
  7505.         ES:DI -> buffer for configuration information (see #2362)
  7506.         Return: AX = status
  7507.                 0000h successful
  7508.                 ES:DI buffer filled
  7509.                 other error code (0001h = index out of range)
  7510.         0002h "CM_LockConfig" lock device configuration
  7511.         ES:DI -> configuration information (see #2362)
  7512.         Return: AX = status
  7513.                 0000h successful
  7514.                 ES:DI buffer filled with assigned config
  7515.                 0001h resources conflict
  7516.                 0002h invalid request or configuration info
  7517.         0003h "CM_UnlockConfig" unlock device configuration
  7518.         ES:DI -> configuration information (see #2362)
  7519.         Return: AX = status
  7520.                 0000h successful
  7521.                 ES:DI buffer filled with assigned config
  7522.                 0001h invalid request or configuration info
  7523.         0004h "CME_QueryResources" get hot-swappable resources
  7524.         ES:DI -> configuration information (see #2362)
  7525.         Return: AX = status (see #2361)
  7526.         0005h "CME_AllocResources" remove resources from available pool
  7527.         ES:DI -> configuration information (see #2362)
  7528.         Return: AX = status (see #2361)
  7529.         0006h "CME_DeallocResources" return resources to available pool
  7530.         ES:DI -> configuration information (see #2362)
  7531.         Return: AX = status (see #2361)
  7532. SeeAlso: #0994 at INT 20"Windows",#2359,#2363
  7533.  
  7534. (Table 2361)
  7535. Values for Configuration Manager status:
  7536.  00h    successful
  7537.  01h    device not found, configuration error
  7538.  02h    I/O port unavailable
  7539.  04h    IRQ unavailable
  7540.  08h    DMA channel unavailable
  7541.  10h    memory range unavailable
  7542. SeeAlso: #2360
  7543.  
  7544. Format of Configuration Information Structure:
  7545. Offset    Size    Description    (Table 2362)
  7546.  00h    DWORD    bus ID
  7547.  04h    DWORD    device ID
  7548.  08h    DWORD    serial number
  7549.  0Ch    DWORD    logical ID
  7550.  10h    DWORD    flags
  7551. ---ISA bus---
  7552.  14h    BYTE    Card Select Number
  7553.  15h    BYTE    logical device number
  7554.  16h    WORD    Read Data port
  7555. ------
  7556.  18h    WORD    number of memory windows
  7557.  1Ah  9 DWORDs    physical base addresses of memory windows
  7558.  3Eh  9 DWORDs    length of memory windows
  7559.  62h  9 WORDs    memory window attributes
  7560.  74h    WORD    number of I/O ports
  7561.  76h 20 WORDs    I/O port base addresses
  7562.  B6h 20 WORDs    lengths of I/O port ranges
  7563.  F6h    WORD    number of IRQs
  7564.  F8h  7 BYTEs    IRQ registers
  7565.  FFh  7 BYTEs    IRQ attributes
  7566. 106h    WORD    number of DMA channels
  7567. 108h  7 BYTEs    DMA channels used
  7568. 10Fh  7 WORDs    DMA channel attributes
  7569. 11Dh  3 BYTEs    reserved
  7570. SeeAlso: #2360
  7571. --------W-2F1684BX0036-----------------------
  7572. INT 2F - MS Windows - VFBACKUP - GET API ENTRY POINT
  7573.     AX = 1684h
  7574.     BX = 0036h (virtual device ID for VFBACKUP device) (see #2329)
  7575.     ES:DI = 0000h:0000h
  7576. Return: ES:DI -> VxD API entry point (see #2363)
  7577.           0000h:0000h if the VxD does not support API in current mode
  7578. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7579.  
  7580. (Table 2363)
  7581. Call VFBACKUP.VXD entry point with:
  7582.     nothing -- this API is a NOP for the default Windows95 VFBACKUP
  7583. SeeAlso: #2360,#0909
  7584. --------W-2F1684BX0037-----------------------
  7585. INT 2F - MS Windows - ENABLE.VXD - GET API ENTRY POINT
  7586.     AX = 1684h
  7587.     BX = 0037h (virtual device ID for ENABLE device) (see #2364)
  7588.     ES:DI = 0000h:0000h
  7589. Return: ES:DI -> VxD API entry point (see #2363)
  7590.           0000h:0000h if the VxD does not support API in current mode
  7591. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7592.  
  7593. (Table 2364)
  7594. Call Windows95 ENABLE.VXD entry point with:
  7595.     AX = function number
  7596.         0000h get ENABLE version
  7597.         Return:    CF clear
  7598.             AX = version (AH = major, AL = minor)
  7599.         0001h
  7600.         EBX = ???
  7601.         Return: ???
  7602.         0002h get ???
  7603.         Return: CF clear
  7604.             DX:AX = ???
  7605.         0003h get ???
  7606.         Return: CF clear
  7607.             DX:AX = ???
  7608.         0004h ???
  7609.         EBX = ???
  7610.         ECX = ???
  7611.         EDX = ???
  7612.         Return: CF clear if successful
  7613.             CF set on error
  7614.         else
  7615.         Return: CF set
  7616. SeeAlso: #2363,#2365
  7617. --------W-2F1684BX0038-----------------------
  7618. INT 2F - MS Windows - VCOND - GET API ENTRY POINT
  7619.     AX = 1684h
  7620.     BX = 0038h (virtual device ID for VCOND device) (see #2329)
  7621.     ES:DI = 0000h:0000h
  7622. Return: ES:DI -> VxD API entry point (see #2365)
  7623.           0000h:0000h if the VxD does not support API in current mode
  7624. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7625.  
  7626. (Table 2365)
  7627. Call VCOND.VXD virtual-86 entry point with:
  7628.     AX = function number
  7629.         0202h
  7630.         0203h
  7631.         0204h
  7632.         0205h
  7633.         0206h
  7634.         0207h
  7635.         0208h
  7636.         0209h
  7637.         020Ah
  7638.         020Bh
  7639.         020Dh
  7640.         020Eh
  7641.         020Fh
  7642.         0210h
  7643.         0401h
  7644.         0402h
  7645.         0403h
  7646.         0404h
  7647.         0405h
  7648.         else
  7649.         NOP
  7650. SeeAlso: #2366,#2364
  7651.  
  7652. (Table 2366)
  7653. Call VCOND.VXD protected-mode entry point with:
  7654.     AX = function number
  7655.         0301h
  7656.         0302h
  7657.         0303h
  7658.         0304h
  7659.         0305h
  7660.         0306h
  7661.         0307h
  7662.         0308h
  7663.         else
  7664.         NOP
  7665. SeeAlso: #2365,#2363
  7666. --------W-2F1684BX003B-----------------------
  7667. INT 2F - MS Windows - DSVXD - GET API ENTRY POINT
  7668.     AX = 1684h
  7669.     BX = 003Bh (virtual device ID for DSVXD device) (see #2329)
  7670.     ES:DI = 0000h:0000h
  7671. Return: ES:DI -> VxD API entry point
  7672.           0000h:0000h if the VxD does not support API in current mode
  7673. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7674. --------W-2F1684BX003D-----------------------
  7675. INT 2F - MS Windows - BIOS VxD - GET API ENTRY POINT
  7676.     AX = 1684h
  7677.     BX = 003Dh (virtual device ID for BIOS device) (see #2329)
  7678.     ES:DI = 0000h:0000h
  7679. Return: ES:DI -> VxD API entry point (see #2367)
  7680.           0000h:0000h if the VxD does not support API in current mode
  7681. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7682.  
  7683. (Table 2367)
  7684. Call BIOS.VXD entry point with:
  7685.     AX = function number
  7686.         0000h get BIOS.VXD version
  7687.         Return: CF clear
  7688.             AH = major version
  7689.             AL = minor version
  7690.         0100h ???
  7691.         Return: AX = 0000h
  7692.         Note:    calls CONFIGMG services 804Eh/804Fh
  7693.         0200h ???
  7694.         Return: CF clear if successful
  7695.                 AX = ???
  7696.             CF set on error
  7697.                 AX = error code???
  7698.         Note:    invokes VxDcall 00290002h
  7699.         0300h ???
  7700.         Return: CF clear if successful
  7701.                 AX = ???
  7702.             CF set on error
  7703.                 AX = error code???
  7704.         else
  7705.         Return: CF set
  7706. SeeAlso: #2366,#2368
  7707. --------W-2F1684BX003E-----------------------
  7708. INT 2F - MS Windows - WSOCK - GET API ENTRY POINT
  7709.     AX = 1684h
  7710.     BX = 003Eh (virtual device ID for WSOCK device) (see #2329)
  7711.     ES:DI = 0000h:0000h
  7712. Return: ES:DI -> VxD API entry point
  7713.           0000h:0000h if the VxD does not support API in current mode
  7714. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7715. --------W-2F1684BX011F-----------------------
  7716. INT 2F P - MS Windows - VFLATD - GET API ENTRY POINT
  7717.     AX = 1684h
  7718.     BX = 011Fh (virtual device ID for VFLATD device) (see #2329)
  7719.     ES:DI = 0000h:0000h
  7720. Return: ES:DI -> VxD API entry point (see #2368)
  7721.           0000h:0000h if the VxD does not support API in current mode
  7722. SeeAlso: AX=1684h"DEVICE API",AX=1684/BX=045Dh,INT 20"Windows"
  7723.  
  7724. (Table 2368)
  7725. Call VFLATD.VXD entry point with:
  7726.     DL = function number
  7727.         00h get VFLATD version and ???
  7728.         Return: CF clear
  7729.             EAX = version (AH = major, AL = minor)
  7730.             EBX = ???
  7731.             ECX = ???
  7732.             EDX = ??? or 00000000h
  7733.         01h ???
  7734.         AX = ???
  7735.         CX = ???
  7736.         Return: EAX = ???
  7737.             EDX = ???
  7738.         02h ???
  7739.         ???
  7740.         03h ???
  7741.         EAX = ???
  7742.         EBX = ???
  7743.         ESI = ???
  7744.         CX = ???
  7745.         DH = ???
  7746.         Return: EAX = ???
  7747.             EDX = ???
  7748.             CF clear
  7749.         04h ???
  7750.         DH = ???
  7751.         EAX = ???
  7752.         ECX = ???
  7753.         Return: CF clear
  7754.             EAX = ???
  7755.             EDX = ???
  7756.         05h ???
  7757.         ???
  7758.         Note:    locks some linear memory and calls fn 02h
  7759.         06h ???
  7760.         ???
  7761.         Return: CF clear if successful
  7762.             CF set on error
  7763.         Note:    calls fn 02h and unlocks some linear memory
  7764.         else
  7765.         Return: CF set
  7766. SeeAlso: #2367
  7767. --------W-2F1684BX0200-----------------------
  7768. INT 2F - MS Windows - VIPX - GET API ENTRY POINT
  7769.     AX = 1684h
  7770.     BX = 0200h (virtual device ID for VIPX device) (see #2329)
  7771.     ES:DI = 0000h:0000h
  7772. Return: ES:DI -> VxD API entry point
  7773.           0000h:0000h if the VxD does not support API in current mode
  7774. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7775. --------W-2F1684BX0202-----------------------
  7776. INT 2F - MS Windows - WINICE - GET API ENTRY POINT
  7777.     AX = 1684h
  7778.     BX = 0202h (virtual device ID for WINICE device) (see #2329)
  7779.     ES:DI = 0000h:0000h
  7780. Return: ES:DI -> VxD API entry point
  7781.           0000h:0000h if the VxD does not support API in current mode
  7782. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7783. --------W-2F1684BX0203-----------------------
  7784. INT 2F P - MS Windows - VCLIENT - GET API ENTRY POINT
  7785.     AX = 1684h
  7786.     BX = 0203h (virtual device ID for VCLIENT device) (see #2329)
  7787.     ES:DI = 0000h:0000h
  7788. Return: ES:DI -> VxD API entry point
  7789.           0000h:0000h if the VxD does not support API in current mode
  7790. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7791. --------W-2F1684BX0205-----------------------
  7792. INT 2F - MS Windows - BCW - GET API ENTRY POINT
  7793.     AX = 1684h
  7794.     BX = 0205h (virtual device ID for BCW device) (see #2329)
  7795.     ES:DI = 0000h:0000h
  7796. Return: ES:DI -> VxD API entry point
  7797.           0000h:0000h if the VxD does not support API in current mode
  7798. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7799. --------W-2F1684BX0207-----------------------
  7800. INT 2F R - MS Windows - DPMS VxD - GET API ENTRY POINT
  7801.     AX = 1684h
  7802.     BX = 0207h (virtual device ID for DPMS device) (see #2329)
  7803.     ES:DI = 0000h:0000h
  7804. Return: ES:DI -> VxD API entry point
  7805.           0000h:0000h if the VxD does not support API in current mode
  7806. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7807. --------W-2F1684BX0234-----------------------
  7808. INT 2F - MS Windows - VCOMMUTE - GET API ENTRY POINT
  7809.     AX = 1684h
  7810.     BX = 0234h (virtual device ID for VCOMMUTE device) (see #2329)
  7811.     ES:DI = 0000h:0000h
  7812. Return: ES:DI -> VxD API entry point
  7813.           0000h:0000h if the VxD does not support API in current mode
  7814. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7815. --------W-2F1684BX0442-----------------------
  7816. INT 2F P - MS Windows - VTDAPI - GET API ENTRY POINT
  7817.     AX = 1684h
  7818.     BX = 0442h (virtual device ID for VTDAPI device) (see #2329)
  7819.     ES:DI = 0000h:0000h
  7820. Return: ES:DI -> VxD API entry point (see #2369)
  7821.           0000h:0000h if the VxD does not support API in current mode
  7822. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7823.  
  7824. (Table 2369)
  7825. Call VTDAPI.VXD entry point with:
  7826.     EAX = function number
  7827.         0000h
  7828.         0001h
  7829.         0002h
  7830.         0003h
  7831.         0004h
  7832.         0005h
  7833.         0006h
  7834.         0007h
  7835.         0008h
  7836.         0009h
  7837.         000Ah
  7838.         000Bh
  7839.         else
  7840.         Return: nothing???
  7841. SeeAlso: #2369
  7842. --------W-2F1684BX0444-----------------------
  7843. INT 2F - MS Windows - VADMAD - GET API ENTRY POINT
  7844.     AX = 1684h
  7845.     BX = 0444h (virtual device ID for VADMAD device) (see #2329)
  7846.     ES:DI = 0000h:0000h
  7847. Return: ES:DI -> VxD API entry point (see #2370)
  7848.           0000h:0000h if the VxD does not support an API
  7849.  
  7850. (Table 2370)
  7851. Call VADMAD entry point with:
  7852.     DX = operation
  7853.         0000h set VADMAD mode
  7854.         AX = desired mode
  7855.         0001h set VADMAD channel
  7856.         AX = desired channel
  7857. Note:    after setting mode/channel, start the DMA operation with an OUT to
  7858.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  7859. SeeAlso: #0964 at INT 20"Windows"
  7860. --------W-2F1684BX0445-----------------------
  7861. INT 2F - MS Windows - VSBD - GET API ENTRY POINT
  7862.     AX = 1684h
  7863.     BX = 0445h (virtual device ID for VSBD device) (see #2329)
  7864.     ES:DI = 0000h:0000h
  7865. Return: ES:DI -> VxD API entry point
  7866.           0000h:0000h if the VxD does not support API in current mode
  7867. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7868. --------W-2F1684BX0446-----------------------
  7869. INT 2F - MS Windows - VADLIBD - GET API ENTRY POINT
  7870.     AX = 1684h
  7871.     BX = 0446h (virtual device ID for VADLIBD device) (see #2329)
  7872.     ES:DI = 0000h:0000h
  7873. Return: ES:DI -> VxD API entry point
  7874.           0000h:0000h if the VxD does not support API in current mode
  7875. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7876. --------W-2F1684BX0449-----------------------
  7877. INT 2F P - MS Windows - vjoyd - GET API ENTRY POINT
  7878.     AX = 1684h
  7879.     BX = 0449h (virtual device ID for "vjoyd" device) (see #2329)
  7880.     ES:DI = 0000h:0000h
  7881. Return: ES:DI -> VxD API entry point (see #2371)
  7882.           0000h:0000h if the VxD does not support API in current mode
  7883. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7884.  
  7885. (Table 2371)
  7886. Call VJOYD.VXD entry point with:
  7887.     AX = function number
  7888.         0000h get VJOYD version
  7889.         Return: AH = major version
  7890.             AL = minor version
  7891.         0001h ???
  7892.         DX = ???
  7893.         Return: DX:AX = ???
  7894.         0002h ???
  7895.         DX = ???
  7896.         Return: DX:AX = ???
  7897.         0003h ???
  7898.         Retrun: AX = 0001h
  7899.         0004h ???
  7900.         DX = ???
  7901.         Return: DX:AX = ???
  7902.         0005h ???
  7903.         Return: ???
  7904.         else
  7905.         Return: EAX = 00000000h
  7906. SeeAlso: #2369,#2372
  7907. --------W-2F1684BX044A-----------------------
  7908. INT 2F - MS Windows - mmdevldr - GET API ENTRY POINT
  7909.     AX = 1684h
  7910.     BX = 044Ah (virtual device ID for "mmdevldr" device) (see #2329)
  7911.     ES:DI = 0000h:0000h
  7912. Return: ES:DI -> VxD API entry point (see #2372)
  7913.           0000h:0000h if the VxD does not support API in current mode
  7914. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7915.  
  7916. (Table 2372)
  7917. Call MMDEVLDR.VXD entry point with:
  7918.     DX = function number
  7919.         0000h ???
  7920.         Return: CF clear if successful
  7921.                 AX = 0000h
  7922.             CF set on error
  7923.                 AX = error code (000Bh)
  7924.         Note:    invokes VxDCall 17000Eh ("CallAtAppyTime")
  7925.         0001h ???
  7926.         Return: CF clear if successful
  7927.                 AX = 0000h
  7928.             CF set on error
  7929.                 AX = error code (000Bh)
  7930.         Note:    invokes VxDCall 17000Eh ("CallAtAppyTime")
  7931.         0002h ???
  7932.         EDX = ???
  7933.         Return: CF clear if successful
  7934.                 AX = 0000h
  7935.                 EDX = ???
  7936.             CF set on error
  7937.                 AX = error code
  7938.         0003h ???
  7939.         Return: CF clear if successful
  7940.                 AX = 0000h
  7941.             CF set on error
  7942.                 AX = error code
  7943.         Note:    invokes VxDcall 2A0002h ("VWIN32_QueueUserApc")
  7944.         0004h set Win32 event
  7945.         Return: CF clear if successful
  7946.                 AX = 0000h
  7947.             CF set on error
  7948.                 AX = error code
  7949.         Note:    invokes VxDcall 2A000Eh ("VWIN32_SetWin32Event")
  7950.         0005h ??? (allocates some memory)
  7951.         Return: CF clear
  7952.             AX = 0000h
  7953.         0006h ??? (frees memory)
  7954.         Return: CF clear if successful
  7955.                 AX = 0000h
  7956.             CF set on error
  7957.                 AX = error code
  7958.         else
  7959.         Return: CF set
  7960.             AX = 000Bh (invalid function)
  7961. SeeAlso: #2371,#2373
  7962. --------W-2F1684BX045D-----------------------
  7963. INT 2F P - MS Windows - VflatD - GET API ENTRY POINT
  7964.     AX = 1684h
  7965.     BX = 045Dh (virtual device ID for VflatD device) (see #2329)
  7966.     ES:DI = 0000h:0000h
  7967. Return: ES:DI -> VxD API entry point
  7968.           0000h:0000h if the VxD does not support API in current mode
  7969. SeeAlso: AX=1684h"DEVICE API",AX=1684h/BX=011Fh,INT 20"Windows"
  7970. --------W-2F1684BX045F-----------------------
  7971. INT 2F - MS Windows - azt16 - GET API ENTRY POINT
  7972.     AX = 1684h
  7973.     BX = 045Fh (virtual device ID for "azt16" device) (see #2329)
  7974.     ES:DI = 0000h:0000h
  7975. Return: ES:DI -> VxD API entry point (see #2373)
  7976.           0000h:0000h if the VxD does not support API in current mode
  7977. SeeAlso: AX=1684h/BX=3110h,AX=1684h"DEVICE API",INT 20"Windows"
  7978.  
  7979. (Table 2373)
  7980. Call azt16.VXD entry point with:
  7981.     DX = function number
  7982.         0000h get azt16 version
  7983.         Return: CF clear
  7984.             AX = version (AH=major, AL=minor)
  7985.         0001h ???
  7986.         AX = subfunction
  7987.             0000h ???
  7988.             Return:
  7989.             0001h ???
  7990.             ECX = ???
  7991.             else error
  7992.         Return: CF clear if successful
  7993.                 ???
  7994.             CF set on error
  7995.                 AX = error code
  7996.         0002h ???
  7997.         AX = ???
  7998.         BX = ???
  7999.         Return: ???
  8000.         0003h ???
  8001.         AX = ???
  8002.         BX = ???
  8003.         Return: ???
  8004.         0004h ???
  8005.         BX = ???
  8006.         CX = ???
  8007.         Return: CF clear if successful
  8008.                  AX = 0001h
  8009.             CF set on error
  8010.                  AX = 0000h
  8011.         0005h ???
  8012.         BX = ???
  8013.         CX = ???
  8014.         Return: CF clear if successful
  8015.                  AX = 0001h
  8016.             CF set on error
  8017.                  AX = 0000h
  8018.         0006h ???
  8019.         BX = ???
  8020.         ECX = ???
  8021.         Return: CF clear if succesful
  8022.                 AX = ???
  8023.             CF set on error
  8024.                 AX = FFFFh
  8025.         0100h get azt16 version
  8026.         Return: CF clear
  8027.             AX = version (AH=major, AL=minor)
  8028.         0101h
  8029.         AX = ???
  8030.         ECX = ???
  8031.         Return: CF clear if successful
  8032.                 AX = 0001h
  8033.             CF set on error
  8034.                 AX = 0000h
  8035.         0102h ???
  8036.         AX = ???
  8037.         Return: CF clear if successful
  8038.             CF set on error
  8039.                 AX = reason??? (0/1/2)
  8040.         0103h ???
  8041.         AX = ???
  8042.         Return: CF clear if successful
  8043.                 AX = 0000h
  8044.             CF set on error
  8045.                 AX = reason??? (1/3)
  8046.         0200h ???
  8047.         EDX = ???
  8048.         ???
  8049.         Return: CF clear if successful
  8050.                 DX:AX = ???
  8051.             CF set on error
  8052.                 DX:AX = 0000h:0000h
  8053.         0201h ???
  8054.         ???
  8055.         Return: CF clear
  8056.             AX= 0000h
  8057.         else
  8058.         Return: CF set
  8059. SeeAlso: #2372,#2392
  8060. --------W-2F1684BX0460-----------------------
  8061. INT 2F P - MS Windows - UNIMODEM - GET API ENTRY POINT
  8062.     AX = 1684h
  8063.     BX = 0460h (virtual device ID for UNIMODEM device) (see #2329)
  8064.     ES:DI = 0000h:0000h
  8065. Return: ES:DI -> VxD API entry point (see #2374)
  8066.           0000h:0000h if the VxD does not support API in current mode
  8067. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8068.  
  8069. (Table 2374)
  8070. Call UNIMODEM.VXD protected-mode entry point with:
  8071.     AX = function number
  8072.         0000h
  8073.         Return: AX = ???
  8074.         0001h
  8075.         Return: AX = ???
  8076.         0002h
  8077.         Return: AX = ???
  8078.         0003h
  8079.         Return: AX = ???
  8080.         0004h
  8081.         Return: AX = ???
  8082.         0005h
  8083.         Return: AX = ???
  8084.         0006h
  8085.         Return: AX = ???
  8086.         0007h
  8087.         Return: AX = ???
  8088.         else
  8089.         Return: AX = 0002h
  8090. SeeAlso: #2373,#2375
  8091. --------W-2F1684BX0480-----------------------
  8092. INT 2F - MS Windows - VNetSup - GET API ENTRY POINT
  8093.     AX = 1684h
  8094.     BX = 0480h (virtual device ID for VNetSup device) (see #2329)
  8095.     ES:DI = 0000h:0000h
  8096. Return: ES:DI -> VxD API entry point (see #2375)
  8097.           0000h:0000h if the VxD does not support API in current mode
  8098. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8099.  
  8100. (Table 2375)
  8101. Call VNetSup.VXD entry point with:
  8102.     AX = function number
  8103.         0000h
  8104.         Return: AX = ???
  8105.         0001h
  8106.         Return: AX = ???
  8107.         0002h
  8108.         Return: AX = ???
  8109.         else
  8110.         Return: CF set
  8111.             AX = 0001h
  8112. SeeAlso: #2374,#2376
  8113. --------W-2F1684BX0482-----------------------
  8114. INT 2F - MS Windows - VBrowse - GET API ENTRY POINT
  8115.     AX = 1684h
  8116.     BX = 0482h (virtual device ID for VBrowse device) (see #2329)
  8117.     ES:DI = 0000h:0000h
  8118. Return: ES:DI -> VxD API entry point
  8119.           0000h:0000h if the VxD does not support API in current mode
  8120. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8121. --------W-2F1684BX0483-----------------------
  8122. INT 2F - MS Windows - VSHARE - GET API ENTRY POINT
  8123.     AX = 1684h
  8124.     BX = 0483h (virtual device ID for VSHARE device) (see #2329)
  8125.     ES:DI = 0000h:0000h
  8126. Return: ES:DI -> VxD API entry point (see #2376)
  8127.           0000h:0000h if the VxD does not support API in current mode
  8128. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8129.  
  8130. (Table 2376)
  8131. Call Windows95 VSHARE.VXD entry point with:
  8132.     AX = function number
  8133.         0000h get VSHARE version
  8134.         Return: AH = major version
  8135.             AL = (BCD?) minor version
  8136.         else
  8137.         NOP
  8138. SeeAlso: #2375
  8139. --------W-2F1684BX0484-----------------------
  8140. INT 2F P - MS Windows - IFSMgr - GET API ENTRY POINT
  8141.     AX = 1684h
  8142.     BX = 0484h (virtual device ID for IFSMgr device) (see #2329)
  8143.     ES:DI = 0000h:0000h
  8144. Return: ES:DI -> VxD API entry point
  8145.           0000h:0000h if the VxD does not support API in current mode
  8146. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8147. --------W-2F1684BX0486-----------------------
  8148. INT 2F - MS Windows - VFAT - GET API ENTRY POINT
  8149.     AX = 1684h
  8150.     BX = 0486h (virtual device ID for VFAT device) (see #2329)
  8151.     ES:DI = 0000h:0000h
  8152. Return: ES:DI -> VxD API entry point
  8153.           0000h:0000h if the VxD does not support API in current mode
  8154. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8155. --------W-2F1684BX0487-----------------------
  8156. INT 2F - MS Windows - NWLINK - GET API ENTRY POINT
  8157.     AX = 1684h
  8158.     BX = 0487h (virtual device ID for NWLINK device) (see #2329)
  8159.     ES:DI = 0000h:0000h
  8160. Return: ES:DI -> VxD API entry point
  8161.           0000h:0000h if the VxD does not support API in current mode
  8162. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8163. --------W-2F1684BX0489-----------------------
  8164. INT 2F R - MS Windows - VIP - GET API ENTRY POINT
  8165.     AX = 1684h
  8166.     BX = 0489h (virtual device ID for VIP device) (see #2329)
  8167.     ES:DI = 0000h:0000h
  8168. Return: ES:DI -> VxD API entry point
  8169.           0000h:0000h if the VxD does not support API in current mode
  8170. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8171. --------W-2F1684BX048A-----------------------
  8172. INT 2F - MS Windows 3.11 - VXDLDR - GET API ENTRY POINT
  8173.     AX = 1684h
  8174.     BX = 048Ah (virtual device ID for VTCP device) (see #2329)
  8175.     ES:DI = 0000h:0000h
  8176. Return: ES:DI -> VxD API entry point
  8177.           0000h:0000h if the VxD does not support API in current mode
  8178. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8179. --------W-2F1684BX048A-----------------------
  8180. INT 2F - MS Windows - VCACHE - GET API ENTRY POINT
  8181.     AX = 1684h
  8182.     BX = 048Ah (virtual device ID for VCACHE device) (see #2329)
  8183.     ES:DI = 0000h:0000h
  8184. Return: ES:DI -> VxD API entry point (see #2378)
  8185.           0000h:0000h if the VxD does not support API in current mode
  8186. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8187.  
  8188. (Table 2377)
  8189. Call Windows95 VCACHE.VXD entry point with:
  8190.     Return:    CF set
  8191. SeeAlso: #2376,#2378
  8192. --------W-2F1684BX048D-----------------------
  8193. INT 2F - MS Windows - RASMAC - GET API ENTRY POINT
  8194.     AX = 1684h
  8195.     BX = 048Dh (virtual device ID for RASMAC device) (see #2329)
  8196.     ES:DI = 0000h:0000h
  8197. Return: ES:DI -> VxD API entry point
  8198.           0000h:0000h if the VxD does not support API in current mode
  8199. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8200. --------W-2F1684BX048E-----------------------
  8201. INT 2F - MS Windows - NWREDIR - GET API ENTRY POINT
  8202.     AX = 1684h
  8203.     BX = 048Eh (virtual device ID for NWREDIR device) (see #2329)
  8204.     ES:DI = 0000h:0000h
  8205. Return: ES:DI -> VxD API entry point (see #2378)
  8206.           0000h:0000h if the VxD does not support API in current mode
  8207. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8208.  
  8209. (Table 2378)
  8210. Call Windows95 NWREDIR.VXD entry point with:
  8211.     Return:    CF set
  8212.         EAX = FFFFFFFFh
  8213. SeeAlso: #2377
  8214. --------W-2F1684BX0494-----------------------
  8215. INT 2F - MS Windows - NSCL - GET API ENTRY POINT
  8216.     AX = 1684h
  8217.     BX = 0494h (virtual device ID for NSCL device) (see #2329)
  8218.     ES:DI = 0000h:0000h
  8219. Return: ES:DI -> VxD API entry point (see #2379,#2380)
  8220.           0000h:0000h if the VxD does not support API in current mode
  8221. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8222.  
  8223. (Table 2379)
  8224. Call Windows95 NSCL.VXD virtual-86 entry point with:
  8225.     AL = function number
  8226.         00h
  8227.         01h
  8228.         02h
  8229.         03h
  8230.         04h
  8231.         05h
  8232.         06h
  8233.         07h
  8234.         08h
  8235.         09h
  8236.         0Ah
  8237.         else
  8238.         Return: AX = FFFFh
  8239. SeeAlso: #2378,#2379
  8240.  
  8241. (Table 2380)
  8242. Call Windows95 NSCL.VXD protected-mode entry point with:
  8243.     AL = function number
  8244.         00h
  8245.         01h
  8246.         02h
  8247.         03h
  8248.         else
  8249.         Return: AX = FFFFh
  8250. SeeAlso: #2379
  8251. --------W-2F1684BX0499-----------------------
  8252. INT 2F - MS Windows - PPPMAC - GET API ENTRY POINT
  8253.     AX = 1684h
  8254.     BX = 0499h (virtual device ID for PPPMAC device) (see #2329)
  8255.     ES:DI = 0000h:0000h
  8256. Return: ES:DI -> VxD API entry point
  8257.           0000h:0000h if the VxD does not support API in current mode
  8258. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8259. --------W-2F1684BX049A-----------------------
  8260. INT 2F - MS Windows - VDHCP - GET API ENTRY POINT
  8261.     AX = 1684h
  8262.     BX = 049Ah (virtual device ID for VDHCP device) (see #2329)
  8263.     ES:DI = 0000h:0000h
  8264. Return: ES:DI -> VxD API entry point
  8265.           0000h:0000h if the VxD does not support API in current mode
  8266. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8267. --------W-2F1684BX049B-----------------------
  8268. INT 2F - MS Windows - VNBT - GET API ENTRY POINT
  8269.     AX = 1684h
  8270.     BX = 049Bh (virtual device ID for VNBT device) (see #2329)
  8271.     ES:DI = 0000h:0000h
  8272. Return: ES:DI -> VxD API entry point
  8273.           0000h:0000h if the VxD does not support API in current mode
  8274. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8275. --------W-2F1684BX1021-----------------------
  8276. INT 2F - MS Windows - VMB - GET API ENTRY POINT
  8277.     AX = 1684h
  8278.     BX = 1021h (virtual device ID for VMB device) (see #2329)
  8279.     ES:DI = 0000h:0000h
  8280. Return: ES:DI -> VxD API entry point
  8281.           0000h:0000h if the VxD does not support API in current mode
  8282. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8283. --------W-2F1684BX28A0-----------------------
  8284. INT 2F - MS Windows - PHARLAPX - GET API ENTRY POINT
  8285.     AX = 1684h
  8286.     BX = 28A0h (virtual device ID for PHARLAPX device) (see #2329)
  8287.     ES:DI = 0000h:0000h
  8288. Return: ES:DI -> VxD API entry point (see #2381)
  8289.           0000h:0000h if the VxD does not support an API
  8290.  
  8291. (Table 2381)
  8292. Call PHARLAPX VxD entry point with:
  8293.     AX = function
  8294.         0001h get PHARLAP.386 version
  8295.         Return: AX = version number (AH = major, AL = minor)
  8296.     ---queue functions---
  8297.         0101h allocate a new message queue
  8298.         CX = size of queue data buffer in bytes
  8299.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  8300.         0102h allocate a new key queue
  8301.         CX = size of queue data buffer in bytes
  8302.         EDX = VM handle into which keys will be pasted
  8303.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  8304.         0103h free message queue
  8305.         EDX = queue handle
  8306.         Return: AX = status (0000h,0003h,0007h) (see #2382)
  8307.         0104h free key queue
  8308.         EDX = queue handle
  8309.         Return: AX = status (0000h,0003h,0005h) (see #2382)
  8310.         0105h add message to communications queue
  8311.         EDX = queue handle
  8312.         BX = length of message data in bytes
  8313.         CX = length of message header in bytes
  8314.         ES:(E)SI -> message header
  8315.         GS:(E)DI -> message data
  8316.         Return: AX = status (0000h-0003h,0007h) (see #2382)
  8317.         0106h remove message from queue
  8318.         EDX = queue handle
  8319.         CX = length of buffer in bytes
  8320.         ES:(E)SI -> buffer for message
  8321.         Return: AX = status (0000h,0003h,0006h,0007h,0008h) (see #2382)
  8322.             CX = length of returned message (if AX=0000h or 0008h)
  8323.         0107h flush queue (remove all data)
  8324.         EDX = queue handle
  8325.         Return: AX = status (0000h,0003h) (see #2382)
  8326.         0108h add PasteKey structure(s) to key queue
  8327.         EDX = queue handle
  8328.         CX = number of PasteKey structures in buffer
  8329.         ES:(E)SI -> PasteKey array (see #2383)
  8330.         Return: AX = status (0000h-0003h) (see #2382)
  8331.         0109h register enqueueing callback function
  8332.         EDX = queue handle
  8333.         ECX = function argument
  8334.         ES:(E)SI -> callback function
  8335.         Return: AX = status (0000h,0003h,0009h) (see #2382)
  8336.         010Ah register dequeueing callback function
  8337.         EDX = queue handle
  8338.         ECX = function argument
  8339.         ES:(E)SI -> callback function
  8340.         Return: AX = status (0000h,0003h,0009h) (see #2382)
  8341.         010Bh unregister enqueueing callback function
  8342.         EDX = queue handle
  8343.         Return: AX = status (0000h,0003h,0009h) (see #2382)
  8344.         010Ch unregister dequeueing callback function
  8345.         EDX = queue handle
  8346.         Return: AX = status (0000h,0003h,0009h) (see #2382)
  8347.         010Dh get message queue status
  8348.         EDX = queue handle
  8349.         Return: AX = status (0000h,0003h) (see #2382)
  8350.             CX = number of pending messages
  8351.         010Eh peek at message in queue
  8352.         EDX = queue handle
  8353.         BX = number of message in queue (0000h = first)
  8354.         CX = size of buffer in bytes
  8355.         ES:(E)SI -> buffer for message
  8356.         Return: AX = status (0000h,0003h,0006h,0008h) (see #2382)
  8357.             CX = length of returned message (if AX=0000h or 0008h)
  8358.         010Fh peek at last message in queue
  8359.         EDX = queue handle
  8360.         CX = size of buffer in bytes
  8361.         ES:(E)SI -> buffer for message
  8362.         Return: AX = status (0000h,0003h,0006h,0008h) (see #2382)
  8363.             CX = length of returned message (if AX=0000h or 0008h)
  8364.         0110h replace last message in queue
  8365.         EDX = queue handle
  8366.         CX = length of message header in bytes
  8367.         BX = length of message data in bytes
  8368.         ES:(E)SI -> message header
  8369.         GS:(E)DI -> message data
  8370.         Return: AX = status (0000h,0002h,0003h) (see #2382)
  8371.         0111h set permitted message count for queue
  8372.         EDX = queue handle
  8373.         CX = maximum number of messages to enqueue (FFFFh = unlimited)
  8374.         Return: AX = status (0000h,0003h) (see #2382)
  8375.     ---generalized VxD services---
  8376.         0202h call VxD function
  8377.         ES:(E)BX -> in/out register-set buffer
  8378.         Return: buffer updated
  8379.         0203h map flat
  8380.         ???
  8381.     --system register functions---
  8382.         0301h read system registers into buffer
  8383.         ES:(E)SI -> 512-byte buffer
  8384.         Return: AX = 0000h
  8385.             buffer filled (mostly zeros)
  8386.         0302h copy linear memory into buffer
  8387.         EDX = linear address
  8388.         CX = number of bytes to copy
  8389.         ES:(E)SI -> buffer
  8390.         Return: AX = 0000h
  8391.         0303h copy data into linear memory
  8392.         EDX = linear address
  8393.         CX = number of bytes to copy
  8394.         ES:(E)SI -> buffer
  8395.         Return: AX = 0000h
  8396.         0304h freeze VM
  8397.         ???
  8398.         0305h unfreeze VM
  8399.         ???
  8400.     ---name registration functions---
  8401.         0401h register name
  8402.         EDX = magic number to associate with name
  8403.         ES:(E)SI -> name to register
  8404.         Return: AX = status (0000h,0009h) (see #2382)
  8405.         0402h unregister name
  8406.         ES:(E)SI -> name to be unregistered
  8407.         Return: AX = status (0000h,0009h) (see #2382)
  8408.         0403h look up name
  8409.         ES:(E)SI -> name to look up
  8410.         Return: DX:AX = magic number or 0000h:0000h if not registered
  8411.         0404h get name list handle
  8412.         Return: DX:AX = name list handle
  8413.                 0000h:0000h if not initialized
  8414.     ---special DOS server routines (undocumented)---
  8415.         0501h register
  8416.         0502h unregister
  8417.         0503h validate VM
  8418.         0504h get INT9 count
  8419.         0505h get screen line
  8420.         0506h get shift status
  8421.         0507h get server PB pointer
  8422.         0508h initialize DOS shell
  8423.         0509h get last VM handle
  8424.  
  8425. (Table 2382)
  8426. Values for PHARLAPX function status:
  8427.  00h    successful
  8428.  01h    data is too large to fit in queue
  8429.  02h    queue is full
  8430.  03h    invalid queue handle
  8431.  04h    invalid VM handle for queue
  8432.  05h    error starting a paste operation
  8433.  06h    queue is empty
  8434.  07h    a VM is blocked waiting on the queue
  8435.  08h    message was too long (truncated)
  8436.  09h    unable to register or unregister specified callback
  8437. SeeAlso: #2381
  8438.  
  8439. Format of PHARLAPX PasteKey structure:
  8440. Offset    Size    Description    (Table 2383)
  8441.  00h    BYTE    ASCII code
  8442.  01h    BYTE    scan code (see #0005)
  8443.  02h    WORD    shift states
  8444. SeeAlso: #2381
  8445.  
  8446. Format of PHARLAPX VxD-call register structure:
  8447. Offset    Size    Description    (Table 2384)
  8448.  00h    DWORD    call number
  8449.  04h    WORD    input register map (see #2385)
  8450.  06h    WORD    output register map (see #2385)
  8451.  08h  7 DWORDs    values for EAX, EBX, ECX, EDX, EBP, ESI, EDI on call
  8452.  24h  4    WORDs    values for DS, ES, FG, GS on call
  8453.  2Ch    DWORD    EFLAGS on call
  8454.  30h  7 DWORDs    returned values of EAX, EBX, ECX, EDX, EBP, ESI, EDI
  8455.  4Ch  4 WORDs    returned values of DS, ES, FS, GS
  8456.  54h    DWORD    returned EFLAGS
  8457. SeeAlso: #2381
  8458.  
  8459. Bitfields for PHARLAPX VxD-call register map:
  8460. Bit(s)    Description    (Table 2385)
  8461.  0    value in EAX field is valid
  8462.  1    value in EBX field is valid
  8463.  2    value in ECX field is valid
  8464.  3    value in EDX field is valid
  8465.  4    value in EBP field is valid
  8466.  5    value in ESI field is valid
  8467.  6    value in EDI field is valid
  8468.  7    value in DS field is valid
  8469.  8    value in ES field is valid
  8470.  9    value in FS field is valid
  8471.  10    value in GS field is valid
  8472.  11    value in EFLAGS field is valid
  8473. SeeAlso: #2384
  8474. --------W-2F1684BX28A1-----------------------
  8475. INT 2F - MS Windows - PharLap VxD - GET API ENTRY POINT
  8476.     AX = 1684h
  8477.     BX = 28A1h (virtual device ID for PharLap device) (see #2329)
  8478.     ES:DI = 0000h:0000h
  8479. Return: ES:DI -> VxD API entry point
  8480.           0000h:0000h if the VxD does not support API in current mode
  8481. SeeAlso: AX=1684h"DEVICE API",AX=1684h/BX=28A0h,INT 20"Windows"
  8482. --------W-2F1684BX2925-----------------------
  8483. INT 2F - MS Windows - EDOS - GET API ENTRY POINT
  8484.     AX = 1684h
  8485.     BX = 2925h (virtual device ID for EDOS device) (see #2329)
  8486.     ES:DI = 0000h:0000h
  8487. Return: ES:DI -> VxD API entry point (see #2386)
  8488.           0000h:0000h if the VxD does not support an API
  8489.  
  8490. (Table 2386)
  8491. Call EDOS entry point with:
  8492.     AX = 0000h get EDOS version number
  8493.         Return: AH = major version
  8494.             AL = minor version
  8495.     AX = 0001h display message
  8496.         CX = 0
  8497.         DX:BX -> ASCIZ Message
  8498.     AX = 0002h get EDOS error coded
  8499.         Return: EAX = time in milliseconds that Windows has been running
  8500.     AX = 0003h execute windows program
  8501.         Return: EAX = cumulative amount of time the virtual machine has
  8502.             been active, in milliseconds
  8503.     AX = 0008h get/set priority
  8504.         BX = 0000h??? foreground
  8505.          0001h background
  8506.         DI = 0000h get
  8507.          0001h set
  8508.         DX = priority setting
  8509.         Return: CX = foreground priority
  8510.             DX = background priority
  8511.             BX:AX = flags
  8512.             00000001h exclusive ON
  8513.             00000010h background ON
  8514.             SI = CPU percentage
  8515. --------W-2F1684BX292D-----------------------
  8516. INT 2F - MS Windows - VSBPD - GET API ENTRY POINT
  8517.     AX = 1684h
  8518.     BX = 292Dh (virtual device ID for VSBPD device) (see #2329)
  8519.     ES:DI = 0000h:0000h
  8520. Return: ES:DI -> VxD API entry point
  8521.           0000h:0000h if the VxD does not support API in current mode
  8522. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8523. --------W-2F1684BX295A-----------------------
  8524. INT 2F - MS Windows - GRVSULTR - GET API ENTRY POINT
  8525.     AX = 1684h
  8526.     BX = 295Ah (virtual device ID for GRVSULTR device) (see #2329)
  8527.     ES:DI = 0000h:0000h
  8528. Return: ES:DI -> VxD API entry point
  8529.           0000h:0000h if the VxD does not support API in current mode
  8530. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8531. --------x-2F1684BX304C-----------------------
  8532. INT 2F - Intel Plug-and-Play - CONFIGURATION ACCESS - GET ENTRY POINT
  8533.     AX = 1684h
  8534.     BX = 304Ch (ID for Configuration Access) (see #2329)
  8535.     ES:DI = 0000h:0000h
  8536. Return: ES:DI -> API entry point (see #2387)
  8537.           0000h:0000h if Configuration Access not loaded
  8538. Note:    this API is often provided by a DOS device driver, in which case it
  8539.       is available whether or not MSWindows is running
  8540. Index:    installation check;Plug-and-Play Configuration Access
  8541. SeeAlso: AX=1684h/BX=0034h
  8542.  
  8543. (Table 2387)
  8544. Call Plug-and-Play Configuration Access entry point with:
  8545.     AX = function
  8546.         0000h "CA_GetVersion"
  8547.         Return: AX = BCD version (AH = major, AL = minor)
  8548.         0001h "CA_PCI_Read_Config_Byte" (see also INT 1A/AX=B108h)
  8549.     !!!
  8550.         0002h "CA_PCI_Read_Config_Word" (see also INT 1A/AX=B109h)
  8551.         0003h "CA_PCI_Read_Config_DWord" (see also INT 1A/AX=B10Ah)
  8552.         0004h "CA_PCI_Write_Config_Byte" (see also INT 1A/AX=B10Bh)
  8553.         0005h "CA_PCI_Write_Config_Word" (see also INT 1A/AX=B10Ch)
  8554.         0006h "CA_PCI_Write_Config_DWord" (see also INT 1A/AX=B10Dh)
  8555.         0007h "CA_PCI_Generate_Special_Cycle" (see also INT 1A/AX=B106h)
  8556.         0008h "CA_PCI_Get_Routing_Options" (see also INT 1A/AX=B10Eh)
  8557.         0009h invalid function
  8558.         000Ah invalid function
  8559.         000Bh "CA_PnPISA_Get_Info"
  8560.         000Ch "CA_PnPISA_Read_Config_Byte"
  8561.         000Dh "CA_PnPISA_Write_Config_Byte"
  8562.         000Eh "CA_PnPISA_Get_Resource_Data"
  8563.         000Fh invalid function
  8564.         0010h "CA_EISA_Get_Board_ID"
  8565.         0011h "CA_EISA_Get_Slot_Config"
  8566.         0012h "CA_EISA_Get_SlotFunc_Config"
  8567.         0013h "CA_EISA_Clear_NVRAM_Config"
  8568.         0014h "CA_EISA_Write_Config"
  8569.         0015h invalid function
  8570.         0016h "CA_ESCD_Get_Info"
  8571.         0017h "CA_ESCD_Read_Config"
  8572.         0018h "CA_ESCD_Write_Config"
  8573.         0019h invalid function
  8574.         001Ah "CA_Acfg_PCI_Manage_IRQs"
  8575.         DL = IRQ???
  8576.         ES:DI -> ???
  8577.         Return: AX = status
  8578.         001Bh "CA_Acfg_PCI_Get_Routing_Options"
  8579.         ES:DI -> IRQ routing table header
  8580.               (see #0955 at INT 1A/AX=B406h)
  8581.         Return: AX = status
  8582.         001Ch-001Fh invalid functions
  8583.         0020h "CA_PnPB_Get_Num_Sys_Dev_Nodes"
  8584.         0021h "CA_PnPB_Get_Sys_Dev_Node"
  8585.         0022h "CA_PnPB_Set_Sys_Dev_Node"
  8586.         0023h "CA_PnPB_Get_Stat_Res_Info"
  8587.         0024h "CA_PnPB_Set_Stat_Res_Info"
  8588. Return: AX = FFFFh if unsupported function
  8589. SeeAlso: #2388
  8590. --------W-2F1684BX3099-----------------------
  8591. INT 2F - MS Windows - VVidramD - GET API ENTRY POINT
  8592.     AX = 1684h
  8593.     BX = 3099h (virtual device ID for VVidramD device) (see #2329)
  8594.     ES:DI = 0000h:0000h
  8595. Return: ES:DI -> VxD API entry point (see #2388)
  8596.           0000h:0000h if the VxD does not support API in current mode
  8597. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8598.  
  8599. (Table 2388)
  8600. Call VVidramD (VIDRAM.VXD) virtual-86 entry point with:
  8601.     AX = function number
  8602.         0000h map page???
  8603.         BX = page number???
  8604.         Return: CF clear if successful
  8605.             CF set on error
  8606.         0001h ???
  8607.         Return: CF clear if successful
  8608.             CF set on error
  8609.         else
  8610.         Return: CF set
  8611. SeeAlso: #2387,#2389
  8612. --------W-2F1684BX30F6-----------------------
  8613. INT 2F P - MS Windows - WSVV - GET API ENTRY POINT
  8614.     AX = 1684h
  8615.     BX = 30F6h (virtual device ID for WSVV device) (see #2329)
  8616.     ES:DI = 0000h:0000h
  8617. Return: ES:DI -> VxD API entry point
  8618.           0000h:0000h if the VxD does not support API in current mode
  8619. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8620.  
  8621. (Table 2389)
  8622. Call WSVV.VXD protected-mode entry point with:
  8623.     AX = function number
  8624.         ????
  8625.     Return: ???
  8626. SeeAlso: #2388,#2390
  8627. --------W-2F1684BX310E-----------------------
  8628. INT 2F - MS Windows - WPS - GET API ENTRY POINT
  8629.     AX = 1684h
  8630.     BX = 310Eh (virtual device ID for WPS device) (see #2329)
  8631.     ES:DI = 0000h:0000h
  8632. Return: ES:DI -> VxD API entry point (see #2390)
  8633.           0000h:0000h if the VxD does not support an API
  8634. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8635.  
  8636. (Table 2390)
  8637. Call WPS protected-mode entry point with:
  8638.     DX = function
  8639.         0000h get WPS.386 version
  8640.         Return: CF clear
  8641.             AX = version (AH = major, AL = minor)
  8642.         0001h get number of installed VxDs
  8643.         Return: CF clear
  8644.             AX = number of installed VxDs
  8645.         0002h get VxD characteristics
  8646.         AX = number of VxD
  8647.         ES:BX -> buffer for VxD characteristics structure (see #2391)
  8648.         Return: CF clear
  8649.             ES:BX buffer filled
  8650. SeeAlso: #2389,#2393
  8651.  
  8652. Format of WPS.386 VxD characteristics structure:
  8653. Offset    Size    Description    (Table 2391)
  8654.  00h    WORD    VxD ID number
  8655.  02h    BYTE    VxD minor version
  8656.  03h    BYTE    VxD major version
  8657.  04h    BYTE    DDK minor version
  8658.  05h    BYTE    DDK major version
  8659.  06h    WORD    flags
  8660.         bit 0: V86 API supported
  8661.         bit 1: PM API supported
  8662.         bit 2: services supported
  8663.  08h    DWORD    start order
  8664.  0Ch  9 BYTEs    ASCIZ VxD name
  8665. SeeAlso: #2390
  8666. --------W-2F1684BX3110-----------------------
  8667. INT 2F - MS Windows - VSGLX16.386 - GET API ENTRY POINT
  8668.     AX = 1684h
  8669.     BX = 3110h (virtual device ID for VSGLX16.386) (see #2329)
  8670.     ES:DI = 0000h:0000h
  8671. Return: ES:DI -> VxD API entry point (see #2392)
  8672.           0000h:0000h if the VxD does not support an API
  8673. SeeAlso: AX=1684h/BX=045Fh,AX=1684h"DEVICE API",INT 20"Windows"
  8674.  
  8675. (Table 2392)
  8676. Call VSGLX16.386 entry point with:
  8677.     DX = function number
  8678.         0000h get azt16 version
  8679.         Return: CF clear
  8680.             AX = version returned by "azt16" device
  8681.         0001h get ???
  8682.         AX = ??? (always fails if nonzero)
  8683.         ES:BX -> buffer for ???
  8684.             first DWORD of buffer must be set to length of buffer
  8685.               (in bytes, 1 <= size <= 92) before calling
  8686.         Return: CF clear if successful
  8687.                 AX = 0001h
  8688.             CF set on error (invalid pointer, bad buffer size)
  8689.                 AX = 0000h
  8690.         0002h
  8691.         AX = ???
  8692.         BX = ???
  8693.         Return: CF clear if successful
  8694.                 AX = ???
  8695.             CF set on error
  8696.                 AX = error code
  8697.         0003h
  8698.         AX = ???
  8699.         BX = ???
  8700.         Return: CF clear if successful
  8701.             CF set on error
  8702.         0004h set ???
  8703.         ES:DI -> buffer containing ???
  8704.         BX = ???
  8705.         CX = number of bytes to copy
  8706.         Return: CF clear if successful
  8707.                 AX = 0001h
  8708.             CF set on error
  8709.                 AX = 0000h
  8710.         0005h get ???
  8711.         ES:DI -> buffer for ???
  8712.         BX = ???
  8713.         CX = number of bytes to copy
  8714.         Return: CF clear if successful
  8715.                 AX = 0001h
  8716.             CF set on error
  8717.                 AX = 0000h
  8718.         else
  8719.         Return: CF set
  8720. SeeAlso: #2373
  8721. --------W-2F1684BX31CF-----------------------
  8722. INT 2F - MS Windows - STAT.386 - GET API ENTRY POINT
  8723.     AX = 1684h
  8724.     BX = 31CFh (virtual device ID for STAT.386) (see #2329)
  8725.     ES:DI = 0000h:0000h
  8726. Return: ES:DI -> VxD API entry point (see #2393)
  8727.           0000h:0000h if the VxD does not support an API
  8728. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8729.  
  8730. (Table 2393)
  8731. Call STAT.386 entry point with:
  8732.     AX = function
  8733.         0000h get version
  8734.         Return: AX = STAT.386 version (AH = major, AL = minor)
  8735.         0001h execute RDMSR/WRMSR/RDTSC
  8736.         BH = 00h
  8737.         BL = second opcode byte (30h=WRMSR,31h=RDTSC,32h=RDMSR)
  8738.         EDX:EDI = value to be written (for BL=30h)
  8739.         ECX = MSR number for RDMSR/WRMSR
  8740.         Return: EDX:EAX = value read (RDTSR/RDMSR only)
  8741. SeeAlso: #2390,#2394
  8742. --------W-2F1684BX34DC-----------------------
  8743. INT 2F - QEMM v8.01 - MAGNARAM VxD - GET API ENTRY POINT
  8744.     AX = 1684h
  8745.     BX = 34DCh (virtual device ID for MAGNARAM) (see #2329)
  8746.     ES:DI = 0000h:0000h
  8747. Return: ES:DI -> VxD API entry point (see #2394)
  8748.           0000h:0000h if the VxD does not support an API
  8749. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8750.  
  8751. (Table 2394)
  8752. Call MAGNARAM MAGNA95.VXD protected-mode entry point with:
  8753.     AX = function number
  8754.         0000h get version and ???
  8755.         Return: AX = version (AH = major, AL = minor)
  8756.             CX = ???
  8757.                 bit 0: ???
  8758.                 bit 1: ???
  8759.         0001h get ???
  8760.         Return: CF clear
  8761.             DX:AX = ??? SHL 2
  8762.         0002h
  8763.         Return: CF clear if successful
  8764.                 AX = ???
  8765.                 DX = ???
  8766.             CF set on error
  8767.         0003h get ???
  8768.         Return: CF clear
  8769.             DX:AX = ??? SHL 2
  8770.         0004h ???
  8771.         Return: CF clear
  8772.             DX:AX = ???
  8773.         0005h ???
  8774.         Return: CF clear
  8775.             DX:AX = ???
  8776.         0006h ???
  8777.         Return: CF clear
  8778.             DX:AX = ???
  8779.         0007h ???
  8780.         Return: CF clear
  8781.             DX:AX = ???
  8782.         0008h ???
  8783.         Return: CF clear
  8784.             DX:AX = ???
  8785.         0009h ???
  8786.         Return: CF clear
  8787.             DX:AX = ???
  8788.         000Ah ???
  8789.         Return: CF clear
  8790.             DX:AX = ???
  8791.         000Bh get ???
  8792.         Return: CF clear
  8793.             DX:AX = ??? SHL 2
  8794.         000Ch get ???
  8795.         Return: CF clear
  8796.             DX:AX = ??? SHL 2
  8797.         000Dh get ???
  8798.         Return: CF clear
  8799.             DX:AX = ??? SHL 2
  8800.         000Eh get ???
  8801.         Return: CF clear
  8802.             AX = ???
  8803.             DX = ???
  8804.         000Fh get ???
  8805.         Return: CF clear
  8806.             DX:AX = ???
  8807.         0010h get ???
  8808.         Return: CF clear
  8809.             DX:AX = ???
  8810.         0011h get ???
  8811.         Return: CF clear
  8812.             DX:AX = ???
  8813.         0012h get ???
  8814.         Return: CF clear
  8815.             DX:AX = ???
  8816.         0013h get ???
  8817.         Return: CF clear
  8818.             DX:AX = ???
  8819.         0014h get ???
  8820.         Return: CF clear
  8821.             DX:AX = ???
  8822.         0015h get ???
  8823.         Return: CF clear
  8824.             DX:AX = ???
  8825.         else
  8826.         Return: CF set
  8827. SeeAlso: #2393,#2395
  8828. --------W-2F1684BX357E-----------------------
  8829. INT 2F - MS Windows - DSOUND - GET API ENTRY POINT
  8830.     AX = 1684h
  8831.     BX = 357Eh (virtual device ID for DSOUND device) (see #2329)
  8832.     ES:DI = 0000h:0000h
  8833. Return: ES:DI -> VxD API entry point
  8834.           0000h:0000h if the VxD does not support API in current mode
  8835. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8836. ----------2F1684BX377B-----------------------
  8837. INT 2F - MS Windows - MX1501HAD - GET API ENTRY POINT
  8838.     AX = 1684h
  8839.     BX = 377Bh (virtual device ID for MX1501HAD device)
  8840.     ES:DI = 0000h:0000h
  8841. Return: ES:DI -> VxD API entry point (see #2395)
  8842.           0000h:0000h if the VxD does not support an API
  8843. Note:    The drivers VCMD95C.VXD and VCMD.386 are part of the driver disks
  8844.       provided with the chip-card-reader/keyboard combination MX 1501 HAD,
  8845.       produced by Cherry
  8846. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8847.  
  8848. (Table 2395)
  8849. Call CHERRY VCMD95C.VXD entry point with:
  8850.     AX = function
  8851.         0001h get version
  8852.         Return: AX = version number (0100h) (AH = major, AL = minor)
  8853.         0002h hook INT 09 (and 8???)
  8854.         0003h unhook INT 09 (and 8???)
  8855.         0004h get number of bytes in FIFO
  8856.         Return: AX = bytes in FIFO
  8857.         0005h get next FIFO-data
  8858.         Return: AX = data
  8859.             BL = port number
  8860.             BH = direction (1=in, 0=out)
  8861.             DX:CX = timestamp
  8862.         0006h clear FIFO
  8863.         0007h output byte
  8864.         DX = port number
  8865.         BL = keyboard command
  8866.         Return: data in FIFO (see #2397)
  8867.                (value, port, in/out, timestamp)
  8868.         0008h input byte
  8869.         DX = port number
  8870.         Return: data in FIFO (see #2397)
  8871.             (value, port, in/out, timestamp)
  8872.         0009h input byte immediately
  8873.         DX = port number
  8874.         Return: AX = data
  8875.         000Ah read next FIFO data (nondestructive)
  8876.         Return: AX = data
  8877.             BL = port number
  8878.             BH = direction (1=in, 0=out)
  8879.             DX:CX = timestamp
  8880.         000Bh get timestamp
  8881.         Return: DX:CX = timestamp (in ms)
  8882.         000Ch enable IRQ 1
  8883.         000Dh disable IRQ 1
  8884.         000Eh enable data retrieval
  8885.         Note:    Sets a flag in the internal mode-byte which
  8886.               tells the driver to recognize the data
  8887.         000Fh disable data retrieval
  8888.         Note:    resets a flag in the internal mode-byte
  8889.         0010h get retrieval mode
  8890.         Return: AX = current retrieval mode
  8891.         0011h set retrieval mode
  8892.         BX = new retrieval mode (see #2396)
  8893.         Return: AX = old retrieval mode
  8894.         0012h get command value
  8895.         Return: AX = command value
  8896.         0013h set command value
  8897.         BX = command value
  8898. SeeAlso: #2393,#2398
  8899.  
  8900. Bitfields for retrieval mode:
  8901. Bit(s)    Description    (Table 2396)
  8902.  0    enable data retrieval
  8903.  1    0 = interrupt-driven
  8904.     1 = polling mode
  8905.  2    0 = read port 60h everytime
  8906.     1 = read port 60h only when OBF of port 64h is set
  8907.  3    0 = don't call old INT 9
  8908.     1 = call INT 9 before our INT-handler
  8909.  4-7    reserved
  8910. SeeAlso: #2395,#2397
  8911.  
  8912. Format of FIFO entry (1024 entries in FIFO):
  8913. Offset    Size    Description    (Table 2397)
  8914.  00h    BYTE    data byte
  8915.  01h    BYTE    I/O port
  8916.  02h    BYTE    direction (1=in, 0=out)
  8917.  03h    BYTE    reserved
  8918.  04h    DWORD    timestamp
  8919. SeeAlso: #2395,#2396
  8920. --------W-2F1684BX38DA-----------------------
  8921. INT 2F - MS Windows - VIWD - GET API ENTRY POINT
  8922.     AX = 1684h
  8923.     BX = 38DAh (virtual device ID for VIWD device) (see #2329)
  8924.     ES:DI = 0000h:0000h
  8925. Return: ES:DI -> VxD API entry point (see #2398)
  8926.           0000h:0000h if the VxD does not support API in current mode
  8927. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8928.  
  8929. (Table 2398)
  8930. Call VIWD.VXD entry point with:
  8931.     DX = function number
  8932.         0000h ???
  8933.         Return: CF clear
  8934.             AX = ???
  8935.         0004h ???
  8936.         Return: CF clear
  8937.             DX = 0000h
  8938.         0006h
  8939.         Return: CF clear
  8940.         000Ah
  8941.         AX = ???
  8942.         Return: CF clear if successful
  8943.             CF set on error
  8944.         000Ch
  8945.         000Dh
  8946.         000Eh
  8947.         Return: CF clear
  8948.         000Fh
  8949.         Return: CF clear
  8950.         0010h
  8951.         0011h
  8952.         0015h
  8953.         Return: CF clear if successful
  8954.                 AX = ???
  8955.             CF set on error
  8956.                 AX = ???
  8957.             DX = 0000h
  8958.         0016h
  8959.         0017h
  8960.         Return: CF clear if successful
  8961.                 AX = ???
  8962.             CF set on error
  8963.                 AX = ???
  8964.             DX = 0000h
  8965.         0018h ???
  8966.         CX = ???
  8967.         Return: CF clear if successful
  8968.                 AX = 0000h
  8969.             CF set on error
  8970.         else
  8971.         Return: CF set
  8972. SeeAlso: #2395,#2399
  8973. --------W-2F1684BX4321-----------------------
  8974. INT 2F - MS Windows - POSTMSG - GET API ENTRY POINT
  8975.     AX = 1684h
  8976.     BX = 4321h (virtual device ID for POSTMSG device) (see #2329)
  8977.     ES:DI = 0000h:0000h
  8978. Return: ES:DI -> VxD API entry point (see #2399,#2401)
  8979.           0000h:0000h if the VxD does not support an API
  8980.  
  8981. (Table 2399)
  8982. Call POSTMSG protected-mode entry point with:
  8983.     AX = window handle
  8984.     CX:BX -> callback procedure (see #2400)
  8985. Return: nothing
  8986. Note:    this call registers a WinApp with the VxD; the callback must be in a
  8987.       fixed, non-discardable code segment
  8988. SeeAlso: #2401,#2402
  8989.  
  8990. (Table 2400)
  8991. Values POSTMSG callback routine is called with:
  8992.     STACK:    DWORD    "lParam" parameter from DOSApp
  8993.         WORD    "wParam" parameter from DOSApp
  8994.         WORD    Windows message number (WM_USER + 100h)
  8995.         WORD    registered HWND
  8996.  
  8997. (Table 2401)
  8998. Call POSTMSG V86-mode entry point with:
  8999.     BX = wParam value to pass to protected-mode callback
  9000.     DX:AX = lParam value to pass to protected-mode callback
  9001. Return: CF clear if successful
  9002.     CF set on error (no WinApp registered)
  9003. SeeAlso: #2399
  9004. --------W-2F1684BX7FE0-----------------------
  9005. INT 2F - MS Windows - VSWITCHD - GET API ENTRY POINT
  9006.     AX = 1684h
  9007.     BX = 7FE0h (virtual device ID for VSWITCHD device) (see #2329)
  9008.     ES:DI = 0000h:0000h
  9009. Return: ES:DI -> VxD API entry point (see #2402)
  9010.           0000h:0000h if the VxD does not support an API
  9011.  
  9012. (Table 2402)
  9013. Call VSWITCHD entry point with:
  9014.     AX = function
  9015.         0000h toggle windowed mode (simulate Alt-Enter keypress)
  9016.         Return: nothing
  9017.         0001h get windowed mode
  9018.         Return: CF clear if VM is windowed
  9019.             CF set if VM is full-screen
  9020. SeeAlso: #2399,#2403
  9021. --------W-2F1684BX8888-----------------------
  9022. INT 2F - MS Windows - VbillD - GET API ENTRY POINT
  9023.     AX = 1684h
  9024.     BX = 8888h (virtual device ID for VbillD device) (see #2329)
  9025.     ES:DI = 0000h:0000h
  9026. Return: ES:DI -> VxD API entry point (see #2403)
  9027.           0000h:0000h if the VxD does not support an API
  9028.  
  9029. (Table 2403)
  9030. Call VbillD entry point with:
  9031.     AX = function
  9032.         0001h set reverse video
  9033.         0002h set normal video
  9034. Return: ???
  9035. SeeAlso: #2402
  9036. --------W-2F1685-----------------------------
  9037. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  9038.     AX = 1685h
  9039.     BX = VM ID of virtual machine to switch to
  9040.     CX = flags (see #2404)
  9041.     DX:SI = priority boost (refer to VMM.INC)
  9042.     ES:DI -> FAR procedure to callback
  9043. Return: CF set on error
  9044.         AX = error code
  9045.         01h invalid VM ID
  9046.         02h invalid priority boost
  9047.         03h invalid flags
  9048.     CF clear if successful
  9049.         event will be or has been called
  9050. Notes:    some DOS devices, such as networks, need to call functions in a
  9051.       specific VM. This call forces the appropriate VM to be installed.
  9052.     the callback procedure must preserve all registers and return with IRET
  9053. SeeAlso: AX=1683h,INT 15/AX=1117h,AX=DB06h"WINGO"
  9054.  
  9055. Bitfields for VM switching flags:
  9056. Bit(s)    Description    (Table 2404)
  9057.  0    wait until interrupts enabled
  9058.  1    wait until critical section unowned
  9059.  2-15    reserved (zero)
  9060. --------E-2F1686-----------------------------
  9061. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  9062.     AX = 1686h
  9063. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  9064.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  9065. SeeAlso: AX=1687h
  9066. --------E-2F1687-----------------------------
  9067. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  9068.     AX = 1687h
  9069. Return: AX = 0000h if installed
  9070.         BX = flags
  9071.         bit 0: 32-bit programs supported
  9072.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  9073.         DH = DPMI major version
  9074.         DL = two-digit DPMI minor version (binary)
  9075.         SI = number of paragraphs of DOS extender private data
  9076.         ES:DI -> DPMI mode-switch entry point (see #2405)
  9077.     AX nonzero if not installed
  9078. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  9079. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT D4/AH=10h
  9080.  
  9081. (Table 2405)
  9082. Call DPMI mode switch entry point with:
  9083.     AX = flags
  9084.         bit 0: set if 32-bit program
  9085.     ES = real mode segment of buffer for DPMI private data (ignored if
  9086.         SI was zero)
  9087. Return: CF set on error
  9088.         program still in real mode
  9089.         AX = error code (DPMI 1.0+)
  9090.            8011h unable to allocate all necessary descriptors
  9091.            8021h 32-bit program specified, but 16-bit DPMI host
  9092.     CF clear if successful
  9093.         CS = 16-bit selector corresponding to real-mode CS
  9094.         SS = selector corresponding to real-mode SS (64K limit)
  9095.         DS = selector corresponding to real-mode DS (64K limit)
  9096.         ES = selector to program's PSP (100h byte limit)
  9097.         FS = GS = 0
  9098.         high word of ESP = 0 if 32-bit program
  9099.         program now in protected mode
  9100. Note:    this entry point is only called for the initial switch to protected
  9101.       mode
  9102. --------W-2F1688BX0BAD-----------------------
  9103. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT
  9104.     AX = 1688h
  9105.     BX = 0BADh
  9106. Return: AX = 0000h if supported
  9107.         BX = alias selector for LDT
  9108. Note:    use the LSL instruction or GetSelectorLimit() to find LDT size
  9109.     this call should be considered obsolete for Windows 3.1+, as the
  9110.       alias selector can be retrieved via the API entry point for
  9111.       "MS-DOS" retrieved from INT 2F/AX=168Ah (see #2407)
  9112. SeeAlso: AX=1687h,#2407
  9113. --------W-2F1689-----------------------------
  9114. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  9115.     AX = 1689h
  9116.     ???
  9117. Return: ???
  9118. Desc:    the Windows KERNEL idle loop calls this function, which VMM uses as an
  9119.       indication that the system is idle, which in turn generates INT 28
  9120.       and INT 2F/AX=1607h/BX=0018h callouts
  9121. SeeAlso: AX=1680h,AX=1607h/BX=0018h,INT 15/AX=1000h,INT 28
  9122. --------E-2F168A-----------------------------
  9123. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  9124.     AX = 168Ah
  9125.     DS:(E)SI = selector:offset of ASCIZ vendor name (see #2406)
  9126. Return: AL = status
  9127.         00h successful
  9128.            ES:(E)DI -> extended API entry point
  9129.         8Ah unsuccessful
  9130. Notes:    the vendor name is used to determine which entry point to return; it is
  9131.       case-sensitive
  9132.     available in protected mode only
  9133.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  9134.     this call is present but not documented for DPMI 0.9
  9135.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  9136.       other than the MS-DOS one gracefully, producing an unhandled
  9137.       exception report; this has been fixed in the Borland Pascal 7 version
  9138. SeeAlso: AX=1687h,INT 31/AX=0A00h,INT 31/AH=57h
  9139.  
  9140. (Table 2406)
  9141. Values for DPMI vendor-specific API names:
  9142.  "MS-DOS"    MS Windows and 386MAX v6.00+ (see #2407)
  9143.  "386MAX"    386MAX v6.00+
  9144.  "HELIX_DPMI"    Helix Netroom's DPMI server
  9145.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286 (see #2408)
  9146.  "RATIONAL DOS/4G"  DOS/4G, DOS/4GW
  9147.  "VIRTUAL SUPPORT"  Borland 32RTM
  9148.  
  9149. (Table 2407)
  9150. Call Windows-support ("MS-DOS") entry point with:
  9151.     AX = 0100h get LDT alias selector
  9152. Return: CF clear if successful
  9153.         AX = alias selector
  9154.     CF set on error
  9155. SeeAlso: #2406,AX=1688h/BX=0BADh
  9156.  
  9157. (Table 2408)
  9158. Call Phar Lap RUN286 entry point with:
  9159.     AX = 0000h (function "load MSW")
  9160.     BX = new value for MSW register (low word of CR0)
  9161. Return: ???
  9162. SeeAlso: #2406
  9163. --------W-2F168B-----------------------------
  9164. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  9165.     AX = 168Bh
  9166.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  9167. Return: AL = 00h if focus set to specified VM
  9168. Notes:    documented on the Microsoft Developer's Network CD-ROM
  9169.     if the VM is a windowed DOS box, it will be set to full screen
  9170. SeeAlso: AX=1683h
  9171. --------W-2F168C-----------------------------
  9172. INT 2F - MS Windows 3.1 - RESTART COMMAND
  9173.     AX = 168Ch
  9174.     ???
  9175. Return: ???
  9176. Note:    WIN.COM executes specified application
  9177. --------W-2F168EDX0000-----------------------
  9178. INT 2F - Windows95 - TITLE - SET APPLICATION TITLE
  9179.     AX = 168Eh
  9180.     DX = 0000h
  9181.     ES:DI -> ASCIZ application title (max 79 chars+NUL)
  9182. Return: AX = status
  9183.         0000h failed
  9184.         0001h successful
  9185. Note:    if ES:DI is 0000h:0000h or points at an empty string, the current
  9186.       title is removed
  9187. BUG:    this function can return a successful status even though the title was
  9188.       not changed; reportedly, waiting for two clock ticks after program
  9189.       startup solves this problem
  9190. SeeAlso: AX=168Eh/DX=0001h,AX=168Eh/DX=0002h
  9191. --------W-2F168EDX0001-----------------------
  9192. INT 2F - Windows95 - TITLE - SET VIRTUAL MACHINE TITLE
  9193.     AX = 168Eh
  9194.     DX = 0001h
  9195.     ES:DI -> ASCIZ virtual machine title (max 29 chars+NUL)
  9196. Return: AX = status
  9197.         0000h failed
  9198.         0001h successful
  9199. Notes:    if ES:DI is 0000h:0000h or points at an empty string, the current
  9200.       title is removed
  9201.     the VM title should only be changed on explicit instruction from the
  9202.       user
  9203. BUG:    this function can return a successful status even though the title was
  9204.       not changed; reportedly, waiting for two clock ticks after program
  9205.       startup solves this problem
  9206. SeeAlso: AX=168Eh/DX=0000h,AX=168Eh/DX=0003h
  9207. --------W-2F168EDX0002-----------------------
  9208. INT 2F - Windows95 - TITLE - GET APPLICATION TITLE
  9209.     AX = 168Eh
  9210.     DX = 0002h
  9211.     ES:DI -> buffer for ASCIZ application title
  9212.     CX = size of buffer in bytes
  9213. Return: AX = status
  9214.         0000h failed
  9215.         0001h successful
  9216. Desc:    copy as much of the application's window title as possible to the given
  9217.       buffer, appending a terminating NUL to the buffer
  9218. SeeAlso: AX=168Eh/DX=0000h,AX=168Eh/DX=0003h
  9219. --------W-2F168EDX0003-----------------------
  9220. INT 2F - Windows95 - TITLE - GET VIRTUAL MACHINE TITLE
  9221.     AX = 168Eh
  9222.     DX = 0003h
  9223.     ES:DI -> buffer for ASCIZ virtual-machine title
  9224.     CX = size of buffer in bytes
  9225. Return: AX = status
  9226.         0000h failed
  9227.         0001h successful
  9228. Desc:    copy as much of the virtual machine's title as possible to the given
  9229.       buffer, appending a terminating NUL to the buffer
  9230. SeeAlso: AX=168Eh/DX=0001h,AX=168Eh/DX=0002h
  9231. --------W-2F168FDH00-------------------------
  9232. INT 2F - Windows95 - CLOSE-AWARENESS - ENABLE/DISABLE CLOSE COMMAND
  9233.     AX = 168Fh
  9234.     DH = 00h
  9235.     DL = new state
  9236.         00h disabled
  9237.         01h enabled
  9238. Return: AX = status
  9239.         0000h successful
  9240.         else failed
  9241. Desc:    enable or disable the system menu Close command for an application
  9242. SeeAlso: AX=168Fh/DH=01h,AX=168Fh/DH=02h
  9243. --------W-2F168FDH01-------------------------
  9244. INT 2F - Windows95 - CLOSE-AWARENESS - QUERY CLOSE
  9245.     AX = 168Fh
  9246.     DH = 01h
  9247.     DL = 00h (reserved)
  9248. Return: AX = status
  9249.         0000h Close command selected but not yet acknowledged
  9250.         0001h Close command issued and acknowledged
  9251.         168Fh Close command not selected -- application should continue
  9252. Desc:    determine whether the user has requested that the application be closed
  9253.       by selecting the system menu's Close option
  9254. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=02h
  9255. --------W-2F168FDH02-------------------------
  9256. INT 2F - Windows95 - CLOSE-AWARENESS - ACKNOWLEDGE CLOSE
  9257.     AX = 168Fh
  9258.     DH = 02h
  9259.     DL = 00h (reserved)
  9260. Return: AX = status
  9261.         0000h successful
  9262.         else failed
  9263. Note:    once a Close command has been issued, no further keyboard input is
  9264.       available to the application until it calls this function to
  9265.       acknowledge the Close request
  9266. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=03h
  9267. --------W-2F168FDH03-------------------------
  9268. INT 2F - Windows95 - CLOSE-AWARENESS - CANCEL CLOSE
  9269.     AX = 168Fh
  9270.     DH = 03h
  9271.     DL = 00h (reserved)
  9272. Return: AX = status
  9273.         0000h successful
  9274.         else failed
  9275. Desc:    cancels a close request which has already been acknowledged if the
  9276.       application determines that it will not exit at this time
  9277. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=03h
  9278. --------D-2F1690-----------------------------
  9279. INT 2F U - MS-DOS 7 kernel - GET/SET ???
  9280.     AX = 1690h
  9281.     ES:BX -> ???
  9282. Return: ES:BX -> ??? data (see #2409)
  9283. SeeAlso: AX=1611h,AX=1614h
  9284.  
  9285. Format of MS-DOS 7 kernel ??? data:
  9286. Offset    Size    Description    (Table 2409)
  9287.  00h    DWORD    -> ??? data (appears to list the installed drivers)
  9288.  04h    DWORD    -> ??? (value passed in via ES:BX is stored here)
  9289. --------W-2F1700-----------------------------
  9290. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  9291.     AX = 1700h
  9292. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  9293.     AX <> 1700h
  9294.         AL = WINOLDAP major version
  9295.         AH = WINOLDAP minor version
  9296. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  9297.       "old" (character-mode) application access to Dynamic Data Exchange,
  9298.       menus, and the Windows clipboard.
  9299. Note:    this installation check DOES NOT follow the format used by other
  9300.       software of returning AL=FFh
  9301. SeeAlso: AX=1701h,AX=4601h
  9302. Index:    installation check;WINOLDAP
  9303. --------W-2F1701-----------------------------
  9304. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  9305.     AX = 1701h
  9306. Return: AX = status
  9307.         nonzero success
  9308.         0000h   clipboard is already open
  9309. SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h,INT 16/AX=CB00h
  9310. --------W-2F1702-----------------------------
  9311. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  9312.     AX = 1702h
  9313. Return: AX = status
  9314.         nonzero clipboard has been emptied
  9315.         0000h   failure
  9316. SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h,INT 16/AX=CB05h
  9317. --------W-2F1703-----------------------------
  9318. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  9319.     AX = 1703h
  9320.     DX = clipboard format supported by WinOldAp (see #2410)
  9321.     ES:BX -> data (see #2411,#2412)
  9322.     SI:CX = size of data
  9323. Return: AX = status
  9324.         nonzero data copied into the Clipboard
  9325.         0000h   failure
  9326. SeeAlso: AX=1701h,AX=1705h,INT 16/AX=CB04h
  9327.  
  9328. (Table 2410)
  9329. Values for WinOldAp clipboard format:
  9330.  01h    text
  9331.  02h    bitmap
  9332.  03h    metafile picture
  9333.  04h    SYLK
  9334.  05h    DIF
  9335.  06h    TIFF
  9336.  07h    OEM text
  9337.  08h    DIB bitmap
  9338.  80h    special format (used by Windows WRITE, maybe other Windows applets???)
  9339.  81h    DSP text
  9340.  82h    DSP bitmap
  9341.  
  9342. Format of Windows Clipboard bitmap:
  9343. Offset    Size    Description    (Table 2411)
  9344.  00h    WORD    type (0000h)
  9345.  02h    WORD    width of bitmap in pixels
  9346.  04h    WORD    height of bitmap in pixels
  9347.  06h    WORD    bytes per line
  9348.  08h    BYTE    number of color planes
  9349.  09h    BYTE    number of adjacent color bits in pixel
  9350.  0Ah    DWORD    pointer to start of data
  9351.  0Eh    WORD    width in 0.1mm units
  9352.  10h    WORD    height in 0.1mm units
  9353.  12h  N BYTEs    bitmap data
  9354.  
  9355. Format of Windows metafile picture:
  9356. Offset    Size    Description    (Table 2412)
  9357.  00h    WORD    mapping mode
  9358.  02h    WORD    X extent
  9359.  04h    WORD    Y extent
  9360.  06h    WORD    picture data
  9361. --------W-2F1704-----------------------------
  9362. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  9363.     AX = 1704h
  9364.     DX = clipboard format supported by WinOldAp (see #2410)
  9365. Return: DX:AX = size of data in bytes, including any headers
  9366.         0000h:0000h if no data in this format in the Clipboard
  9367. Note:    Windows reportedly rounds up the size of the data to a multiple of 32
  9368.       bytes
  9369. SeeAlso: AX=1700h,AX=1703h,AX=1705h
  9370. --------W-2F1705-----------------------------
  9371. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  9372.     AX = 1705h
  9373.     DX = clipboard format supported by WinOldAp (see #2410)
  9374.     ES:BX -> buffer
  9375. Return: AX = status
  9376.         nonzero success
  9377.         0000h   error, or no data in this format in Clipboard
  9378. SeeAlso: AX=1700h,AX=1704h,INT 16/AX=CB03h
  9379. --------W-2F1708-----------------------------
  9380. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  9381.     AX = 1708h
  9382. Return: AX = status
  9383.         0000h failure
  9384.         nonzero success
  9385. --------W-2F1709-----------------------------
  9386. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  9387.     AX = 1709h
  9388.     SI:CX = desired size in bytes
  9389. Return: DX:AX = number of bytes in largest block of free memory
  9390. Note:    WinOldAp is responsible for including the size of any headers
  9391. --------W-2F170A-----------------------------
  9392. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  9393.     AX = 170Ah
  9394.     DX = GDI information index (see #2413)
  9395. Return: AX = integer value of the desired item
  9396.           (see #2414,#2415,#2416,#2417,#2418,#2419,#2420)
  9397. Note:    This function returns the device-capability bits for the given display
  9398.  
  9399. (Table 2413)
  9400. Values for GDI information index:
  9401.  00h    device driver version
  9402.  02h    device classification
  9403.  04h    width in mm
  9404.  06h    height in mm
  9405.  08h    width in pixels
  9406.  0Ah    height in pixels
  9407.  0Ch    bits per pixel
  9408.  0Eh    number of bit planes
  9409.  10h    number of brushes supported by device
  9410.  12h    number of pens supported by device
  9411.  14h    number of markers supported by device
  9412.  16h    number of fonts supported by device
  9413.  18h    number of colors
  9414.  1Ah    size required for device descriptor
  9415.  1Ch    curve capabilities
  9416.  1Eh    line capabilities
  9417.  20h    polygon capabilities
  9418.  22h    text capabilities
  9419.  24h    clipping capabilities
  9420.  26h    bitblt capabilities
  9421.  28h    X aspect
  9422.  2Ah    Y aspect
  9423.  2Ch    length of hypotenuse of aspect
  9424.  58h    logical pixels per inch of width
  9425.  5Ah    logical pixels per inch of height
  9426. SeeAlso: #2414,#2415,#2416,#2417,#2418,#2419,#2420
  9427.  
  9428. (Table 2414)
  9429. Values for device classification:
  9430.  00h    vector plotter
  9431.  01h    raster display
  9432.  02h    raster printer
  9433.  03h    raster camera
  9434.  04h    character-stream, PLP
  9435.  05h    Metafile, VDM
  9436.  06h    display-file
  9437. SeeAlso: #2413,#2415,#2416,#2417,#2418,#2419,#2420
  9438.  
  9439. Bitfields for curve capabilities:
  9440. Bit(s)    Description    (Table 2415)
  9441.  0    circles
  9442.  1    pie wedges
  9443.  2    chord arcs
  9444.  3    ellipses
  9445.  4    wide lines
  9446.  5    styled lines
  9447.  6    wide styled lines
  9448.  7    interiors
  9449. SeeAlso: #2413,#2414,#2416,#2417,#2418,#2419,#2420
  9450.  
  9451. Bitfields for line capabilities:
  9452. Bit(s)    Description    (Table 2416)
  9453.  1    polylines
  9454.  2    markers
  9455.  3    polymarkers
  9456.  4    wide lines
  9457.  5    styled lines
  9458.  6    wide styled lines
  9459.  7    interiors
  9460. SeeAlso: #2413,#2414,#2415,#2417,#2418,#2419,#2420
  9461.  
  9462. Bitfields for polygon capabilities:
  9463. Bit(s)    Description    (Table 2417)
  9464.  0    polygons
  9465.  1    rectangles
  9466.  2    trapezoids
  9467.  3    scanlines
  9468.  4    wide borders
  9469.  5    styled borders
  9470.  6    wide styled borders
  9471.  7    interiors
  9472. SeeAlso: #2413,#2414,#2415,#2416,#2418,#2419,#2420
  9473.  
  9474. Bitfields for text capabilities:
  9475. Bit(s)    Description    (Table 2418)
  9476.  0    output precision character
  9477.  1    output precision stroke
  9478.  2    clippping precision stroke
  9479.  3    90-degree character rotation
  9480.  4    arbitrary character rotation
  9481.  5    independent X and Y scaling
  9482.  6    double-size
  9483.  7    integer scaling
  9484.  8    continuous scaling
  9485.  9    bold
  9486.  10    italic
  9487.  11    underline
  9488.  12    strikeout
  9489.  13    raster fonts
  9490.  14    vector fonts
  9491.  15    reserved
  9492. SeeAlso: #2413,#2414,#2415,#2416,#2417,#2419,#2420
  9493.  
  9494. (Table 2419)
  9495. Values for clipping capabilities:
  9496.  00h    none
  9497.  01h    clipping to rectangles
  9498. SeeAlso: #2413,#2414,#2415,#2416,#2417,#2418,#2420
  9499.  
  9500. Bitfields for raster capabilities:
  9501. Bit(s)    Description    (Table 2420)
  9502.  0    simple bitBLT
  9503.  1    device requires banding support
  9504.  2    device requires scaling support
  9505.  3    supports >64K bitmap
  9506. SeeAlso: #2413,#2414,#2415,#2416,#2417,#2418,#2419
  9507. ----------2F18-------------------------------
  9508. INT 2F U - MS-Manager
  9509.     AH = 18h
  9510.     ???
  9511. Return: ???
  9512. --------l-2F1900-----------------------------
  9513. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  9514.     AX = 1900h
  9515. Return: AL = status
  9516.         00h not installed
  9517.         FFh installed
  9518. --------l-2F1901-----------------------------
  9519. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  9520.     AX = 1901h
  9521.     BL = SHELLC type
  9522.         00h transient
  9523.         01h resident
  9524.     DS:DX -> far call entry point for resident SHELLC.EXE
  9525. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  9526. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  9527. --------l-2F1902-----------------------------
  9528. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  9529.     AX = 1902h
  9530.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  9531.           final filename element uppercased
  9532.     DS:DX -> buffer for results
  9533. Return: AL = 00h  failed, either
  9534.         (a) final filename element quoted at ES:DI does not match
  9535.               identity of shell batch file quoted as parameter of most
  9536.               recent call of SHELLB command, or
  9537.         (b) no more Program Start Commands available.
  9538.     AL= FFh     success, then:
  9539.         memory at DS:[DX+1] onwards filled as:
  9540.         DX+1:    BYTE    count of bytes of PSC
  9541.         DX+2: N BYTEs    Program Start Command text
  9542.             BYTE    0Dh terminator
  9543. Desc:    COMMAND.COM executes the result of this call in preference to
  9544.       reading a command from a batch file.    Thus the batch file does not
  9545.       advance in execution for so long as SHELLB provides PSCs from its
  9546.       workspace.
  9547. Note:    The PSCs are planted in SHELLB workspace by SHELLC, the user
  9548.       menu interface.  The final PSC of a sequence is finished with a
  9549.       GOTO COMMON, which causes a loop back in the batch file which called
  9550.       SHELLC so as to execute SHELLC again.     The check on batch file name
  9551.       permits PSCs to CALL nested batch files while PSCs are still stacked
  9552.       up for subsequent execution.
  9553. --------l-2F1903-----------------------------
  9554. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  9555.     AX = 1903h
  9556.     ES:DI -> ASCIZ batch file name as for AX=1902h
  9557. Return: AL = status
  9558.         FFh quoted batch file name matches last SHELLB parameter
  9559.         00h it does not
  9560. --------l-2F1904-----------------------------
  9561. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  9562.     AX = 1904h
  9563. Return: ES:DI -> name of current shell batch file:
  9564.         WORD    number of bytes of name following
  9565.         BYTEs    (8 max) uppercase name of shell batch file
  9566. ----------2F1980-----------------------------
  9567. INT 2F U - IBM ROM-DOS v4.0 - INSTALLATION CHECK
  9568.     AX = 1980h
  9569. Return: AL = FFh if ??? installed/supported
  9570. Note:    called at the very beginning of SHELLSTB.COM, which exits if AL is not
  9571.       FFh on return
  9572. SeeAlso: AX=1981h,AX=1982h
  9573. ----------2F1981-----------------------------
  9574. INT 2F U - IBM ROM-DOS v4.0 - GET ??? STRING
  9575.     AX = 1981h
  9576.     DS:DX -> buffer for ???
  9577. Return: AL = status
  9578.         FFh if successful
  9579.         DS:DX buffer filled (refer to note below)
  9580.         81h on error
  9581. Note:    the first byte of the buffer is unchanged; depending on a byte in
  9582.       IBMBIO.COM, the remainder of the buffer is filled with either
  9583.       "C:\ROMSHELL.COM",0Dh or xxh,xxh,0Fh,"C:\ROMSHELL.COM",0Dh
  9584. SeeAlso: AX=1980h,AX=1982h
  9585. ----------2F1982-----------------------------
  9586. INT 2F U - IBM ROM-DOS v4.0 - GET ??? TABLE
  9587.     AX = 1982h
  9588. Return: AL = FFh if supported
  9589.         ES:DI -> ??? table (see #2421)
  9590. Note:    called by ROMSHELL.COM
  9591. SeeAlso: AX=1980h,AX=1981h
  9592.  
  9593. Format of ROM-DOS v4.0 ??? table:
  9594. Offset    Size    Description    (Table 2421)
  9595.  00h    BYTE    ??? (00h)
  9596.  01h    BYTE    ??? (41h) (ROMSHELL.COM checks if =00h)
  9597.  02h    BYTE    ??? (00h) (ROMSHELL.COM checks if =01h)
  9598.  03h    WORD    ??? (0001h) (ROMSHELL.COM checks if =0001h)
  9599.  05h    BYTE    ??? (00h)
  9600.  06h    WORD    ??? (04D5h)
  9601. --------!---Section--------------------------
  9602.