home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / sys_util / inter37b.zip / INTERRUP.F < prev    next >
Text File  |  1993-10-03  |  309KB  |  8,102 lines

  1. Interrupt List, part 6 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------D-22---------------------------------
  4. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  5. Desc:    this vector specifies the address of the routine which is to be given
  6.       control after a program is terminated; it should never be called
  7.       directly, since it does not point at an interrupt handler
  8. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  9.       termination, and then a FAR JMP is performed to the address in INT 22
  10.     normally points at the instruction immediately following INT 21/AH=4Bh
  11.       call which loaded the current program
  12. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  13. --------G-22---------------------------------
  14. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  15.     AL = new firmware debugging port
  16. Return: ???
  17. SeeAlso: INT 21"COMTROL",INT 23"COMTROL"
  18. --------D-23---------------------------------
  19. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  20. ---DOS 1.x---
  21. Return: AH = 00h abort program
  22.     if all registers preserved, restart DOS call
  23. ---DOS 2+---
  24.     CF clear
  25. Return: all registers preserved
  26.     return via RETF or RETF 2 with CF set
  27.         DOS will abort program with errorlevel 0
  28.     else (RETF/RETF 2 with CF clear or IRET)
  29.         interrupted DOS call is restarted
  30. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  31.       should never be called directly
  32.     MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  33.     DOS remembers the stack pointer before calling INT 23, and if it is
  34.       not the same on return, pops and discards the top word; this is what
  35.       permits a return with RETF as well as IRET or RETF 2
  36.     any DOS call may safely be made within the INT 23 handler, although
  37.       the handler must to check for a recursive invocation if it does
  38.       call DOS
  39. SeeAlso: INT 1B
  40. --------G-23---------------------------------
  41. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  42.     AL = query type
  43.         00h get old config map
  44.         Return: AX = old config map
  45.         01h get dual-ported RAM map
  46.         Return: BX:AX = dual-ported RAM map
  47.         02h get SCC port map
  48.         Return: BX:AX = SCC port map
  49. SeeAlso: INT 22"COMTROL",INT 26"COMTROL"
  50. --------D-24---------------------------------
  51. INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
  52. Note:    invoked when a critical (usually hardware) error is encountered; should
  53.       never be called directly
  54. SeeAlso: INT 21/AH=95h
  55.  
  56. Critical error handler is invoked with:
  57.     AH = type and processing flags
  58.         bit 7 clear = disk I/O error
  59.           set    = -- if block device, bad FAT image in memory
  60.               -- if char device, error code in DI
  61.         bit 6  unused
  62.         bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
  63.         bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
  64.         bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
  65.         bit 2 \ disk area of error    00 = DOS area  01 = FAT
  66.         bit 1 /            10 = root dir  11 = data area
  67.         bit 0 = 1 if write, 0 if read
  68.     AL = drive number if AH bit 7 clear
  69.     BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
  70.     DI low byte contains error code if AH bit 7 set
  71.        00h write-protection violation attempted
  72.        01h unknown unit for driver
  73.        02h drive not ready
  74.        03h unknown command given to driver
  75.        04h data error (bad CRC)
  76.        05h bad device driver request structure length
  77.        06h seek error
  78.        07h unknown media type
  79.        08h sector not found
  80.        09h printer out of paper
  81.        0Ah write fault
  82.        0Bh read fault
  83.        0Ch general failure
  84.        0Dh (DOS 3+) sharing violation
  85.        0Eh (DOS 3+) lock violation
  86.        0Fh invalid disk change
  87.        10h (DOS 3+) FCB unavailable
  88.        11h (DOS 3+) sharing buffer overflow
  89.        12h (DOS 4+) code page mismatch
  90.        13h (DOS 4+) out of input
  91.        14h (DOS 4+) insufficient disk space
  92.     STACK:    DWORD    return address for INT 24 call
  93.         WORD    flags pushed by INT 24
  94.         WORD    original AX on entry to INT 21
  95.         WORD    BX
  96.         WORD    CX
  97.         WORD    DX
  98.         WORD    SI
  99.         WORD    DI
  100.         WORD    BP
  101.         WORD    DS
  102.         WORD    ES
  103.         DWORD    return address for INT 21 call
  104.         WORD    flags pushed by INT 21
  105. Handler must return:
  106.     AL = action code
  107.         00h ignore error and continue processing request
  108.         01h retry operation
  109.         02h terminate program through the equivalent of INT 21/AH=4Ch
  110.             (INT 20h for DOS 1.x)
  111.         03h fail system call in progress
  112.     SS,SP,DS,ES,BX,CX,DX preserved
  113. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  114.     if the handler returns to the application by popping the stack, DOS
  115.       will be in an unstable state until the first call with AH > 0Ch
  116.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  117.       critical errors
  118.     if IGNORE specified but not allowed, it is turned into FAIL
  119.     if RETRY specified but not allowed, it is turned into FAIL
  120.     if FAIL specified but not allowed, it is turned into ABORT
  121.     (DOS 3+) if a critical error occurs inside the critical error handler,
  122.       the DOS call is automatically failed
  123. --------D-25---------------------------------
  124. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  125.     AL = drive number (00h = A:, 01h = B:, etc)
  126.     CX = number of sectors to read
  127.     DX = starting logical sector number (0000h - highest sector on drive)
  128.     DS:BX -> buffer for data
  129. Return: CF clear if successful
  130.     CF set on error
  131.         AH = status
  132.          80h device failed to respond (timeout)
  133.          40h seek operation failed
  134.          20h controller failed
  135.          10h data error (bad CRC)
  136.          08h DMA failure
  137.          04h requested sector not found
  138.          03h write-protected disk (INT 26 only)
  139.          02h bad address mark
  140.          01h bad command
  141.         AL = error code (same as passed to INT 24 in DI)
  142.         AX = 0207h if more than 64K sectors on drive
  143.     may destroy all other registers except segment registers
  144. Notes:    original flags are left on stack, and must be popped by caller
  145.     this call bypasses the DOS filesystem
  146. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  147.       invalid drive number
  148.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  149.       wrong number of bytes on the stack; use the huge-partition version
  150.       (INT 25/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  151. SeeAlso: INT 13/AH=02h,INT 25/CX=FFFFh,INT 26
  152. --------D-25----CXFFFF-----------------------
  153. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  154.     CX = FFFFh
  155.     AL = drive number (0=A, 1=B, etc)
  156.     DS:BX -> disk read packet (see below)
  157. Return: same as above
  158. Notes:    partition is potentially >32M (and requires this form of the call) if
  159.       bit 1 of device attribute word in device driver is set
  160.     original flags are left on stack, and must be removed by caller
  161.     this call bypasses the DOS filesystem
  162. SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh
  163.  
  164. Format of disk read packet:
  165. Offset    Size    Description
  166.  00h    DWORD    sector number
  167.  04h    WORD    number of sectors to read
  168.  06h    DWORD    transfer address
  169. --------d-25CDCD-----------------------------
  170. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  171.     AX = CDCDh
  172.     DS:BX -> buffer for address (see below)
  173.     CX = 0001h
  174.     DX = 0000h
  175. Return: AX = CDCDh if Stacker installed
  176.         DS:BX buffer filled
  177.  
  178. Format of driver address buffer:
  179. Offset    Size    Description
  180.  00h    WORD    signature CDCDh
  181.  02h    WORD    ??? 0001h
  182.  04h    DWORD    pointer to start of Stacker device driver
  183.  
  184. Format of device driver:
  185. Offset    Size    Description
  186.  00h    WORD    signature A55Ah
  187.  02h    WORD    Stacker version * 64h
  188.  04h    WORD    offset of volume-specific information offset table
  189.         (list of WORDs, one per drive, containing offsets to various
  190.         information)
  191.  06h 56 BYTEs    n/a
  192.  3Eh    BYTE    volume number, set after INT 21/AX=4404h
  193.         (use to index into volume-specific info offset table)
  194.  3Fh 19 BYTEs    n/a
  195.  52h  4 BYTEs    ASCII string "SWAP"
  196.  56h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  197.  
  198. Format of Stacker boot record:
  199. Offset    Size    Description
  200. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  201. 1F8h    DWORD    pointer to start of Stacker device driver
  202. 1FCh    WORD    Stacker volume number
  203. 1FEh    WORD    ???
  204. --------c-25--FFSI4358-----------------------
  205. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  206.     AL = FFh
  207.     SI = 4358h
  208. Return: SI = 6378h if installed
  209.         CX = segment of device driver PC-CACHE.SYS
  210.         DX = version (major in DH, minor in DL)
  211. Program: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  212.       access to certain disk drivers for devices such as Bernoulli drives
  213. SeeAlso: INT 13/AH=A0h
  214. --------D-26---------------------------------
  215. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  216.     AL = drive number (00h = A:, 01h = B:, etc)
  217.     CX = number of sectors to write
  218.     DX = starting logical sector number (0000h - highest sector on drive)
  219.     DS:BX -> data to write
  220. Return: CF clear if successful
  221.     CF set on error
  222.         AH = status
  223.          80h device failed to respond (timeout)
  224.          40h seek operation failed
  225.          20h controller failed
  226.          10h data error (bad CRC)
  227.          08h DMA failure
  228.          04h requested sector not found
  229.          03h write-protected disk (INT 26 only)
  230.          02h bad address mark
  231.          01h bad command
  232.         AL = error code (same as passed to INT 24 in DI)
  233.         AX = 0207h if more than 64K sectors on drive
  234.     may destroy all other registers except segment registers
  235. Notes:    original flags are left on stack, and must be popped by caller
  236.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  237.       disk buffers referencing sectors which are written with this call
  238. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  239.       invalid drive number
  240.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  241.       wrong number of bytes on the stack; use the huge-partition version
  242.       (INT 26/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  243. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh
  244. --------D-26----CXFFFF-----------------------
  245. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  246.     CX = FFFFh
  247.     AL = drive number (0=A, 1=B, etc)
  248.     DS:BX -> disk write packet (see below)
  249. Return: same as above
  250. Notes:    partition is potentially >32M (and requires this form of the call) if
  251.       bit 1 of device attribute word in device driver is set
  252.     original flags are left on stack, and must be removed by caller
  253.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  254.       disk buffers referencing sectors which are written with this call
  255. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26
  256.  
  257. Format of disk write packet:
  258. Offset    Size    Description
  259.  00h    DWORD    sector number
  260.  04h    WORD    number of sectors to read
  261.  06h    DWORD    transfer address
  262. --------G-26---------------------------------
  263. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  264.     ???
  265. Return: ???
  266. SeeAlso: INT 23"COMTROL",INT 27"COMTROL"
  267. --------D-27---------------------------------
  268. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  269.     DX = number of bytes to keep resident (max FFF0h)
  270.     CS = segment of PSP
  271. Return: never
  272. Notes:    this is an obsolete call
  273.     INT 22, INT 23, and INT 24 are restored from the PSP
  274.     does not close any open files
  275.     the minimum number of bytes which will remain resident is 110h for
  276.       DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
  277.       implements this service in COMMAND.COM rather than the DOS kernel
  278. SeeAlso: INT 21/AH=31h
  279. --------G-27---------------------------------
  280. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  281.     ???
  282. Return: ???
  283. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  284.       controller
  285. SeeAlso: INT 20"COMTROL",INT 26"COMTROL"
  286. --------D-28---------------------------------
  287. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  288.     SS:SP = top of MS-DOS stack for I/O functions
  289. Return: all registers preserved
  290. Desc:    This interrupt is invoked each time one of the DOS character input
  291.       functions loops while waiting for input.  Since a DOS call is in
  292.       progress even though DOS is actually idle during such input waits,
  293.       hooking this function is necessary to allow a TSR to perform DOS
  294.       calls while the foreground program is waiting for user input.     The
  295.       INT 28h handler may invoke any INT 21h function except functions
  296.       00h through 0Ch.
  297. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  298.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  299.       the INT 28h handler without destroying the DOS stacks.
  300.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  301.       handle which refers to CON
  302.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  303.       set to 01h; if larger, DOS is truly busy and should not be reentered
  304.     the default handler is an IRET instruction
  305.     supported in OS/2 compatibility box
  306.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  307.       this interrupt as superseded
  308. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  309. --------D-29---------------------------------
  310. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  311.     AL = character to display
  312. Return: nothing
  313. Notes:    automatically called when writing to a device with bit 4 of its device
  314.       driver header set (see also INT 21/AH=52h)
  315.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  316.       vector and assume that ANSI.SYS is installed if the segment is larger
  317.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  318.     the default handler under DESQview 2.2 understands the <Esc>[2J
  319.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  320. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  321. --------N-2A00-------------------------------
  322. INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
  323.     AH = 00h
  324. Return: AH <> 00h if installed
  325.     CF set if NetWare v2.15 NetBIOS emulator installed
  326. Note:    also supported by Lantastic, NetWare, 10NET, etc.
  327. SeeAlso: INT 5C
  328. --------N-2A0000-----------------------------
  329. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  330.     AX = 0000h
  331. Return: AH = DDh
  332. SeeAlso: INT 5B
  333. --------N-2A01-------------------------------
  334. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  335.     AH = 01h
  336.     ES:BX -> NCB (see INT 5C)
  337. Return: AL = NetBIOS error code
  338.     AH = 00h if no error
  339.        = 01h on error
  340. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  341. --------N-2A02-------------------------------
  342. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  343.     AH = 02h
  344.     ???
  345. Return: ???
  346. --------N-2A0300-----------------------------
  347. INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
  348.     AX = 0300h
  349.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  350.         must include the colon)
  351. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  352.     CF set if access via files only
  353. Notes:    do not use direct disk accesses if this function returns CF set or the
  354.       device is redirected (INT 21/AX=5F02h)
  355.     may take some time to execute
  356.     called by DOS kernel on INT 25 and INT 26
  357.     also supported by Lantastic, NetWare, 10NET, etc.
  358. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  359. --------N-2A04-------------------------------
  360. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
  361.     AH = 04h
  362.     AL = error retry
  363.         00h automatically retry request on errors 09h, 12h, and 21h
  364.         01h no retry
  365.         02h ???
  366.     ES:BX -> Network Control Block (see INT 5C"NetBIOS")
  367. Return: AX = 0000h if successful
  368.     AH = 01h on error
  369.         AL = error code
  370. Notes:    invokes either INT 5B or INT 5C as appropriate
  371.     also supported by Lantastic, NetWare, 10NET, etc.
  372.     NetWare 2.15 NetBIOS emulator returns CF clear if successful, CF set
  373.       on error
  374. SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  375. --------N-2A0500-----------------------------
  376. INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
  377.     AX = 0500h
  378. Return: AX reserved
  379.     BX = number of network names available
  380.     CX = number of network control blocks available
  381.     DX = number of network sessions available
  382. Note:    also supported by Lantastic, NetWare, 10NET, etc.
  383. SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
  384. --------N-2A06-------------------------------
  385. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  386.     AH = 06h
  387.     AL = 01h set concatenation mode (all printer output put in one job)
  388.          02h set truncation mode (default)
  389.          printer open/close starts new print job
  390.          03h flush printer output and start new print job
  391. Return: CF set on error
  392.         AX = error code
  393.     CF clear if successful
  394. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  395.     also supported by Lantastic, NetWare, 10NET, etc.
  396.     LANtastic v4.x no longer supports this call
  397. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  398. --------N-2A07-------------------------------
  399. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  400.     AH = 07h
  401.     ???
  402. Return: ???
  403. Program: PC Network is an early networking package which was renamed the
  404.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  405. SeeAlso: AH=86h
  406. --------N-2A2001-----------------------------
  407. INT 2A - MS Networks or NETBIOS - ???
  408.     AX = 2001h
  409.     ???
  410. Return: ???
  411. Note:    intercepted by DESQview 2.x
  412. --------N-2A2002-----------------------------
  413. INT 2A - NETWORK - ???
  414.     AX = 2002h
  415.     ???
  416. Return: ???
  417. Note:    called by MS-DOS 3.30-6.00 APPEND
  418. --------N-2A2003-----------------------------
  419. INT 2A - NETWORK - ???
  420.     AX = 2003h
  421.     ???
  422. Return: ???
  423. Note:    called by MS-DOS 3.30-6.00 APPEND
  424. --------N-2A7802-----------------------------
  425. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  426.     AX = 7802h
  427.     ES:DI -> 8-byte buffer to be filled
  428. Return: AL = 00h if no user logged on to Extended Services
  429.     AL <> 00h if user logged on to Extended Services
  430.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  431. --------D-2A80-------------------------------
  432. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  433.     AH = 80h
  434.     AL = critical section number (00h-0Fh)
  435.         01h DOS kernel, SHARE.EXE, DOSMGR
  436.         apparently for maintaining the integrity of DOS/SHARE/NET
  437.           data structures
  438.         02h DOS kernel, DOSMGR
  439.         ensures that no multitasking occurs while DOS is calling an
  440.           installable device driver
  441.         05h network redirector
  442.         06h DOS 4.x only IFSFUNC
  443.         08h ASSIGN.COM
  444.         0Ah MSCDEX
  445.         0Fh IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  446. Notes:    normally hooked to avoid interrupting a critical section, rather than
  447.       called
  448.     the handler should ensure that none of the critical sections are
  449.       reentered, usually by suspending a task which attempts to reenter
  450.       an active critical section
  451.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  452.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  453.       beginning at offset -11 from the Swappable Data Area
  454.       (see INT 21/AX=5D06h); each word contains the offset within the
  455.       DOS data segment of a byte which must be changed from C3h (RET)
  456.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  457.       DOS 4+ to enable use of critical sections.  For DOS 4+, all words in
  458.       this list point at the byte at offset 0D0Ch.
  459. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  460. --------D-2A81-------------------------------
  461. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  462.     AH = 81h
  463.     AL = critical section number (00h-0Fh) (see AH=80h)
  464. Notes:    normally hooked rather than called
  465.     the handler should reawaken any tasks which were suspended due to an
  466.       attempt to enter the specified critical section
  467. SeeAlso: AH=80h,AH=82h,AX=8700h
  468. --------D-2A82-------------------------------
  469. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  470.     AH = 82h
  471. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  472.       greater than 0Ch except 59h, and on process termination
  473.     the handler should reawaken any tasks which were suspended due to an
  474.       attempt to enter one of the critical sections 0 through 7
  475. SeeAlso: AH=81h
  476. --------N-2A84-------------------------------
  477. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  478.     AH = 84h
  479. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  480.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  481.       software to process requests
  482. SeeAlso: INT 28
  483. --------N-2A86-------------------------------
  484. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  485.     AH = 86h
  486.     ???
  487. Return: ???
  488. SeeAlso: AH=07h,AH=C4h
  489. --------P-2A8700-----------------------------
  490. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  491.     AX = 8700h
  492.     CF clear
  493. Return: CF clear if OK to print in background now
  494.     CF set if background printing not allowed at this time
  495. Desc:    used to inform interested programs that PRINT is about to start its
  496.       background processing, and allow those programs to postpone the
  497.       processing if necessary
  498. Notes:    when PRINT gains control and wants to begin printing, it calls this
  499.       function.  If CF is clear on return, PRINT begins its background
  500.       processing, and calls AX=8701h when it is done.  If CF is set on
  501.       return, PRINT will relinquish control immediately, and will not
  502.       call AX=8701h
  503.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  504.       prevent background printing while its own code is active
  505. SeeAlso: AH=80h,AH=81h,AX=8701h
  506. --------P-2A8701-----------------------------
  507. INT 2A CU - PRINT - END BACKGROUND PRINTING
  508.     AX = 8701h
  509. Desc:    used to inform interested programs that PRINT has completed its
  510.       background processing
  511. Note:    called by PRINT after it has performed some background printing; not
  512.       called if AX=8700h returned with CF set.
  513. SeeAlso: AX=8700h
  514. --------N-2A89-------------------------------
  515. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  516.     AH = 89h
  517.     AL = ???  (ASSIGN uses 08h)
  518.     ???
  519. Return: ???
  520. --------I-2A90-------------------------------
  521. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  522.     AH = 90h
  523.     ???
  524. Return: ???
  525. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  526.       03h-07h,0Ch-11h
  527. --------N-2AC2-------------------------------
  528. INT 2A U - Network - ???
  529.     AH = C2h
  530.     AL = subfunction
  531.         07h ???
  532.         08h ???
  533.     BX = 0001h
  534.     ???
  535. Return: ???
  536. Note:    called by DOS 3.30-6.00 APPEND
  537. --------N-2AC4-------------------------------
  538. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  539.     AH = C4h
  540.     AL = subfunction
  541.         07h ???
  542.         08h ???
  543.     BX = ???
  544.     ???
  545. Return: ???
  546. SeeAlso: AH=86h
  547. --------N-2AD800-----------------------------
  548. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  549.     AX = D800h
  550. Return: nothing
  551. Desc:    sets ??? flag, and sets ??? to initial value
  552. Note:    called by CLIENT
  553. SeeAlso: AX=D801h,AX=D850h
  554. --------N-2AD801-----------------------------
  555. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  556.     AX = D801h
  557. Return: nothing
  558. Desc:    clears the ??? flag set by AX=D800h
  559. Note:    called by CLIENT
  560. SeeAlso: AX=D800h,AX=D850h
  561. --------N-2AD850-----------------------------
  562. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  563.     AX = D850h
  564. Return: nothing
  565. Desc:    increments an internal byte-sized counter
  566. Note:    intercepted by DV/X 1.10 PEERSERV.DVR
  567. SeeAlso: AX=D851h
  568. --------N-2AD851-----------------------------
  569. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  570.     AX = D851h
  571. Return: nothing
  572. Desc:    resets an internal byte-sized counter to zero
  573. Note:    intercepted by DV/X 1.10 PEERSERV.DVR
  574. SeeAlso: AX=D850h
  575. --------N-2AE0-------------------------------
  576. INT 2A U - PC Network 1.00 - ???
  577.     AH = E0h
  578.     AL = subfunction??? (01h,02h, maybe others)
  579.     ???
  580. Return: ???
  581. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  582. --------N-2AFF90-----------------------------
  583. INT 2A - PC/TCP PREDIR.EXE - ???
  584.     AX = FF90h
  585. Return: AX = ???
  586. Note:    PREDIR.EXE is the network printer redirector included as part of the
  587.       PC/TCP system by FTP Software, Inc.
  588. --------N-2AFF91-----------------------------
  589. INT 2A - PC/TCP PREDIR.EXE - ???
  590.     AX = FF91h
  591.     BX = ???
  592. Return: AX = status???
  593. --------N-2AFF92-----------------------------
  594. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  595.     AX = FF92h
  596. Return: AX = 0000h if installed
  597.        BX = redirected printer port (FFFFh if no printers redirected)
  598.        CX = version (CH = major, CL = minor)
  599. Note:    PREDIR.EXE is the network printer redirector included as part of the
  600.       PC/TCP system by FTP Software, Inc.
  601. --------N-2AFF93-----------------------------
  602. INT 2A - PC/TCP PREDIR.EXE - ???
  603.     AX = FF93h
  604. Return: AX = ???
  605. --------N-2AFF94-----------------------------
  606. INT 2A - PC/TCP PREDIR.EXE - ???
  607.     AX = FF94h
  608.     BX = ???
  609.     CX = ???
  610.     DX = ???
  611. Return: AX = ???
  612. Note:    PREDIR.EXE is the network printer redirector included as part of the
  613.       PC/TCP system by FTP Software, Inc.
  614. --------N-2AFF95-----------------------------
  615. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  616.     AX = FF95h
  617.     CX = what to get
  618.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  619.         0001h spooling program
  620.         0002h ???
  621.         0003h spool file name
  622.         0004h swap file name
  623. Return: AX = status
  624.         0000h successful
  625.     BX:DX -> ASCIZ configuration string
  626. --------N-2AFF96-----------------------------
  627. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  628.     AX = FF96h
  629.     CX = what to set
  630.         0000h ???
  631.         0001h print-on-hotkey state
  632.         0002h print-on-exit state
  633.         0003h print job timeout in clock ticks
  634.         0004h print-on-EOF state
  635.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  636. Return: AX = ???
  637. SeeAlso: AX=FF97h
  638. Note:    PREDIR.EXE is the network printer redirector included as part of the
  639.       PC/TCP system by FTP Software, Inc.
  640. --------N-2AFF97-----------------------------
  641. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  642.     AX = FF97h
  643.     CX = what to get
  644.         0000h ???
  645.         0001h print-on-hotkey state
  646.         0002h print-on-exit state
  647.         0003h print job timeout in clock ticks
  648.         0004h print-on-EOF state
  649. Return: AX = status
  650.         0000h successful
  651.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  652. SeeAlso: AX=FF96h
  653. --------D-2B---------------------------------
  654. INT 2B - DOS 2+ - RESERVED
  655. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  656. --------D-2C---------------------------------
  657. INT 2C - DOS 2+ - RESERVED
  658. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  659. --------O-2C---------------------------------
  660. INT 2C - STARLITE architecture - KERNEL API
  661. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  662.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  663.       be released in 1991.    The interrupt number is subject to change
  664.       before the actual release.
  665. --------m-2C---------------------------------
  666. INT 2C R - RM386 v6.00 - CLOAKING - CALL PROTECTED-MODE PASSALONG CHAIN
  667. Note:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  668.       in a chain of protected-mode handlers, and will only pass execution
  669.       to the V86-mode INT 2C handler if none of the handlers in the
  670.       passalong chain handle the call instead.  This is the method by which
  671.       the real-mode stub of a cloaked application communicates with the
  672.       protected-mode portion.
  673. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  674.       Netroom
  675. SeeAlso: INT 2C/AX=0009h
  676. --------m-2C0000-----------------------------
  677. INT 2C P - RM386 v6.00 - CLOAKING - ALLOCATE GDT SELECTOR
  678.     AX = 0000h
  679.     EBX = base address
  680.     CL = access mode byte
  681.     CH = extended access mode byte (omit limit field)
  682.     EDX = segment limit
  683. Return: CF clear if successful
  684.         AX = selector
  685.     CF set on error
  686.         AX = error code (see below)
  687. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  688.       Netroom
  689. Note:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  690. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h
  691.  
  692. Values for error code:
  693.  0001h    no more selectors
  694.  0002h    not a GDT ring 0 selector
  695.  0003h    invalid selector (out of range, not user selector)
  696.  0004h    selector not allocated
  697. --------m-2C0001-----------------------------
  698. INT 2C P - RM386 v6.00 - CLOAKING - FREE GDT SELECTOR
  699.     AX = 0001h
  700.     SI = selector
  701. Return: CF clear if successful
  702.     CF set on error
  703.         AX = error code (see AX=0000h)
  704. SeeAlso: AX=0000h
  705. --------m-2C0002-----------------------------
  706. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT BASE ADDRESS
  707.     AX = 0002h
  708.     SI = selector
  709.     EBX = new physical base addres
  710. Return: CF clear if successful
  711.     CF set on error
  712.         AX = error code (see AX=0000h)
  713. Return: AX=0000h,AX=0003h,AX=0004h,INT 31/AX=0007h
  714. --------m-2C0003-----------------------------
  715. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT LIMIT
  716.     AX = 0003h
  717.     SI = selector
  718.     EBX = new limit
  719. Return: CF clear if successful
  720.     CF set on error
  721.         AX = error code (see AX=0000h)
  722. SeeAlso: AX=0000h,AX=0002h,AX=0004h,INT 31/AX=0008h
  723. --------m-2C0004-----------------------------
  724. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT ACCESS MODE
  725.     AX = 0004h
  726.     SI = selector
  727.     CL = new access mode byte
  728. Return: CF clear if successful
  729.     CF set on error
  730.         AX = error code (see AX=0000h)
  731. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h,INT 31/AX=0009h
  732. --------m-2C0005-----------------------------
  733. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT EXTENDED ACCESS MODE
  734.     AX = 0005h
  735.     SI = selector
  736.     CL = new extended access mode byte (limit field ignored)
  737. Return: CF clear if successful
  738.     CF set on error
  739.         AX = error code (see AX=0000h)
  740. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h,INT 31/AX=0009h
  741. --------m-2C0006-----------------------------
  742. INT 2C P - RM386 v6.00 - CLOAKING - GET PROTECTED-MODE INTERRUPT VECTOR
  743.     AX = 0006h
  744.     CL = vector
  745. Return: CF clear
  746.     DX:EBX -> current interrupt handler
  747. SeeAlso: AX=0007h,INT 31/AX=0204h
  748. --------m-2C0007-----------------------------
  749. INT 2C P - RM386 v6.00 - CLOAKING - SET PROTECTED-MODE INTERRUPT VECTOR
  750.     AX = 0007h
  751.     CL = vector
  752.     DX:EBX -> interrupt handler
  753. Return: CF clear
  754. SeeAlso: AX=0006h,INT 31/AX=0205h
  755. --------m-2C0008-----------------------------
  756. INT 2C P - RM386 v6.00 - CLOAKING - GET PASSALONG ADDRESS
  757.     AX = 0008h
  758. Return: CF clear
  759.     DX:EBX = current passalong address
  760. SeeAlso: AX=0009h,AX=002Ch
  761. --------m-2C0009-----------------------------
  762. INT 2C P - RM386 v6.00 - CLOAKING - SET PASSALONG ADDRESS
  763.     AX = 0009h
  764.     DX:EBX = new value for passalong address
  765. Return: CF clear
  766. Note:    when an INT 2C instruction is executed in V86 mode, RM386 calls the
  767.       passalong address.  The handler should check whether the upcall
  768.       is of interest to it, and if not it should jump to the old passalong
  769.       address (retrieved with AX=0008h before the handler was installed)
  770. SeeAlso: AX=0008h,AX=002Dh,INT 2C"CLOAKING"
  771.  
  772. Passalong address called with:
  773.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  774.     SS:EBX -> caller registers (see below)
  775.     CF clear
  776.     others undefined
  777. Return: CF clear: pass along to V86-mode INT 2C handler
  778.     CF set: return immediately to V86 mode
  779.  
  780. Format of caller registers:
  781. Offset    Size    Description
  782.  00h    DWORD    EDI
  783.  04h    DWORD    ESI
  784.  08h    DWORD    EBP
  785.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  786.  10h    DWORD    EBX
  787.  14h    DWORD    EDX
  788.  18h    DWORD    ECX
  789.  1Ch    DWORD    EAX
  790.  20h    DWORD    error code
  791.  24h    DWORD    EIP
  792.  28h    WORD    CS
  793.  2Ah    WORD    padding
  794.  2Ch    DWORD    EFLAGS
  795.  30h    DWORD    ESP
  796.  34h    WORD    SS
  797.  36h    WORD    padding
  798. --remainder not available if protected-mode ring3 trap---
  799.  38h    WORD    ES
  800.  3Ah    WORD    padding
  801.  3Ch    WORD    DS
  802.  3Eh    WORD    padding
  803.  40h    WORD    FS
  804.  42h    WORD    padding
  805.  44h    WORD    GS
  806.  46h    WORD    padding
  807. --------m-2C000A-----------------------------
  808. INT 2C P - RM386 v6.00 - CLOAKING - GET BASE ADDRESS OF GDT SELECTOR
  809.     AX = 000Ah
  810.     SI = selector
  811. Return: CF clear if successful
  812.         EBX = segment base address
  813.     CF set on error
  814.         AX = error code (see AX=0000h)
  815. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  816.       Netroom
  817. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  818. --------m-2C000B-----------------------------
  819. INT 2C P - RM386 v6.00 - CLOAKING - GET SELECTOR LIMIT
  820.     AX = 000Bh
  821.     SI = selector
  822. Return: CF clear if successful
  823.         EBX = segment base address
  824.     CF set on error
  825.         AX = error code (see AX=0000h)
  826. SeeAlso: AX=000Ah
  827. --------m-2C---------------------------------
  828. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  829.     AX = function (000Ch-001Fh)
  830. --------m-2C0020-----------------------------
  831. INT 2C P - RM386 v6.00 - CLOAKING - GET SIZE OF PROTECTED-MODE STATE
  832.     AX = 0020h
  833. Return: EAX = number of bytes required for storing state
  834. SeeAlso: AX=0021h,AX=0022h
  835. --------m-2C0021-----------------------------
  836. INT 2C P - RM386 v6.00 - CLOAKING - SAVE PROTECTED-MODE STATE
  837.     AX = 0021h
  838.     ES:EDI -> buffer for protected-mode state
  839. Return: CF clear
  840.     buffer filled
  841. SeeAlso: AX=0020h,AX=0022h
  842. --------m-2C0022-----------------------------
  843. INT 2C P - RM386 v6.00 - CLOAKING - RESTORE PROTECTED-MODE STATE
  844.     AX = 0022h
  845.     DS:ESI -> buffer containing previously-saved protected-mode state
  846. Return: CF clear if successful
  847.         state restored
  848.     CF set on error (invalid buffer contents)
  849. SeeAlso: AX=0020h,AX=0021h
  850. --------m-2C0023-----------------------------
  851. INT 2C P - RM386 v6.00 - CLOAKING - ISSUE PROTECTED-MODE XMS CALL
  852.     AX = 0023h
  853. Note:    not currently implemented--NOP in RM386 v6.00
  854. --------m-2C0024-----------------------------
  855. INT 2C P - RM386 v6.00 - CLOAKING - SET V86-MODE STACK
  856.     AX = 0024h
  857.     DX:EBX = new value for V86-mode SS:ESP
  858. Return: nothing
  859. --------m-2C0025-----------------------------
  860. INT 2C P - RM386 v6.00 - CLOAKING - CALL V86-MODE PROCEDURE
  861.     AX = 0025h
  862.     DS:EBX -> client register structure (see AX=0009h)
  863. Return: CF clear if successful
  864.         client register structure updated
  865.     CF set if no more nested procedure call space available
  866. Note:    this call uses the V86-mode stack supplied in the client structure, and
  867.       calls the routine specified by CS:IP in the client structure
  868. SeeAlso: AX=0026h,AX=0027h,INT 31/AX=0301h
  869. --------m-2C0026-----------------------------
  870. INT 2C P - RM386 v6.00 - CLOAKING - CALL V86-MODE INTERRUPT HANDLER
  871.     AX = 0026h
  872.     DS:EBX -> client register structure (see AX=0009h)
  873.     CX = interrupt number
  874. Return: CF clear if successful
  875.         client register structure updated
  876.     CF set if no more nested procedure call space available
  877. Note:    this call uses the V86-mode stack supplied in the client structure
  878. SeeAlso: AX=0025h,AX=0027h,INT 31/AX=0300h
  879. --------m-2C0027-----------------------------
  880. INT 2C P - RM386 v6.00 - CLOAKING - CHAIN TO V86-MODE INTERRUPT HANDLER
  881.     AX = 0027h
  882.     DS:EBX -> client register structure (see AX=0009h)
  883. Return: CF clear if successful
  884.         client register structure updated
  885.     CF set if no more nested procedure call space available
  886. Note:    this call uses the V86-mode stack supplied in the client structure,
  887.       and jumps to the address specified by CS:IP in the client structure
  888. SeeAlso: AX=0025h,AX=0026h
  889. --------m-2C0028-----------------------------
  890. INT 2C P - RM386 v6.00 - CLOAKING - GET ESP0 FROM TSS
  891.     AX = 0028h
  892. Return: CF clear
  893.     EAX = TSS's ESP0
  894. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  895.       Netroom
  896. --------m-2C0029-----------------------------
  897. INT 2C P - RM386 v6.00 - CLOAKING - SET SECONDARY STACK
  898.     AX = 0029h
  899.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  900. Return: CF clear
  901. Desc:    inform RM386 of the ring 3 interrupt stack location
  902. --------m-2C002A-----------------------------
  903. INT 2C P - RM386 v6.00 - CLOAKING - SET 8259 IRQ BASE VECTORS
  904.     AX = 002Ah
  905.     BL = base vector of master interrupt controller
  906.     CL = base vector of slave interrupt controller
  907. Note:    this call merely informs RM386 that the caller has changed the
  908.       interrupt mappings
  909. SeeAlso: INT 67/AX=DE0Bh
  910. --------m-2C002B-----------------------------
  911. INT 2C P - RM386 v6.00 - CLOAKING - PROTECTED-MODE VIRTUAL DMA SERVICES
  912.     AX = 002Bh
  913.     CH = 81h
  914.     CL = subfunction (02h-0Ch)
  915.     other registers as appropriate for subfunction
  916. Return: varies by function
  917.     CF set on error
  918. Note:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  919.       with the same numbers
  920. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  921. --------m-2C002C-----------------------------
  922. INT 2C P - RM386 v6.00 - CLOAKING - GET PORT-TRAPPING PASSALONG
  923.     AX = 002Ch
  924. Return: CF clear
  925.     DX:EBX = current I/O trapping passalong address
  926. SeeAlso: AX=0008h,AX=002Dh
  927. --------m-2C002D-----------------------------
  928. INT 2C P - RM386 v6.00 - CLOAKING - SET PORT-TRAPPING PASSALONG
  929.     AX = 002Dh
  930.     DX:EBX = new I/O trapping passalong address
  931. Return: CF clear
  932. Note:    RM386 calls the passalong address whenever an access to a monitored
  933.       I/O port is attempted; the handler should check whether it is a port
  934.       that it is interested in, and if not call the previous passalong
  935.       address (which was retrieved with AX=002Ch before installing the
  936.       new handler)
  937. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  938.  
  939. Port-trapping passalong address called with:
  940.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  941.         ring 3)
  942.     SS:EBX -> caller register structure (see AX=0009h)
  943.         check EFLAGS V86-mode bit for type
  944.     CX = first two bytes of I/O instruction which was trapped
  945.     DX = port to which I/O is being performed
  946.     CF clear
  947. Return: CF clear if RM386 should perform I/O operation
  948.     CF set if I/O should be skipped
  949. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  950.       should not modify the client CS:EIP
  951. --------m-2C002E-----------------------------
  952. INT 2C P - RM386 v6.00 - CLOAKING - TRAP I/O PORT
  953.     AX = 002Eh
  954.     DX = port number to trap
  955. Return: CF clear if successful
  956.     CF set on error (port out of range or reserved)
  957. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  958.       Netroom
  959. SeeAlso: AX=002Fh,AX=0030h
  960. --------m-2C002F-----------------------------
  961. INT 2C PU - RM386 v6.00 - CLOAKING - UNTRAP I/O PORT
  962.     AX = 002Fh
  963.     DX = port number for which to cancel trapping
  964. Return: CF clear if successful
  965.     CF set on error (port out of range or reserved)
  966. SeeAlso: AX=002Eh,AX=0030h
  967. --------m-2C0030-----------------------------
  968. INT 2C PU - RM386 v6.00 - CLOAKING - GET TRAPPING STATE OF SPECIFIED PORT
  969.     AX = 0030h
  970.     DX = port number
  971. Return: CF clear if successful
  972.        BX = current state (0000h not trapped, 0001h trapped)
  973.     CF set on error (port out of range or reserved)
  974. SeeAlso: AX=002Eh,AX=002Fh
  975. --------m-2C0031-----------------------------
  976. INT 2C PU - RM386 v6.00 - BUG
  977.     AX = 0031h
  978. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  979.       Netroom
  980. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  981.       invoked with this function
  982. --------D-2D---------------------------------
  983. INT 2D - DOS 2+ - RESERVED
  984. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  985. --------t-2D---------------------------------
  986. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5.1]
  987.     AH = multiplex number
  988.     AL = function
  989.         00h installation check
  990.         Return: AL = 00h if free
  991.             AL = FFh if multiplex number in use
  992.                 CX = binary version number (CH = major, CL = minor)
  993.                 DX:DI -> signature string (see below) identifying
  994.                     the program using the multiplex number
  995.         01h get entry point
  996.         Return: AL = 00h if all API calls via INT 2D
  997.             AL = FFh if entry point supported
  998.                 DX:BX -> entry point for bypassing interrupt chain
  999.         02h uninstall
  1000.         DX:BX = return address for successful uninstall (may be
  1001.             ignored by TSR)
  1002.         Return: AL = status
  1003.                 00h not implemented
  1004.                 01h unsuccessful
  1005.                 02h can not uninstall yet, will do so when able
  1006.                 03h safe to remove, but no resident uninstaller
  1007.                 (TSR still enabled)
  1008.                 BX = segment of memory block with resident code
  1009.                 04h safe to remove, but no resident uninstaller
  1010.                 (TSR now disabled)
  1011.                 BX = segment of memory block with resident code
  1012.                 05h not safe to remove now, try again later
  1013.                 FFh successful
  1014.             return at DX:BX with AX destroyed if successful and
  1015.               TSR honors specific return address
  1016.         03h request pop-up
  1017.         Return: AL = status
  1018.                 00h not implemented or TSR is not a pop-up
  1019.                 01h can not pop up at this time, try again later
  1020.                 02h can not pop up yet, will do so when able
  1021.                 03h already popped up
  1022.                 04h unable to pop up, user intervention required
  1023.                 BX = standard reason code
  1024.                     0000h unknown failure
  1025.                     0001h interrupt chain passes through memory
  1026.                       which must be swapped out to pop up
  1027.                     0002h swap-in failed
  1028.                 CX = application's reason code if nonzero
  1029.                 FFh TSR popped up and was exited by user
  1030.                 BX = return value
  1031.                     0000h no return value
  1032.                     0001h TSR unloaded
  1033.                     0002h-00FFh reserved
  1034.                     0100h-FFFFh application-dependent
  1035.         04h determine chained interrupts
  1036.         BL = interrupt number (except 2Dh)
  1037.         Return: AL = status
  1038.                 00h not implemented
  1039.                 01h (obsolete) unable to determine
  1040.                 02h (obsolete) interrupt hooked
  1041.                 03h (obsolete) interrupt hooked, address returned
  1042.                 DX:BX -> TSR's interrupt BL handler
  1043.                 04h list of hooked interrupts returned
  1044.                 DX:BX -> interrupt hook list (see below)
  1045.                 FFh interrupt not hooked
  1046.         Notes:    since INT 2D is known to be hooked, the resident code
  1047.               need not test for BL=2Dh (to minimize its size), and
  1048.               the return value is therefore undefined in that case.
  1049.             BL is ignored if the TSR returns AL=04h; in that case,
  1050.               the caller needs to scan the return list rather than
  1051.               making additional calls to this function.  If the
  1052.               return is not 00h or 04h, then the caller must cycle
  1053.               through the remaining interrupt numbers it wishes to
  1054.               check.
  1055.             return values 01h thru 03h are disparaged and will be
  1056.               removed from the next version of this specification;
  1057.               they are included for compatibility with version 3.3,
  1058.               though they were probably never used in any
  1059.               implementation
  1060.         05h get hotkeys
  1061.         Return: AL = status
  1062.                 00h not implemented
  1063.                 FFh supported
  1064.                 DX:BX -> hotkey list (see below)
  1065.         06h-0Fh reserved for future enhancements
  1066.         Return: AL = 00h (not implemented)
  1067.         other  application-dependent
  1068. Notes:    programs should not use fixed multiplex numbers; rather, a program
  1069.       should scan all multiplex numbers from 00h to FFh, remembering the
  1070.       first unused multiplex in case the program is not yet installed.
  1071.       For multiplex numbers which are in use, the program should compare
  1072.       the first 16 bytes of the signature string to determine whether it
  1073.       is already installed on that multiplex number.  If not previously
  1074.       installed, it should use the first free multiplex number.
  1075.     functions other than 00h are not valid unless a program is installed
  1076.       on the selected multiplex number
  1077.     to be considered fully compliant with version 3.5 of the specification,
  1078.       programs must implement at least functions 00h, 02h (no resident
  1079.       uninstall code required), and 04h (return value 04h).     TSRs that
  1080.       provide hotkeys with which the user can activate them must also
  1081.       implement function 05h.  The absolute minimum fully-compliant
  1082.       implementation has an overhead of 64 bytes (80 bytes with function
  1083.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  1084.       protocol header and hook list entry).
  1085.     the signature string and description may be used by memory mappers
  1086.       to display the installed programs
  1087.     users of this proposal should adhere to the IBM interrupt sharing
  1088.       protocol (see below), which will permit removal of TSRs in
  1089.       arbitrary order and interrupt handler reordering.  All TSRs
  1090.       following this proposal should be removable, though they need not
  1091.       keep the code for removing themselves resident; it is acceptable
  1092.       for a separate program to perform the removal.
  1093.     A sample implementation including example TSRs and utility programs
  1094.       may be found in a separate package distributed as AMISLnnn.ZIP
  1095.       (AMISL091.ZIP as of this writing).
  1096.     Please let me know if you choose to follow this proposal.  The
  1097.       signature and a list of the private API calls you use would be
  1098.       appreciated, as well.
  1099. SeeAlso: INT 2F
  1100. Index:    installation check;Alternate Multiplex Interrupt Specification
  1101. Index:    installation check;AMIS|installation check;FASTMOUS
  1102. Index:    installation check;SPELLER|installation check;Monitor
  1103. Index:    installation check;NOLPT|installation check;NOTE
  1104. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  1105. Index:    installation check;VGABLANK|installation check;EATMEM
  1106. Index:    installation check;RECALL|installation check;XPTR2
  1107. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  1108. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  1109.  
  1110. Format of signature string:
  1111. Offset    Size    Description
  1112.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  1113.  08h  8 BYTEs    blank-padded product name
  1114.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  1115. Note:    it is not necessary to reserve a full 64 bytes for the description,
  1116.       just enough to store the actual ASCIZ string
  1117.  
  1118. Format of interrupt hook list [array]:
  1119. Offset    Size    Description
  1120.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  1121.  01h    WORD    offset within hook list's segment of the interrupt handler
  1122.         this will point at the initial short jump of the interrupt
  1123.         sharing protocol header (see below)
  1124.  
  1125. Format of hotkey list:
  1126. Offset    Size    Description
  1127.  00h    BYTE    type of hotkey checking
  1128.         bit 0: checks before chaining INT 09
  1129.         bit 1: checks after chaining INT 09
  1130.         bit 2: checks before chaining INT 15/AH=4Fh
  1131.         bit 3: checks after chaining INT 15/AH=4Fh
  1132.         bit 4: checks on INT 16/AH=00h,01h,02h
  1133.         bit 5: checks on INT 16/AH=10h,11h,12h
  1134.         bit 6: checks on INT 16/AH=20h,21h,22h
  1135.         bit 7: reserved (0)
  1136.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  1137.  02h 6N BYTEs    array of hotkey definitions
  1138.         (one per hotkey, first should be primary hotkey)
  1139.         Offset    Size    Description
  1140.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  1141.                 hotkey triggers on release if bit 7 set
  1142.          01h    WORD    required shift states (see below)
  1143.          03h    WORD    disallowed shift states (see below)
  1144.          05h    BYTE    flags
  1145.                 bit 0: hotkey chained before processing
  1146.                 bit 1: hotkey chained after processing
  1147.                 bit 2: others should pass through this hotkey
  1148.                     so that it can be monitored
  1149.                 bit 3: hotkey will not activate if other keys
  1150.                     pressed/released before hotkey press is
  1151.                     completed
  1152.                 bit 4: this key is remapped into some other key
  1153.                 bit 5-7: reserved (0)
  1154. Notes:    except for bit 7, the shift states correspond exactly to the return
  1155.       values from INT 16/AH=12h.  A set bit in the required states word
  1156.       indicates that the corresponding shift state must be active when the
  1157.       hotkey's scan code is received for the hotkey to be recognized; a
  1158.       clear bit means that the corresponding state may be ignored.    A set
  1159.       bit in the disallowed shift states word indicates that the
  1160.       corresponding shift state must be inactive.
  1161.     if bit 2 is set, either control key may be pressed for the hotkey; if
  1162.       bits 8 and 10 are both set, then both control keys must be pressed.
  1163.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  1164.     for the disallowed-states word, if one of the "either" bits is set,
  1165.       then both the corresponding left bit and right bit must be set
  1166.     examples:
  1167.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  1168.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  1169.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  1170. Index:    hotkeys;AMIS
  1171.  
  1172. Bitfields for shift states:
  1173.  bit 0    right shift pressed
  1174.  bit 1    left shift pressed
  1175.  bit 2    either control key pressed
  1176.  bit 3    either Alt key pressed
  1177.  bit 4    ScrollLock active
  1178.  bit 5    NumLock active
  1179.  bit 6    CapsLock active
  1180.  bit 7    either shift key pressed
  1181.  bit 8    left control key pressed
  1182.  bit 9    left Alt key pressed
  1183.  bit 10 right control key pressed
  1184.  bit 11 right Alt key pressed
  1185.  bit 12 ScrollLock pressed
  1186.  bit 13 NumLock pressed
  1187.  bit 14 CapsLock pressed
  1188.  bit 15 SysRq key pressed
  1189.  
  1190. Format of interrupt sharing protocol interrupt handler entry point:
  1191. Offset    Size    Description
  1192.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  1193.         following this data block (EBh 10h)
  1194.  02h    DWORD    address of next handler in chain
  1195.  06h    WORD    signature 424Bh
  1196.  08h    BYTE    EOI flag
  1197.         00h software interrupt or secondary hardware interrupt handler
  1198.         80h primary hardware interrupt handler (will issue EOI)
  1199.  09h  2 BYTEs    short jump to hardware reset routine
  1200.         must point at a valid FAR procedure (may be just RETF)
  1201.  0Bh  7 BYTEs    reserved (0)
  1202.  
  1203. Signatures known to be in use:
  1204.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  1205.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  1206.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  1207.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  1208.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  1209.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  1210.  'heathh  ' 'Monitor '
  1211.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  1212.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  1213.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  1214.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  1215.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  1216.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  1217.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  1218.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  1219.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  1220.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  1221.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  1222.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  1223.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  1224.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  1225.             testing programs (v1.1+)
  1226.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  1227.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  1228. --------N-2D--10-----------------------------
  1229. INT 2D - RATSR 2.0+ - GET STATUS
  1230.     AL = 10h
  1231.     AH = AMIS multiplex number for RATSR
  1232. Return: AL = status
  1233.         01h listening (no connection)
  1234.         02h receiving          \
  1235.         03h sending               > station being monitored
  1236.         04h initializing receive  /
  1237.     AH = keyboard lock status (00h unlocked, 01h locked)
  1238. Program: RATSR is a utility by James Berry provided with
  1239.       RemoteAccess/Professional, a commercial bulletin board system, that
  1240.       allows remote control of a station over a network
  1241. SeeAlso: INT 2D"AMIS"
  1242. ----------2D--10-----------------------------
  1243. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  1244.     AL = 10h
  1245.     AH = AMIS multiplex number for dLite
  1246. Return: CF clear if successful
  1247.         ES:BX -> parameter block (see below)
  1248.     CF set on error
  1249. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  1250.       expands compressed files when they are read
  1251. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  1252.  
  1253. Format of parameter block:
  1254. Offset    Size    Description
  1255.  00h    BYTE    TSR flags
  1256.         bit 0: deny FCB access
  1257.         bit 1: dLite sleeping rather than activated
  1258.         bit 2: always indicate original filesize when reading
  1259.             directory entries, rather than only for specified
  1260.             programs
  1261.         bits 3-7 reserved
  1262.  01h    WORD    maximum number of programs needing original filesize
  1263.  03h    WORD    current number of programs needing original filesize
  1264.  05h    WORD    maximum number of files that can be handled by dLite (should
  1265.         be the same as FILES= in CONFIG.SYS)
  1266.  07h    WORD    offset (in the same segment as the parameter block) of the
  1267.         table of programs needing the original filesize (8 bytes each,
  1268.         without path or extension, uppercase, and zero terminated if
  1269.         shorter than 8 bytes)
  1270. ----------2D--10-----------------------------
  1271. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  1272.     AL = 10h
  1273.     AH = AMIS multiplex number for Burnout Plus
  1274. Return: AL = 01h
  1275.     BX = Burnout Plus status (see below)
  1276.     CX = Record of features loaded (see below)
  1277.     ES:DI -> Burnout Plus control structure (see below)
  1278. Program: Burnout Plus is a DOS screen saver from Cove Software
  1279. SeeAlso: INT 2D"AMIS"
  1280. Index:    screen saver;Burnout Plus
  1281.  
  1282. Bitfields for status:
  1283.  bit 0    screen is blanked
  1284.  bit 1    MS Windows is active (Burnout Plus deactivated)
  1285.  bits 2-15 reserved
  1286.  
  1287. Bitfields for features loaded/features enabled:
  1288.  bit 0    mouse activity monitor
  1289.  bit 1    passkey support
  1290.  bit 2    password support
  1291.  bit 3    continuous clear
  1292.  bit 4    software blanking
  1293.  bit 5    video activity monitor
  1294.  bit 6    disk activity monitor
  1295.  bit 7    activating keystroke suppression
  1296.  
  1297. Format of Burnout Plus control structure:
  1298. Offset    Size    Description
  1299.  00h    BYTE    size of structure in bytes
  1300.  01h    WORD    Burnout Plus version
  1301.  03h    WORD    screen blanking reset count in clock ticks
  1302.  05h    WORD    current countdown value in clock ticks
  1303.  07h    BYTE    type of timeout specification
  1304.  08h    BYTE    instant-blank hotkey
  1305.  09h    WORD    extended status information (see below)
  1306.         the bits for password, passkey, and software blanking are
  1307.           ignored and cannot be enabled or disabled externally
  1308.  0Bh    WORD    features enabled (see above)
  1309. Note:    all fields except the first two may be modified by external programs
  1310.       to affect the operation of Burnout Plus
  1311. Index:    hotkeys;Burnout Plus
  1312.  
  1313. Bitfields for extended status information:
  1314.  bit 0    Burnout Plus disabled
  1315.  bit 1    force screen to blank on next clock tick
  1316.  bit 2    restore screen if currently blanked
  1317.  bits 3-15 reserved
  1318. Note:    bits 1 and 2 are automatically cleared by Burnout Plus after blanking
  1319.       or restoring the screen
  1320. ----------2D--10-----------------------------
  1321. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  1322.     AL = 10h
  1323.     AH = AMIS multiplex number for Screen Thief
  1324. Return: nothing
  1325. Program: Screen Thief is a graphics screen grabber
  1326. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  1327.       does not release the low-memory stub; this may be used to effect a
  1328.       partial uninstall if INT 2D/AL=02h fails
  1329. SeeAlso: INT D8"Screen Thief"
  1330. ----------2D--10-----------------------------
  1331. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  1332.     AL = 10h
  1333.     AH = AMIS multiplex number for RAMLIGHT
  1334. Return: ES:BX -> array of fake device driver headers used in monitoring
  1335.     CX = number of drives being monitored???
  1336. ----------2D--11-----------------------------
  1337. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  1338.     AL = 11h
  1339.     AH = AMIS multiplex number for dLite
  1340.     BX = file handle
  1341. Return: CF clear if successful
  1342.         DX:AX = size of uncompressed file
  1343.     CF set on error (not dPressed file)
  1344. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  1345. ----------2D--12-----------------------------
  1346. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  1347.     AL = 12h
  1348.     AH = AMIS multiplex number for dLite
  1349.     BX = file handle
  1350. Return: CF clear if successful
  1351.         DX:AX = size of compressed file
  1352.     CF set on error (not dPressed file)
  1353. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  1354. --------l-2E---------------------------------
  1355. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  1356.     DS:SI -> commandline to execute (see below)
  1357. Return: all registers except CS:IP destroyed
  1358.     AX = status (4DOS v4.0)
  1359.        0000h successful
  1360.        FFFFh error before processing command (not enough memory, etc)
  1361.        other error number returned by command
  1362. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  1363.       internal commands) without loading another copy of COMMAND.COM
  1364.     if COMMAND.COM is the user's command interpreter, the primary copy
  1365.       executes the command; this allows the master environment to be
  1366.       modified by issuing a "SET" command, but changes in the master
  1367.       environment will not become effective until all programs descended
  1368.       from the primary COMMAND.COM terminate
  1369.     since COMMAND.COM processes the string as if typed from the keyboard,
  1370.       the transient portion needs to be present, and the calling program
  1371.       must ensure that sufficient memory to load the transient portion can
  1372.       be allocated by DOS if necessary
  1373.     results are unpredictable if invoked by a program run from a batch file
  1374.       because this call is not reentrant and COMMAND.COM uses the same
  1375.       internal variables when processing a batch file
  1376.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  1377.       has been loaded
  1378.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  1379.  
  1380. Format of commandline:
  1381. Offset    Size    Description
  1382.  00h    BYTE    length of command string, not counting trailing CR
  1383.  01h    var    command string
  1384.   N    BYTE    0Dh (CR)
  1385. ----------2E---------------------------------
  1386. INT 2E UP - Windows NT - NATIVE API
  1387.     EAX = function number
  1388.     EDX = address of parameter block
  1389. Return: ???
  1390. --------l-2E----BXE22E-----------------------
  1391. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  1392.     BX = E22Eh
  1393.     DS:SI -> zero byte
  1394. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  1395. ----------2F---------------------------------
  1396. INT 2F - Multiplex - NOTES
  1397.     AH = identifier of program which is to handle the interrupt
  1398.        00h-7Fh reserved for DOS
  1399.        B8h-BFh reserved for networks
  1400.        C0h-FFh reserved for applications
  1401.     AL is the function code
  1402.    This is a general mechanism for verifying the presence of a TSR and
  1403.    communicating with it.  When searching for a free identifier code for AH
  1404.    using the installation check (AL=00h), the calling program should set
  1405.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  1406.    and SS:SP to be valid on return, since numerous programs now use additional
  1407.    registers on input and/or output for the installation check.
  1408. Notes:    Since the multiplex chain is growing so long, and beginning to
  1409.       experience multiplex number collisions, I am proposing an alternate
  1410.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  1411.       multiplex, please let me know.
  1412.     DOS and some other programs return values in the flags register, so
  1413.       any TSR which chains by calling the previous handler rather than
  1414.       jumping to it should ensure that the returned flags are preserved
  1415.       and passed back to the original caller
  1416. SeeAlso: INT 2D
  1417. --------t-2F---------------------------------
  1418. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  1419.     AH = xx (dynamically assigned based upon a search for a multiplex
  1420.          number which doesn't answer installed)
  1421.     AL = 00h installation check
  1422.     ES:DI = EBEBh:BEBEh
  1423. Return: AL = 00h not installed
  1424.          01h not installed, not OK to install
  1425.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  1426.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  1427.          short form of the manufacturer's name, PPPPPPPP is a product
  1428.          name and NNNN is the product's version number
  1429. --------t-2F---------------------------------
  1430. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  1431.     AH = programmer-selected multiplex number
  1432.     AL = function
  1433.         00h installation check
  1434.         Return: AL = FFh if installed
  1435.         01h get TSR interrupt vectors
  1436.         Return: DX:AX -> vector table (see below)
  1437.         02h get TSR code segment
  1438.         Return: AX = code segment for all interrupt handlers
  1439.         03h call user exit routine and release TSR's memory
  1440.         04h get signature string
  1441.         Return: DX:AX -> counted string containing signature
  1442.         05h get TSR's INT 2F handler
  1443.         Return: DX:AX -> INT 2F handler
  1444.         06h enable/disable TSR
  1445.         BL = new state (00h disabled, 01h enabled)
  1446.         07h activate TSR (popup if not disabled)
  1447.         08h get hotkeys
  1448.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  1449.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  1450.         09h set hotkey
  1451.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  1452.         CX = new hotkey (CH = keyflags, CL = scancode)
  1453.         0Ah-1Fh reserved
  1454. Index:    installation check;Ross Wentworth POPUP library
  1455. Index:    hotkeys;Ross Wentworth POPUP library
  1456.  
  1457. Format of vector table entry:
  1458. Offset    Size    Description
  1459.  00h    BYTE    vector number (00h = end of table)
  1460.  01h    DWORD    original vector
  1461.  05h    WORD    offset of interrupt handler in TSR's code segment
  1462. --------t-2F---------------------------------
  1463. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  1464.     AH = xx (dynamically assigned based upon a search for a multiplex
  1465.          number from C0h to FFh which doesn't answer installed)
  1466.     AL = 00h installation check
  1467.     ES:DI = 1492h:1992h
  1468. Return: AL = 00h not installed
  1469.          01h not installed, not OK to install
  1470.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  1471.          point to author_name_ver table (see below)
  1472.     AH = FFh
  1473. Note:    this interface permits advanced communication with TSRs: it is possible
  1474.       to make a generic uninstall utility, advanced TSR relocator programs
  1475.       in order to fit fragmented memory areas, etc.
  1476. See also: INT 2D"AMIS",INT 2F"Compuscience"
  1477. Index:    installation check;CiriSOFT TSR interface
  1478. Index:    uninstall;CiriSOFT TSR interface
  1479.  
  1480. Format of author_name_ver table:
  1481. Offset    Size    Description
  1482.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  1483.         with PSP, XMS upper memory segment if installed as UMB...)
  1484.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  1485.         in *.COM programs and 0 in upper memory TSR's).
  1486.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  1487.         used by TSR is possible to determine if hooked vectors are
  1488.         still pointing it (and if it is safe to uninstall).
  1489.  -10    BYTE    characteristics byte
  1490.         bits 0-2: 000 normal program (with PSP)
  1491.               001 upper XMS memory block (needed HIMEM.SYS function
  1492.                   to free memory when uninstalling)
  1493.               010 device driver (*.SYS)
  1494.               011 device driver in EXE format
  1495.               1xx others (reserved)
  1496.         bits 3-6 reserved
  1497.         bit 7 set if extra_table defined and supported
  1498.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  1499.         that the TSR must be use THIS variable in it's INT 2Fh handler.
  1500.  -8    WORD    offset to vector_area table (see below)
  1501.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and below)
  1502.  -4   4 BYTEs    signature string "*##*"
  1503.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  1504.         is used in order to determine if the TSR is already resident
  1505.         and it's version code; the ':' char is used as delimiter)
  1506.  
  1507. Format of vector_area table:
  1508. Offset    Size    Description
  1509.  -1    BYTE    number of vectors intercepted by TSR
  1510.  00h    BYTE    first vector number
  1511.  01h    DWORD    first vector pointer before installing the TSR
  1512.  05h    BYTE    second vector number
  1513.  06h    DWORD    second vector pointer before installing the TSR
  1514.  0Ah    ...    (and so on)
  1515. Note:    the TSR must use these variables to invoke the previous interrupt
  1516.       handler routines
  1517.  
  1518. Format of extra_area table (needed only to improve relocation feature):
  1519. Offset    Size    Description
  1520.  00h    WORD    offset to external_ctrl table (0 if not supported)
  1521.  02h    WORD    reserved for future use (0)
  1522.  
  1523. Format of external_ctrl table:
  1524. Offset    Size    Description
  1525.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  1526.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  1527.  ---And if bit 0 in offset 00h is off:
  1528.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  1529.         /SR parameter (silent installation & inhibit)
  1530.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  1531.         from the previous TSR still resident
  1532.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  1533. --------c-2F00-------------------------------
  1534. INT 2F U - DOS 2.x only PRINT.COM - ???
  1535.     AH = 00h
  1536.     ???
  1537. Return: ???
  1538. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  1539.     values in AH other than 00h or 01h cause PRINT to return the number of
  1540.       files in the queue in AH
  1541. SeeAlso: AH=01h
  1542. ----------2F00-------------------------------
  1543. INT 2F U - PSPRINT - PRINT JOB CONTROL
  1544.     AH = 00h
  1545.     ???
  1546. Return: ???
  1547. --------c-2F0080-----------------------------
  1548. INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  1549.     AX = 0080h
  1550. Return: after PRINT executes
  1551. Note:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  1552. --------c-2F01-------------------------------
  1553. INT 2F U - DOS 2.x only PRINT.COM - ???
  1554.     AH = 01h
  1555.     ???
  1556. Return: ???
  1557. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  1558.     values in AH other than 00h or 01h cause PRINT to return the number of
  1559.       files in the queue in AH
  1560. SeeAlso: AH=00h
  1561. --------c-2F0100-----------------------------
  1562. INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK
  1563.     AX = 0100h
  1564. Return: AL = status
  1565.         00h not installed
  1566.         01h not installed, but not OK to install
  1567.         FFh installed
  1568. SeeAlso: AX=0101h
  1569. --------c-2F0101-----------------------------
  1570. INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  1571.     AX = 0101h
  1572.     DS:DX -> submit packet (see below)
  1573. Return: CF clear if successful
  1574.         AL = 01h added to queue
  1575.          9Eh now printing
  1576.     CF set on error
  1577.         AX = error code (see also INT 21/AH=59h)
  1578.         01h invalid function
  1579.         02h file not found
  1580.         03h path not found
  1581.         04h out of file handles
  1582.         05h access denied
  1583.         08h print queue full
  1584.         09h spooler busy
  1585.         0Ch name too long
  1586.         0Fh invalid drive
  1587. SeeAlso: AX=0102h
  1588.  
  1589. Format of submit packet:
  1590. Offset    Size    Description
  1591.  00h    BYTE    level (must be 00h)
  1592.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  1593. --------c-2F0102-----------------------------
  1594. INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  1595.     AX = 0102h
  1596.     DS:DX -> ASCIZ filename (wildcards allowed)
  1597. Return: CF clear if successful
  1598.     CF set on error
  1599.         AX = error code (see AX=0101h)
  1600. SeeAlso: AX=0101h,AX=0103h
  1601. --------c-2F0103-----------------------------
  1602. INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  1603.     AX = 0103h
  1604. Return: CF clear if successful
  1605.     CF set on error
  1606.         AX = error code (see AX=0101h)
  1607. SeeAlso: AX=0102h
  1608. --------c-2F0104-----------------------------
  1609. INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  1610.     AX = 0104h
  1611. Return: CF clear if successful
  1612.         DX = error count since status last read
  1613.         DS:SI -> print queue
  1614.     CF set on error
  1615.         AX = error code (see AX=0101h)
  1616. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  1617.       to avoid changing the list while it is being examined
  1618. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  1619.       an empty filename; the first name is the file currently being printed
  1620.     printing is stopped until AX=0105h is called to prevent the queue
  1621.       from changing while the filenames are being read
  1622. SeeAlso: AX=0101h,AX=0105h
  1623. --------c-2F0105-----------------------------
  1624. INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  1625.     AX = 0105h
  1626. Return: CF clear if successful
  1627.     CF set on error
  1628.         AX = error code (see AX=0101h)
  1629. Desc:    restart PRINT's activities once an application finishes examining the
  1630.       print queue
  1631. SeeAlso: AX=0104h
  1632. --------c-2F0106-----------------------------
  1633. INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE
  1634.     AX = 0106h
  1635. Return: CF set if files in print queue
  1636.         AX = error code 0008h (queue full)
  1637.         DS:SI -> device driver header
  1638.     CF clear if print queue empty
  1639.         AX = 0000h
  1640. Desc:    determine which device, if any, PRINT is currently using for output
  1641. Notes:    documented for DOS 5+, but not documented for prior versions
  1642.     this function can be used to allow a program to avoid printing to the
  1643.       printer on which PRINT is currently performing output
  1644. SeeAlso: AX=0104h
  1645. --------N-2F0200-----------------------------
  1646. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  1647.     AX = 0200h
  1648. Return: AL = FFh if installed
  1649. Desc:    determine whether the PC LAN Program redirector is installed
  1650. SeeAlso: AX=0201h,AX=0203h
  1651. --------N-2F0201-----------------------------
  1652. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1653.     AX = 0201h
  1654. Return: nothing???
  1655. Notes:    called by DOS 3.3+ PRINT.COM
  1656.     AX=0202h appears to be the opposite function
  1657.     these functions are supposedly used to signal opening and closing of
  1658.       printers
  1659. SeeAlso: AX=0202h
  1660. --------N-2F0202-----------------------------
  1661. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1662.     AX = 0202h
  1663.     ???
  1664. Return: nothing???
  1665. Notes:    called by DOS 3.3+ PRINT.COM
  1666.     these functions are supposedly used to signal opening and closing of
  1667.       printers
  1668. SeeAlso: AX=0201h
  1669. --------N-2F0203-----------------------------
  1670. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1671.     AX = 0203h
  1672. Return: nothing???
  1673. Notes:    called by DOS 3.3+ PRINT.COM
  1674.     AX=0204h appears to be the opposite function
  1675.     these functions are supposedly used to signal opening and closing of
  1676.       printers
  1677. SeeAlso: AX=0200h,AX=0204h
  1678. --------N-2F0204-----------------------------
  1679. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1680.     AX = 0204h
  1681.     ???
  1682. Return: nothing???
  1683. Notes:    called by DOS 3.3 PRINT.COM
  1684.     these functions are supposedly used to signal opening and closing of
  1685.       printers
  1686. SeeAlso: AX=0200h,AX=0203h
  1687. --------N-2F---------------------------------
  1688. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1689.     AX = 02xxh
  1690.     ???
  1691. Return: ???
  1692. --------l-2F0500-----------------------------
  1693. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  1694.     AX = 0500h
  1695. Return: AL = 00h not installed, OK to install
  1696.          01h not installed, can't install
  1697.          FFh installed
  1698. Desc:    determine whether a critical error message override is installed
  1699. Note:    this set of functions allows a user program to partially or completely
  1700.       override the default critical error handler's message in COMMAND.COM
  1701. SeeAlso: AH=05h,INT 24
  1702. --------l-2F05-------------------------------
  1703. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  1704.     AH = 05h
  1705. ---DOS 3.x---
  1706.     AL = extended error code (not zero)
  1707. ---DOS 4+ ---
  1708.     AL = error type
  1709.         01h DOS extended error code
  1710.         02h parameter error
  1711.     BX = error code
  1712. Return: CF clear if successful
  1713.         ES:DI -> ASCIZ error message (read-only)
  1714.         AL = completion state
  1715.         00h message requires completion with device name, drive, etc.
  1716.         01h message is complete as returned
  1717.     CF set if error code can't be converted to string
  1718.         AX,DI,ES destroyed
  1719.     other flags corrupted
  1720. Notes:    called at start of COMMAND.COM's default critical error handler if
  1721.       installed by a user program, allowing partial or complete overriding
  1722.       of the default error messages
  1723.     subfunction 02h is called by many DOS 4 external programs
  1724.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  1725.       returned string
  1726. SeeAlso: AX=0500h,AX=122Eh,INT 24
  1727. --------U-2F0600-----------------------------
  1728. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  1729.     AX = 0600h
  1730. Return: AL = status
  1731.         00h not installed
  1732.         01h not installed, but not OK to install
  1733.         FFh installed
  1734. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  1735.       (see INT 21/AH=52h)
  1736.     undocumented prior to the release of DOS 5.0
  1737. SeeAlso: AX=0601h,INT 21/AH=52h
  1738. --------U-2F0601-----------------------------
  1739. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  1740.     AX = 0601h
  1741. Return: ES = segment of ASSIGN work area and assignment table
  1742. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  1743.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  1744. SeeAlso: AX=0600h
  1745. --------D-2F0800-----------------------------
  1746. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  1747.     AX = 0800h
  1748. Return: AL = 00h not installed, OK to install
  1749.          01h not installed, not OK to install
  1750.          FFh installed
  1751. Desc:    determine whether the internal support code used by DRIVER.SYS is
  1752.       present
  1753. Note:    supported by DR-DOS 5.0
  1754. --------D-2F0801-----------------------------
  1755. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  1756.     AX = 0801h
  1757.     DS:DI -> drive data table (see AX=0803h)
  1758. Return: AX,BX,SI,ES destroyed
  1759. Notes:    moves down internal list of drive data tables, copying and modifying
  1760.       the drive description flags word for tables referencing same physical
  1761.       drive
  1762.     the data table is appended to the chain of tables
  1763.     supported by DR-DOS 5.0
  1764. SeeAlso: AX=0803h
  1765. --------D-2F0802-----------------------------
  1766. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  1767.     AX = 0802h
  1768.     ES:BX -> device driver request header (see below)
  1769. Return: request header updated as per requested operation
  1770. Notes:    supported by DR-DOS 5.0
  1771.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  1772.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  1773.     the command codes and structures described below apply to all drivers
  1774.       which support the appropriate commands; this call is just one of a
  1775.       number of ways in which a device driver request may be invoked
  1776. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  1777.  
  1778. Values for command code:
  1779.  00h    INIT
  1780.  01h    MEDIA CHECK (block devices)
  1781.  02h    BUILD BPB (block devices)
  1782.  03h    IOCTL INPUT
  1783.  04h    INPUT
  1784.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  1785.  06h    INPUT STATUS (character devices)
  1786.  07h    INPUT FLUSH (character devices)
  1787.  08h    OUTPUT
  1788.  09h    OUTPUT WITH VERIFY
  1789.  0Ah    OUTPUT STATUS (character devices)
  1790.  0Bh    OUTPUT FLUSH (character devices)
  1791.  0Ch    IOCTL OUTPUT
  1792.  0Dh    (DOS 3+) DEVICE OPEN
  1793.  0Eh    (DOS 3+) DEVICE CLOSE
  1794.  0Fh    (DOS 3+) REMOVABLE MEDIA (block devices)
  1795.  10h    (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  1796.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  1797.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  1798.  13h    (DOS 3.2+) GENERIC IOCTL
  1799.  14h    unused
  1800.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  1801.  16h    unused
  1802.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  1803.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  1804.  19h    (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  1805.  80h    (CD-ROM) READ LONG
  1806.  81h    (CD-ROM) reserved
  1807.  82h    (CD-ROM) READ LONG PREFETCH
  1808.  83h    (CD-ROM) SEEK
  1809.  84h    (CD-ROM) PLAY AUDIO
  1810.  85h    (CD-ROM) STOP AUDIO
  1811.  86h    (CD-ROM) WRITE LONG
  1812.  87h    (CD-ROM) WRITE LONG VERIFY
  1813.  88h    (CD-ROM) RESUME AUDIO
  1814.  
  1815. Format of device driver request header:
  1816. Offset    Size    Description
  1817.  00h    BYTE    length of request header
  1818.  01h    BYTE    subunit within device driver
  1819.  02h    BYTE    command code (see above)
  1820.  03h    WORD    status (filled in by device driver)
  1821.         bit 15: error
  1822.         bits 14-11: reserved
  1823.         bit 10: ??? set by DOS kernel on entry to some driver calls
  1824.         bit 9: busy
  1825.         bit 8: done (may be clear on return under European MS-DOS 4.0)
  1826.         bits 7-0: error code if bit 15 set (see below)
  1827. ---DOS---
  1828.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  1829.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  1830.             device's request queue
  1831.         (other versions) reserved (unused in DOS 2.x and 3.x)
  1832. ---STARLITE architecture---
  1833.  05h    DWORD    pointer to next request header
  1834.  09h  4 BYTEs    reserved
  1835. ---command code 00h---
  1836.  0Dh    BYTE    (return) number of units
  1837.  0Eh    DWORD    (call) pointer to DOS device helper function (see below)
  1838.             (European MS-DOS 4.0 only)
  1839.         (call) pointer past end of memory available to driver (DOS 5+)
  1840.         (return) address of first free byte following driver
  1841.  12h    DWORD    (call) pointer to commandline arguments
  1842.         (return) pointer to BPB array (block drivers) or
  1843.                 0000h:0000h (character drivers)
  1844.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  1845.    ---European MS-DOS 4.0---
  1846.  17h    DWORD    pointer to function to save registers on stack
  1847.    ---DOS 5+ ---
  1848.  17h    WORD    (return) error-message flag
  1849.             0001h MS-DOS should display error msg on init failure
  1850. ---command code 01h---
  1851.  0Dh    BYTE    media descriptor
  1852.  0Eh    BYTE    returned status
  1853.         00h don't know
  1854.         01h media has not changed
  1855.         FFh media has been changed
  1856.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  1857.           bit in device header is set and disk changed
  1858. ---command code 02h---
  1859.  0Dh    BYTE    media descriptor
  1860.  0Eh    DWORD    transfer address
  1861.         -> scratch sector if NON-IBM FORMAT bit in device header set
  1862.         -> first FAT sector otherwise
  1863.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  1864. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  1865.  0Dh    BYTE    media descriptor (block devices only)
  1866.  0Eh    DWORD    transfer address
  1867.  12h    WORD    (call) number of bytes to read/write
  1868.         (return) actual number of bytes read or written
  1869. ---command codes 04h,08h,09h---
  1870.  0Dh    BYTE    media descriptor (block devices only)
  1871.  0Eh    DWORD    transfer address
  1872.  12h    WORD    byte count (character devices) or sector count (block devices)
  1873.  14h    WORD    starting sector number (block devices only)
  1874.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  1875.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  1876.         device attribute word bit 1 set only) if starting sector number
  1877.         above is FFFFh (see INT 21/AH=52h)
  1878. ---command code 05h---
  1879.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  1880. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  1881.  no further fields
  1882. ---command code 10h---
  1883.  0Dh    BYTE    unused
  1884.  0Eh    DWORD    transfer address
  1885.  12h    WORD    (call) number of bytes to write
  1886.         (return) actual number of bytes written
  1887. ---command codes 11h,12h---
  1888.  0Dh    BYTE    reserved
  1889. ---command code 15h---
  1890.  no further fields
  1891. ---command codes 13h,19h---
  1892.  0Dh    BYTE    category code
  1893.         00h unknown
  1894.         01h COMn:
  1895.         03h CON
  1896.         05h LPTn:
  1897.         07h mouse (European MS-DOS 4.0)
  1898.         08h disk
  1899.         9Eh (STARLITE) Media Access Control driver
  1900.  0Eh    BYTE    function code
  1901.         00h (STARLITE) MAC Bind request
  1902.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  1903.         SI contents (European MS-DOS 4.0)
  1904.  11h    WORD    offset of device driver header
  1905.         DI contents (European MS-DOS 4.0)
  1906.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  1907. ---command codes 80h,82h---
  1908.  0Dh    BYTE    addressing mode
  1909.         00h HSG (default)
  1910.         01h Phillips/Sony Red Book
  1911.  0Eh    DWORD    transfer address (ignored for command 82h)
  1912.  12h    WORD    number of sectors to read
  1913.         (if 0 for command 82h, request is an advisory seek)
  1914.  14h    DWORD    starting sector number
  1915.         logical sector number in HSG mode
  1916.         frame/second/minute/unused in Red Book mode
  1917.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  1918.  18h    BYTE    data read mode
  1919.         00h cooked (2048 bytes per frame)
  1920.         01h raw (2352 bytes per frame, including EDC/ECC)
  1921.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1922.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  1923. ---command code 83h---
  1924.  0Dh    BYTE    addressing mode (see above)
  1925.  0Eh    DWORD    transfer address (ignored)
  1926.  12h    WORD    number of sectors to read (ignored)
  1927.  14h    DWORD    starting sector number (see also above)
  1928. ---command code 84h---
  1929.  0Dh    BYTE    addressing mode (see above)
  1930.  0Eh    DWORD    starting sector number (see also above)
  1931.  12h    DWORD    number of sectors to play
  1932. ---command codes 85h,88h---
  1933.  no further fields
  1934. ---command codes 86h,87h---
  1935.  0Dh    BYTE    addressing mode (see above)
  1936.  0Eh    DWORD    transfer address (ignored in write mode 0)
  1937.  12h    WORD    number of sectors to write
  1938.  14h    DWORD    starting sector number (see also above)
  1939.  18h    BYTE    write mode
  1940.         00h mode 0 (write all zeros)
  1941.         01h mode 1 (default) (2048 bytes per sector)
  1942.         02h mode 2 form 1 (2048 bytes per sector)
  1943.         03h mode 2 form 2 (2336 bytes per sector)
  1944.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1945.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  1946.  
  1947. Values for error code:
  1948.  00h    write-protect violation
  1949.  01h    unknown unit
  1950.  02h    drive not ready
  1951.  03h    unknown command
  1952.  04h    CRC error
  1953.  05h    bad drive request structure length
  1954.  06h    seek error
  1955.  07h    unknown media
  1956.  08h    sector not found
  1957.  09h    printer out of paper
  1958.  0Ah    write fault
  1959.  0Bh    read fault
  1960.  0Ch    general failure
  1961.  0Dh    reserved
  1962.  0Eh    (CD-ROM) media unavailable
  1963.  0Fh    invalid disk change
  1964.  
  1965. Call European MS-DOS 4.0 device helper function with:
  1966.     DL = function
  1967.         00h "SchedClock" called on each timer tick
  1968.         AL = tick interval in milliseconds
  1969.         01h "DevDone" device I/O complete
  1970.         ES:BX -> request header
  1971.         Note:    must update status word first; may be called from
  1972.               an interrupt handler
  1973.         02h "PullRequest" pull next request from queue
  1974.         DS:SI -> DWORD pointer to start of device's request queue
  1975.         Return: ZF clear if pending request
  1976.                 ES:BX -> request header
  1977.             ZF set if no more requests
  1978.         03h "PullParticular" remove specific request from queue
  1979.         DS:SI -> DWORD pointer to start of device's request queue
  1980.         ES:BX -> request header
  1981.         Return: ZF set if request header not found
  1982.         04h "PushRequest" push the request onto the queue
  1983.         DS:SI -> DWORD pointer to start of device's request queue
  1984.         ES:BX -> request header
  1985.         interrupts disabled
  1986.         05h "ConsInputFilter" keyboard input check
  1987.         AX = character (high byte 00h if PC ASCII character)
  1988.         Return: ZF set if character should be discarded
  1989.             ZF clear if character should be handled normally
  1990.         Note:    called by keyboard interrupt handler so DOS can scan
  1991.               for special input characters
  1992.         06h "SortRequest" push request in sorted order by starting sector
  1993.         DS:SI -> DWORD pointer to start of device's request queue
  1994.         ES:BX -> request header
  1995.         interrupts disabled
  1996.         07h "SigEvent" send signal on keyboard event
  1997.         AH = event identifier
  1998.         Return: AL,FLAGS destroyed
  1999.         09h "ProcBlock" block on event
  2000.         AX:BX = event identifier (typically a pointer)
  2001.         CX = timeout in ms or 0000h for never
  2002.         DH = interruptable flag (nonzero if pause may be interrupted)
  2003.         interrupts disabled
  2004.         Return: after corresponding ProcRun call
  2005.             CF clear if event wakeup, set if unusual wakeup
  2006.             ZF set if timeout wakeup, clear if interrupted
  2007.             AL = wakeup code, nonzero if unusual wakeup
  2008.             interrupts enabled
  2009.             BX,CX,DX destroyed
  2010.         Note:    block process and schedules another to run
  2011.         0Ah "ProcRun" unblock process
  2012.         AX:BX = event identifier (typically a pointer)
  2013.         Return: AX = number of processes awakened
  2014.             ZF set if no processes awakened
  2015.             BX,CX,DX destroyed
  2016.         0Bh "QueueInit" initialize/clear character queue
  2017.         DS:BX -> character queue structure (see below)
  2018.         Note:    the queue size field must be set before calling
  2019.         0Dh "QueueWrite" put a character in the queue
  2020.         DS:BX -> character queue (see below)
  2021.         AL = character to append to end of queue
  2022.         Return: ZF set if queue is full
  2023.             ZF clear if character stored
  2024.         0Eh "QueueRead" get a character from the queue
  2025.         DS:BX -> character queue (see below)
  2026.         Return: ZF set if queue is empty
  2027.             ZF clear if characters in queue
  2028.                 AL = first character in queue
  2029.         10h "GetDOSVar" return pointer to DOS variable
  2030.         AL = index of variable
  2031.             03h current process ID
  2032.         BX = index into variable if AL specifies an array
  2033.         CX = expected length of variable
  2034.         Return: CF clear if successful
  2035.                 DX:AX -> variable
  2036.             CF set on error
  2037.                 AX,DX destroyed
  2038.             BX,CX destroyed
  2039.         Note:    the variables may not be modified
  2040.         14h "Yield" yield CPU if higher-priority task ready to run
  2041.         Return: FLAGS destroyed
  2042.         1Bh "CritEnter" begin system critical section
  2043.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2044.         Return: AX,BX,CX,DX destroyed
  2045.         1Ch "CritLeave" end system critical section
  2046.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2047.         Return: AX,BX,CX,DX destroyed
  2048.         Note:    must be called in the context of the process which
  2049.               called CritEnter on the semaphore
  2050. Note:    the DWORD pointing at the request queue must be allocated by the driver
  2051.       and initialized to 0000h:0000h.  It always points at the next request
  2052.       to be executed
  2053.  
  2054. Format of character queue:
  2055. Offset    Size    Description
  2056.  00h    WORD    size of queue in bytes
  2057.  02h    WORD    index of next character out
  2058.  04h    WORD    count of characters in the queue
  2059.  06h  N BYTEs    queue buffer
  2060. --------D-2F0803-----------------------------
  2061. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  2062.     AX = 0803h
  2063. Return: DS:DI -> first drive data table in list
  2064. Note:    not available under DR-DOS 5.0
  2065. SeeAlso: AX=0801h
  2066.  
  2067. Format of DOS 3.30 drive data table:
  2068. Offset    Size    Description
  2069.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2070.  04h    BYTE    physical unit number (for INT 13)
  2071.  05h    BYTE    logical drive number (0=A:)
  2072.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2073.         Offset    Size    Description
  2074.          00h    WORD    bytes per sector
  2075.          02h    BYTE    sectors per cluster, FFh if unknown
  2076.          03h    WORD    number of reserved sectors
  2077.          05h    BYTE    number of FATs
  2078.          06h    WORD    number of root dir entries
  2079.          08h    WORD    total sectors
  2080.          0Ah    BYTE    media descriptor, 00h if unknown
  2081.          0Bh    WORD    sectors per FAT
  2082.          0Dh    WORD    sectors per track
  2083.          0Fh    WORD    number of heads
  2084.          11h    WORD    number of hidden sectors
  2085.  19h    BYTE    flags
  2086.         bit 6: 16-bit FAT instead of 12-bit FAT
  2087.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  2088.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2089.         fixed media)
  2090.  27h    BYTE    terminating null for volume label???
  2091.  28h    BYTE    device type (see INT 21/AX=440Dh)
  2092.  29h    WORD    bit flags describing drive (see below)
  2093.  2Bh    WORD    number of cylinders
  2094.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  2095.  40h  3 BYTEs    ???
  2096.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  2097.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  2098.         media and PC-DOS 3.30)
  2099.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  2100. ---removable media---
  2101.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2102. ---fixed media---
  2103.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  2104.  4Fh    WORD    absolute cylinder number of partition's start on physical
  2105.         drive (always FFFFh if primary partition)
  2106.  
  2107. Format of COMPAQ DOS 3.31 drive data table:
  2108. Offset    Size    Description
  2109.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2110.  04h    BYTE    physical unit number (for INT 13)
  2111.  05h    BYTE    logical drive number (0=A:)
  2112.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  2113.  1Fh  6 BYTEs    reserved fields from BPB above???
  2114.  25h    BYTE    flags
  2115.         bit 6: 16-bit FAT instead of 12-bit FAT
  2116.         bit 5: large volume???
  2117.  26h    WORD    device-open count???
  2118.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2119.         fixed media)
  2120.  33h    BYTE    terminating null for volume label
  2121.  34h    BYTE    device type (see INT 21/AX=440Dh)
  2122.  35h    WORD    bit flags describing drive (see below)
  2123.  37h    WORD    number of cylinders
  2124.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  2125.  52h  6 BYTEs    ??? apparently always zeros
  2126.  58h    BYTE    least-significant byte of last-accessed cylinder number
  2127. ---removable media---
  2128.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2129. ---fixed media---
  2130.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  2131.  5Bh    WORD    absolute cylinder number of partition's start on physical
  2132.         drive (always FFFFh if primary partition)
  2133.  
  2134. Format of DOS 4.0-6.0 drive data table:
  2135. Offset    Size    Description
  2136.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2137.  04h    BYTE    physical unit number (for INT 13)
  2138.  05h    BYTE    logical drive number (0=A:)
  2139.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2140.         Offset    Size    Description
  2141.          00h    WORD    bytes per sector
  2142.          02h    BYTE    sectors per cluster, FFh if unknown
  2143.          03h    WORD    number of reserved sectors
  2144.          05h    BYTE    number of FATs
  2145.          06h    WORD    number of root dir entries
  2146.          08h    WORD    total sectors (see offset 15h if zero)
  2147.          0Ah    BYTE    media descriptor, 00h if unknown
  2148.          0Bh    WORD    sectors per FAT
  2149.          0Dh    WORD    sectors per track
  2150.          0Fh    WORD    number of heads
  2151.          11h    DWORD    number of hidden sectors
  2152.          15h    DWORD    total sectors if WORD at 08h is zero
  2153.  1Fh    BYTE    flags
  2154.         bit 6: 16-bit FAT instead of 12-bit
  2155.         bit 7: unsupportable disk (all accesses will return Not Ready)
  2156.  20h    WORD    device-open count
  2157.  22h    BYTE    device type (see INT 21/AX=440Dh)
  2158.  23h    WORD    bit flags describing drive (see below)
  2159.  25h    WORD    number of cylinders
  2160.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  2161.  40h  6 BYTEs    reserved (part of BPB above)
  2162.  46h    BYTE    last track accessed
  2163. ---removable media---
  2164.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2165. ---fixed media---
  2166.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  2167.         always 0001h for DOS 5+
  2168.  49h    WORD    absolute cylinder number of partition's start on physical drive
  2169.         (FFFFh if primary partition in DOS 4.x)
  2170. ------
  2171.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  2172.         extended boot record rather than root directory)
  2173.  56h    BYTE    terminating null for volume label
  2174.  57h    DWORD    serial number
  2175.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  2176.  63h    BYTE    terminating null for filesystem type
  2177.  
  2178. Bitfields for flags describing drive:
  2179.  bit 0    fixed media
  2180.  bit 1    door lock ("changeline") supported
  2181.  bit 2    current BPB locked
  2182.  bit 3    all sectors in a track are the same size
  2183.  bit 4    physical drive has multiple logical units
  2184.  bit 5    current logical drive for physical drive
  2185.  bit 6    disk change detected
  2186.  bit 7    set DASD before formatting
  2187.  bit 8    disk reformatted
  2188.  bit 9    unformatted (fixed media only, disables reads and writes)
  2189. --------f-2F1000-----------------------------
  2190. INT 2F - SHARE - INSTALLATION CHECK
  2191.     AX = 1000h
  2192. Return: AL = 00h  not installed, OK to install
  2193.          01h  not installed, not OK to install
  2194.          FFh  installed
  2195. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  2196.       (08E9: OR  AL,AL
  2197.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  2198.     values of AL other than described here put PC-DOS 4.00 into the same
  2199.       loop (the buggy instructions are the same)
  2200. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2201.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  2202.       inactive state (due to the undocumented /NC flag used by the autoload
  2203.       code) until this call is made
  2204.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  2205.     Windows Enhanced mode hooks this call and reports that SHARE is
  2206.       installed even when it is not
  2207. SeeAlso: AX=1080h,INT 21/AH=52h
  2208. --------d-2F1001-----------------------------
  2209. INT 2F U - DR-DOS 6.0 SHARE internal - SET ???
  2210.     AX = 1001h
  2211.     DX:BX -> ???function
  2212. Note:    this function is also supported by SuperStor, a disk-compression
  2213.       program by Addstor which is bundled with DR-DOS 6.0
  2214. SeeAlso: AX=1000h,X=F800h
  2215. --------f-2F1040-----------------------------
  2216. INT 2F U - DOS 4 only SHARE internal - ???
  2217.     AX = 1040h
  2218.     ???
  2219. Return: AL = FFh???
  2220. SeeAlso: AX=1000h
  2221. --------f-2F1080-----------------------------
  2222. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  2223.     AX = 1080h
  2224. Return: AL = status
  2225.         F0h successful
  2226.         FFh checking was already on
  2227. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  2228.       and file sharing checks.  The undocumented commandline flag /NC can
  2229.       be used to disable the sharing code.
  2230. SeeAlso: AX=1000h,AX=1081h
  2231. --------f-2F1081-----------------------------
  2232. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  2233.     AX = 1081h
  2234. Return: AL = status
  2235.         F0h successful
  2236.         FFh checking was already off
  2237. Note:    (see AX=1080h)
  2238. SeeAlso: AX=1000h,AX=1080h
  2239. --------O-2F10FF-----------------------------
  2240. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  2241.     AX = 10FFh
  2242.     ES:BX -> ???
  2243. Note:    sets pointer in kernel
  2244. --------N-2F1100-----------------------------
  2245. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  2246.     AX = 1100h
  2247. Return: AL = status
  2248.         00h not installed, OK to install
  2249.         01h not installed, not OK to install
  2250.         FFh installed
  2251.         AH = product identifier (ad hoc by various manufacturers)
  2252.             00h if PC Tools v8 DRIVEMAP
  2253.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  2254.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  2255. Notes:    called by DOS 3.1+ kernel
  2256.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  2257.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  2258.       redirector
  2259.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  2260.       only supports AL=00h-27h
  2261. --------d-2F1100-----------------------------
  2262. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  2263.     AX = 1100h
  2264.     STACK: WORD DADAh
  2265. Return: AL = status
  2266.         00h not installed, OK to install
  2267.         STACK unchanged
  2268.         01h not installed, not OK to install
  2269.         STACK unchanged
  2270.         FFh installed
  2271.         STACK: WORD ADADh
  2272. --------N-2F1101-----------------------------
  2273. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  2274.     AX = 1101h
  2275.     SS = DOS DS
  2276.     SDA first filename pointer -> fully-qualified directory name
  2277.     SDA CDS pointer -> current directory structure for drive with dir
  2278. Return: CF set on error
  2279.         AX = DOS error code (see INT 21/AH=59h)
  2280.     CF clear if successful
  2281. Note:    called by DOS 3.1+ kernel
  2282. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  2283. --------N-2F1102-----------------------------
  2284. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  2285.     AX = 1102h
  2286.     SS = DOS DS
  2287.     SDA first filename pointer -> fully-qualified directory name
  2288.     SDA CDS pointer -> current directory structure for drive with dir
  2289. Return: CF set on error
  2290.         AX = DOS error code (see INT 21/AH=59h)
  2291.     CF clear if successful
  2292. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  2293.       this function "SEQ_RMDIR"
  2294. SeeAlso: AX=1101h
  2295. --------N-2F1103-----------------------------
  2296. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  2297.     AX = 1103h
  2298.     SS = DOS DS
  2299.     SDA first filename pointer -> fully-qualified directory name
  2300.     SDA CDS pointer -> current directory structure for drive with dir
  2301. Return: CF set on error
  2302.         AX = DOS error code (see INT 21/AH=59h)
  2303.     CF clear if successful
  2304. Note:    called by DOS 3.1+ kernel
  2305. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  2306. --------N-2F1104-----------------------------
  2307. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  2308.     AX = 1104h
  2309.     SS = DOS DS
  2310.     SDA first filename pointer -> fully-qualified directory name
  2311.     SDA CDS pointer -> current directory structure for drive with dir
  2312. Return: CF set on error
  2313.         AX = DOS error code (see INT 21/AH=59h)
  2314.     CF clear if successful
  2315. Note:    appears to be identical to AX=1103h
  2316. SeeAlso: AX=1103h
  2317. --------N-2F1105-----------------------------
  2318. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  2319.     AX = 1105h
  2320.     SS = DOS DS
  2321.     SDA first filename pointer -> fully-qualified directory name
  2322.     SS:BX -> fully-qualified directory name
  2323.     SDA CDS pointer -> current directory structure for drive with dir
  2324. Return: CF set on error
  2325.         AX = DOS error code (see INT 21/AH=59h)
  2326.     CF clear if successful
  2327.         CDS updated with new path
  2328. Notes:    called by DOS 3.1+ kernel
  2329.     directory string in CDS should not have a terminating backslash unless
  2330.       the current directory is the root
  2331. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  2332. --------N-2F1106-----------------------------
  2333. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  2334.     AX = 1106h
  2335.     BX = device info word from SFT
  2336.     ES:DI -> SFT
  2337.         SFT DPB field -> DPB of drive containing file
  2338. Return: CF set on error
  2339.         AX = DOS error code (see INT 21/AH=59h)
  2340.     CF clear if successful
  2341.         SFT updated (redirector must decrement open count, which may be
  2342.             done with INT 2F/AX=1208h)
  2343. Note:    called by DOS 3.1+ kernel
  2344. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  2345. --------N-2F1107-----------------------------
  2346. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  2347.     AX = 1107h
  2348.     ES:DI -> SFT
  2349.         SFT DPB field -> DPB of drive containing file
  2350. Return: CF set on error
  2351.         AX = DOS error code (see INT 21/AH=59h)
  2352.     CF clear if successful
  2353.         all buffers for file flushed
  2354.         directory entry updated
  2355. Note:    called by DOS 3.1+ kernel
  2356. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  2357. --------N-2F1108-----------------------------
  2358. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  2359.     AX = 1108h
  2360.     ES:DI -> SFT
  2361.         SFT DPB field -> DPB of drive containing file
  2362.     CX = number of bytes
  2363.     SS = DOS DS
  2364.     SDA DTA field -> user buffer
  2365. Return: CF set on error
  2366.         AX = DOS error code (see INT 21/AH=59h)
  2367.     CF clear if successful
  2368.         CX = number of bytes read (0000h = end of file)
  2369.         SFT updated
  2370. Note:    called by DOS 3.1+ kernel
  2371. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  2372. --------N-2F1109-----------------------------
  2373. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  2374.     AX = 1109h
  2375.     ES:DI -> SFT
  2376.         SFT DPB field -> DPB of drive containing file
  2377.     CX = number of bytes
  2378.     SS = DOS DS
  2379.     SDA DTA field -> user buffer
  2380. Return: CF set on error
  2381.         AX = DOS error code (see INT 21/AH=59h)
  2382.     CF clear if successful
  2383.         CX = number of bytes written
  2384.         SFT updated
  2385. Note:    called by DOS 3.1+ kernel
  2386. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  2387. --------N-2F110A-----------------------------
  2388. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  2389.     AX = 110Ah
  2390.     BX = file handle
  2391.     CX:DX = starting offset
  2392.     SI = high word of size
  2393.     STACK: WORD low word of size
  2394.     ES:DI -> SFT
  2395.         SFT DPB field -> DPB of drive containing file
  2396.     SS = DOS DS
  2397. Return: CF set on error
  2398.        AL = DOS error code (see INT 21/AH=59h)
  2399.     STACK unchanged
  2400. Notes:    called by DOS 3.10-3.31 kernel
  2401.     the redirector is expected to resolve lock conflicts
  2402. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  2403. --------N-2F110A-----------------------------
  2404. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  2405.     AX = 110Ah
  2406.     BL = function
  2407.         00h lock
  2408.         01h unlock
  2409.     DS:DX -> parameter block (see below)
  2410.     ES:DI -> SFT
  2411.         SFT DPB field -> DPB of drive containing file
  2412.     SS = DOS DS
  2413. Return: CF set on error
  2414.        AL = DOS error code (see INT 21/AH=59h)
  2415. Notes:    called by DOS 4.0+ kernel
  2416.     the redirector is expected to resolve lock conflicts
  2417. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  2418.  
  2419. Format of parameter block:
  2420. Offset    Size    Description
  2421.  00h    DWORD    start offset
  2422.  04h    DWORD    size of region
  2423. --------N-2F110B-----------------------------
  2424. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  2425.     AX = 110Bh
  2426.     BX = file handle
  2427.     CX:DX = starting offset
  2428.     SI = high word of size
  2429.     STACK: WORD low word of size
  2430.     ES:DI -> SFT for file
  2431.         SFT DPB field -> DPB of drive containing file
  2432. Return: CF set on error
  2433.        AL = DOS error code (see INT 21/AH=59h)
  2434.     STACK unchanged
  2435. Note:    called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  2436. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  2437. --------N-2F110C-----------------------------
  2438. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  2439.     AX = 110Ch
  2440.     ES:DI -> current directory structure for desired drive
  2441. Return: AL = sectors per cluster
  2442.     AH = media ID byte
  2443.     BX = total clusters
  2444.     CX = bytes per sector
  2445.     DX = number of available clusters
  2446. Note:    called by DOS 3.1+ kernel
  2447. SeeAlso: INT 21/AH=36h
  2448. --------N-2F110D-----------------------------
  2449. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  2450.     AX = 110Dh
  2451.     SDA first filename pointer -> name of file
  2452.     ???
  2453. Return: ???
  2454. Note:    similar to AX=110Eh
  2455. SeeAlso: AX=110Eh
  2456. --------N-2F110E-----------------------------
  2457. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  2458.     AX = 110Eh
  2459.     SS = DOS DS
  2460.     SDA first filename pointer -> fully-qualified name of file
  2461.     SDA CDS pointer -> current directory structure for drive with file
  2462.     STACK: WORD new file attributes
  2463. Return: CF set on error
  2464.         AX = DOS error code (see INT 21/AH=59h)
  2465.     CF clear if successful
  2466.     STACK unchanged
  2467. Note:    called by DOS 3.1+ kernel
  2468. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  2469. --------N-2F110F-----------------------------
  2470. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  2471.     AX = 110Fh
  2472.     SS = DOS DS
  2473.     SDA first filename pointer -> fully-qualified name of file
  2474.     SDA CDS pointer -> current directory structure for drive with file
  2475. Return: CF set on error
  2476.         AX = DOS error code (see INT 21/AH=59h)
  2477.     CF clear if successful
  2478.         AX = file attributes
  2479.         BX:DI = file size
  2480. Note:    called by DOS 3.1+ kernel
  2481. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  2482. --------N-2F1110-----------------------------
  2483. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  2484.     AX = 1110h
  2485.     SDA first filename pointer -> name of file
  2486.     ???
  2487. Return: ???
  2488. Note:    appears to be similar to AX=110Fh
  2489. SeeAlso: AX=110Eh
  2490. --------N-2F1111-----------------------------
  2491. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  2492.     AX = 1111h
  2493.     SS = DS = DOS DS
  2494.     SDA first filename pointer = offset of fully-qualified old name
  2495.     SDA second filename pointer = offset of fully-qualified new name
  2496.     SDA CDS pointer -> current directory structure for drive with file
  2497. Return: CF set on error
  2498.         AX = DOS error code (see INT 21/AH=59h)
  2499.     CF clear if successful
  2500. Note:    called by DOS 3.1+ kernel
  2501. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  2502. --------N-2F1112-----------------------------
  2503. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  2504.     AX = 1112h
  2505.     SS = DS = DOS DS
  2506.     SDA first filename pointer -> name of file
  2507.     ???
  2508. Return: ???
  2509. Note:    similar to AX=1111h
  2510. SeeAlso: AX=1111h
  2511. --------N-2F1113-----------------------------
  2512. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  2513.     AX = 1113h
  2514.     SS = DS = DOS DS
  2515.     SDA first filename pointer -> fully-qualified filename in DOS DS
  2516.     SDA CDS pointer -> current directory structure for drive with file
  2517. Return: CF set on error
  2518.         AX = DOS error code (see INT 21/AH=59h)
  2519.     CF clear if successful
  2520. Notes:    called by DOS 3.1+ kernel
  2521.     the filespec may contain wildcards
  2522. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  2523. --------N-2F1114-----------------------------
  2524. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  2525.     AX = 1114h
  2526.     SDA first filename pointer -> name of file
  2527.     ???
  2528. Return: ???
  2529. Note:    similar to AX=1113h
  2530. SeeAlso: AX=1113h
  2531. --------N-2F1115-----------------------------
  2532. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  2533.     AX = 1115h
  2534.     SS = DOS DS
  2535.     ES:DI -> SFT ???
  2536.     ???
  2537. Return: ???
  2538. Note:    similar to AX=1116h
  2539. SeeAlso: AX=1116h,AX=112Eh
  2540. --------N-2F1116-----------------------------
  2541. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  2542.     AX = 1116h
  2543.     ES:DI -> uninitialized SFT
  2544.     SS = DOS DS
  2545.     SDA first filename pointer -> fully-qualified name of file to open
  2546.     STACK: WORD file access and sharing modes (see INT 21/AH=3Dh)
  2547. Return: CF set on error
  2548.         AX = DOS error code (see INT 21/AH=59h)
  2549.     CF clear if successful
  2550.         SFT filled (except handle count, which DOS manages itself)
  2551.     STACK unchanged
  2552. Note:    called by DOS 3.1+ kernel
  2553. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  2554. SeeAlso: INT 21/AH=60h
  2555. --------N-2F1117-----------------------------
  2556. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  2557.     AX = 1117h
  2558.     ES:DI -> uninitialized SFT
  2559.     SS = DOS DS
  2560.     SDA first filename pointer -> fully-qualified name of file to open
  2561.     SDA CDS pointer -> current directory structure for drive with file
  2562.     STACK: WORD file creation mode
  2563.             low byte = file attributes (see INT 21/AH=3Ch)
  2564.             high byte = 00h normal create, 01h create new file
  2565. Return: CF set on error
  2566.         AX = DOS error code (see INT 21/AH=59h)
  2567.     CF clear if successful
  2568.         SFT filled (except handle count, which DOS manages itself)
  2569.     STACK unchanged
  2570. Note:    called by DOS 3.1+ kernel
  2571. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  2572. --------N-2F1118-----------------------------
  2573. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  2574.     AX = 1118h
  2575.     ES:DI -> uninitialized SFT
  2576.     SS = DOS DS
  2577.     SDA first filename pointer -> fully-qualified name of file
  2578.     STACK: WORD file creation mode
  2579.             low byte = file attributes
  2580.             high byte = 00h normal create, 01h create new file
  2581. Return: ???
  2582.     STACK unchanged
  2583. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  2584.       SDA CDS pointer has offset FFFFh
  2585. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  2586. --------N-2F1119-----------------------------
  2587. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  2588.     AX = 1119h
  2589.     SS = DS = DOS DS
  2590.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  2591.     SDA first filename pointer -> fully-qualified search template
  2592.     SDA search attribute = attribute mask for search
  2593. Return: CF set on error
  2594.         AX = DOS error code (see INT 21/AH=59h)
  2595.     CF clear if successful
  2596.         [DTA] = updated findfirst search data
  2597.             (bit 7 of first byte must be set)
  2598.         [DTA+15h] = standard directory entry for file
  2599. Notes:    called by DOS 3.1+ kernel
  2600.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  2601. SeeAlso: AX=111Ah,AX=111Bh
  2602. --------N-2F111A-----------------------------
  2603. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  2604.     AX = 111Ah
  2605.     ???
  2606. Return: CF set
  2607.         AX = error code (03h for DOS 4.01 IFSFUNC)
  2608. Note:    use AX=111Ch for DOS 5+
  2609. SeeAlso: AX=1119h,AX=111Ch
  2610. --------N-2F111B-----------------------------
  2611. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  2612.     AX = 111Bh
  2613.     SS = DS = DOS DS
  2614.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  2615.     SDA first filename pointer -> fully-qualified search template
  2616.     SDA CDS pointer -> current directory structure for drive with file
  2617.     SDA search attribute = attribute mask for search
  2618. Return: CF set on error
  2619.         AX = DOS error code (see INT 21/AH=59h)
  2620.     CF clear if successful
  2621.         [DTA] = updated findfirst search data
  2622.             (bit 7 of first byte must be set)
  2623.         [DTA+15h] = standard directory entry for file
  2624. Note:    called by DOS 3.1+ kernel
  2625. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  2626. --------N-2F111C-----------------------------
  2627. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  2628.     AX = 111Ch
  2629.     SS = DS = DOS DS
  2630.     ES:DI -> CDS
  2631.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  2632. Return: CF set on error
  2633.         AX = DOS error code (see INT 21/AH=59h)
  2634.     CF clear if successful
  2635.         [DTA] = updated findfirst search data
  2636.             (bit 7 of first byte must be set)
  2637.         [DTA+15h] = standard directory entry for file
  2638. Note:    called by DOS 3.1+ kernel
  2639. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  2640. --------N-2F111D-----------------------------
  2641. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  2642.     AX = 111Dh
  2643.     DS???
  2644.     SS = DOS DS
  2645. Return: ???
  2646. Notes:    used when a process is aborted
  2647.     called by DOS 3.1+ kernel
  2648.     closes all FCBs opened by process
  2649. SeeAlso: INT 21/AX=5D04h
  2650. --------N-2F111E-----------------------------
  2651. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  2652.     AX = 111Eh
  2653.     SS = DOS DS
  2654.     STACK: WORD function to execute
  2655.         5F00h  get redirection mode
  2656.             BL = type (03h printer, 04h disk)
  2657.             Return: BH = state (00h off, 01h on)
  2658.         5F01h  set redirection mode
  2659.             BL = type (03h printer, 04h disk)
  2660.             BH = state (00h off, 01h on)
  2661.         5F02h  get redirection list entry
  2662.             BX = redirection list index
  2663.             DS:SI -> 16-byte local device name buffer
  2664.             ES:DI -> 128-byte network name buffer
  2665.             Return: must set user's BX to device type and CX to
  2666.                 stored parameter value, using AX=1218h to get
  2667.                 stack frame address
  2668.         5F03h  redirect device
  2669.             BL = device type (see INT 21/AX=5F03h)
  2670.             CX = stored parameter value
  2671.             DS:SI -> ASCIZ source device name
  2672.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  2673.         5F04h  cancel redirection
  2674.             DS:SI -> ASCIZ device name or network path
  2675.         5F05h  get redirection list extended entry
  2676.             BX = redirection list index
  2677.             DS:SI -> buffer for ASCIZ source device name
  2678.             ES:DI -> buffer for destination ASCIZ network path
  2679.             Return: BH = status flag
  2680.                 BL = type (03h printer, 04h disk)
  2681.                 CX = stored parameter value
  2682.                 BP = NETBIOS local session number
  2683.         5F06h  similar to 5F05h???
  2684. Return: CF set on error
  2685.         AX = error code (see INT 21/AH=59h)
  2686.     STACK unchanged
  2687. Notes:    called by DOS 3.1+ kernel on INT 21/AH=5Fh (including LAN Manager
  2688.       calls)
  2689.     the PC Network 1.00 redirector does not support function 5F06h
  2690. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  2691. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  2692. --------N-2F111F-----------------------------
  2693. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  2694.     AX = 111Fh
  2695.     STACK: WORD function
  2696.         5E02h  set printer setup
  2697.         5E03h  get printer setup
  2698.         5E04h  set printer mode
  2699.         5E05h  get printer mode
  2700. Return: CF set on error
  2701.         AX = error code (see INT 21/AH=59h)
  2702.     STACK unchanged
  2703. Note:    called by DOS 3.1+ kernel
  2704. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  2705. --------N-2F1120-----------------------------
  2706. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  2707.     AX = 1120h
  2708.     DS = DOS DS
  2709.     ???
  2710. Return: CF clear (successful)
  2711. Notes:    called by DOS 3.1+ kernel
  2712.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  2713. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  2714. --------N-2F1121-----------------------------
  2715. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  2716.     AX = 1121h
  2717.     CX:DX = offset (in bytes) from end
  2718.     ES:DI -> SFT
  2719.         SFT DPB field -> DPB of drive with file
  2720.     SS = DOS DS
  2721. Return: CF set on error
  2722.         AL = DOS error code (see INT 21/AH=59h)
  2723.     CF clear if successful
  2724.         DX:AX = new file position
  2725. Note:    called by DOS 3.1+ kernel
  2726. SeeAlso: AX=1228h,INT 21/AH=42h
  2727. --------N-2F1122-----------------------------
  2728. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  2729.     AX = 1122h
  2730.     SS = DOS DS
  2731.     ???
  2732. Return: ???
  2733. Note:    called by DOS 3.1+ kernel
  2734. --------N-2F1123-----------------------------
  2735. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  2736.     AX = 1123h
  2737.     DS:SI -> ASCIZ filename to canonicalize
  2738.     ES:DI -> 128-byte buffer for qualified name
  2739. Return: CF set if not resolved
  2740. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  2741.       filename matches the name of a character device
  2742.     called first when DOS attempts to resolve a filename (unless inside an
  2743.       AX=5D00h server call); if this fails, DOS resolves the name locally
  2744. SeeAlso: AX=1221h,INT 21/AH=60h
  2745. --------N-2F1124-----------------------------
  2746. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  2747.     AX = 1124h
  2748.     ES:DI -> SFT
  2749.     SS = DOS DS
  2750.     ???
  2751. Return: CX = ???
  2752. Note:    called by DOS 3.1+ kernel if AX=1126h returns CF set
  2753. SeeAlso: AX=1126h
  2754. --------N-2F1125-----------------------------
  2755. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  2756.     AX = 1125h
  2757.     STACK: WORD subfunction
  2758.         5D07h get print stream state
  2759.             Return: DL = current state
  2760.         5D08h set print stream state
  2761.             DL = new state
  2762.         5D09h finish print job
  2763. Return: CF set on error
  2764.         AX = error code (see INT 21/AH=59h)
  2765.     STACK unchanged
  2766. Note:    called by DOS 3.1+ kernel
  2767. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  2768. --------N-2F1126-----------------------------
  2769. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  2770.     AX = 1126h
  2771.     ES:DI -> SFT for file handle 4???
  2772.     SS = DOS DS???
  2773.     ???
  2774. Return: CF set on error
  2775. Notes:    called by DOS 3.1+ kernel
  2776.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  2777.       bit 11 of the device information word in the SFT set
  2778. SeeAlso: AX=1124h
  2779. --------N-2F1127-----------------------------
  2780. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2781.     AX = 1127h
  2782. Return: CF set
  2783.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2784. --------N-2F1128-----------------------------
  2785. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2786.     AX = 1128h
  2787. Return: CF set
  2788.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2789. --------N-2F1129-----------------------------
  2790. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2791.     AX = 1129h
  2792. Return: CF set
  2793.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2794. --------N-2F112A-----------------------------
  2795. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  2796.     AX = 112Ah
  2797.     DS = DOS DS
  2798.     ???
  2799. Return: ???
  2800. Note:    does something to each IFS driver
  2801. --------N-2F112B-----------------------------
  2802. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  2803.     AX = 112Bh
  2804.     SS = DOS DS
  2805.     CX = function/category
  2806.     DS:DX -> parameter block
  2807.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  2808.     ???
  2809. Return: CF set on error
  2810.         AX = DOS error code (see INT 21/AH=59h)
  2811.     CF clear if successful
  2812. Note:    called by DOS 4.0 kernel
  2813. --------N-2F112C-----------------------------
  2814. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - "UPDATE_CB" - ???
  2815.     AX = 112Ch
  2816.     SS = DOS DS
  2817.     SDA current SFT pointer -> SFT for file
  2818.     ???
  2819. Return: CF set on error
  2820. Note:    called by SHARE in DOS 5.0-6.0
  2821. --------N-2F112D-----------------------------
  2822. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  2823.     AX = 112Dh
  2824.     BL = subfunction (value of AL on INT 21)
  2825.         02h get extended attributes
  2826.         03h get extended attribute properties
  2827.         04h set extended attributes
  2828.         Return: CF clear
  2829.         else ???
  2830.         Return: CX = ??? (00h or 02h for DOS 4.01)
  2831.     ES:DI -> SFT for file
  2832.     SS = DOS DS
  2833. Return: DS = DOS DS
  2834. Note:    called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,
  2835.       INT 21/AX=5704h
  2836. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  2837. --------N-2F112E-----------------------------
  2838. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  2839.     AX = 112Eh
  2840.     SS = DS = DOS DS
  2841.     ES:DI -> uninitialized SFT for file
  2842.     STACK: WORD file attribute for created/truncated file
  2843.             low byte = file attributes
  2844.             high byte = 00h normal create/open, 01h create new file
  2845.     SDA first filename pointer -> fully-qualified filename
  2846.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  2847.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  2848. Return: CF set on error
  2849.         AX = error code
  2850.     CF clear if successful
  2851.         CX = result code
  2852.         01h file opened
  2853.         02h file created
  2854.         03h file replaced (truncated)
  2855.         SFT initialized (except handle count, which DOS manages itself)
  2856. Note:    called by DOS 4+ kernel
  2857. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  2858. --------N-2F112F-----------------------------
  2859. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  2860.     AX = 112Fh
  2861.     SS = DOS DS
  2862.     STACK: WORD function in low byte
  2863.         00h ???
  2864.             DS:SI -> Current Directory Structure???
  2865.             CL = drive (1=A:)
  2866.         01h ???
  2867.             DS:SI -> ???
  2868.             CL = file handle???
  2869.         02h ???
  2870.             DS:SI -> Current Directory Structure???
  2871.             DI = ???
  2872.             CX = drive (1=A:)
  2873.     ???
  2874. Return: CF set on error
  2875.         AX = DOS error code (see INT 21/AH=59h)
  2876.     CF clear if successful
  2877. Note:    called by DOS 4.0 kernel
  2878. SeeAlso: INT 21/AH=6Bh
  2879. --------N-2F1130-----------------------------
  2880. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  2881.     AX = 1130h
  2882. Return: ES = CS of resident IFSFUNC
  2883. --------N-2F1180-----------------------------
  2884. INT 2F - LAN Manager Enhanced DOS Services - ???
  2885.     AX = 1180h
  2886.     ???
  2887. Return: ???
  2888. --------N-2F1182-----------------------------
  2889. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  2890.     AX = 1182h
  2891.     ???
  2892. Return: ???
  2893. --------N-2F1184-----------------------------
  2894. INT 2F - LAN Manager Enhanced DOS - ???
  2895.     AX = 1184h
  2896.     ???
  2897. Return: ???
  2898. --------N-2F1186-----------------------------
  2899. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  2900.     AX = 1186h
  2901.     DS:SI -> stack frame (see below)
  2902. Return: CF clear if successful
  2903.     CF set if error
  2904.         AX = error code
  2905. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  2906.       file/printer services
  2907. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  2908.  
  2909. Format of DosReadAsynchNmPipe stack frame:
  2910. Offset    Size    Description
  2911.  00h    DWORD    -> number of bytes read
  2912.  04h    WORD    size of buffer
  2913.  06h    DWORD    -> buffer
  2914.  0Ah    DWORD    -> return code
  2915.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2916.  12h    WORD    handle
  2917. --------N-2F118A-----------------------------
  2918. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  2919.     AX = 118Ah
  2920.     BX = function (0000h or 0001h)
  2921. Return: CF clear if successful
  2922.         AX = 1100h success
  2923.     CF set if error
  2924.         AX = 0001h, etc.
  2925. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  2926. --------N-2F118B-----------------------------
  2927. INT 2F - LAN Manager Enhanced DOS - ???
  2928.     AX = 118Bh
  2929.     ???
  2930. Return: ???
  2931. --------N-2F118C-----------------------------
  2932. INT 2F - LAN Manager Enhanced DOS - ???
  2933.     AX = 118Ch
  2934.     ???
  2935. Return: ???
  2936. --------N-2F118E-----------------------------
  2937. INT 2F - LAN Manager Enhanced DOS - ???
  2938.     AX = 118Eh
  2939.     ???
  2940. Return: ???
  2941. --------N-2F118F-----------------------------
  2942. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  2943.     AX = 118Fh
  2944.     DS:SI -> stack frame (see below)
  2945. Return: CF clear if successful
  2946.     CF set if error
  2947.         AX = error code
  2948. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  2949.  
  2950. Format of DosReadAsynchNmPipe stack frame:
  2951. Offset    Size    Description
  2952.  00h    DWORD    -> number of bytes read
  2953.  04h    WORD    Size of buffer
  2954.  06h    DWORD    -> buffer
  2955.  0Ah    DWORD    -> return code
  2956.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2957.  12h    WORD    handle
  2958. --------N-2F1190-----------------------------
  2959. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  2960.     AX = 1190h
  2961.     DS:SI-> stack frame
  2962. Return: CF clear if successful
  2963.     CF set if error
  2964.         AX = error code
  2965. SeeAlso: AX=1186h,AX=1191h
  2966.  
  2967. Format of DosReadAsynchNmPipe2 stack frame:
  2968. Offset    Size    Description
  2969.  00h    DWORD    -> number of bytes read
  2970.  04h    WORD    size of buffer
  2971.  06h    DWORD    -> buffer
  2972.  0Ah    DWORD    -> return code
  2973.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2974.  12h    WORD    handle
  2975.  14h    DWORD    ???
  2976. --------N-2F1191-----------------------------
  2977. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  2978.     AX = 1191h
  2979.     DS:SI -> stack frame (see below)
  2980. Return: CF clear if successful
  2981.     CF set if error
  2982.         AX = error code
  2983. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  2984.  
  2985. Format of DosReadAsynchNmPipe2 stack frame:
  2986. Offset    Size    Description
  2987.  00h    DWORD    -> number of bytes read
  2988.  04h    WORD    size of buffer
  2989.  06h    DWORD    -> buffer
  2990.  0Ah    DWORD    -> return code
  2991.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2992.  12h    WORD    handle
  2993.  14h    DWORD    ???
  2994. --------D-2F1200-----------------------------
  2995. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  2996.     AX = 1200h
  2997. Return: AL = FFh (for compatibility with other INT 2F functions)
  2998. --------D-2F1201-----------------------------
  2999. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  3000.     AX = 1201h
  3001.     SS = DOS DS (must be using a DOS internal stack)
  3002.     SDA current SFT pointer -> SFT of file to close
  3003. Return: CF set on error
  3004.     BX???
  3005.     CX new reference count of SFT
  3006.     ES:DI -> SFT for file
  3007. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  3008. --------D-2F1202-----------------------------
  3009. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  3010.     AX = 1202h
  3011.     STACK: WORD vector number
  3012. Return: ES:BX -> interrupt vector
  3013.     STACK unchanged
  3014. --------D-2F1203-----------------------------
  3015. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  3016.     AX = 1203h
  3017. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  3018. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  3019.       segment
  3020. --------D-2F1204-----------------------------
  3021. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  3022.     AX = 1204h
  3023.     STACK: WORD character to normalize
  3024. Return: AL = normalized character (forward slash turned to backslash, all
  3025.         others unchanged)
  3026.     ZF set if path separator
  3027.     STACK unchanged
  3028. --------D-2F1205-----------------------------
  3029. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  3030.     AX = 1205h
  3031.     STACK: WORD character to output
  3032. Return: STACK unchanged
  3033. Note:    can be called only from within DOS
  3034. --------D-2F1206-----------------------------
  3035. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  3036.     AX = 1206h
  3037.     DI = error code
  3038.     BP:SI -> device driver header
  3039.     SS = DOS DS (must be using a DOS internal stack)
  3040.     STACK: WORD value to be passed to INT 24 in AX
  3041. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  3042.     STACK unchanged
  3043. SeeAlso: INT 24
  3044. --------D-2F1207-----------------------------
  3045. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  3046.     AX = 1207h
  3047.     DS:DI -> disk buffer
  3048. Return: nothing
  3049. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  3050.       recently used is first); under DOS 3.3, the buffer is then moved to
  3051.       the start of the disk buffer chain if it was marked unused
  3052. Notes:    can be called only from within DOS
  3053.     this function is nearly the same as AX=120Fh
  3054. SeeAlso: AX=120Fh
  3055. --------D-2F1208-----------------------------
  3056. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  3057.     AX = 1208h
  3058.     ES:DI -> SFT
  3059. Return: AX = original value of reference count
  3060. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  3061.       that the SFT is not in use).    It is the caller's responsibility to
  3062.       set the reference count to zero after cleaning up.
  3063.     used by network redirectors such as MSCDEX
  3064. SeeAlso: AX=1106h
  3065. --------D-2F1209-----------------------------
  3066. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  3067.     AX = 1209h
  3068.     DS:DI -> disk buffer
  3069. Return: disk buffer marked unused, contents written to disk if buffer dirty
  3070. Note:    can be called only from within DOS
  3071. SeeAlso: AX=120Eh,AX=1215h
  3072. --------D-2F120A-----------------------------
  3073. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  3074.     AX = 120Ah
  3075.     DS = SS = DOS DS (must be using a DOS internal stack)
  3076.     STACK: WORD extended error code
  3077. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  3078.     CF clear if retry, set otherwise
  3079.     STACK unchanged
  3080. Notes:    can only be called during a DOS function call, as it uses various
  3081.       fields in the SDA to set up the registers for the INT 24
  3082.     reportedly sets current DPB's first root directory sector to 1
  3083. SeeAlso: INT 24
  3084. --------D-2F120B-----------------------------
  3085. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  3086.     AX = 120Bh
  3087.     ES:DI -> system file table entry for previous open of file
  3088.     STACK: WORD extended error code (should be 20h--sharing violation)
  3089. Return: CF clear if operation should be retried
  3090.     CF set if operation should not be retried
  3091.         AX = error code (20h) (see INT 21/AH=59h)
  3092.     STACK unchanged
  3093. Notes:    can only be called during a DOS function call
  3094.     should only be called if an attempt was made to open an already-open
  3095.       file contrary to the sharing rules
  3096.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  3097.       inheritance allowed
  3098. --------D-2F120C-----------------------------
  3099. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  3100.     AX = 120Ch
  3101.     SDA current SFT pointer -> SFT for file
  3102.     DS = DOS DS
  3103.     SS = DOS DS (must be using a DOS internal stack)
  3104. Return: ES, DI, AX destroyed
  3105. Notes:    invokes "device open" call on device driver for SFT
  3106.     changes owner of last-accessed SFT to calling process if it was opened
  3107.       via FCB
  3108.     called by network redirectors such as MSCDEX
  3109. --------D-2F120D-----------------------------
  3110. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  3111.     AX = 120Dh
  3112.     SS = DOS DS (must be using a DOS internal stack)
  3113. Return: AX = current date in packed format (see INT 21/AX=5700h)
  3114.     DX = current time in packed format (see INT 21/AX=5700h)
  3115. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  3116. --------D-2F120E-----------------------------
  3117. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  3118.     AX = 120Eh
  3119.     SS = DOS DS (must be using a DOS internal stack)
  3120. Return: DS:DI -> first disk buffer
  3121. Notes:    clears "referenced" flag on all disk buffers
  3122.     in DOS 5+, this has become essentially a NOP, invoking the same code
  3123.       used by AX=1224h (SHARING DELAY)
  3124. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  3125. --------D-2F120F-----------------------------
  3126. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  3127.     AX = 120Fh
  3128.     DS:DI -> disk buffer
  3129.     SS = DOS DS (must be using a DOS internal stack)
  3130. Return: DS:DI -> next buffer in buffer list
  3131. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  3132.       recently used is first); under DOS 3.3, the buffer is then moved to
  3133.       the start of the disk buffer chain if it was marked unused
  3134. Note:    this function is the same as AX=1207h except that it returns a
  3135.       pointer to the buffer following the specified buffer in the buffer
  3136.       chain
  3137. SeeAlso: AX=1207h
  3138. --------D-2F1210-----------------------------
  3139. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  3140.     AX = 1210h
  3141.     DS:DI -> first disk buffer to check
  3142. Return: ZF clear if found
  3143.         DS:DI -> first unreferenced disk buffer
  3144.     ZF set if not found
  3145. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  3146.       used by AX=1224h (SHARING DELAY)
  3147. SeeAlso: AX=120Eh
  3148. --------D-2F1211-----------------------------
  3149. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  3150.     AX = 1211h
  3151.     DS:SI -> ASCIZ filename to normalize
  3152.     ES:DI -> buffer for normalized filename
  3153. Return: destination buffer filled with uppercase filename, with slashes turned
  3154.     to backslashes
  3155. SeeAlso: AX=121Eh,AX=1221h
  3156. --------D-2F1212-----------------------------
  3157. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  3158.     AX = 1212h
  3159.     ES:DI -> ASCIZ string
  3160. Return: CX = length of string
  3161. SeeAlso: AX=1225h
  3162. --------D-2F1213-----------------------------
  3163. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  3164.     AX = 1213h
  3165.     STACK: WORD character to convert to uppercase
  3166. Return: AL = uppercase character
  3167.     STACK unchanged
  3168. --------D-2F1214-----------------------------
  3169. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  3170.     AX = 1214h
  3171.     DS:SI = first pointer
  3172.     ES:DI = second pointer
  3173. Return: ZF set if pointers are equal, ZF clear if not equal
  3174. --------D-2F1215-----------------------------
  3175. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  3176.     AX = 1215h
  3177.     DS:DI -> disk buffer
  3178.     SS = DOS DS (must be using a DOS internal stack)
  3179.     STACK: WORD drives for which to skip buffer
  3180.         ignore buffer if drive same as high byte, or bytes differ and
  3181.         the buffer is for a drive OTHER than that given in low byte
  3182. Return: STACK unchanged
  3183. Note:    can be called only from within DOS
  3184. SeeAlso: AX=1209h
  3185. --------D-2F1216-----------------------------
  3186. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  3187.     AX = 1216h
  3188.     BX = system file table entry number
  3189. Return: CF clear if successful
  3190.         ES:DI -> system file table entry
  3191.     CF set if BX greater than FILES=
  3192. Note:    supported by DR-DOS 5+
  3193. SeeAlso: AX=1220h
  3194. --------D-2F1217-----------------------------
  3195. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  3196.     AX = 1217h
  3197.     SS = DOS DS (must be using a DOS internal stack)
  3198.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  3199. Return: CF set on error
  3200.         (drive > LASTDRIVE)
  3201.     CF clear if successful
  3202.         DS:SI -> current directory structure for specified drive
  3203.     STACK unchanged
  3204. SeeAlso: AX=1219h
  3205. --------D-2F1218-----------------------------
  3206. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  3207.     AX = 1218h
  3208. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  3209. Note:    only valid while within DOS
  3210. --------D-2F1219-----------------------------
  3211. INT 2F U - DOS 3+ internal - SET DRIVE???
  3212.     AX = 1219h
  3213.     SS = DOS DS (must be using a DOS internal stack)
  3214.     STACK: WORD drive (0 = default, 1 = A:, etc)
  3215. Return: ???
  3216.     STACK unchanged
  3217. Notes:    calls AX=1217h
  3218.     builds a current directory structure if inside server call
  3219.       (INT 21/AX=5D00h)
  3220. SeeAlso: AX=1217h,AX=121Fh
  3221. --------D-2F121A-----------------------------
  3222. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  3223.     AX = 121Ah
  3224.     DS:SI -> filename
  3225. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  3226.     DS:SI -> filename without leading X: (if present)
  3227. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  3228. --------D-2F121B-----------------------------
  3229. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  3230.     AX = 121Bh
  3231.     CL = year - 1980
  3232. Return: AL = number of days in February
  3233. Note:    requires DS to be set to the DOS code segment
  3234. SeeAlso: INT 21/AH=2Bh
  3235. --------D-2F121C-----------------------------
  3236. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  3237.     AX = 121Ch
  3238.     DS:SI -> start of memory to checksum
  3239.     CX = number of bytes
  3240.     DX = initial checksum
  3241.     SS = DOS DS (must be using a DOS internal stack)
  3242. Return: AX, CX destroyed
  3243.     DX = checksum
  3244.     DS:SI -> first byte after checksummed range
  3245. Notes:    used by DOS to determine day count since 1/1/80 given a date
  3246.     supported by DR-DOS 5.0+
  3247. SeeAlso: AX=121Dh
  3248. --------D-2F121D-----------------------------
  3249. INT 2F U - DOS 3+ internal - SUM MEMORY
  3250.     AX = 121Dh
  3251.     DS:SI -> memory to add up
  3252.     CX = 0000h
  3253.     DX = limit
  3254. Return: AL = byte which exceeded limit
  3255.     CX = number of bytes before limit exceeded
  3256.     DX = remainder after adding first CX bytes
  3257.     DS:SI -> byte beyond the one which exceeded the limit
  3258. Notes:    used by DOS to determine year or month given day count since 1/1/80
  3259.     supported by DR-DOS 5.0+
  3260. SeeAlso: AX=121Ch
  3261. --------D-2F121E-----------------------------
  3262. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  3263.     AX = 121Eh
  3264.     DS:SI -> first ASCIZ filename
  3265.     ES:DI -> second ASCIZ filename
  3266. Return: ZF set if filenames equivalent, ZF clear if not
  3267. Note:    supported by DR-DOS 5.0+
  3268. SeeAlso: AX=1211h,AX=1221h
  3269. --------D-2F121F-----------------------------
  3270. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  3271.     AX = 121Fh
  3272.     SS = DOS DS (must be using a DOS internal stack)
  3273.     STACK: WORD drive letter
  3274. Return: ES:DI -> current directory structure (will be overwritten by next call)
  3275.     STACK unchanged
  3276. --------D-2F1220-----------------------------
  3277. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  3278.     AX = 1220h
  3279.     BX = file handle
  3280. Return: CF set on error
  3281.         AL = 6 (invalid file handle)
  3282.     CF clear if successful
  3283.         ES:DI -> JFT entry for file handle in current process
  3284. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  3285.       file handle, or FFh if the handle is not open
  3286.     supported by DR-DOS 5.0+
  3287. SeeAlso: AX=1216h,AX=1229h
  3288. --------D-2F1221-----------------------------
  3289. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  3290.     AX = 1221h
  3291.     DS:SI -> file name to be fully qualified
  3292.     ES:DI -> 128-byte buffer for resulting canonical file name
  3293.     SS = DOS DS (must be using a DOS internal stack)
  3294. Return: (see INT 21/AH=60h)
  3295. Note:    identical to INT 21/AH=60h
  3296. SeeAlso: AX=1123h,INT 21/AH=60h
  3297. --------D-2F1222-----------------------------
  3298. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  3299.     AX = 1222h
  3300.     SS = DOS data segment
  3301.     SS:SI -> 4-byte records
  3302.         BYTE    error code, FFh = last record
  3303.         BYTE    error class, FFh = don't change
  3304.         BYTE    suggested action, FFh = don't change
  3305.         BYTE    error locus, FFh = don't change
  3306.     SDA error code set
  3307. Return: SI destroyed
  3308.     SDA error class, error locus, and suggested action fields set
  3309. Note:    can be called only from within DOS
  3310. SeeAlso: AX=122Dh,INT 21/AH=59h
  3311. --------D-2F1223-----------------------------
  3312. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  3313.     AX = 1223h
  3314.     DS = DOS DS
  3315.     SS = DOS DS (must be using a DOS internal stack)
  3316.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  3317.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  3318. Return: CF set if no character device by that name found
  3319.     CF clear if found
  3320.         BH = low byte of device attribute word
  3321. Note:    can only be called from within DOS
  3322. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  3323. --------D-2F1224-----------------------------
  3324. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  3325.     AX = 1224h
  3326.     SS = DOS DS (must be using a DOS internal stack)
  3327. Return: after delay set by INT 21/AX=440Bh, unless in server call
  3328.       (INT 21/AX=5D00h)
  3329. Note:    delay is dependent on the processor speed, and is skipped entirely if
  3330.       inside a server call
  3331. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  3332. --------D-2F1225-----------------------------
  3333. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  3334.     AX = 1225h
  3335.     DS:SI -> ASCIZ string
  3336. Return: CX = length of string
  3337. Note:    supported by DR-DOS 5.0+
  3338. SeeAlso: AX=1212h
  3339. --------D-2F1226-----------------------------
  3340. INT 2F U - DOS 3.3+ internal - OPEN FILE
  3341.     AX = 1226h
  3342.     CL = access mode
  3343.     DS:DX -> ASCIZ filename
  3344.     SS = DOS DS (must be using a DOS internal stack)
  3345. Return: CF set on error
  3346.         AL = error code (see INT 21/AH=59h)
  3347.     CF clear if successful
  3348.         AX = file handle
  3349. Notes:    can only be called from within DOS
  3350.     equivalent to INT 21/AH=3Dh
  3351.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3352. SeeAlso: AX=1227h,INT 21/AH=3Dh
  3353. --------D-2F1227-----------------------------
  3354. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  3355.     AX = 1227h
  3356.     BX = file handle
  3357.     SS = DOS DS (must be using a DOS internal stack)
  3358. Return: CF set on error
  3359.         AL = 06h invalid file handle
  3360.     CF clear if successful
  3361. Notes:    can only be called from within DOS
  3362.     equivalent to INT 21/AH=3Eh
  3363.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3364. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  3365. --------D-2F1228BP4200-----------------------
  3366. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  3367.     AX = 1228h
  3368.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  3369.     BX = file handle
  3370.     CX:DX = offset in bytes
  3371.     SS = DOS DS (must be using a DOS internal stack)
  3372. Return: as for INT 21/AH=42h
  3373. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  3374.       function call
  3375.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  3376.       LSEEK, and restores frame pointer
  3377.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3378. SeeAlso: INT 21/AH=42h
  3379. --------D-2F1229-----------------------------
  3380. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  3381.     AX = 1229h
  3382.     BX = file handle
  3383.     CX = number of bytes to read
  3384.     DS:DX -> buffer
  3385.     SS = DOS DS (must be using a DOS internal stack)
  3386. Return: as for INT 21/AH=3Fh
  3387. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  3388.       a DOS function call
  3389.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3390. SeeAlso: AX=1226h,INT 21/AH=3Fh
  3391. --------D-2F122A-----------------------------
  3392. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  3393.     AX = 122Ah
  3394.     BX = entry point to set (0001h or 0002h)
  3395.     DS:SI -> FASTOPEN entry point
  3396.         (entry point not set if SI = FFFFh for DOS 4+)
  3397. Return: CF set if specified entry point already set
  3398. Notes:    entry point in BX is ignored under DOS 3.30
  3399.     both entry points set to same handler by DOS 4.01
  3400.     DOS 5.0 and 6.0 only set entry point 1
  3401.  
  3402. DOS 3.30+ FASTOPEN is called with:
  3403.     AL = 01h  Lookup
  3404.         CX = ??? seems to be offset
  3405.         DI = ??? seems to be offset
  3406.         SI = offset in DOS DS of filename
  3407.     AL = 02h  insert file into FASTOPEN cache
  3408.     AL = 03h  delete file from FASTOPEN cache
  3409.         SI = offset in DOS DS of filename
  3410.     AL = 04h  purge FASTOPEN cache
  3411.         AH = subfunction (00h,01h,02h)
  3412.         ES:DI -> ???
  3413.         CX = ??? (subfunctions 01h and 02h only)
  3414. Returns: CF set on error or not installed
  3415. Note: function 03h calls function 01h first
  3416.  
  3417. PC-DOS 4.01 FASTOPEN is additionally called with:
  3418.     AL = 04h ???
  3419.         AH = 03h
  3420.         ???
  3421.     AL = 05h ???
  3422.     AL = 0Bh ???
  3423.     AL = 0Ch ???
  3424.     AL = 0Dh ???
  3425.     AL = 0Eh ???
  3426.     AL = 0Fh ???
  3427.     AL = 10h ???
  3428.  
  3429. MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  3430.     AL = 04h  purge FASTOPEN cache
  3431.         AH = 03h
  3432.         ???
  3433.     AL = 05h ???
  3434.         DL = drive (00h = A:)
  3435.         ???
  3436.     AL = 06h ???
  3437.         ???
  3438. --------D-2F122B-----------------------------
  3439. INT 2F U - DOS 3.3+ internal - IOCTL
  3440.     AX = 122Bh
  3441.     BP = 44xxh
  3442.     SS = DOS DS (must be using a DOS internal stack)
  3443.     additional registers as appropriate for INT 21/AX=44xxh
  3444. Return: as for INT 21/AH=44h
  3445. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  3446.       a DOS function call
  3447.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  3448.       IOCTL, and restores frame pointer
  3449.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  3450. SeeAlso: INT 21/AH=44h
  3451. --------D-2F122C-----------------------------
  3452. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  3453.     AX = 122Ch
  3454. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  3455. Note:    although this function exists in DR-DOS 5.0, it returns 0000h:0000h
  3456. SeeAlso: INT 21/AH=52h
  3457. --------D-2F122D-----------------------------
  3458. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  3459.     AX = 122Dh
  3460. Return: AX = current extended error code
  3461. SeeAlso: AX=1222h,INT 21/AH=59h
  3462. --------D-2F122E-----------------------------
  3463. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  3464.     AX = 122Eh
  3465.     DL = subfunction
  3466.         00h get standard DOS error table
  3467.         Return: ES:DI -> error table
  3468.                  (DOS 4: errors 00h-12h,50h-5Bh)
  3469.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  3470.         01h set standard DOS error table
  3471.         ES:DI -> error table
  3472.         02h get parameter error table (errors 00h-0Ah)
  3473.         Return: ES:DI -> error table
  3474.         03h set parameter error table
  3475.         ES:DI -> error table
  3476.         04h get critical/SHARE error table (errors 13h-2Bh)
  3477.         Return: ES:DI -> error table
  3478.         05h set critical/SHARE error table
  3479.         ES:DI -> error table
  3480.         06h get ??? error table
  3481.         Return: ES:DI -> error table or 0000h:0000h
  3482.         07h set ??? error table
  3483.         ES:DI -> error table
  3484.         08h get error message retriever (see below)
  3485.         Return: ES:DI -> FAR procedure to fetch error message
  3486.         09h set ??? error table
  3487.         ES:DI -> error table
  3488. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  3489.       the offset of the error message table within COMMAND.COM, and the
  3490.       procedure returned by DL=08h should be called
  3491.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  3492.       with DL odd are ignored); they are always returned with segment 0001h
  3493.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  3494.       into a single error table
  3495. SeeAlso: AX=0500h,INT 21/AH=59h
  3496.  
  3497. Format of DOS 4.x error table:
  3498. Offset    Size    Description
  3499.  00h    BYTE    FFh
  3500.  01h  2 BYTEs    04h,00h (DOS version???)
  3501.  03h    BYTE    number of error headers following
  3502.  04h 2N WORDs    table of all error headers for table
  3503.         Offset    Size    Description
  3504.          00h    WORD    error message number
  3505.          02h    WORD    offset of error message from start of header
  3506.                 error messages are count byte followed by msg
  3507. Note:    DOS 5 error tables consist of one word per error number; each word
  3508.       contains either the offset of a counted string or 0000h
  3509.  
  3510. Call error retrieval function with:
  3511.     AX = error number
  3512.     DI = offset of error table
  3513. Return: ES:DI -> error message (counted string)
  3514. Notes:    this function needs to access COMMAND.COM if the messages were not
  3515.       loaded into memory permanently with /MSG; the caller should assume
  3516.       that the returned message will be overwritten by the next call of
  3517.       the function
  3518.     supported by DR-DOS 5.0
  3519.  
  3520. Values for parameter errors:
  3521.  01h    Too many parameters
  3522.  02h    Required Parameter missing
  3523.  03h    Invalid switch
  3524.  04h    Invalid keyword
  3525.  06h    Parameter value not in allowed range
  3526.  07h    Parameter value not allowed
  3527.  08h    Parameter value not allowed
  3528.  09h    Parameter format not correct
  3529.  0Ah    Invalid parameter
  3530.  0Bh    Invalid parameter combination
  3531. --------D-2F122F-----------------------------
  3532. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  3533.     AX = 122Fh
  3534.     DX = DOS version number (0000h = return true DOS version)
  3535. Note:    not available under DR-DOS 5.0 or 6.0
  3536. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  3537. ----------2F12FFBX0006-----------------------
  3538. INT 2F U - DR-DOS 6 - VIDEO MEMORY SPACE CONTROL
  3539.     AX = 12FFh
  3540.     BX = 0006h
  3541.     DX = 0000h
  3542.     CX = function
  3543.         0000h get status of video memory space (MEMMAX /V)
  3544.         0001h map memory into video memory space (MEMMAX +V)
  3545.         0002h unmap memory from video memory space (MEMMAX -V)
  3546. Return: CF clear if successful
  3547.         AX = 0000h (successful)
  3548.         BX = segment of reserved video RAM
  3549.         CX = segment of used video RAM
  3550.         DX = segment of first upper MCB
  3551. Note:    this functionality is provided by EMM386, and partially supported by
  3552.       HIDOS.SYS
  3553. SeeAlso: AX=D201h/BX=4849h
  3554. --------D-2F13-------------------------------
  3555. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  3556.     AH = 13h
  3557.     DS:DX -> interrupt handler disk driver calls on read/write
  3558.     ES:BX = address to restore INT 13 to on system halt (exit from root
  3559.          shell) or warm boot (INT 19)
  3560. Return: DS:DX set by previous invocation of this function
  3561.     ES:BX set by previous invocation of this function
  3562. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  3563.       original INT 13 handler.  The first is for disk change detection
  3564.       on floppy drives, the second is for tracking formatting calls and
  3565.       correcting DMA boundary errors, the third is for working around
  3566.       problems in a particular version of IBM's ROM BIOS
  3567.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  3568.       also points there unless IO.SYS has installed a special filter for
  3569.       hard disk reads (on systems with model byte FCh and BIOS date
  3570.       "01/10/84" only), in which case it points at the special filter
  3571.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  3572.       functions are still invoked via an INT 13 instruction
  3573.     this is a dangerous security loophole for any virus-monitoring software
  3574.       which does not trap this call ("INT13", "Nomenklatura", and many
  3575.       Bulgarian viruses are known to use it to get the original ROM entry
  3576.       point)
  3577. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  3578. ----------2F13-------------------------------
  3579. INT 2F U - MS-NET - ???
  3580.     AH = 13h
  3581.     ???
  3582. Return: ???
  3583. Note:    supposedly used to move (or control the movement of) NCBs
  3584. --------U-2F1400-----------------------------
  3585. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  3586.     AX = 1400h
  3587. Return: AL = 00h not installed, OK to install
  3588.          01h not installed, not OK
  3589.          FFh installed
  3590. Notes:    called by DOS v3.3+ kernel
  3591.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3592.     supported by DR-DOS 5.0
  3593.     documented for MS-DOS 5+, but undocumented in prior versions
  3594. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  3595. --------D-2F1400-----------------------------
  3596. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  3597.     AX = 1400h
  3598. Return: AX = FFFFh if installed
  3599.         BX = maximum memory required to save screen and keyboard info
  3600.     CF clear if successful
  3601.     CF set on error
  3602.         AX = error code
  3603.         0002h invalid function
  3604.         0004h unknown error
  3605. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  3606.       to communicate with the user
  3607. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  3608. --------U-2F1401-----------------------------
  3609. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  3610.     AX = 1401h
  3611.     DS:SI -> internal code page structure (see below)
  3612.     BX = new code page (see INT 21/AX=6602h)
  3613.     DX = country code???
  3614. Return: AL = status
  3615.          00h successful
  3616.          else DOS error code
  3617. Note:    called by DOS v3.3+ kernel
  3618. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  3619.  
  3620. Format of DOS 3.30 internal code page structure:
  3621. Offset    Size    Description
  3622.  00h  8 BYTEs    ???
  3623.  08h 64 BYTEs    name of country information file
  3624.  48h    WORD    system code page
  3625.  4Ah    WORD    number of supported subfunctions
  3626.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  3627.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  3628.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  3629.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  3630.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  3631. --------D-2F1401-----------------------------
  3632. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  3633.     AX = 1401h
  3634.     DL = function (00h open, 01h close)
  3635.     DH = wait flag
  3636.         00h block until screen opens
  3637.         01h return error if screen is not available
  3638.         02h urgent--always open screen immediately
  3639. Return: CF clear if successful
  3640.         BX = amount of memory needed to save screen and keyboard info,
  3641.         0000h if default save location can be used (only if DH was 02h)
  3642.     CF set on error
  3643. Note:    the application using the screen is frozen until the popup screen is
  3644.       closed
  3645. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  3646. --------U-2F1402-----------------------------
  3647. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  3648.     AX = 1402h
  3649.     BP = subfunction (same as AL for INT 21/AH=65h)
  3650.     BX = code page (see INT 21/AX=6602h)
  3651.     DX = country code (see INT 21/AH=38h)
  3652.     DS:SI -> internal code page structure (see AX=1401h)
  3653.     ES:DI -> user buffer
  3654.     CX = size of user buffer
  3655. Return: AL = status
  3656.         00h successful
  3657.         else DOS error code
  3658. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  3659.     code page structure apparently only needed for COUNTRY.SYS pathname
  3660. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  3661. --------D-2F1402-----------------------------
  3662. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  3663.     AX = 1402h
  3664.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  3665. Return: CF clear if successful
  3666.     CF set on error
  3667.         AX = error code
  3668.         0001h process does not own screen
  3669.         0004h unknown error
  3670.         0005h invalid pointer
  3671. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  3672. --------U-2F1403-----------------------------
  3673. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  3674.     AX = 1403h
  3675.     DS:SI -> internal code page structure (see AX=1401h)
  3676.     BX = code page (see INT 21/AX=6602h)
  3677.     DX = country code (see INT 21/AH=38h)
  3678. Return: AL = status
  3679.          ???
  3680. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  3681. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  3682. --------D-2F1403-----------------------------
  3683. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  3684.     AX = 1403h
  3685.     ES:DI -> buffer containing saved screen
  3686.         (0000h:0000h for default buffer in POPUP)
  3687. Return: CF clear if successful
  3688.     CF set on error
  3689.         AX = error code (see AX=1402h"POPUP")
  3690. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  3691. --------U-2F1404-----------------------------
  3692. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  3693.     AX = 1404h
  3694.     BX = code page (see INT 21/AX=6602h)
  3695.     DX = country code (see INT 21/AH=38h)
  3696.     DS:SI -> internal code page structure (see AX=1401h)
  3697.     ES:DI -> user buffer
  3698. Return: AL = status
  3699.          ???
  3700. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  3701.     code page structure apparently only needed for COUNTRY.SYS pathname
  3702. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  3703. --------U-2F14FE-----------------------------
  3704. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  3705.     AX = 14FEh
  3706.     BX = code page (FFFFh=global code page) (see INT 21/AX=6602h)
  3707.     DX = country ID (FFFFh=current country) (see INT 21/AH=38h)
  3708.     ES:DI -> country information buffer
  3709.     CL = info ID
  3710.         01h get general internationalization info
  3711.         02h get pointer to uppercase table
  3712.         04h get pointer to filename uppercase table
  3713.         05h get pointer to filename terminator table
  3714.         06h get pointer to collating sequence table
  3715.         07h get pointer to Double-Byte Character Set table
  3716.     CF set (used to return error if not installed)
  3717. Return: CF clear if successful
  3718.         DS:SI -> requested information
  3719.     CF set on error
  3720. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3721.       or FFh on entry.
  3722.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  3723.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  3724. SeeAlso: AX=14FFh,INT 21/AH=65h
  3725.  
  3726. Format of DR-DOS COUNTRY.SYS file:
  3727. Offset    Size    Description
  3728.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  3729.  7Eh    WORD    signature EDC1h
  3730.  80h    var    country pointer records
  3731.     Offset    Size    Description
  3732.      00h    WORD    country code (0000h if end of array)
  3733.      02h    WORD    code page
  3734.      04h    WORD    ??? (0000h)
  3735.      06h  7 WORDs    offsets in file for data tables for subfunctions
  3736.             01h-07h
  3737.  var    var    country information
  3738. --------U-2F14FF-----------------------------
  3739. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  3740.     AX = 14FFh
  3741.     BX = code page
  3742. Return: AX = ???
  3743.     ZF set if AX=0000h
  3744. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3745.       or FFh on entry.
  3746.     passes codepage preparation request to each character device supporting
  3747.       the generic IOCTL call
  3748. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  3749. --------U-2F1500-----------------------------
  3750. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  3751.     AX = 1500h
  3752. Return: AX = FFFFh
  3753.     ES:DI -> ??? (graphics data?)
  3754. Note:    this installation check conflicts with the CD-ROM Extensions
  3755.       installation check; moved to AX=AC00h in later versions
  3756. SeeAlso: AX=AC00h
  3757. --------d-2F1500BX0000-----------------------
  3758. INT 2F - CD-ROM - INSTALLATION CHECK
  3759.     AX = 1500h
  3760.     BX = 0000h
  3761. Return: BX = number of CD-ROM drive letters used
  3762.     CX = starting drive letter (0=A:)
  3763. Notes:    this installation check DOES NOT follow the format used by other
  3764.       software
  3765.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  3766.       installation check
  3767. SeeAlso: INT 2F/AX=D000h"Lotus"
  3768. --------d-2F1501-----------------------------
  3769. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  3770.     AX = 1501h
  3771.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  3772. Return: buffer filled, for each drive letter
  3773.       BYTE    subunit number in driver
  3774.       DWORD address of device driver header
  3775. --------d-2F1502-----------------------------
  3776. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  3777.     AX = 1502h
  3778.     ES:BX -> 38-byte buffer for name of copyright file
  3779.     CX = drive number (0=A:)
  3780. Return: CF set if drive is not a CD-ROM drive
  3781.         AX = 000Fh (invalid drive)
  3782.     CF clear if successful
  3783. SeeAlso: AX=1503h
  3784. --------d-2F1503-----------------------------
  3785. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  3786.     AX = 1503h
  3787.     ES:BX -> 38-byte buffer for name of abstract file
  3788.     CX = drive number (0=A:)
  3789. Return: CF set if drive is not a CD-ROM drive
  3790.         AX = 000Fh (invalid drive)
  3791.     CF clear if successful
  3792. SeeAlso: AX=1502h,AX=1504h
  3793. --------d-2F1504-----------------------------
  3794. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  3795.     AX = 1504h
  3796.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  3797.     CX = drive number (0=A:)
  3798. Return: CF set if drive is not a CD-ROM drive
  3799.         AX = 000Fh (invalid drive)
  3800.     CF clear if successful
  3801. SeeAlso: AX=1502h,AX=1503h
  3802. --------d-2F1505-----------------------------
  3803. INT 2F - CD-ROM - READ VTOC
  3804.     AX = 1505h
  3805.     ES:BX -> 2048-byte buffer
  3806.     CX = drive number (0=A:)
  3807.     DX = sector index (0=first volume descriptor,1=second,...)
  3808. Return: CF set on error
  3809.         AX = error code (15=invalid drive,21=not ready)
  3810.     CF clear if successful
  3811.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  3812. --------d-2F1506-----------------------------
  3813. INT 2F - CD-ROM - TURN DEBUGGING ON
  3814.     AX = 1506h
  3815.     BX = debugging function to enable
  3816. Note:    reserved for development
  3817. SeeAlso: AX=1507h
  3818. --------d-2F1507-----------------------------
  3819. INT 2F - CD-ROM - TURN DEBUGGING OFF
  3820.     AX = 1507h
  3821.     BX = debugging function to disable
  3822. Note:    reserved for development
  3823. SeeAlso: AX=1506h
  3824. --------d-2F1508-----------------------------
  3825. INT 2F - CD-ROM - ABSOLUTE DISK READ
  3826.     AX = 1508h
  3827.     ES:BX -> buffer
  3828.     CX = drive number (0=A:)
  3829.     SI:DI = starting sector number
  3830.     DX = number of sectors to read
  3831. Return: CF set on error
  3832.         AL = error code (15=invalid drive,21=not ready)
  3833.     CF clear if successful
  3834. SeeAlso: AX=1509h
  3835. --------d-2F1509-----------------------------
  3836. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  3837.     AX = 1509h
  3838.     ES:BX -> buffer
  3839.     CX = drive number (0=A:)
  3840.     SI:DI = starting sector number
  3841.     DX = number of sectors to write
  3842. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  3843. SeeAlso: AX=1508h
  3844. --------d-2F150A-----------------------------
  3845. INT 2F - CD-ROM - RESERVED
  3846.     AX = 150Ah
  3847. --------d-2F150B-----------------------------
  3848. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  3849.     AX = 150Bh
  3850.     CX = drive number (0=A:)
  3851. Return: BX = ADADh if MSCDEX.EXE installed
  3852.         AX = 0000h if drive not supported
  3853.         nonzero if supported
  3854. SeeAlso: AX=150Dh
  3855. --------d-2F150C-----------------------------
  3856. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  3857.     AX = 150Ch
  3858. Return: BH = major version
  3859.     BL = minor version
  3860. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  3861. --------d-2F150D-----------------------------
  3862. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  3863.     AX = 150Dh
  3864.     ES:BX -> buffer for drive letter list (1 byte per drive)
  3865. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  3866.     to the drive in the same position for function 1501h
  3867. SeeAlso: AX=150Bh
  3868. --------d-2F150E-----------------------------
  3869. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  3870.     AX = 150Eh
  3871.     BX = subfunction
  3872.         00h get preference
  3873.         DX = 0000h
  3874.         Return: DX = preference settings
  3875.         01h set preference
  3876.         DH = volume descriptor preference
  3877.             01h = primary volume descriptor
  3878.             02h = supplementary volume descriptor
  3879.         DL = supplementary volume descriptor preference
  3880.             01h = shift-Kanji
  3881.     CX = drive number (0=A:)
  3882. Return: CF set on error
  3883.         AX = error code (15=invalid drive,1=invalid function)
  3884.     CF clear if successful
  3885. --------d-2F150F-----------------------------
  3886. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  3887.     AX = 150Fh
  3888.     CL = drive number (0=A:)
  3889.     CH bit 0 = copy flag
  3890.         clear if direct copy
  3891.         set if copy to structure which removed ISO/High Sierra diffs
  3892.     ES:BX -> ASCIZ path name
  3893.     SI:DI -> buffer for directory entry (see below)
  3894.          minimum 255 bytes for direct copy
  3895. Return: CF set on error
  3896.         AX = error code
  3897.     CF clear if successful
  3898.         AX = disk format (0=High Sierra,1=ISO 9660)
  3899.  
  3900. Format of directory entry (direct copy):
  3901. Offset    Size    Description
  3902.  00h    BYTE  length of directory entry
  3903.  01h    BYTE  length of XAR in Logical Block Numbers
  3904.  02h    DWORD LBN of data, Intel (little-endian) format
  3905.  06h    DWORD LBN of data, Motorola (big-endian) format
  3906.  0Ah    DWORD length of file, Intel format
  3907.  0Eh    DWORD length of file, Motorola format
  3908. ---High Sierra---
  3909.  12h  6 BYTEs date and time
  3910.  18h    BYTE  bit flags
  3911.  19h    BYTE  reserved
  3912. ---ISO 9660---
  3913.  12h  7 BYTEs date and time
  3914.  19h    BYTE  bit flags
  3915. ---both formats---
  3916.  1Ah    BYTE  interleave size
  3917.  1Bh    BYTE  interleave skip factor
  3918.  1Ch    WORD  volume set sequence number, Intel format
  3919.  1Eh    WORD  volume set sequence number, Motorola format
  3920.  20h    BYTE  length of file name
  3921.  21h  N BYTEs file name
  3922.     BYTE (optional) padding if filename is odd length
  3923.       N BYTEs system data
  3924.  
  3925. Format of directory entry (canonicalized):
  3926. Offset    Size    Description
  3927.  00h    BYTE    length of XAR in Logical Block Numbers
  3928.  01h    DWORD    Logical Block Number of file start
  3929.  05h    WORD    size of disk in logical blocks
  3930.  07h    DWORD    file length in bytes
  3931.  0Bh  7 BYTEs    date and time
  3932.  12h    BYTE    bit flags
  3933.  13h    BYTE    interleave size
  3934.  14h    BYTE    interleave skip factor
  3935.  15h    WORD    volume set sequence number
  3936.  17h    BYTE    length of file name
  3937.  18h 38 BYTEs    ASCIZ filename
  3938.  3Eh    WORD    file version number
  3939.  40h    BYTE    number of bytes of system use data
  3940.  41h 220 BYTEs    system use data
  3941. --------d-2F1510-----------------------------
  3942. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  3943.     AX = 1510h
  3944.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  3945.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  3946. --------W-2F1600-----------------------------
  3947. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  3948.     AX = 1600h
  3949. Return: AL = status
  3950.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  3951.         01h Windows/386 2.x running
  3952.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  3953.          mode nor Windows/386 2.x running) (obsolete--see note)
  3954.         FFh Windows/386 2.x running
  3955.     AL = anything else
  3956.         AL = Windows major version number >= 3
  3957.         AH = Windows minor version number
  3958. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  3959.       drivers, TSRs, and applications) to cooperate with multitasking
  3960.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  3961.     certain calls are also supported in the Microsoft 80286 DOS extender in
  3962.       Windows standard mode
  3963.     this function served as the installation check and AX=1610h served to
  3964.       get the driver entry point for XMS version 1, which is now obsolete.
  3965.       Use AX=4300h and AX=4310h instead
  3966. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  3967. Index:    installation check;XMS version 1
  3968. --------W-2F1602-----------------------------
  3969. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  3970.     AX = 1602h
  3971. Return: ES:DI -> Windows/386 2.x API procedure entry point
  3972. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  3973.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  3974.         AX = 0000h
  3975.         ES:DI -> return address
  3976.         JUMP to address returned from INT 2F/AX=1602h
  3977.     After JUMP, at return address:
  3978.         BX = current VM ID.
  3979. SeeAlso: AX=C020h
  3980. --------W-2F1603-----------------------------
  3981. INT 2F - MS Windows/386 - GET INSTANCE DATA
  3982.     AX = 1603h
  3983. Return: AX = 5248h ('RH') if supported
  3984.         DS:SI -> Windows/386 instance data (see below)
  3985. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  3986.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  3987.       supported, as is the case in DOS versions prior to 5.0
  3988.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3989.       this function, DOSMGR's behavior, and instancing in general
  3990. SeeAlso: AX=1607h/BX=0015h
  3991.  
  3992. Format of Windows/386 instance data:
  3993. Offset    Size    Description
  3994.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  3995.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  3996.         0000h if not applicable
  3997.  04h    WORD    number of instance data entries (max 32)
  3998.  06h    Array of instance data entries
  3999.     Offset    Size    Description
  4000.      00h    WORD    segment (0002h = DOS kernel)
  4001.      02h    WORD    offset
  4002.      04h    WORD    size
  4003. --------W-2F1605-----------------------------
  4004. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  4005.     AX = 1605h
  4006.     ES:BX = 0000h:0000h
  4007.     DS:SI = 0000h:0000h
  4008.     CX = 0000h
  4009.     DX = flags
  4010.         bit 0 = 0 if Windows enhanced-mode initialization
  4011.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  4012.         bits 1-15 reserved (undefined)
  4013.     DI = version number (major in upper byte, minor in lower)
  4014. Return: CX = 0000h if okay for Windows to load
  4015.     CX <> 0 if Windows should not load
  4016.     ES:BX -> startup info structure (see below)
  4017.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  4018. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  4019.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  4020.       driver or TSR can watch for this broadcast and return the appropriate
  4021.       values.  If the driver or TSR returns CX <> 0, it is also its
  4022.       responsibility to display an error message.
  4023.     each handler must first chain to the prior INT 2F handler with
  4024.       registers unchanged before processing the call
  4025.     if the handler requires local data on a per-VM basis, it must store the
  4026.       returned ES:BX in the "next" field of a startup info structure and
  4027.       return a pointer to that structure in ES:BX
  4028.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  4029.       already nonzero, the TSR must fail the initialization by setting CX
  4030.       nonzero
  4031. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  4032.  
  4033. Format of Startup Information Structure:
  4034. Offset    Size    Description
  4035.  00h  2 BYTEs    major, minor version of info structure
  4036.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  4037.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  4038.  0Ah    DWORD    virtual device reference data (see below)
  4039.         (only used if above nonzero)
  4040.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  4041.  
  4042. Format of one Instance Item in array:
  4043. Offset    Size    Description
  4044.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  4045.  04h    WORD    size of instance data
  4046.  
  4047. Format of Virtual Device Reference Data:
  4048. Offset    Size    Description
  4049.  00h    DWORD    physical address of ??? or 00000000h
  4050.  04h    DWORD    physical address of ??? table
  4051.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  4052.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  4053.         00000000h = end of table
  4054. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  4055.       chain, the second pointer to a field of 40h bytes followed by a
  4056.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  4057.       the start segment of the UMB area
  4058.  
  4059. Virtual mode enable/disable procedure called with:
  4060.     AX = 0000h disable V86 mode
  4061.     AX = 0001h enable V86 mode
  4062.     interrupts disabled
  4063. Return: CF set on error
  4064.     CF clear if successful
  4065.     interrupts disabled
  4066. --------W-2F1606-----------------------------
  4067. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  4068.     AX = 1606h
  4069.     DX = flags
  4070.         bit 0 = 0 if Windows enhanced-mode exit
  4071.         bit 0 = 1 if Microsoft 286 DOS extender exit
  4072.         bits 1-15 reserved (undefined)
  4073. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  4074.       broadcast will be issued immediately.
  4075.     this call will be issued in real mode
  4076. SeeAlso: AX=1605h,AX=1609h
  4077. --------W-2F1607-----------------------------
  4078. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  4079.     AX = 1607h
  4080.     BX = virtual device ID (see INT 2F/AX=1684h)
  4081.     CX = (usually) callout subfunction
  4082. Return: (usually) AX,BX,CX,DX,ES contain results
  4083. Notes:    more of a convention than an API, this call specifies a standard
  4084.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  4085.       to DOS device drivers and TSRs
  4086.     see below for details on several virtual devices
  4087. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  4088. SeeAlso: AX=1684h,AX=C020h
  4089. --------W-2F1607BX0006-----------------------
  4090. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  4091.     AX = 1607h
  4092.     BX = 0006h (VxD identifier of "V86MMGR")
  4093.     CX = 0000h
  4094. Return: AX = status
  4095.         0000h if local A20 state changed
  4096.         1607h if A20 unchanged
  4097.         other if global A20 state changed
  4098. --------W-2F1607BX000C-----------------------
  4099. INT 2F - MS Windows - "VMD" VIRTUAL DEVICE API
  4100.     AX = 1607h
  4101.     BX = 000Ch (VxD identifier of "VMD")
  4102. Return: CX = nonzero if mouse driver already virtualized
  4103. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  4104.       nonzero; if yes, it will not automatically virtualize the mouse
  4105.       driver.  This would be used if MOUSE.COM already virtualizes
  4106.       itself using the Windows API.
  4107. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  4108. --------W-2F1607BX0014-----------------------
  4109. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  4110.     AX = 1607h
  4111.     BX = 0014H (VxD identifier of "VNETBIOS")
  4112. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  4113.         command code (see below)
  4114. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  4115.       the NetBIOS has an extensions Windows should know about
  4116. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0015h
  4117.  
  4118. Values for action code:
  4119.  00h    "VN_Unknown" unknown command
  4120.  04h    "VN_No_Map"  no memory mapping necessary
  4121.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  4122.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  4123.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  4124.  14h    "VN_Chain_Send"     the chain-send command
  4125.  18h    "VN_Cancel"    special case for cancel command
  4126.  1Ch    "VN_Buffer_In"    buffer is incoming
  4127.  20h    "VN_Buffer_Out" buffer is outgoing
  4128.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  4129. --------D-2F1607BX0015-----------------------
  4130. INT 2F - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  4131.     AX = 1607h
  4132.     BX = 0015h (VxD identifier of "DOSMGR")
  4133.     CX = function
  4134.         0000h query instance processing
  4135.         DX = 0000h
  4136.         Return: CX = state
  4137.                 0000h not instanced
  4138.                 other instanced (DOS 5+ kernel returns 0001h)
  4139.                 DX = segment of DOS drivers or 0000h for
  4140.                     default of 0070h
  4141.                 ES:BX -> patch table (see below)
  4142.         0001h set patches in DOS
  4143.         DX = bit mask of patch requests
  4144.             bit 0 enable critical sections
  4145.             bit 1 NOP setting/checking user ID
  4146.             bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
  4147.             bit 3 trap stack fault in "SYSINIT" to WIN386
  4148.             bit 4 BIOS patch to trap "Insert disk X:" to WIN386
  4149.         Return: AX = B97Ch
  4150.             BX = bit mask of patches applied
  4151.             DX = A2ABh
  4152.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  4153.         DX = bit mask of patch requests (see function 0001h)
  4154.         0003h get size of DOS data structures
  4155.         DX = bit mask of request (only one bit can be set)
  4156.             bit 0: Current Directory Structure size
  4157.         Return: if supported request:
  4158.                 AX = B97Ch
  4159.                 CX = size in bytes of requested structure
  4160.                 DX = A2ABh
  4161.             else:
  4162.                 all registers preserved
  4163.         0004h determine instanced data structures
  4164.         Return: AX = B97Ch if supported
  4165.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  4166.             BX = bit mask of instanced items
  4167.                 bit 0: CDS
  4168.                 bit 1: SFT
  4169.                 bit 2: device list
  4170.                 bit 3: DOS swappable data area
  4171.         0005h get device driver size
  4172.         ES = segment of device driver
  4173.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  4174.             DX:AX = A2ABh:B97Ch if successful
  4175.                 BX:CX = size of device driver in bytes
  4176. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  4177.       been instanced via this API and will not perform its own default
  4178.       instancing of the normal DOS/BIOS data if so; if this API is not
  4179.       supported, DOSMGR will also try to access instancing data through
  4180.       INT 2F/AX=1603h
  4181.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  4182.       tables of instancing information for earlier versions of DOS
  4183.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  4184.       DOSMGR's behavior and instancing in general
  4185. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  4186.  
  4187. Format of patch table:
  4188. Offset    Size    Description
  4189.  00h  2 BYTEs    DOS version (major, minor)
  4190.  02h    WORD    offset in DOS data segment of "SAVEDS"
  4191.  04h    WORD    offset in DOS data segment of "SAVEBX"
  4192.  06h    WORD    offset in DOS data segment of InDOS flag
  4193.  08h    WORD    offset in DOS data segment of User ID word
  4194.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  4195.         critical section calls (see INT 2A/AH=80h)
  4196.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  4197.         containing segment of last MCB in conventional memory
  4198. --------E-2F1607BX22C0-----------------------
  4199. INT 2F - Rational Systems DOS/4GW - ???
  4200.     AX = 1607h
  4201.     BX = 22C0h
  4202.     ???
  4203. Return: ???
  4204. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  4205. --------W-2F1608-----------------------------
  4206. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  4207.     AX = 1608h
  4208. Notes:    called after all installable devices have been initialized
  4209.     real-mode software may be called between the Windows enhanced-mode init
  4210.       call (AX=1605h) and this call; the software must detect this
  4211.       situation
  4212. SeeAlso: AX=1605h,AX=1609h
  4213. --------W-2F1609-----------------------------
  4214. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  4215.     AX = 1609h
  4216. Note:    called at the beginning of a normal exit sequence; not made in the
  4217.       event of a fatal system crash
  4218. SeeAlso: AX=1606h,AX=1608h
  4219. --------W-2F160A-----------------------------
  4220. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  4221.     AX = 160Ah
  4222. Return: AX = 0000h if call supported
  4223.         BX = version (BH=major, BL=minor)
  4224.         CX = mode (0002h = standard, 0003h = enhanced)
  4225. SeeAlso: AX=1600h,AX=4680h
  4226. --------W-2F160B-----------------------------
  4227. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  4228.     AX = 160Bh
  4229.     ES:DI -> communication structure (see below) or 0000h:0000h
  4230. Return: ES:DI -> communication structure
  4231. Desc:    this call allows Windows-aware TSRs to make themselves known to
  4232.       Windows.
  4233. Note:    the TSR should allocate a communication structure, place the given
  4234.       ES:DI pointer in the first field, and return a pointer to the new
  4235.       structure
  4236. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  4237.  
  4238. Format of TSR-to-Windows communication structure:
  4239. Offset    Size    Description
  4240.  00h    DWORD    pointer to next structure
  4241.  04h    WORD    PSP segment
  4242.  06h    WORD    API version ID (0100h)
  4243.  08h    WORD    EXEC flags
  4244.         bit 0: "WINEXEC"
  4245.         bit 1: "LOADLIBRARY"
  4246.         bit 2: "OPENDRIVER"
  4247.  0Ah    WORD    "exec_cmd_show"
  4248.  0Ch    DWORD    "exec_cmd"
  4249.  10h  4 BYTEs    reserved (0)
  4250.  14h    DWORD    pointer to TSR ID block (see below)
  4251.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  4252.  
  4253. Format of Norton Utilities 6.0 TSR ID block:
  4254. Offset    Size    Description
  4255.  00h    WORD    length of name string
  4256.  02h  N BYTEs    name of TSR's executable
  4257. --------W-2F160C-----------------------------
  4258. INT 2F - MS Windows 3.1 - DETECT ROMs
  4259.     AX = 160Ch
  4260.     ???
  4261. Return: ???
  4262. Note:    used by ROM Windows
  4263. SeeAlso: AX=160Bh
  4264. --------m-2F1610-----------------------------
  4265. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  4266.     AX = 1610h
  4267.     details unavailable
  4268. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  4269.       obsolete.  Use AX=4300h and AX=4310h instead
  4270. SeeAlso: AX=1600h,AX=4310h
  4271. --------W-2F1680-----------------------------
  4272. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  4273.     AX = 1680h
  4274. Return: AL = 00h if the call is supported
  4275.     AL = 80h (unchanged) if the call is not supported
  4276. Notes:    programs can use this function in idle loops to enhance performance
  4277.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  4278.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  4279.       applications
  4280.     does not block the program; it just gives up the remainder of the time
  4281.       slice
  4282.     should not be used by Windows-specific programs
  4283. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  4284. --------W-2F1681-----------------------------
  4285. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  4286.     AX = 1681h
  4287. Notes:    used to prevent a task switch from occurring
  4288.     should be followed by an INT 2F/AX=1682h call as soon as possible
  4289.     nested calls are allowed, and must be followed by an appropriate number
  4290.       of "end critical section" calls
  4291.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  4292.       increment by hand.
  4293. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  4294. --------W-2F1682-----------------------------
  4295. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  4296.     AX = 1682h
  4297. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  4298.       and decrement by hand, taking care not to decrement InDOS flag
  4299.       through zero
  4300. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  4301. --------W-2F1683-----------------------------
  4302. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  4303.     AX = 1683h
  4304. Return: BX = current virtual machine (VM) ID
  4305. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  4306.     VM IDs are reused when VMs are destroyed
  4307.     an ID of 0 will never be returned
  4308. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  4309. --------W-2F1684-----------------------------
  4310. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  4311.     AX = 1684h
  4312.     BX = virtual device (VxD) ID (see below)
  4313.     ES:DI = 0000h:0000h
  4314. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  4315. Note:    some Windows enhanced-mode virtual devices provide services that
  4316.       applications can access.  For example, the Virtual Display Device
  4317.       (VDD) provides an API used in turn by WINOLDAP.
  4318. SeeAlso: AX=1683h
  4319.  
  4320. Values for VxD ID:
  4321. Value  Name    CallOut V86 PM    Description
  4322.  01h    VMM            Virtual Machine Manager
  4323.  02h    Debug
  4324.  03h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  4325.  04h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  4326.  05h    VTD        Y  Y    Virtual Timer Device
  4327.  06h    V86MMGR        N  N    Virtual 8086 Mode Device
  4328.  07h    PAGESWAP    N  N    Paging Device
  4329.  08h    Parity        N  N    Parity-check trapper
  4330.  09h    Reboot        N  Y    Ctrl-Alt-Del handler
  4331.  0Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  4332.  0Bh    VSD        N  N    Virtual Sound Device
  4333.  0Ch    VMD      Y    Y  Y    Virtual Mouse Device
  4334.  0Dh    VKD        N  Y    Virtual Keyboard Device
  4335.  0Eh    VCD        N  Y    Virtual COMM Device
  4336.  0Fh    VPD            Virtual Printer Device
  4337.  10h    VHD            Virtual Hard Disk Device (Windows 3.0)
  4338.  10h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  4339.  11h    VMCPD            Virtual Math CoProcessor Device
  4340.  12h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  4341.  13h    BIOSXLAT        Map ROM BIOS API between prot & V86 mode
  4342.  14h    VNETBIOS  Y    N  N    Virtual NetBIOS Device
  4343.  15h    DOSMGR        Y  N
  4344.  16h    WINLOAD
  4345.  17h    SHELL        N  Y
  4346.  18h    VMPoll        N  N
  4347.  19h    VPROD
  4348.  1Ah    DOSNET        N  N    assures network integrity across VMs
  4349.  1Bh    VFD        N  N    Virtual Floppy Device
  4350.  1Ch    VDD2            Secondary display adapter
  4351.  1Dh    WINDEBUG    N  Y
  4352.  1Eh    TSRLoad            TSR instance utility
  4353.  1Fh    BiosHook        BIOS interrupt hooker VxD
  4354.  20h    Int13       N    N  N
  4355.  21h    PageFile    N  Y    Paging File device
  4356.  22h    SCSI
  4357.  23h    MCA_POS
  4358.  24h    SCSIFD            SCSI FastDisk device
  4359.  25h    VPEND            Pen device
  4360.  26h    APM            Advanced Power Management
  4361. 442h    VTDAPI
  4362. 444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  4363. 1025h    MMD
  4364. 2860h    COMMTASK   N    N  Y    Windows 386-mode preemptive tasker by James
  4365.                 A. Kenemuth of Interabang Computing
  4366. 28C0h    VXD       N    Y  Y    Generic VxD for real and protected mode by
  4367.                 Andrew Schulman in MSJ February 1993
  4368. 3098h    VstlthD       N    N  N    for QEMM Stealth ROM mode
  4369. 7FE0h    VWFD       N    Y  Y    ??? by Neil Sandlin of Microsoft
  4370. 7FE1h    VWATCHD       N    Y  Y    basic driver w/ no functionality except tracing
  4371.                 by Keith Jin of Microsoft PSS
  4372. 7FE5h    VFINTD       N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  4373.                 Sandlin of Microsoft
  4374. 7FE7h    VMPAGES       N    Y  Y    demonstration of exporting VxD services, by
  4375.                 Neil Sandlin of Microsoft
  4376. 7FE9h    VIdleD       N    N  N    demonstration of Call_When_Idle function, by
  4377.                 Bernie McIlroy of Microsoft
  4378. 7FEBh    VMIOD       N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  4379.                 Sandlin of Microsoft
  4380. 7FEDh    VMIRQD       N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  4381.                 Sandlin of Microsoft
  4382. Note:    The high bit of the VxD ID is reserved for future use. The
  4383.     next 10 bits are the OEM # which is assigned by Microsoft. The
  4384.     low 5 bits are the device number.  Naturally, this scheme has not
  4385.     been adhered to since there are now more than 32 different VxDs.
  4386.  
  4387. Call VTD.386 entry point with:
  4388.     AX = 0000h get VTD version number
  4389.         Return: AH = major version
  4390.             AL = minor version
  4391.     AX = 0100h get current clock tick time
  4392.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  4393.                 started
  4394.     AX = 0101h get current system time in milliseconds
  4395.         Return: EAX = time in milliseconds that Windows has been running
  4396.     AX = 0102h get current virtual machine time
  4397.         Return: EAX = cumulative amount of time the virtual machine has
  4398.             been active, in milliseconds
  4399. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  4400.       be called
  4401.  
  4402. Call VADMAD entry point with:
  4403.     DX = operation
  4404.         0000h set VADMAD mode
  4405.         AX = desired mode
  4406.         0001h set VADMAD channel
  4407.         AX = desired channel
  4408. Note:    after setting mode/channel, start the DMA operation with an OUT to
  4409.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  4410. --------W-2F1685-----------------------------
  4411. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  4412.     AX = 1685h
  4413.     BX = VM ID of virtual machine to switch to
  4414.     CX = flags
  4415.         bit 0 wait until interrupts enabled
  4416.         bit 1 wait until critical section unowned
  4417.         bits 2-15 reserved (zero)
  4418.     DX:SI = priority boost (see VMM.INC)
  4419.     ES:DI -> FAR procedure to callback
  4420. Return: CF set on error
  4421.         AX = error code
  4422.         01h invalid VM ID
  4423.         02h invalid priority boost
  4424.         03h invalid flags
  4425.     CF clear if successful
  4426.         event will be or has been called
  4427. Notes:    some DOS devices, such as networks, need to call functions in a
  4428.       specific VM. This call forces the appropriate VM to be installed.
  4429.     the callback procedure must preserve all registers and return with IRET
  4430. SeeAlso: AX=1683h,INT 15/AX=1117h
  4431. --------E-2F1686-----------------------------
  4432. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  4433.     AX = 1686h
  4434. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  4435.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  4436. SeeAlso: AX=1687h
  4437. --------E-2F1687-----------------------------
  4438. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  4439.     AX = 1687h
  4440. Return: AX = 0000h if installed
  4441.         BX = flags
  4442.         bit 0: 32-bit programs supported
  4443.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4444.         DH = DPMI major version
  4445.         DL = two-digit DPMI minor version (binary)
  4446.         SI = number of paragraphs of DOS extender private data
  4447.         ES:DI -> DPMI mode-switch entry point
  4448.     AX nonzero if not installed
  4449. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  4450. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  4451.  
  4452. Call mode switch entry point with:
  4453.     AX = flags
  4454.         bit 0: set if 32-bit program
  4455.     ES = real mode segment of buffer for DPMI private data (ignored if
  4456.         SI was zero)
  4457. Return: CF set on error
  4458.         program still in real mode
  4459.         AX = error code (DPMI 1.0+)
  4460.            8011h unable to allocate all necessary descriptors
  4461.            8021h 32-bit program specified, but 16-bit DPMI host
  4462.     CF clear if successful
  4463.         CS = 16-bit selector corresponding to real-mode CS
  4464.         SS = selector corresponding to real-mode SS (64K limit)
  4465.         DS = selector corresponding to real-mode DS (64K limit)
  4466.         ES = selector to program's PSP (100h byte limit)
  4467.         FS = GS = 0
  4468.         high word of ESP = 0 if 32-bit program
  4469.         program now in protected mode
  4470. Note:    this entry point is only called for the initial switch to protected
  4471.       mode
  4472. --------W-2F1688-----------------------------
  4473. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT
  4474.     AX = 1688h
  4475. Return: AX = status??? (0000h for 386MAX)
  4476.     BX = selector for ???
  4477. --------W-2F1689-----------------------------
  4478. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  4479.     AX = 1689h
  4480.     ???
  4481. Return: ???
  4482. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  4483. --------E-2F168A-----------------------------
  4484. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  4485.     AX = 168Ah
  4486.     DS:(E)SI = selector:offset of ASCIZ vendor name
  4487. Return: AL = status
  4488.         00h successful
  4489.            ES:(E)DI -> extended API entry point
  4490.         8Ah unsuccessful
  4491. Notes:    the vendor name is used to determine which entry point to return; it is
  4492.       case-sensitive
  4493.     available in protected mode only
  4494.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  4495.     this call is present but not documented for DPMI 0.9
  4496.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  4497.       other than the MS-DOS one gracefully, producing an unhandled
  4498.       exception report; this has been fixed in the Borland Pascal 7 version
  4499. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  4500.  
  4501. Vendor names:
  4502.  "MS-DOS"    ??? and 386MAX v6.00+
  4503.  "386MAX"    386MAX v6.00+
  4504.  "HELIX_DPMI"    Helix Netroom's DPMI server
  4505. --------W-2F168B-----------------------------
  4506. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  4507.     AX = 168Bh
  4508.     BX = virtual machine ID (see AX=1683h)
  4509. Return: AL = 00h if focus set to specified VM
  4510. Note:    documented on the Microsoft Developer's Network CD-ROM
  4511. SeeAlso: AX=1683h
  4512. --------W-2F168C-----------------------------
  4513. INT 2F - MS Windows 3.1 - RESTART COMMAND
  4514.     AX = 168Ch
  4515.     ???
  4516. Return: ???
  4517. Note:    WIN.COM executes specified application
  4518. --------W-2F1700-----------------------------
  4519. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  4520.     AX = 1700h
  4521. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  4522.     AX <> 1700h
  4523.         AL = WINOLDAP major version
  4524.         AH = WINOLDAP minor version
  4525. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  4526.       "old" (character-mode) application access to Dynamic Data Exchange,
  4527.       menus, and the Windows clipboard.
  4528. Note:    this installation check DOES NOT follow the format used by other
  4529.       software of returning AL=FFh
  4530. Index:    installation check;WINOLDAP
  4531. --------W-2F1701-----------------------------
  4532. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  4533.     AX = 1701h
  4534. Return: AX <> 0     success
  4535.     AX = 0     clipboard is already open
  4536. --------W-2F1702-----------------------------
  4537. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  4538.     AX = 1702h
  4539. Return: AX <> 0     clipboard has been emptied
  4540.     AX = 0     failure
  4541. --------W-2F1703-----------------------------
  4542. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  4543.     AX = 1703h
  4544.     DX = clipboard format supported by WinOldAp:
  4545.         01h text
  4546.         02h bitmap
  4547.         03h metafile picture
  4548.         04h SYLK
  4549.         05h DIF
  4550.         06h TIFF
  4551.         07h OEM text
  4552.         81h DSP text
  4553.         82h DSP bitmap
  4554.     ES:BX -> data (see below)
  4555.     SI:CX = size of data
  4556. Return: AX <> 0 data copied into the Clipboard
  4557.     AX = 0 failure
  4558.  
  4559. Format of bitmap:
  4560. Offset    Size    Description
  4561.  00h    WORD    type (0000h)
  4562.  02h    WORD    width of bitmap in pixels
  4563.  04h    WORD    height of bitmap in pixels
  4564.  06h    WORD    bytes per line
  4565.  08h    BYTE    number of color planes
  4566.  09h    BYTE    number of adjacent color bits in pixel
  4567.  0Ah    DWORD    pointer to start of data
  4568.  0Eh    WORD    width in 0.1mm units
  4569.  10h    WORD    height in 0.1mm units
  4570.  12h  N BYTEs    bitmap data
  4571.  
  4572. Format of metafile picture:
  4573. Offset    Size    Description
  4574.  00h    WORD    mapping mode
  4575.  02h    WORD    X extent
  4576.  04h    WORD    Y extent
  4577.  06h    WORD    picture data
  4578. --------W-2F1704-----------------------------
  4579. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  4580.     AX = 1704h
  4581.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4582. Return:     DX:AX = size of data in bytes, including any headers
  4583. Failure: DX:AX = 0  no data in this format in the Clipboard
  4584. --------W-2F1705-----------------------------
  4585. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  4586.     AX = 1705h
  4587.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4588.     ES:BX -> buffer
  4589. Return: AX <> 0     success
  4590.     AX = 0     error, or no data in this format in Clipboard
  4591. --------W-2F1708-----------------------------
  4592. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  4593.     AX = 1708h
  4594. Return: AX <> 0 success
  4595.     AX = 0 failure
  4596. --------W-2F1709-----------------------------
  4597. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  4598.     AX = 1709h
  4599.     SI:CX = desired size in bytes
  4600. Return: DX:AX = number of bytes in largest block of free memory
  4601. Note:    WinOldAp is responsible for including the size of any headers
  4602. --------W-2F170A-----------------------------
  4603. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  4604.     AX = 170Ah
  4605.     DX = GDI information index
  4606.         00h device driver version
  4607.         02h device classification
  4608.         04h width in mm
  4609.         06h height in mm
  4610.         08h width in pixels
  4611.         0Ah height in pixels
  4612.         0Ch bits per pixel
  4613.         0Eh number of bit planes
  4614.         10h number of brushes supported by device
  4615.         12h number of pens supported by device
  4616.         14h number of markers supported by device
  4617.         16h number of fonts supported by device
  4618.         18h number of colors
  4619.         1Ah size required for device descriptor
  4620.         1Ch curve capabilities
  4621.         1Eh line capabilities
  4622.         20h polygon capabilities
  4623.         22h text capabilities
  4624.         24h clipping capabilities
  4625.         26h bitblt capabilities
  4626.         28h X aspect
  4627.         2Ah Y aspect
  4628.         2Ch length of hypotenuse of aspect
  4629.         58h logical pixels per inch of width
  4630.         5Ah logical pixels per inch of height
  4631. Return:     AX = integer value of the desired item (see below)
  4632. Note:  This function returns the device-capability bits for the given display
  4633.  
  4634. Values for device classification:
  4635.  00h    vector plotter
  4636.  01h    raster display
  4637.  02h    raster printer
  4638.  03h    raster camera
  4639.  04h    character-stream, PLP
  4640.  05h    Metafile, VDM
  4641.  06h    display-file
  4642.  
  4643. Bitfields for curve capabilities:
  4644.  bit 0    circles
  4645.  bit 1    pie wedges
  4646.  bit 2    chord arcs
  4647.  bit 3    ellipses
  4648.  bit 4    wide lines
  4649.  bit 5    styled lines
  4650.  bit 6    wide styled lines
  4651.  bit 7    interiors
  4652.  
  4653. Bitfields for line capabilities:
  4654.  bit 1    polylines
  4655.  bit 2    markers
  4656.  bit 3    polymarkers
  4657.  bit 4    wide lines
  4658.  bit 5    styled lines
  4659.  bit 6    wide styled lines
  4660.  bit 7    interiors
  4661.  
  4662. Bitfields for polygon capabilities:
  4663.  bit 0    polygons
  4664.  bit 1    rectangles
  4665.  bit 2    trapezoids
  4666.  bit 3    scanlines
  4667.  bit 4    wide borders
  4668.  bit 5    styled borders
  4669.  bit 6    wide styled borders
  4670.  bit 7    interiors
  4671.  
  4672. Bitfields for text capabilities:
  4673.  bit 0    output precision character
  4674.  bit 1    output precision stroke
  4675.  bit 2    clippping precision stroke
  4676.  bit 3    90-degree character rotation
  4677.  bit 4    arbitrary character rotation
  4678.  bit 5    independent X and Y scaling
  4679.  bit 6    double-size
  4680.  bit 7    integer scaling
  4681.  bit 8    continuous scaling
  4682.  bit 9    bold
  4683.  bit 10 italic
  4684.  bit 11 underline
  4685.  bit 12 strikeout
  4686.  bit 13 raster fonts
  4687.  bit 14 vector fonts
  4688.  bit 15 reserved
  4689.  
  4690. Values for clipping capabilities:
  4691.  00h    none
  4692.  01h    clipping to rectangles
  4693.  
  4694. Bitfields for raster capabilities:
  4695.  bit 0    simple bitBLT
  4696.  bit 1    device requires banding support
  4697.  bit 2    device requires scaling support
  4698.  bit 3    supports >64K bitmap
  4699. ----------2F18-------------------------------
  4700. INT 2F U - MS-Manager
  4701.     AH = 18h
  4702.     ???
  4703. Return: ???
  4704. --------l-2F1900-----------------------------
  4705. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  4706.     AX = 1900h
  4707. Return: AL = 00h  not installed
  4708.          FFh  installed
  4709. --------l-2F1901BL00-------------------------
  4710. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  4711.     AX = 1901h
  4712.     BL = 00h if SHELLC transient
  4713.          01h if SHELLC resident
  4714.     DS:DX -> far call entry point for resident SHELLC.EXE
  4715. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  4716. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  4717. --------l-2F1902-----------------------------
  4718. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  4719.     AX = 1902h
  4720.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  4721.          final filename element uppercased
  4722.     DS:DX -> buffer for results
  4723. Return: AL = 00h  failed, either
  4724.           (a) final filename element quoted at ES:DI does not match
  4725.               identity of shell batch file quoted as parameter of most
  4726.               recent call of SHELLB command, or
  4727.           (b) no more Program Start Commands available.
  4728.     AL= FFh     success, then:
  4729.         memory at DS:[DX+1] onwards filled as:
  4730.         DX+1:    BYTE    count of bytes of PSC
  4731.         DX+2: N BYTEs    Program Start Command text
  4732.             BYTE    0Dh terminator
  4733. Explanation: COMMAND.COM executes the result of this call in preference to
  4734.     reading a command from a batch file. Thus the batch file does not
  4735.     advance in execution for so long as SHELLB provides PSCs from its
  4736.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  4737.     menu interface. The final PSC of a sequence is finished with a
  4738.     GOTO COMMON, which causes a loop back in the batch file which called
  4739.     SHELLC so as to execute SHELLC again. The check on batch file name
  4740.     permits PSCs to CALL nested batch files while PSCs are still stacked
  4741.     up for subsequent execution.
  4742. --------l-2F1903-----------------------------
  4743. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  4744.     AX = 1903h
  4745.     ES:DI -> ASCIZ batch file name as for AX=1902h
  4746. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  4747.     AL = 00h if it does not
  4748. --------l-2F1904-----------------------------
  4749. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  4750.     AX = 1904h
  4751. Return: ES:DI -> name of current shell batch file:
  4752.         WORD    number of bytes of name following
  4753.         BYTEs    (8 max) uppercase name of shell batch file
  4754. --------V-2F1A00-----------------------------
  4755. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  4756.     AX = 1A00h
  4757. Return: AL = FFh if installed
  4758. Notes:    AVATAR.SYS also responds to this call
  4759.     documented for DOS 5+, but undocumented for DOS 4.x
  4760. --------V-2F1A00BX414E-----------------------
  4761. INT 2F - ANSIPLUS.SYS - INSTALLATION CHECK
  4762.     AX = 1A00h
  4763.     BX = 414Eh ('AN')
  4764.     CX = 5349h ('SI')
  4765.     DX = 2B2Bh ('++')
  4766. Return: AL = FFh if installed
  4767.         CF clear
  4768.         ES:BX -> INT 29 entry point
  4769. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  4770.       replaces the normal ANSI.SYS is a more powerful version with many
  4771.       additional features
  4772. Note:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  4773.       from the magic values above
  4774. --------V-2F1A00BX4156-----------------------
  4775. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4776.     AX = 1A00h
  4777.     BX = 4156h ('AV')
  4778.     CX = 4154h ('AT')
  4779.     DX = 4152h ('AR')
  4780. Return: AL = FFh if installed
  4781.         CF clear
  4782.         BX = AVATAR protocol level supported
  4783.         CX = driver type
  4784.         0000h AVATAR.SYS
  4785.         4456h DVAVATAR.COM inside DESQview window
  4786.         DX = 0016h
  4787. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4788.       interprets AVATAR command codes in the same way that ANSI interprets
  4789.       ANSI command codes
  4790. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4791.       the magic values
  4792. --------V-2F1A01-----------------------------
  4793. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  4794.     AX = 1A01h
  4795.     CL = function
  4796.         7Fh for GET
  4797.         5Fh for SET
  4798.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  4799. Return: CF set on error
  4800.         AX = error code (many non-standard)
  4801.     CF clear if successful
  4802.         AX destroyed
  4803. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  4804. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  4805. --------V-2F1A02-----------------------------
  4806. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  4807.     AX = 1A02h
  4808.     DS:DX -> parameter block (see below)
  4809. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  4810. SeeAlso: AX=1A01h
  4811.  
  4812. Format of parameter block:
  4813. Offset    Size    Description
  4814.  00h    BYTE    subfunction
  4815.         00h set/reset interlock
  4816.         01h get /L flag
  4817.  01h    BYTE    interlock state
  4818.         00h=reset, 01h=set
  4819.           This interlock prevents some of the ANSI.SYS post-processing
  4820.           in its hook onto INT 10, AH=00h mode set
  4821.  02h    BYTE    (returned)
  4822.         00h if /L not in effect
  4823.         01h if /L in effect
  4824. --------V-2F1A21-----------------------------
  4825. INT 2F - AVATAR.SYS - SET DRIVER STATE
  4826.     AX = 1A21h (AL='!')
  4827.     DS:SI -> command string with one or more state characters
  4828.     CX = length of command string
  4829. Return: CF set on error (invalid subfunction)
  4830.     CF clear if successful
  4831. Note:    the characters in the state string are interpreted left to right, and
  4832.       need not be in any particular order
  4833. SeeAlso: AX=1A3Fh
  4834.  
  4835. Values for state characters:
  4836.  'a'    activate driver
  4837.  'd'    disable driver
  4838.  'f'    use fast screen output
  4839.  'g'    always convert gray keys (+ and -) to function keys
  4840.  'G'    never convert gray keys
  4841.  'l'    convert gray keys only when ScrollLock active
  4842.  's'    use slow screen output
  4843.  't'    Tandy 1000 keyboard (not yet implemented)
  4844. --------V-2F1A3C-----------------------------
  4845. INT 2F U - AVATAR.SYS v0.11 - ???
  4846.     AX = 1A3Ch
  4847.     ???
  4848. Return: CX = 0000h
  4849. --------V-2F1A3E-----------------------------
  4850. INT 2F U - AVATAR.SYS v0.11 - ???
  4851.     AX = 1A3Eh
  4852.     CL = ???
  4853.     CH = ???
  4854.     DL = ???
  4855.     DH = ???
  4856. Return: CL = ???
  4857.     CH = ???
  4858.     DL = ???
  4859.     DH = ???
  4860. --------V-2F1A3F-----------------------------
  4861. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  4862.     AX = 1A3Fh (AL='?')
  4863.     ES:DI -> buffer
  4864.     CX = length of buffer in bytes
  4865. Return: CF clear
  4866.     CX = actual size of returned info
  4867. Note:    the returned information consists of multiple letters whose meanings
  4868.       are described under AX=1A21h
  4869. SeeAlso: AX=1A21h
  4870. --------S-2F1A42BX4156-----------------------
  4871. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  4872.     AX = 1A42h
  4873.     BX = 4156h ('AV')
  4874.     ES:DI -> FAR handler for serial port using IRQ3
  4875.     DS = data segment needed by handler
  4876. Return: AX = 1A42h if ASD not installed
  4877.        = 0000h if no more room
  4878.        else handle to use when uninstalling
  4879. Notes:    the handler need not save/restore registers or signal EOI to the
  4880.       interrupt controller
  4881.     the handler should return AX=0000h if the interrupt was meant for it,
  4882.       and either leave AX unchanged or return a non-zero value otherwise
  4883.     the most recently installed handler will be called first, continuing
  4884.       to earlier handlers until one returns AX=0000h
  4885. SeeAlso: AX=1A43h,AX=1A62h
  4886. --------S-2F1A43BX4156-----------------------
  4887. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  4888.     AX = 1A43h
  4889.     BX = 4156h ('AV')
  4890.     ES:DI -> FAR handler for serial port using IRQ4
  4891.     DS = data segment needed by handler
  4892. Return: AX = 1A43h if ASD not installed
  4893.        = 0000h if no more room
  4894.        else handle to use when uninstalling
  4895. Notes:    (see AX=1A42h)
  4896. SeeAlso: AX=1A42h,AX=1A63h
  4897. --------V-2F1A44BX4156-----------------------
  4898. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  4899.     AX = 1A44h
  4900.     BX = 4156h ('AV')
  4901. Return: AX = 0000h
  4902.     DS = data segment
  4903.     CX = size of data segment
  4904. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  4905.       process under a multitasker hooks this function and provides a
  4906.       separate data segment, AVATAR.SYS becomes fully reentrant.
  4907. SeeAlso: AX=1A21h,AX=1A3Fh
  4908. --------V-2F1A52-----------------------------
  4909. INT 2F U - AVATAR.SYS v0.11 - GET ???
  4910.     AX = 1A52h
  4911.     CX = size of buffer
  4912.     ES:DI -> buffer
  4913. Return: ??? copied into user buffer
  4914. Note:    the maximum size of the data which may be copied is returned by
  4915.       AX=1A72h
  4916. SeeAlso: AX=1A72h
  4917. --------V-2F1A53-----------------------------
  4918. INT 2F U - AVATAR.SYS v0.11 - ???
  4919.     AX = 1A53h
  4920.     CL = ??? (00h-05h)
  4921.     ???
  4922. Return: ???
  4923. --------S-2F1A62BX4156-----------------------
  4924. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  4925.     AX = 1A62h
  4926.     BX = 4156h ('AV')
  4927.     CX = handle for IRQ routine returned by AX=1A42h
  4928. SeeAlso: AX=1A42h,AX=1A63h
  4929. --------S-2F1A63BX4156-----------------------
  4930. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  4931.     AX = 1A63h
  4932.     BX = 4156h ('AV')
  4933.     CX = handle for IRQ routine returned by AX=1A43h
  4934. SeeAlso: AX=1A43h,AX=1A62h
  4935. --------V-2F1A72-----------------------------
  4936. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  4937.     AX = 1A72h
  4938. Return: CX = maximum size of ???
  4939. SeeAlso: AX=1A52h
  4940. --------V-2F1A7B-----------------------------
  4941. INT 2F U - AVATAR.SYS v0.11 - ???
  4942.     AX = 1A7Bh
  4943. Return: AX = 0000h
  4944.     CX = 0000h
  4945. --------V-2F1A7D-----------------------------
  4946. INT 2F U - AVATAR.SYS v0.11 - ???
  4947.     AX = 1A7Dh
  4948. Return: AX = ???
  4949. --------V-2F1AADDX0000-----------------------
  4950. INT 2F U - AVATAR.SYS v0.11 - ???
  4951.     AX = 1AADh
  4952.     DX = 0000h
  4953.     CX = subfunction (00h-0Ch)
  4954.     ???
  4955. Return: AX = 0000h if DX was nonzero
  4956.     ???
  4957. --------m-2F1B00-----------------------------
  4958. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  4959.     AX = 1B00h
  4960. Return: AL = FFh if installed
  4961. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  4962.     This extension hooks onto INT 67/AH=58h and returns from that call data
  4963.       which excludes the physical pages being used by DOS.
  4964. SeeAlso: AH=1Bh"FRAME INFO"
  4965. --------m-2F1B-------------------------------
  4966. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  4967.     AH = 1Bh
  4968.     AL <> 00h
  4969.     DI = hidden physical page number
  4970. Return: AX = FFFFh if failed (no such hidden page)
  4971.     AX = 0000h if OK, then
  4972.          ES = segment of page frame
  4973.          DI = physical page number
  4974. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  4975.     FASTOPEN makes this call with AL = FFh
  4976. SeeAlso: AX=1B00h
  4977. --------V-2F2300-----------------------------
  4978. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  4979.     AX = 2300h
  4980. Return: AH = FFh
  4981. Note:    this installation check does not follow the usual format
  4982. SeeAlso: AH=23h
  4983. --------V-2F23-------------------------------
  4984. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  4985.     AH = 23h
  4986.     AL nonzero
  4987. Return: AH = FFh
  4988.     ES:BX -> graphics data
  4989. SeeAlso: AX=2300h
  4990. --------T-2F2700-----------------------------
  4991. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  4992.     AX = 2700h
  4993. Return: AL = 00h not installed
  4994.        = FFh installed
  4995. --------T-2F2701-----------------------------
  4996. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  4997.     AX = 2701h
  4998. Return: AX = maximum simultaneous tasks
  4999.     BX = index into TASK_IDS of current foreground task
  5000.     CX = currently-active tasks
  5001.     DX = version number (DR-DOS 6.0 = 0001h)
  5002.     ES:SI -> TASK_IDS
  5003.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  5004. Notes:    do not attempt to create a new task if CX == AX
  5005.     the task's index is its position on the task menu, while its ID is the
  5006.       position within the internal task name table
  5007. SeeAlso: AX=2714h,AX=2716h
  5008. --------T-2F2702-----------------------------
  5009. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  5010.     AX = 2702h
  5011. Return: DX = maximum pages INT 67/AH=42h will report available
  5012. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  5013.       amount which is reported as being available at a given time
  5014. SeeAlso: AX=2703h,INT 67/AH=42h
  5015. --------T-2F2703-----------------------------
  5016. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  5017.     AX = 2703h
  5018.     DX = maximum pages INT 67/AH=42h should report available
  5019. Return: DX = new maximum for reporting
  5020. SeeAlso: AX=2702h,INT 67/AH=42h
  5021. --------T-2F2704-----------------------------
  5022. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  5023.     AX = 2704h
  5024.     DL = subfunction
  5025.         00h unregister task manager
  5026.         01h register task manager
  5027. Return: DL = status
  5028.         00h registered
  5029.         01h unregistered
  5030. Notes:    a task manager replaces TaskMAX's menu system with its own user
  5031.       interface; while one is registered, the TaskMAX hotkeys and
  5032.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  5033.     unregister the task manager before terminating it
  5034. SeeAlso: AX=2705h
  5035. Index:    hotkeys;TaskMAX
  5036. --------T-2F2705-----------------------------
  5037. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  5038.     AX = 2705h
  5039.     DL = subfunction
  5040.         00h disable keystrokes for switching to next/prev/specified task
  5041.         01h enable
  5042. Return: nothing
  5043. Note:    should only be called by a registered task manager (see AX=2704h)
  5044. SeeAlso: AX=2704h,AX=2706h
  5045. --------T-2F2706-----------------------------
  5046. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  5047.     AX = 2706h
  5048.     DX = task index (see AX=2701h) of task to be activated
  5049. Return: DX = task index of previously-active task
  5050. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  5051. --------T-2F2707-----------------------------
  5052. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  5053.     AX = 2707h
  5054.     DS:DX -> ASCIZ pathname of executable
  5055.     ES:BX -> parameter block (see below)
  5056.     CX = number of ticks before automatic return to task manager
  5057.         (0000h = run until termination or explicitly switched)
  5058. Return: DX = new task's task index (FFFFh if task terminated)
  5059. SeeAlso: AX=2706h,AX=2708h
  5060.  
  5061. Format of parameter block:
  5062. Offset    Size    Description
  5063.  00h    WORD    reserved, should be 0000h
  5064.  02h    DWORD    pointer to command tail to be copied into child's PSP
  5065.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  5066.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  5067. --------T-2F2708-----------------------------
  5068. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  5069.     AX = 2708h
  5070.     DX = task index
  5071. Return: DX = FFFFh (task deleted)
  5072. Notes:    this call should only be used for abnormal task termination, after
  5073.       first checking for open files with AX=270Ch; should not be used
  5074.       with programs that allocate EMS or XMS memory
  5075.     switches to specified task first
  5076. SeeAlso: AX=2707h
  5077. --------T-2F2709-----------------------------
  5078. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  5079.     AX = 2709h
  5080.     DX = task index
  5081.     DS:SI -> 8-byte name (8 NULs = remove name)
  5082. Return: AL = task flags
  5083.         00h ID unused or task terminated
  5084.         01h ID in use, task name table entry valid
  5085.         81h ID in use, task name fixed
  5086.     BX = task ID
  5087.     ES:DI -> name in task name table (see AX=2701h)
  5088. Note:    the task retains the given name until it terminates or the name is
  5089.       removed by specifying a name of 8 NULs.
  5090. SeeAlso: AX=2701h,AX=2707h
  5091. --------T-2F270A-----------------------------
  5092. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  5093.     AX = 270Ah
  5094.     DX = task index
  5095. Return: DX = task ID (FFFFh if index invalid)
  5096. Note:    task IDs stay constant, while indexes can change when other tasks are
  5097.       deleted
  5098. SeeAlso: AX=2701h,AX=270Bh
  5099. --------T-2F270B-----------------------------
  5100. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  5101.     AX = 270Bh
  5102.     DX = task ID
  5103. Return: DX = task index (FFFFh if task not active)
  5104. SeeAlso: AX=270Ah
  5105. --------T-2F270C-----------------------------
  5106. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  5107.     AX = 270Ch
  5108.     DX = task index
  5109. Return: AX = number of files currently open for specified task
  5110. SeeAlso: AX=2708h
  5111. --------T-2F270D-----------------------------
  5112. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  5113.     AX = 270Dh
  5114.     DX = task index
  5115. Return: DX = status
  5116.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  5117.         0001h if not in root shell for task
  5118. Note:    TaskMAX will return 0001h if the specified task has spawned another
  5119.       command interpreter with AX=2707h
  5120. SeeAlso: AX=2707h,AX=270Ch
  5121. --------T-2F270E-----------------------------
  5122. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  5123.     AX = 270Eh
  5124.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5125.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5126. Return: ES:DI -> current lead-in string
  5127. Note:    the specified sequence of keystrokes is sent to the application before
  5128.       every line of a text-mode spreadsheet paste
  5129. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  5130. --------T-2F270F-----------------------------
  5131. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  5132.     AX = 270Fh
  5133.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5134.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5135. Return: ES:DI -> current lead-in string
  5136. Note:    the specified sequence of keystrokes is sent to the application before
  5137.       every number in a numeric-mode spreadsheet paste
  5138. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  5139. --------T-2F2710-----------------------------
  5140. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  5141.     AX = 2710h
  5142.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5143.     DS:SI -> pasting terminator string (character/scan-code pairs)
  5144. Return: ES:DI -> current terminator string
  5145. Note:    the specified sequence of keystrokes is sent to the application after
  5146.       every line of a spreadsheet paste operation
  5147. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  5148. --------T-2F2711-----------------------------
  5149. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  5150.     AX = 2711h
  5151.     DX = ASCII code for separator (FFFFh to get current)
  5152. Return: DL = current separator character
  5153. SeeAlso: AX=270Fh
  5154. --------T-2F2712-----------------------------
  5155. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  5156.     AX = 2712h
  5157.     DX = task index
  5158. --------T-2F2713-----------------------------
  5159. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  5160.     AX = 2713h
  5161.     DX = task index
  5162.     CX = paste mode
  5163.         0000h alphanumeric
  5164.         0001h numeric
  5165.         0002h text
  5166. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  5167. --------T-2F2714-----------------------------
  5168. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  5169.     AX = 2714h
  5170. Return: CX = total KB of swap space
  5171.     DX = available KB of swap space
  5172. SeeAlso: AX=2701h
  5173. --------T-2F2715-----------------------------
  5174. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  5175.     AX = 2715h
  5176. Return: only after calling task is again selected
  5177. SeeAlso: AX=2706h
  5178. --------T-2F2716-----------------------------
  5179. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  5180.     AX = 2716h
  5181. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  5182.         CX = bytes in paste buffer
  5183.         DX = current generation number (updated after every copy operation)
  5184. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  5185. --------T-2F2717-----------------------------
  5186. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  5187.     AX = 2717h
  5188.     CX = bytes in destination buffer
  5189.     ES:DI -> destination buffer
  5190. Return: AX = 0000h if function supported
  5191.         CX = bytes actually copied (FFFFh if buffer too small)
  5192.         DX = current generation number for paste buffer
  5193. Note:    the destination buffer may be too small if another task adds more data
  5194.       to the paste buffer after the AX=2716h call but before this call
  5195. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  5196. --------T-2F2718-----------------------------
  5197. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  5198.     AX = 2718h
  5199.     CX = bytes in source buffer
  5200.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  5201. Return: AX = 0000h if function supported
  5202.         CX = bytes actually copied
  5203.         DX = current generation number for paste buffer
  5204. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  5205. --------F-2F2A-------------------------------
  5206. INT 2F - Gammafax DOS Dispatcher INTERFACE
  5207.     AH = 2Ah
  5208. Note:    details not available at this time
  5209. SeeAlso: AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB00h,AX=CBDDh,INT 66"BitFax"
  5210. --------t-2F3900-----------------------------
  5211. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  5212.     AX = 3900h
  5213. Return: AL = status
  5214.         00h not installed
  5215.         FFh one or more TSRs using this interface is installed
  5216.         DX may be destroyed
  5217. Note:    this function is provided to that the multiplex number will appear used
  5218.       to other programs
  5219. SeeAlso: AH=39h/BL=00h
  5220. --------t-2F39--BL00-------------------------
  5221. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  5222.     AH = 39h
  5223.     BL = 00h
  5224.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see below)
  5225. Return: AL = status
  5226.         00h not installed
  5227.         FFh installed
  5228.         DX = segment address of resident module
  5229. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  5230.       resident module is installed by allocating a block of upper memory,
  5231.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  5232.       field with the TSR's name.
  5233. SeeAlso: AX=3900h,AH=39h/BL=01h
  5234.  
  5235. Values for TSR ID number:
  5236.  01h    TSR Windows
  5237.  02h    NOBUSY
  5238.  03h    CD STACK
  5239.  04h    DISK WATCH
  5240.  05h    PUSHBP
  5241.  06h    ALIAS
  5242.  07h    KEYMACRO
  5243.  08h    SLOWDOWN
  5244.  09h    ANSIGRAB
  5245.  0Ah    TEE
  5246.  0Bh    FASTMOUS
  5247.  0Ch    EXTWILD
  5248.  0Dh    BREAKOUT
  5249.  0Eh    STOPDISK
  5250.  0Fh    MEMINIT
  5251.  10h    JANUSEXT
  5252.  11h    CAPS
  5253.  12h    ANSI
  5254.  13h    TRAPPER
  5255.  14h    EATMEM
  5256.  15h    WPJOKE
  5257.  16h    SHOWDOS
  5258.  17h    LOGINTS
  5259.  18h    BLANKVGA
  5260.  19h    SWAPEXEC
  5261.  1Ah    SHELL
  5262.  1Bh    TSRGAMES
  5263.  
  5264. Format of TSR modules:
  5265. Offset    Size    Description
  5266.  00h  4 BYTEs    signature "FTSR"
  5267.  04h    WORD    segment address of this module (used to check validity)
  5268.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  5269.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  5270.         (usually only a PSP if file access is required)
  5271.      5N BYTEs    interrupt list (see below)
  5272.     BYTE    FFh terminator
  5273.  
  5274. Format of interrupt list entry:
  5275. Offset    Size    Description
  5276.  00h    BYTE    interrupt number (00h-FEh)
  5277.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  5278.  03h    WORD    offset within segment of begin of interrupt handler code
  5279. --------t-2F39--BL01-------------------------
  5280. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  5281.     AH = 39h
  5282.     BL = 01h
  5283.     AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)
  5284. Return: AL = status
  5285.         00h not ready to be removed
  5286.         FFh resident module may be removed by deassigning the interrupts
  5287.         hooked by the TSR and deallocating the TSR's memory block
  5288.     AH,BX,CX,DX,ES may be destroyed
  5289. SeeAlso: AX=3900h,AH=39h/BL=00h
  5290. --------t-2F39-------------------------------
  5291. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  5292.     AH = 39h
  5293.     BL = function number (02h-FFh)
  5294.     AL = TSR ID number (01h-FFh)
  5295.     CX,DX,SI,DI,DS,ES may contain parameters
  5296.     BH reserved for use by the function dispatcher
  5297. Return: as appropriate for the called function
  5298. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  5299. --------r-2F3901BL02-------------------------
  5300. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  5301.     AX = 3901h
  5302.     BL = 02h
  5303. Return: AX = error code (0000h if successful)
  5304.     SI,DI,DS,ES preserved
  5305. Notes:    opens the next TSR window on top of any others.     Only three
  5306.       TSR windows can be opened at any one time.  The three windows
  5307.       are all 40x11 characters, partly overlapping.
  5308. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  5309. --------r-2F3901BL03-------------------------
  5310. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  5311.     AX = 3901h
  5312.     BL = 03h
  5313. Return: AX = error code (0000h if successful)
  5314.     SI,DI,DS,ES preserved
  5315. Notes:    Hide any visible TSR windows from view.
  5316. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  5317. --------r-2F3901BL04-------------------------
  5318. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  5319.     AX = 3901h
  5320.     BL = 04h
  5321. Return: AX = error code (0000h if successful)
  5322.     SI,DI,DS,ES preserved
  5323. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  5324. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  5325. --------r-2F3901BL05-------------------------
  5326. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  5327.     AX = 3901h
  5328.     BL = 05h
  5329. Return: AX = error code (0000h if successful)
  5330.     SI,DI,DS,ES preserved
  5331. Notes:    Close the last opened TSR window.
  5332. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5333. --------r-2F3901BL06-------------------------
  5334. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  5335.     AX = 3901h
  5336.     BL = 06h
  5337.     DS:SI -> title string
  5338. Return: AX = error code (0000h if successful)
  5339.     SI,DI,DS,ES preserved
  5340. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5341. --------r-2F3901BL07-------------------------
  5342. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  5343.     AX = 3901h
  5344.     BL = 07h
  5345.     CH = Y coordinate (0-10)
  5346.     CL = X coordinate (0-39)
  5347. Return: AX = error code (0000h if successful)
  5348.     SI,DI,DS,ES preserved
  5349. Note:    the hardware cursor is always disabled when a TSR window is opened;
  5350.       this call only sets a text position
  5351. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  5352. --------r-2F3901BL08-------------------------
  5353. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  5354.     AX = 3901h
  5355.     BL = 08h
  5356.     DS:SI -> string
  5357. Return: AX = error code (0000h if successful)
  5358.     SI,DI,DS,ES preserved
  5359. Notes:    The text is not clipped.
  5360.     This routine understands Tab, NewLine and Carriage Return
  5361. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5362. --------r-2F3901BL09-------------------------
  5363. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  5364.     AX = 3901h
  5365.     BL = 09h
  5366.     CL = scroll direction: 00h up, FFh down, 00h clear window
  5367. Return: AX = error code (0000h if successful)
  5368.     SI,DI,DS,ES preserved
  5369. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5370. --------r-2F3901BL0A-------------------------
  5371. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  5372.     AX = 3901h
  5373.     BL = 0Ah
  5374.     DX = sound divisor, or 0 for silence.
  5375.          (divide 1843200 by required frequency to get value for DX)
  5376.     CL = sound length in 18.2 Hz clock ticks
  5377. Return: AX = error code (0000h if successful)
  5378.     SI,DI,DS,ES preserved
  5379. SeeAlso: AH=39h/BL=00h
  5380. --------r-2F3901BL0B-------------------------
  5381. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  5382.     AX = 3901h
  5383.     BL = 0Bh
  5384.     CL = number of users increment: +1 if adding a new user
  5385.                     -1 if removing a user
  5386. Return: AX = error code (0000h if successful)
  5387.     SI,DI,DS,ES preserved
  5388. Note:    the TSR windows resident module may only be removed when the internal
  5389.       user count is zero
  5390. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5391. --------V-2F3912BL03-------------------------
  5392. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  5393.     AX = 3912h
  5394.     BL = 03h
  5395.     CL = new mode (00h fast, FFh BIOS)
  5396. Return: AL = old compatibility mode
  5397.     SI,DI,DS,ES preserved
  5398. SeeAlso: AX=3900h,AX=3912h/BL=04h
  5399. --------V-2F3912BL04-------------------------
  5400. INT 2F - Kingswood ANSI display driver - SET FLAGS
  5401.     AX = 3912h
  5402.     BL = 04h
  5403.     CL = new flags
  5404.         bit 0: do not wrap at end of line
  5405.         bit 1: wait for beeps to end before displaying next character
  5406.         bit 2: do not use graphics cursor
  5407. Return: AL = old flags
  5408.     SI,DI,DS,ES preserved
  5409. SeeAlso: AX=3900h,AX=3912h/BL=03h
  5410. --------W-2F4000-----------------------------
  5411. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  5412.     AX = 4000h
  5413. Return: AL = 01h does not virtualize video access
  5414.          02h virtualizes the video when in text mode
  5415.          03h virtualizes the video when in text mode or single plane
  5416.          graphics modes
  5417.          04h virtualizes the video when in text mode, single plane
  5418.          graphics modes, and VGA multiplane modes
  5419.          FFh virtualizes the video fully
  5420. Note:    this function is used by display drivers to find out what capabilities
  5421.       exist for the VDD driver and also trigger the VDD driver to call
  5422.       functions 4005h and 4006h.  This function also gives the Video Driver
  5423.       hardware access to the video registers.
  5424. --------O-2F4001-----------------------------
  5425. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  5426.     AX = 4001h
  5427. Note:    called by OS/2 when the DOS box is about to be placed in the background
  5428.       and the video driver should save any necessary state
  5429. SeeAlso: AX=4002h,AX=4005h
  5430. --------O-2F4002-----------------------------
  5431. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  5432.     AX = 4002h
  5433. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  5434.       and the video driver should restore the previously-saved state
  5435. SeeAlso: AX=4001h,AX=4006h
  5436. --------W-2F4003-----------------------------
  5437. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  5438.     AX = 4003h
  5439. Note:    This critical section must be exited within 1 second.
  5440. SeeAlso: AX=4004h
  5441. --------W-2F4004-----------------------------
  5442. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  5443.     AX = 4004h
  5444. SeeAlso: AX=4003h
  5445. --------W-2F4005-----------------------------
  5446. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  5447.     AX = 4005h
  5448. Note:    called by Windows when the DOS box is about to be placed in the
  5449.       background and the video driver should save any necessary state
  5450.       information
  5451. SeeAlso: AX=4001h,AX=4006h
  5452. --------W-2F4006-----------------------------
  5453. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  5454.     AX = 4006h
  5455. Note:    called by Windows when the DOS box is about to be placed in the
  5456.       foreground and the video driver should restore any necessary state
  5457.       information
  5458. SeeAlso: AX=4002h,AX=4005h
  5459. --------W-2F4007-----------------------------
  5460. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  5461.     AX = 4007h
  5462. Note:    used by Windows Standard mode
  5463. --------E-2F4040-----------------------------
  5464. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  5465.     AX = 4040h
  5466. Return: BX:CX -> ???
  5467. --------N-2F4100-----------------------------
  5468. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  5469.     AX = 4100h
  5470. Return: CF clear if successful
  5471.         AL = FFh
  5472.     CF set on error
  5473.         AX = ???
  5474. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  5475.     LAN Manager enhanced mode adds features beyond the standard redirector
  5476.       file/printer services
  5477. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  5478. --------N-2F4103-----------------------------
  5479. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5480.     AX = 4103h
  5481. Return: ???
  5482. SeeAlso: AX=4100h,AX=4104h
  5483. --------N-2F4104-----------------------------
  5484. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5485.     AX = 4104h
  5486. Return: ???
  5487. SeeAlso: AX=4100h,AX=4103h
  5488. --------N-2F42-------------------------------
  5489. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5490.     AH = 42h
  5491.     ???
  5492. Return: ???
  5493. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5494.       file/printer services
  5495. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  5496. --------m-2F4300-----------------------------
  5497. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  5498.     AX = 4300h
  5499. Return: AL = 80h XMS driver installed
  5500.     AL <> 80h no driver
  5501. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5502.       above 640K
  5503.     this installation check DOES NOT follow the format used by other
  5504.       software
  5505. SeeAlso: AX=4310h
  5506. Index:    installation check;XMS version 2+
  5507. --------m-2F4308-----------------------------
  5508. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  5509.     AX = 4308h
  5510. Return: AL = 43h if supported
  5511.         BL = A20 handler number (value of /MACHINE:nn switch)
  5512.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  5513. SeeAlso: AX=4309h,AX=4330h
  5514. --------m-2F4309-----------------------------
  5515. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  5516.     AX = 4309h
  5517. Return: AL = 43h if function supported
  5518.         ES:BX -> XMS handle table (see below)
  5519. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  5520. SeeAlso: AX=4308h
  5521.  
  5522. Format of XMS handle table:
  5523. Offset    Size    Description
  5524.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  5525.  01h    BYTE    size of one handle??? (0Ah in HIMEM.SYS v3.09)
  5526.  02h    WORD    value of /numhandles= parameter (default = 20h)
  5527.  04h    DWORD    pointer to XMS handle array (see below)
  5528.  
  5529. Format of XMS handle [array]:
  5530. Offset    Size    Description
  5531.  00h    BYTE    flag 01h=free, 02h=used, 04h=unused
  5532.  01h    BYTE    lock count (00h=unlocked)
  5533.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  5534.  06h    DWORD    size of XMS block in KB
  5535. --------m-2F4310-----------------------------
  5536. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  5537.     AX = 4310h
  5538. Return: ES:BX -> driver entry point
  5539. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5540. SeeAlso: AX=4300h
  5541.  
  5542. Perform a FAR call to the driver entry point with AH set to the function code
  5543.     AH    function
  5544.     00h  Get XMS version number
  5545.          Return: AX = XMS version (in BCD, AH=major, AL=minor)
  5546.              BX = internal revision number
  5547.              DX = 0001h if HMA (1M to 1M + 64K) exists
  5548.               0000h if HMA does not exist
  5549.     01h  Request High Memory Area (1M to 1M + 64K)
  5550.          DX = memory in bytes (for TSR or device drivers)
  5551.           FFFFh if application program
  5552.          Return: AX = 0001h success
  5553.             = 0000h failure
  5554.                BL = error code (80h,81h,90h,91h,92h) (see below)
  5555.     02h  Release High Memory Area
  5556.          Return: AX = 0001h success
  5557.             = 0000h failure
  5558.                BL = error code (80h,81h,90h,93h) (see below)
  5559.     03h  Global enable A20, for using the HMA
  5560.          Return: AX = 0001h success
  5561.             = 0000h failure
  5562.                BL = error code (80h,81h,82h) (see below)
  5563.     04h  Global disable A20
  5564.          Return: AX = 0001h success
  5565.             = 0000h failure
  5566.                BL = error code (80h,81h,82h,94h) (see below)
  5567.     05h  Local enable A20, for direct access to extended memory
  5568.          Return: AX = 0001h success
  5569.             = 0000h failure
  5570.                BL = error code (80h,81h,82h) (see below)
  5571.     06h  Local disable A20
  5572.          Return: AX = 0001h success
  5573.             = 0000h failure
  5574.                BL = error code (80h,81h,82h,94h) (see below)
  5575.     07h  Query A20 state
  5576.          Return: AX = 0001h enabled
  5577.             = 0000h disabled
  5578.              BL = error code (00h,80h,81h) (see below)
  5579.     08h  Query free extended memory, not counting HMA
  5580.          BL = 00h (some implementations leave BL unchanged on success)
  5581.          Return: AX = size of largest extended memory block in KB
  5582.              DX = total extended memory in KB
  5583.              BL = error code (00h,80h,81h,A0h) (see below)
  5584.     09h  Allocate extended memory block
  5585.          DX = Kbytes needed
  5586.          Return: AX = 0001h success
  5587.                DX = handle for memory block
  5588.             = 0000h failure
  5589.                BL = error code (80h,81h,A0h) (see below)
  5590.     0Ah  Free extended memory block
  5591.          DX = handle of block to free
  5592.          Return: AX = 0001h success
  5593.             = 0000h failure
  5594.                BL = error code (80h,81h,A2h,ABh) (see below)
  5595.     0Bh  Move extended memory block
  5596.          DS:SI -> EMM structure (see below)
  5597.          Note: if either handle is 0000h, the corresponding offset is
  5598.            considered to be an absolute segment:offset address in
  5599.            directly addressable memory
  5600.          Return: AX = 0001h success
  5601.             = 0000h failure
  5602.                BL = error code (80h-82h,A3h-A9h) (see below)
  5603.     0Ch  Lock extended memory block
  5604.          DX = handle of block to lock
  5605.          Return: AX = 0001h success
  5606.                DX:BX = 32-bit linear address of locked block
  5607.             = 0000h failure
  5608.                BL = error code (80h,81h,A2h,ACh,ADh) (see below)
  5609.          Note: MS Windows 3.x rejects this function for handles allocated
  5610.             after Windows started
  5611.     0Dh  Unlock extended memory block
  5612.          DX = handle of block to unlock
  5613.          Return: AX = 0001h success
  5614.             = 0000h failure
  5615.                BL = error code (80h,81h,A2h,AAh) (see below)
  5616.     0Eh  Get handle information
  5617.          DX = handle for which to get info
  5618.          Return: AX = 0001h success
  5619.                BH = block's lock count
  5620.                BL = number of free handles left
  5621.                DX = block size in KB
  5622.             = 0000h failure
  5623.                BL = error code (80h,81h,A2h) (see below)
  5624.          BUG: MS Windows 3.10 acts as though unallocated handles are in use
  5625.          Note: MS Windows 3.00 has problems with this call
  5626.     0Fh  Reallocate extended memory block
  5627.          DX = handle of block
  5628.          BX = new size of block in KB
  5629.          Return: AX = 0001h success
  5630.             = 0000h failure
  5631.                BL = error code (80h,81h,A0h-A2h,ABh) (see below)
  5632.     10h  Request upper memory block (nonEMS memory above 640K)
  5633.          DX = size of block in paragraphs
  5634.          Return: AX = 0001h success
  5635.                BX = segment address of UMB
  5636.                DX = actual size of block
  5637.             = 0000h failure
  5638.                BL = error code (80h,B0h,B1h) (see below)
  5639.                DX = largest available block
  5640.     11h  Release upper memory block
  5641.          DX = segment address of UMB to release
  5642.          Return: AX = 0001h success
  5643.             = 0000h failure
  5644.                BL = error code (80h,B2h) (see below)
  5645.     12h  (XMS v3.0) Reallocate upper memory block
  5646.          DX = segment address of UMB to resize
  5647.          BX = new size of block in paragraphs
  5648.          Return: AX = 0001h success
  5649.             = 0000h failure
  5650.                BL = error code (80h,B0h,B2h) (see below)
  5651.                DX = maximum available size (RM386)
  5652.     34h  (QEMM 5.11 only, undocumented) ???
  5653.     44h  (QEMM 5.11 only, undocumented) ???
  5654.     80h  (Netroom RM386 v6.00) Reallocate upper memory block
  5655.          this function is identical to function 12h
  5656.     81h  (Netroom RM386 v6.00) re-enable HMA allocation
  5657.          Return: AX = 0001h (success)
  5658.     82h  (Netroom RM386 v6.00) Cloaking API
  5659.          DX = XMS handle of block containing protected-mode code
  5660.          CL = code size (00h 16-bit, else 32-bit)
  5661.          ESI, EDI = parameters to pass to protected-mode code
  5662.          Return: AX = status
  5663.              0001h success
  5664.              0000h failed
  5665.                  BL = error code (A2h,B0h) (see below)
  5666.          Note: this calls offset 0 in the XMS memory block with
  5667.         EBX = physical address of block's start
  5668.         CS = code selector for XMS block at EBX (16-bit or 32-bit)
  5669.         DS = data selector for XMS block, starting at EBX
  5670.         ES = selector for V86 memory access to full real-mode 1088K
  5671.         GS = selector for full flat address space
  5672.         ESI, EDI from V86 mode
  5673.     83h  (Netroom RM386 v6.00) Create new UMB entry
  5674.          BX = segment of high-memory block
  5675.          DX = first page of start of block
  5676.          CX = number of consecutive pages in block
  5677.          DI = start of UMB in block
  5678.          Return: AX = 0001h (success)
  5679.              DI = segment of first high-DOS block
  5680.          Note: the new UMB is not linked into the high-memory chain
  5681.     84h  (Netroom RM386 v6.00) Get all XMS handles info
  5682.          CX = size of buffer for handle info
  5683.          ES:DI -> buffer for handle info (see below)
  5684.          Return: AX = 0001h (success)
  5685.              DX = current number of allocated XMS handles
  5686.     88h  (XMS v3.0) Query free extended memory
  5687.          Return: EAX = largest block of extended memory, in KB
  5688.              BL = status
  5689.              00h success
  5690.              80h not implemented (i.e. on a 286 system)
  5691.              81h VDISK detected
  5692.              A0h all extended memory allocated
  5693.              ECX = physical address of highest byte of memory
  5694.                 (valid even on error codes 81h and A0h)
  5695.              EDX = total Kbytes of extended memory (0 if status A0h)
  5696.     89h  (XMS v3.0) Allocate any extended memory
  5697.          EDX = Kbytes needed
  5698.          Return: AX = 0001h success
  5699.                 DX = handle for allocated block (free with AH=0Ah)
  5700.             = 0000h failure
  5701.                 BL = status (80h,81h,A0h,A1h,A2h) (see below)
  5702.     8Eh  (XMS v3.0) Get extended EMB handle information
  5703.          DX = handle
  5704.          Return: AX = 0001h success
  5705.                 BH = block's lock count
  5706.                 CX = number of free handles left
  5707.                 EDX = block size in KB
  5708.             = 0000h failure
  5709.                 BL = status (80h,81h,A2h) (see below)
  5710.          BUG: DOS 6.0 HIMEM.SYS leaves CX unchanged
  5711.     8Fh  (XMS v3.0) Reallocate any extended memory block
  5712.          DX = unlocked handle
  5713.          EBX = new size in KB
  5714.          Return: AX = 0001h success
  5715.             = 0000h failure
  5716.                 BL = status (80h,81h,A0h-A2h,ABh) (see below)
  5717. Notes:    HIMEM.SYS requires at least 256 bytes free stack space
  5718.     the XMS driver need not implement functions 10h through 12h to be
  5719.       considered compliant with the standard
  5720. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5721.       are called
  5722.  
  5723. Error codes returned in BL:
  5724.  00h    successful
  5725.  80h    function not implemented
  5726.  81h    Vdisk was detected
  5727.  82h    an A20 error occurred
  5728.  8Eh    a general driver error
  5729.  8Fh    unrecoverable driver error
  5730.  90h    HMA does not exist
  5731.  91h    HMA is already in use
  5732.  92h    DX is less than the /HMAMIN= parameter
  5733.  93h    HMA is not allocated
  5734.  94h    A20 line still enabled
  5735.  A0h    all extended memory is allocated
  5736.  A1h    all available extended memory handles are allocated
  5737.  A2h    invalid handle
  5738.  A3h    source handle is invalid
  5739.  A4h    source offset is invalid
  5740.  A5h    destination handle is invalid
  5741.  A6h    destination offset is invalid
  5742.  A7h    length is invalid
  5743.  A8h    move has an invalid overlap
  5744.  A9h    parity error occurred
  5745.  AAh    block is not locked
  5746.  ABh    block is locked
  5747.  ACh    block lock count overflowed
  5748.  ADh    lock failed
  5749.  B0h    only a smaller UMB is available
  5750.  B1h    no UMB's are available
  5751.  B2h    UMB segment number is invalid
  5752.  
  5753. Format of EMM structure:
  5754. Offset    Size    Description
  5755.  00h    DWORD    number of bytes to move (must be even)
  5756.  04h    WORD    source handle
  5757.  06h    DWORD    offset into source block
  5758.  0Ah    WORD    destination handle
  5759.  0Ch    DWORD    offset into destination block
  5760. Notes:    if source and destination overlap, only forward moves (source base
  5761.       less than destination base) are guaranteed to work properly
  5762.     if either handle is zero, the corresponding offset is interpreted
  5763.       as a real-mode address referring to memory directly addressable
  5764.       by the processor
  5765.  
  5766. Format of XMS handle info [array]:
  5767. Offset    Size    Description
  5768.  00h    BYTE    handle
  5769.  01h    BYTE    lock count
  5770.  02h    DWORD    handle size
  5771.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  5772. ----------2F4320-----------------------------
  5773. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  5774.     AX = 4320h
  5775.     ???
  5776. Return: ???
  5777. --------m-2F4330-----------------------------
  5778. INT 2F UC - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  5779.     AX = 4330h
  5780. Return: AL = 80h if external A20 handler provided
  5781.         ES:BX -> external A20 handler
  5782.         CL = ???
  5783. Note:    HIMEM.SYS calls this function to allow an external program to provide
  5784.       an A20 handler (i.e. to support a machine not supported by HIMEM
  5785.       itself)
  5786.  
  5787. External A20 handler called with:
  5788.     AX = function
  5789.         0000h disable A20
  5790.         0001h enable A20
  5791.     Return: AX = status
  5792.             0000h failure
  5793.             0001h successful
  5794. SeeAlso: AX=4308h,AX=4310h
  5795. --------E-2F43E0-----------------------------
  5796. INT 2F - Novell DOS Protected Mode Services (DPMS) - INSTALLATION CHECK
  5797.     AX = 43E0h
  5798. Return: AX = 0000h if installed
  5799.         ES:BX -> registration structure (see below)
  5800. Note:    this specification is still in beta
  5801. SeeAlso: INT 2F/AX=1687h
  5802.  
  5803. Format of registration structure:
  5804. Offset    Size    Description
  5805.  00h    DWORD    real-mode API entry point
  5806.  04h    DWORD    16-bit protected-mode API entry point
  5807.  08h  8 BYTEs    reserved (0)
  5808.  10h  8 BYTEs    blank-padded server OEM name
  5809.  18h    WORD    flags
  5810.         bit 0: fast processor reset available (286 only)
  5811.         bits 1-15 reserved (undefined)
  5812.  1Ah  2 BYTEs    DPMS version (major,minor)
  5813.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  5814.  
  5815. Call DPMS entry point with:
  5816.     AX = 0100h call protected-mode procedure
  5817.         CX = number of words of stack to copy
  5818.         ES:DI -> callup/down register structure (see below)
  5819.         Return: CF clear if successful
  5820.             CF set on error
  5821.                 AX = error code (see below)
  5822.     AX = 0101h call real-mode procedure (RETF return)
  5823.         CX = number of words of stack to copy
  5824.         ES:DI -> callup/down register structure (see below)
  5825.         Return: CF clear if successful
  5826.             CF set on error
  5827.                 AX = error code (see below)
  5828.     AX = 0102h call real-mode procedure (IRET return)
  5829.         CX = number of words of stack to copy
  5830.         ES:DI -> callup/down register structure (see below)
  5831.         Return: CF clear if successful
  5832.             CF set on error
  5833.                 AX = error code (see below)
  5834.     AX = 0103h call real-mode interrupt handler
  5835.         BL = interrupt number
  5836.         CX = number of words of stack to copy
  5837.         ES:DI -> callup/down register structure (see below)
  5838.         Return: CF clear if successful
  5839.             CF set on error
  5840.                 AX = error code (see below)
  5841.     AX = 0200h allocate descriptors
  5842.         CX = number of descriptors to allocate
  5843.         Return: CF clear if successful
  5844.                 AX = first descriptor allocated
  5845.             CF set on error
  5846.                 AX = error code (see below)
  5847.     AX = 0201h free a descriptor
  5848.         BX = descriptor
  5849.         Return: CF clear if successful
  5850.             CF set on error
  5851.                 AX = error code (see below)
  5852.     AX = 0202h create alias descriptor
  5853.         BX = descriptor
  5854.         Return: CF clear if successful
  5855.                 AX = alias descriptor
  5856.             CF set on error
  5857.                 AX = error code (see below)
  5858.     AX = 0203h build alias to real-mode segment
  5859.         BX = descriptor
  5860.         CX = real-mode segment
  5861.         Return: CF clear if successful
  5862.             CF set on error
  5863.                 AX = error code (see below)
  5864.     AX = 0204h set descriptor base
  5865.         BX = descriptor
  5866.         CX:DX = base address
  5867.         Return: CF clear if successful
  5868.             CF set on error
  5869.                 AX = error code (see below)
  5870.     AX = 0205h set descriptor limit
  5871.         BX = descriptor
  5872.         CX = limit
  5873.         Return: CF clear if successful
  5874.             CF set on error
  5875.                 AX = error code (see below)
  5876.     AX = 0206h set descriptor type/attribute
  5877.         BX = descriptor
  5878.         CL = type
  5879.         CH = attribute
  5880.         Return: CF clear if successful
  5881.             CF set on error
  5882.                 AX = error code (see below)
  5883.     AX = 0207h get descriptor base
  5884.         BX = descriptor
  5885.         Return: CF clear if successful
  5886.                 CX:DX = base address
  5887.             CF set on error
  5888.                 AX = error code (see below)
  5889.     AX = 0300h get size of largest free block of memory
  5890.         Return: CF clear if successful
  5891.                 BX:CX = size
  5892.             CF set on error
  5893.                 AX = error code (see below)
  5894.     AX = 0301h allocate block of extended memory
  5895.         BX:CX = size
  5896.         Return: CF clear if successful
  5897.                 BX:CX = base address
  5898.                 SI:DI = handle
  5899.             CF set on error
  5900.                 AX = error code (see below)
  5901.     AX = 0302h free block of extended memory
  5902.         SI:DI = handle
  5903.         Return: CF clear if successful
  5904.             CF set on error
  5905.                 AX = error code (see below)
  5906.     AX = 0303h map linear memory
  5907.         ES:[DI] = DDS
  5908.         Return: CF clear if successful
  5909.                 BX:CX = base address
  5910.                 SI:DI = handle
  5911.             CF set on error
  5912.                 AX = error code (see below)
  5913.     AX = 0304h unmap linear memory
  5914.         SI:DI = handle
  5915.         Return: CF clear if successful
  5916.             CF set on error
  5917.                 AX = error code (see below)
  5918.     AX = 0400h relocate segment to extended memory
  5919.         ES:SI = base address
  5920.         CX = limit
  5921.         BL = type
  5922.         BH = attribute
  5923.         DX = selector or 0000h
  5924.         Return: CF clear if successful
  5925.                 AX = selector
  5926.                 BX:CX = new base address
  5927.                 SI:DI = handle
  5928.             CF set on error
  5929.                 AX = error code (see below)
  5930.  
  5931. Values for error code:
  5932.  8000h    general error
  5933.  8001h    unsupported function
  5934.  8011h    descriptor unavailable
  5935.  8012h    linear memory unavailable
  5936.  8013h    physical memory unavailable
  5937.  8021h    invalid value
  5938.  8022h    invalid selector
  5939.  8023h    invalid handle
  5940.  
  5941. Format of callup/down register structure:
  5942. Offset    Size    Description
  5943.  00h    DWORD    EDI
  5944.  04h    DWORD    ESI
  5945.  08h    DWORD    EBP
  5946.  0Ch  4 BYTEs    reserved (0)
  5947.  10h    DWORD    EBX
  5948.  14h    DWORD    EDX
  5949.  18h    DWORD    ECX
  5950.  20h    DWORD    EAX
  5951.  24h    DWORD    EIP
  5952.  28h    WORD    CS
  5953.  2Ah  2 BYTEs    reserved (0)
  5954.  2Ch    DWORD    EFLAGS
  5955.  30h    DWORD    ESP
  5956.  34h    WORD    SS
  5957.  36h  2 BYTEs    reserved (0)
  5958.  38h    WORD    ES
  5959.  3Ah  2 BYTEs    reserved (0)
  5960.  3Ch    WORD    DS
  5961.  3Eh  2 BYTEs    reserved (0)
  5962.  40h    WORD    FS
  5963.  42h  2 BYTEs    reserved (0)
  5964.  44h    WORD    GS
  5965.  46h  2 BYTEs    reserved (0)
  5966. ----------2F44-------------------------------
  5967. INT 2F U - DOS Extender support???
  5968.     AH = 44h
  5969.     AL = function (at least 0Bh, 15h, 17h)
  5970.     ???
  5971. Return: ???
  5972. Note:    called by Codeview for Windows
  5973. SeeAlso: AH=86h
  5974. --------G-2F4500-----------------------------
  5975. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  5976.     AX = 4500h
  5977. Return: AL = 01h if PROF.COM installed
  5978.     AL = 02h if VPROD.386 installed
  5979. SeeAlso: AX=4501h,AX=4502h
  5980. --------G-2F4501-----------------------------
  5981. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  5982.     AX = 4501h
  5983.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  5984.     CX = output limit in KB (second parameter for ProfSetup)
  5985. Note:    this call is not supported by PROF.COM
  5986. SeeAlso: AX=4502h,AX=4503h
  5987. --------G-2F4502-----------------------------
  5988. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  5989.     AX = 4502h
  5990.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  5991.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  5992.     CX = sampling rate for VPROD.386
  5993. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  5994.       low four bits of CMOS register 0Ah.  The interruption rate is
  5995.       1 SHL (15 - BL) per second.
  5996. SeeAlso: AX=4501h,AX=4503h
  5997. --------G-2F4503-----------------------------
  5998. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  5999.     AX = 4503h
  6000. Notes:    Profiling is also turned on by the key combinations
  6001.       LeftShift + RightShift + Alt
  6002.       LeftShift + RightShift + Ctrl
  6003.     for PROF.COM, this call programs the CMOS clock by reading register
  6004.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  6005.       is unmasked
  6006. SeeAlso: AX=4504h
  6007. --------G-2F4504-----------------------------
  6008. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  6009.     AX = 4504h
  6010. Notes:    profiling is also turned off by the key combination
  6011.       LeftShift + RightShift
  6012.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  6013.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  6014. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  6015. --------G-2F4505-----------------------------
  6016. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  6017.     AX = 4505h
  6018. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  6019. --------G-2F4506-----------------------------
  6020. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  6021.     AX = 4506h
  6022. SeeAlso: AX=4505h,AX=4507h
  6023. --------G-2F4507-----------------------------
  6024. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  6025.     AX = 4507h
  6026. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  6027.       "ProfFlush" (AX=4506h)
  6028. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  6029. --------G-2F4508-----------------------------
  6030. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  6031.     AX = 4508h
  6032.     BX = ordinal (or 0000h)
  6033.     CX = segment
  6034.     DX = instance (or 0000h)
  6035.     SI = type (or 0000h)
  6036.     ES:DI -> ASCIZ module name
  6037. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  6038.       interface, but only to function 0, for notifying the profiler of
  6039.       each new segment loaded.  The SHOWHITS utility then examines the
  6040.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  6041.       with symbol files to provide information in a useful form.
  6042.     this call does not have a corresponding Windows function
  6043. SeeAlso: AX=4500h
  6044. --------D-2F4601-----------------------------
  6045. INT 2F U - DOS 5+ kernel - ???
  6046.     AX = 4601h
  6047. Return: ???
  6048. Note:    copies the MCB following the caller's PSP memory block into DOS data
  6049.       segment
  6050. SeeAlso: AX=4602h
  6051. --------D-2F4602-----------------------------
  6052. INT 2F U - DOS 5+ kernel - ???
  6053.     AX = 4602h
  6054. Return: ???
  6055. Note:    copies previously copied MCB from DOS data segment into MCB following
  6056.       caller's PSP memory block
  6057. SeeAlso: AX=4601h
  6058. ----------2F46-------------------------------
  6059. INT 2F U - Windows/286 DOS Extender
  6060.     AH = 46h
  6061.     AL = subfunction (03h,04h)
  6062. Return: ???
  6063. Note:    these two subfunctions are called by MS Windows 3.0
  6064. --------v-2F4653CX0002-----------------------
  6065. INT 2F - F-PROT v1.x only - F-LOCK.EXE
  6066.     AX = 4653h
  6067.     CX = 0002h
  6068.     BX = subfunction
  6069.         0000h  installation check
  6070.         Return: AX = FFFFh
  6071.         0001h  uninstall
  6072.         Return: AX,BX,ES destroyed
  6073.         0002h  disable (v1.08 and below only)
  6074.         0003h  enable (v1.08 and below only)
  6075. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  6076.       Skulason
  6077. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  6078. Index:    installation check;F-LOCK|uninstall;F-LOCK
  6079. --------v-2F4653CX0003-----------------------
  6080. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  6081.     AX = 4653h
  6082.     CX = 0003h
  6083.     BX = subfunction
  6084.         0000h  installation check
  6085.         Return: AX = FFFFh
  6086.         0001h  uninstall
  6087.         Return: AX,BX,ES destroyed
  6088. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  6089.       Skulason
  6090. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  6091. Index:    installation check;F-XCHK|uninstall;F-XCHK
  6092. --------v-2F4653CX0004-----------------------
  6093. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  6094.     AX = 4653h
  6095.     CX = 0004h
  6096.     BX = subfunction
  6097.         0000h  installation check
  6098.         Return: AX = FFFFh
  6099.         0001h  uninstall
  6100.         Return: AX,BX,ES destroyed
  6101.         0002h  disable (v1.08 and below only)
  6102.            display message (v1.14+)
  6103.             other registers: ???
  6104.         0003h  enable (v1.08 and below only)
  6105.            display message (v1.14+)
  6106.             other registers: ???
  6107.             Return: AX = key pressed by user
  6108. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  6109.       Fridrik Skulason
  6110. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  6111. Index:    installation check;F-POPUP|uninstall;F-POPUP
  6112. --------v-2F4653CX0005-----------------------
  6113. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  6114.     AX = 4653h
  6115.     CX = 0005h
  6116.     BX = subfunction
  6117.         0000h installation check
  6118.         Return: AX = FFFFh
  6119.         0001h uninstall
  6120.         Return: AX,BX,ES destroyed
  6121. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  6122.       Fridrik Skulason
  6123. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  6124. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  6125. --------W-2F4680-----------------------------
  6126. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  6127.     AX = 4680h
  6128. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  6129.            or DOS 5 DOSSHELL active
  6130.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  6131.             mode
  6132. Note:    Windows 3.1 finally provides an installation check which works in all
  6133.       modes (see AX=160Ah)
  6134. SeeAlso: AX=1600h,AX=160Ah
  6135. ----------2F47-------------------------------
  6136. INT 2F U - ???
  6137.     AH = 47h
  6138.     ???
  6139. Return: ???
  6140. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  6141. --------K-2F4800-----------------------------
  6142. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  6143.     AX = 4800h
  6144. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  6145.         ES = segment of DOSKEY resident portion
  6146. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  6147. SeeAlso: AX=4800h"PCED",AX=4810h
  6148. --------K-2F4800-----------------------------
  6149. INT 2F - PCED v2.1 - INSTALLATION CHECK
  6150.     AX = 4800h
  6151. Return: AX = AACDh if installed
  6152.         ES = segment of PCED kernel (PCED has multiple code segments)
  6153. Program: PCED v2.1 is a command line editor/history/macro facility by
  6154.       Cove Software.  It is the commercial version of the freeware CED.
  6155. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  6156.     unlike DOSKEY, PCED does *not* chain if AL contains an
  6157.       unsupported function code.  It IRETs with all registers intact.
  6158. --------K-2F4810-----------------------------
  6159. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  6160.     AX = 4810h
  6161.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  6162. Return: AX = 0000h if successful
  6163. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  6164.       the previous handler; PCED allows sizes other than 80h
  6165.     if the user's input is a macro name, no text is placed in the buffer
  6166.       even though AX=0000h on return; the program must immediately issue
  6167.       this call again to retrieve the expansion of the macro.  Similarly,
  6168.       if the user enters a special parameter such as $*, this call must
  6169.       be repeated to retrieve the expansion; on the second call, DOSKEY
  6170.       overwrites the macro name on the screen with its expansion.
  6171.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  6172.       not necessary to make two calls; since the buffer is not empty on
  6173.       return, DOSKEY-aware programs will not make the second call
  6174.     DOSKEY chains if AL is not 00h or 10h on entry
  6175. SeeAlso: AX=4800h,INT 21/AH=0Ah
  6176. --------K-2F48C0-----------------------------
  6177. INT 2F - PCED v2.1 - PCED API
  6178.     AX = 48C0h
  6179.     DX = API function code
  6180.     other registers as required by the specified function
  6181. Return: CF clear if successful
  6182.     CF set on error
  6183.         AX = PCED error code
  6184.     other registers as appropriate for API function
  6185. Program: PCED v2.1 is a command line editor/history/macro facility by
  6186.       Cove Software.  It is the commercial version of the freeware CED.
  6187. Note:    the full API information is available from Cove Software
  6188. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  6189. ----------2F48C1BL00-------------------------
  6190. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  6191.     AX = 48C1h
  6192.     BL = 00h
  6193. Return: AX = 0000h if installed
  6194.         BX = VSTACK resident segment
  6195. Program: VSTACK is a resident backscroll utility included as part of the PCED
  6196.       package
  6197. Note:    chains if BL <> 00h on entry
  6198. SeeAlso: AX=48C0h,AX=48C2h
  6199. ----------2F48C2BL00-------------------------
  6200. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  6201.     AX = 48C2h
  6202.     BL = 00h
  6203. Return: AX = 0000h if installed
  6204.         BX = ATTRIB resident segment
  6205. Program: ATTRIB is a resident file attribute changer included as part of the
  6206.       PCED package
  6207. Note:    chains if BL <> 00h on entry
  6208. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  6209. --------K-2F48C3BL00-------------------------
  6210. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  6211.     AX = 48C3h
  6212.     BL = 00h
  6213. Return: AX = 0000h if installed
  6214.         BX = KEYDEF resident segment
  6215. Program: KEYDEF is a resident keyboard redefinition utility included as part
  6216.       of the PCED package
  6217. Note:    chains if BL <> 00h on entry
  6218. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  6219. ----------2F48C4BL00-------------------------
  6220. INT 2F - PCED/FLIST - INSTALLATION CHECK
  6221.     AX = 48C4h
  6222.     BL = 00h
  6223. Return: AX = 0000h if installed
  6224.         BX = FLIST resident segment
  6225. Program: FLIST is a resident filelist processor included as part of the PCED
  6226.       package
  6227. Note:    chains if BL <> 00h on entry
  6228. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  6229. ----------2F48C4BL00-------------------------
  6230. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  6231.     AX = 48C4h
  6232.     BL = 00h
  6233. Return: AX = 0000h if installed
  6234.         BX = ASSOC resident segment
  6235. Program: ASSOC is a resident utility included as part of the PCED package which
  6236.       associated files with executable programs based on their extensions
  6237. Note:    chains if BL > 02h on entry
  6238. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  6239. ----------2F48C5BL01-------------------------
  6240. INT 2F - PCED/ASSOC - VERSION CHECK
  6241.     AX = 48C5h
  6242.     BL = 01h
  6243. Return: AX = 0000h if installed
  6244.         BX = binary ASSOC version (BL = major, BH = minor)
  6245. Note:    chains if BL > 02h on entry
  6246. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  6247. ----------2F48C5BL02-------------------------
  6248. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  6249.     AX = 48C5h
  6250.     BL = 02h
  6251.     DS:SI -> ASCIZ filename
  6252. Return: AX = status
  6253.         0000h if filename is unknown
  6254.         0001h if there is an association defined for the file
  6255.     BX destroyed
  6256. Program: ASSOC is a resident utility included as part of the PCED package which
  6257.       associated files with executable programs based on their extensions
  6258. Note:    chains if BL > 02h on entry
  6259. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  6260. ----------2F49-------------------------------
  6261. INT 2F U - ???
  6262.     AH = 49h
  6263.     ???
  6264. Return: ???
  6265. Note:    reportedly called by DOS 5.0 installation
  6266. --------D-2F4A00CX0000-----------------------
  6267. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  6268.     AX = 4A00h
  6269.     CX = 0000h
  6270.     DH = new drive number
  6271.     DL = current drive number
  6272. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  6273. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  6274.       "Insert diskette for drive X:" on single-floppy systems
  6275. --------D-2F4A01-----------------------------
  6276. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  6277.     AX = 4A01h
  6278. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  6279.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  6280. Note:    called by Windows 3.1 DOSX.EXE
  6281. SeeAlso: AX=4310h,AX=4A02h
  6282. --------D-2F4A02-----------------------------
  6283. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  6284.     AX = 4A02h
  6285.     BX = number of bytes
  6286. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  6287.     BX = number of bytes actually allocated (rounded up to next paragraph
  6288.         for DOS 5.0 and 6.0)
  6289. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  6290.     called by Windows 3.1 DOSX.EXE
  6291. SeeAlso: AX=4A01h
  6292. --------T-2F4A05-----------------------------
  6293. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  6294.     AX = 4A05h
  6295.     SI = function
  6296.         0000h reset???
  6297.         0001h ???
  6298.         ES:BP -> 80-byte buffer containing ???
  6299.         0002h ???
  6300.         0003h ???
  6301.         0004h ???
  6302.         BL = ???
  6303.         0005h ???
  6304.         0006h get ???
  6305.         Return: ES:SI -> ???
  6306.         0007h get ???
  6307.         Return: AX = ???
  6308.         0008h get ???
  6309.         Return: DX:AX -> ??? (internal control data of some kind)
  6310.         0009h get ???
  6311.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  6312.         000Ah ???
  6313.         BL = length of buffer
  6314.         ES:BP -> buffer containing ???
  6315.         000Bh get ???
  6316.         Return: AX = ???
  6317.         000Ch ???
  6318.         BL = ???
  6319.         Return: if BL nonzero on entry
  6320.                 DX:AX -> ???
  6321.             if BL = 00h on entry
  6322.                 ES:SI -> ???
  6323. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  6324.       listed above
  6325.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  6326.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  6327. SeeAlso: AX=4B01h
  6328. --------D-2F4A06-----------------------------
  6329. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  6330.     AX = 4A06h
  6331.     DX = segment following last byte of conventional memory
  6332. Return: DX = segment following last byte of memory available for use by DOS
  6333. Desc:    used to override the default memory size when booting diskless
  6334.       workstations
  6335. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  6336.       present three bytes beyond the INT 2F handler; this call overrides
  6337.       the value returned by INT 12
  6338.     hooked by RPL code at the top of memory to protect itself from being
  6339.       overwritten; DOS builds a memory block with owner = 0008h and name
  6340.       "RPL" which must be freed by the RPL code when it is done
  6341. SeeAlso: INT 12
  6342. ----------2F4A07-----------------------------
  6343. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  6344.     AX = 4A07h
  6345.     ???
  6346. Return: ???
  6347. --------c-2F4A10BX0000-----------------------
  6348. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  6349.     AX = 4A10h
  6350.     BX = 0000h
  6351.     CX = EBABh (v4.1+; see Note)
  6352. Return: AX = BABEh if installed
  6353.         DX:BX = cache hits
  6354.         DI:SI = cache misses
  6355.         CX = ???
  6356.         BP = version in BCD (4.10 = 0410h)
  6357. Notes:    most of the SMARTDRV API, including this call, is supported by
  6358.       PC-Cache v8.0
  6359.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  6360.       unless CX=EBABh on entry, DBLSPACE.BIN displays the error message
  6361.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and aborts the caller
  6362.       with INT 21/AX=4C00h
  6363.     SMARTDRV v3.x had a completely different API using IOCTL calls
  6364. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  6365. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  6366. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  6367. --------c-2F4A10BX0001-----------------------
  6368. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS
  6369.     AX = 4A10h
  6370.     BX = 0001h
  6371. Note:    this function is also supported by PC-Cache v8.0.
  6372. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  6373. --------c-2F4A10BX0002-----------------------
  6374. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  6375.     AX = 4A10h
  6376.     BX = 0002h
  6377. Note:    this function is also supported by PC-Cache v8.0.
  6378. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  6379. --------c-2F4A10BX0003-----------------------
  6380. INT 2F - SMARTDRV v4.00+ - STATUS
  6381.     AX = 4A10h
  6382.     BX = 0003h
  6383.     BP = drive # (0=A, 1=B, etc.)
  6384.     DL = subfunction
  6385.         00h only get information
  6386.         01h turn on read cache
  6387.         02h turn off read cache
  6388.         03h turn on write cache
  6389.         04h turn off write cache
  6390. Return: AX = BABEh if OK
  6391.     DL = status
  6392.         bit 7  not cached
  6393.         bit 6  write-through
  6394.         bit 5  ???
  6395.         bits 0-4 drive # (0=A, 1=B...)
  6396.     DL = FFh if drive does not exist
  6397. Notes:    If the read cache is off, reads will not be cached, but writes will
  6398.       continue to be cached if the write-cache is enabled.
  6399.     this function is also supported by PC-Cache v8.0.
  6400. SeeAlso: AX=4A10h/BX=0000h
  6401. --------c-2F4A10BX0004-----------------------
  6402. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  6403.     AX = 4A10h
  6404.     BX = 0004h
  6405. Return: AX = current size in elements???
  6406.     BX = largest number of elements
  6407.     CX = size of elements in bytes
  6408.     DX = number of elements under Windows
  6409. Note:    this function is also supported by PC-Cache v8.0.
  6410. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  6411. --------c-2F4A10BX0005-----------------------
  6412. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  6413.     AX = 4A10h
  6414.     BX = 0005h
  6415.     BP = drive # (0=A, 1=B...)
  6416. Return: AX = BABEh if double-buffered
  6417.         ES:DI -> ???
  6418. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  6419. --------c-2F4A10BX0006-----------------------
  6420. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  6421.     AX = 4A10h
  6422.     BX = 0006h
  6423.     CL = drive number (01h = A:)
  6424. Return: AX = 0006h if drive should not be cached by SMARTDRV
  6425. Note:    called by SMARTDRV at startup to determine whether it should cache
  6426.       a particular drive
  6427. SeeAlso: AX=4A10h/BX=0000h
  6428. --------c-2F4A10BX0007-----------------------
  6429. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  6430.     AX = 4A10h
  6431.     BX = 0007h
  6432.     BP = drive number
  6433. Return: DL = ???
  6434.     ES:DI -> device driver header for drive
  6435. Note:    this function is also supported by PC-Cache v8.0.
  6436. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  6437. --------c-2F4A10BX000A-----------------------
  6438. INT 2F - SMARTDRV v4.00+ - GET TABLE POINTER???
  6439.     AX = 4A10h
  6440.     BX = 000Ah
  6441. Return: ES:BX -> table of about 10 bytes or 5 words. Seems to be words
  6442.          pointing to memory addresses containing info??? (see below)
  6443. Note:    this function is also supported by PC-Cache v8.0.
  6444. SeeAlso: AX=4A10h/BX=0000h
  6445.  
  6446. Format of data table:
  6447. Offset    Size    Description
  6448.  00h  8 BYTEs    ???
  6449.  08h    WORD    offset of WORD containing number of elements in cache
  6450. --------c-2F4A10BX1234-----------------------
  6451. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  6452.     AX = 4A10h
  6453.     BX = 1234h
  6454. Desc:    pops up a message box saying that a serious error occurred and to hit
  6455.       R to retry.
  6456. Note:    this function is also supported by PC-Cache v8.0.
  6457. SeeAlso: AX=4A10h/BX=0000h
  6458. --------d-2F4A11BX0000-----------------------
  6459. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  6460.     AX = 4A11h
  6461.     BX = 0000h
  6462. Return: AX = 0000h (successful)
  6463.     BX = 444Dh ("DM")
  6464.     CL = first drive letter used by DBLSPACE (0=A:)
  6465.     CH = number of drive letters used by DBLSPACE
  6466.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  6467.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  6468.         position in memory (i.e. DBLSPACE.SYS /MOVE)
  6469. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6470.       disk-compression software bundled with MS-DOS 6.0
  6471. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  6472. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  6473. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  6474. --------d-2F4A11BX0001-----------------------
  6475. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  6476.     AX = 4A11h
  6477.     BX = 0001h
  6478.     DL = drive number (0=A:)
  6479. Return: AX = status (see also below)
  6480.         0000h successful
  6481.         BL = host drive (bit 7 set if specified drive is compressed)
  6482.         BH = DoubleSpace sequence number
  6483.         other error code (0101h) (see below)
  6484. Note:    the compressed volume file for the specified compressed drive is
  6485.       host:\DBLSPACE.sequence
  6486. SeeAlso: AX=4A11h/BX=0000h
  6487.  
  6488. Values for status:
  6489.  0000h    successful
  6490.  0100h    bad function
  6491.  0101h    invalid drive
  6492.  0102h    not a compressed drive
  6493.  0103h    drive already swapped
  6494.  0104h    drive not swapped
  6495. --------d-2F4A11BX0002-----------------------
  6496. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  6497.     AX = 4A11h
  6498.     BX = 0002h
  6499.     DL = drive number (0=A:) of compressed drive to swap with its host
  6500. Return: AX = status (0000h,0101h,0102h,0103h) (see AX=4A11h/BX=0001h)
  6501. Note:    this function is intended for use by DBLSPACE.EXE only
  6502. SeeAlso: AX=4A11h/BX=0000h
  6503. --------d-2F4A11BX0003-----------------------
  6504. INT 2F U - DBLSPACE.BIN - GET DEVICE DRIVER ENTRY POINTS
  6505.     AX = 4A11h
  6506.     BX = 0003h
  6507.     CL = drive number (0=A:) of compressed drive
  6508. Return: CL = FFh on error (not compressed drive)
  6509.        = other host drive???
  6510.         ES:SI -> device driver's strategy routine
  6511.         ES:DI -> device driver's interrupt routine
  6512.     BX destroyed
  6513. Note:    the official documentation states that this function is reserved for
  6514.       use by SMARTDRV; this function and AX=4A11h/BX=0004h allow SMARTDRV
  6515.       to apply the same device driver wrapper to DoubleSpaced drives that
  6516.       it applies to regular block devices
  6517. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  6518. --------d-2F4A11BX0004-----------------------
  6519. INT 2F U - DBLSPACE.BIN - SET DEVICE DRIVER ENTRY POINTS
  6520.     AX = 4A11h
  6521.     BX = 0004h
  6522.     CL = drive number (0=A:) of compressed drive
  6523.     ES:SI -> device driver strategy routine to call for drive
  6524.     ES:DI -> device driver interrupt routine to call for drive
  6525.     DX = ???host for compressed drive
  6526. Return: CL = FFh on error
  6527.     BX destroyed
  6528. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6529.       disk-compression software bundled with MS-DOS 6.0
  6530. Note:    the official documentation states that this function is reserved for
  6531.       use by SMARTDRV; this function and AX=4A11h/BX=0003h allow SMARTDRV
  6532.       to apply the same device driver wrapper to DoubleSpaced drives that
  6533.       it applies to regular block devices
  6534. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  6535. --------d-2F4A11BX0005-----------------------
  6536. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  6537.     AX = 4A11h
  6538.     BX = 0005h
  6539.     DL = drive number (0=A:) to assign to new drive
  6540.     ES:SI -> activation record (see below)
  6541. Return: status returned in activation record (see below)
  6542. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  6543.  
  6544. Format of activation record:
  6545. Offset    Size    Description
  6546.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  6547.  02h    BYTE    4Dh ('M') mount command
  6548.  03h    BYTE    error code (set to FFh before calling)
  6549.         01h drive letter not available for DoubleSpace
  6550.         02h drive letter already in use
  6551.         03h no more disk units (increase MaxRemovableDrives in .INI)
  6552.         09h CVF too fragmented
  6553.  04h    BYTE    host drive number (0=A:)
  6554.  05h    ???    DISK_UNIT structure (not documented)
  6555. --------d-2F4A11BX0006-----------------------
  6556. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  6557.     AX = 4A11h
  6558.     BX = 0006h
  6559.     DL = drive number (0=A:) to unmount
  6560. Return: AX = status (0000h,0102h) (see AX=4A11h/BX=0001h)
  6561. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  6562. --------d-2F4A11BX0007-----------------------
  6563. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  6564.     AX = 4A11h
  6565.     BX = 0007h
  6566.     DL = compressed drive number (0=A:)
  6567. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  6568.         0000h successful
  6569.         DS:SI -> free space record (see below)
  6570. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6571.       disk-compression software bundled with MS-DOS 6.0
  6572. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6573.  
  6574. Format of free space record:
  6575. Offset    Size    Description
  6576.  00h    DWORD    total number of sectors in drive's sector heap
  6577.  04h    DWORD    number of free sectors in drive's sector heap
  6578. --------d-2F4A11BX0008-----------------------
  6579. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  6580.     AX = 4A11h
  6581.     BX = 0008h
  6582.     DL = compressed drive number (0=A:)
  6583. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  6584.         0000h successful
  6585.         BX = maximum entries in File Fragment heap
  6586.         CX = available entries in File Fragment heap
  6587. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  6588. --------d-2F4A11BX0009-----------------------
  6589. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  6590.     AX = 4A11h
  6591.     BX = 0009h
  6592.     DL = compressed drive number (0=A:)
  6593. Return: AX = status (see also AX=4A11h/BX=0001h)
  6594.         0000h successful
  6595.         CL = number of DISK_UNIT structures allocated
  6596.             (see AX=4A11h/BX=0005h)
  6597. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6598. --------d-2F4A11BXFFFE-----------------------
  6599. INT 2F U - DBLSPACE.BIN - RELOCATE
  6600.     AX = 4A11h
  6601.     BX = FFFEh
  6602.     ES = segment to which to relocate DBLSPACE.BIN
  6603. Return: ???
  6604. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  6605.       in memory
  6606.     this function also unhooks and discards the code providing this
  6607.       function and AX=4A11h/BX=FFFFh
  6608. SeeAlso: AX=4A11h/BX=FFFFh
  6609. --------d-2F4A11BXFFFF-----------------------
  6610. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  6611.     AX = 4A11h
  6612.     BX = FFFFh
  6613. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  6614. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  6615.       position in memory
  6616. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  6617. --------d-2F4A12CX4D52-----------------------
  6618. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  6619.     AX = 4A12h
  6620.     CX = 4D52h ("MR")
  6621.     DX = 4349h ("CI")
  6622. Return: CX = 4943h ("IC") if installed
  6623.     DX = 524Dh ("RM") if installed
  6624.         ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
  6625. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  6626.       called first, as the latter call is used for the first, ROM-based
  6627.       MRCI server, while this call is used for RAM-based servers which
  6628.       may be partially or entirely replacing a prior server
  6629. SeeAlso: INT 1A/AX=B001h
  6630. --------d-2F4A13-----------------------------
  6631. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  6632.     AX = 4A13h
  6633. Return: AX = 134Ah if supported
  6634.         ES:BX -> entry point record (see below)
  6635. SeeAlso: AX=4A11h/BX=0000h
  6636.  
  6637. Format of entry point record:
  6638. Offset    Size    Description
  6639.  00h    DWORD    pointer to FAR function for ???
  6640.  04h  5 BYTEs    FAR JUMP instruction to ???
  6641. --------N-2F4B-------------------------------
  6642. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  6643.     AH = 4Bh
  6644.     ???
  6645. Return: ???
  6646. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  6647.       file/printer services
  6648. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  6649. --------T-2F4B01-----------------------------
  6650. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  6651.     AX = 4B01h
  6652.     CX:DX -> task switcher entry point (see AX=4B02h)
  6653.     ES:BX = 0000h:0000h
  6654. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  6655. Notes:    called by the task switcher
  6656.     this function is hooked by clients which require notification of task
  6657.       switcher activities; the call must first be passed on to the prior
  6658.       handler with registers unchanged using a simulated interrupt.     On
  6659.       return, the client must build a callback info structure and store
  6660.       the returned ES:BX in the "next" field, then return the address of
  6661.       its own callback info structure.
  6662.     a client program must add itself to the notification chain if it
  6663.       provides services to other programs; before terminating, it must
  6664.       remove itself from the chain by calling the task switcher's entry
  6665.       point with AX=0005h (see AX=4B02h)
  6666.     the task switcher entry point should not be saved, as it is subject to
  6667.       change and will be provided on any notification call
  6668.     the Windows 3.1 Standard Mode supports this API
  6669. SeeAlso: AX=160Bh,AX=4B02h
  6670.  
  6671. Format of callback info structure:
  6672. Offset    Size    Description
  6673.  00h    DWORD    pointer to next callback info structure
  6674.  04h    DWORD    pointer to notification function (see below)
  6675.  08h    DWORD    reserved
  6676.  0Ch    DWORD    address of zero-terminated list of API info structures
  6677.         (see AX=4B02h)
  6678.  
  6679. Notification function is called with:
  6680.     AX = function
  6681.         0000h switcher initialization
  6682.         Return: AX = 0000h if OK to load
  6683.                = nonzero to abort task switcher
  6684.         0001h query suspend
  6685.         BX = session ID
  6686.         Return: AX = 0000h if OK to switch session
  6687.                = 0001h if not
  6688.         0002h suspend session
  6689.         BX = session ID
  6690.         interrupts disabled
  6691.         Return: AX = 0000h if OK to switch session
  6692.                = 0001h if not
  6693.         0003h activate session
  6694.         BX = session ID
  6695.         CX = session status flags
  6696.             bit 0: set if first activation of session
  6697.             bits 1-15: reserved (0)
  6698.         interrupts disabled
  6699.         Return: AX = 0000h
  6700.         0004h session active
  6701.         BX = session ID
  6702.         CX = session status flags
  6703.             bit 0: set if first activation of session
  6704.             bits 1-15: reserved (0)
  6705.         Return: AX = 0000h
  6706.         0005h create session
  6707.         BX = session ID
  6708.         Return: AX = 0000h if OK to create session
  6709.                = 0001h if not
  6710.         0006h destroy session
  6711.         BX = session ID
  6712.         Return: AX = 0000h
  6713.         0007h switcher termination
  6714.         BX = flags
  6715.             bit 0: set if calling switcher is only switcher loaded
  6716.             bits 1-15: reserved (0)
  6717.         Return: AX = 0000h
  6718.     ES:DI -> task switcher entry point (see AX=4B02h)
  6719. Notes:    function 0000h is generally called by the program which controls or
  6720.       invokes the task switcher, rather than by the task switcher itself;
  6721.       the entry point supplied to this function is not necessarily the
  6722.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  6723.       any client indicates that loading is not possible, all clients will
  6724.       be called with function 0007h; thus it is possible for a client to
  6725.       receive a termination notice without a corresponding initialization
  6726.       notice.
  6727.     except for functions 0002h and 0003h, the notification handler is
  6728.       called with interrupts enabled and may make any INT 21h function
  6729.       call; interrupts must not be enabled in functions 0002h and 0003h
  6730.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  6731.       point is no longer valid
  6732. --------T-2F4B02BX0000-----------------------
  6733. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  6734.     AX = 4B02h
  6735.     BX = 0000h
  6736.     ES:DI = 0000h:0000h
  6737. Return: ES:DI = 0000h:0000h if task switcher not loaded
  6738.     ES:DI -> task switcher entry point (see below) if loaded
  6739.         AX = 0000h
  6740. Notes:    the returned entry point is that for the most-recently loaded task
  6741.       switcher; the entry points for prior task switchers may be determined
  6742.       with the "get version" call (see below)
  6743.     this function is supported by PC Tools v8+ CPTASK
  6744. SeeAlso: AX=4A05h,AX=4B03h
  6745.  
  6746. Call task switcher entry point with:
  6747.     AX = 0000h get version
  6748.         Return: CF clear if successful
  6749.                 AX = 0000h
  6750.                 ES:BX -> task switcher version struct (see below)
  6751.             CF set if unsupported function
  6752.     AX = 0001h test memory region
  6753.         ES:DI -> first byte to be tested
  6754.         CX = size of region to test
  6755.         Return: CF clear if successful
  6756.                 AX = memory type of tested region
  6757.                 0000h global
  6758.                 0001h global and local
  6759.                 0002h local (replaced on session switch)
  6760.             CF set if unsupported function
  6761.     AX = 0002h suspend switcher
  6762.         ES:DI -> new task switcher's entry point
  6763.         Return: CF clear if successful
  6764.                 AX = state
  6765.                 0000h switcher has been suspended
  6766.                 0001h switcher not suspended, new switcher must
  6767.                     abort
  6768.                 0002h switcher not suspended, but new switcher
  6769.                     may run anyway
  6770.             CF set if unsupported function
  6771.     AX = 0003h resume switcher
  6772.         ES:DI -> new task switcher's entry point
  6773.         Return: CF clear if successful
  6774.                 AX = 0000h
  6775.             CF set if unsupported function
  6776.     AX = 0004h hook notification chain
  6777.         ES:DI -> callback info structure to be added to chain
  6778.             (see AX=4B01h)
  6779.         Return: CF clear if successful
  6780.                 AX = 0000h
  6781.             CF set if unsupported function
  6782.     AX = 0005h unhook notification chain
  6783.         ES:DI -> callback info structure to be removed from chain
  6784.             (see AX=4B01h)
  6785.         Return: CF clear if successful
  6786.                 AX = 0000h
  6787.             CF set if unsupported function
  6788.     AX = 0006h query API support
  6789.         BX = asynchronous API identifier
  6790.         Return: CF clear if successful
  6791.                 AX = 0000h
  6792.                 ES:BX -> API info structure (see below) for the
  6793.                     client which provides the highest
  6794.                     level of
  6795.             CF set if unsupported function
  6796.  
  6797. Format of task switcher version structure:
  6798. Offset    Size    Description
  6799.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  6800.  02h    WORD    minor version of supported protocol
  6801.  04h    WORD    major version of task switcher
  6802.  06h    WORD    minor version of task switcher
  6803.  08h    WORD    task switcher ID (see AX=4B03h)
  6804.  0Ah    WORD    operation flags
  6805.         bit 0: set if task switcher disabled
  6806.         bits 1-15: reserved (0)
  6807.  0Ch    DWORD    pointer to ASCIZ task switcher name
  6808.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  6809.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  6810.  
  6811. Format of API info structure:
  6812. Offset    Size    Description
  6813.  00h    WORD    size of structure in bytes (000Ah)
  6814.  02h    WORD    API identifier
  6815.         0001h NetBIOS
  6816.         0002h 802.2
  6817.         0003h TCP/IP
  6818.         0004h LAN Manager named pipes
  6819.         0005h Novell NetWare IPX
  6820.  04h    WORD    major version \ of highest version of API for which the support
  6821.  06h    WORD    minor version / level specified in the next field is provided
  6822.  08h    WORD    support level
  6823.         0001h minimal support
  6824.         0002h API-level support
  6825.         0003h switcher compatibility
  6826.         0004h seamless compatibility
  6827. --------T-2F4B03-----------------------------
  6828. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  6829.     AX = 4B03h
  6830.     ES:DI -> task switcher entry point (see AX=4B02h)
  6831. Return: AX = 0000h
  6832.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  6833. Notes:    if a task switcher has determined that it is the first to be loaded, it
  6834.       must allocate an identifier for itself and provide this function to
  6835.       all subsequent task switchers; if it is not the first to be loaded,
  6836.       it must call this function to allocate an ID.     The switcher ID is
  6837.       used as the high four bits of all session identifiers to ensure
  6838.       unique session IDs.
  6839.     if no more switcher IDs are available, the new task switcher making the
  6840.       call must terminate or disable itself
  6841.     the task switcher providing the identifiers may call the new task
  6842.       switcher's entry point as needed
  6843.     this call is available from within DOSSHELL even if the task switcher
  6844.       is not installed
  6845.     this function is supported by PC Tools v8+ CPTASK, but appears to
  6846.       always return an ID of 0000h
  6847. SeeAlso: AX=4B02h,AX=4B04h
  6848. --------T-2F4B04-----------------------------
  6849. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  6850.     AX = 4B04h
  6851.     BX = switcher ID
  6852.     ES:DI -> task switcher entry point (see AX=4B02h)
  6853. Return: AX = 0000h
  6854.     BX = status
  6855.         0000h successful
  6856.         other error (invalid ID or ID not allocated)
  6857. Notes:    called by a task switcher when it exits, unless it was the first loaded
  6858.       and is providing the support for AX=4B03h and AX=4B04h
  6859.     the task switcher providing the identifiers may call the terminating
  6860.       task switcher's entry point as needed
  6861.     this call is available from within DOSSHELL even if the task switcher
  6862.       is not installed
  6863.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  6864.       sucessfully no matter which ID is given
  6865. SeeAlso: AX=4B02h,AX=4B03h
  6866. --------T-2F4B05-----------------------------
  6867. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  6868.     AX = 4B05h
  6869.     ES:BX = 0000h:0000h
  6870.     CX:DX -> task switcher entry point (see AX=4B02h)
  6871. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  6872. Notes:    called by task switcher
  6873.     clients with instance data should hook this call, pass it through to
  6874.       the previous handler with unchanged registers using a simulated
  6875.       interrupt.  On return, the client should create a startup info
  6876.       structure (see below), store the returned ES:BX in the "next"
  6877.       field, and return the address of the created structure in ES:BX
  6878.     all MS-DOS function calls are available from within this call
  6879. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  6880.  
  6881. Format of startup info structure:
  6882. Offset    Size    Description
  6883.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  6884.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  6885.  06h    DWORD    0000h:0000h (ignored)
  6886.  0Ah    DWORD    ignored
  6887.  0Eh    DWORD    pointer to instance data records
  6888.  
  6889. Format of one instance data record in array:
  6890. Offset    Size    Description
  6891.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  6892.  04h    WORD    size of instance data
  6893. --------W-2F4B20-----------------------------
  6894. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  6895.     AX = 4B20h
  6896. Return: AX = 0000h if successful
  6897.         DX:CX -> 256-byte buffer for pathname and commandline (see below)
  6898. Note:    when the Windows function ExitWindows is called with an exit code of
  6899.       44h, WIN.COM executes the program specified in the returned buffer
  6900.       and then restarts Windows
  6901.  
  6902. Format of buffer:
  6903. Offset    Size    Description
  6904.  00h 128 BYTEs    ASCIZ pathname of program to execute
  6905.  80h 128 BYTEs    commandline for program
  6906. ----------2F4C-------------------------------
  6907. INT 2F U - Advanced Power Management
  6908.     AH = 4Ch
  6909.     AL = function
  6910.         00h version check
  6911.         01h suspend system requested
  6912.         FFh suspend/resume battery notification
  6913.     ???
  6914. Return: ???
  6915. ----------2F4D-------------------------------
  6916. INT 2F U - ???
  6917.     AH = 4Dh
  6918.     ???
  6919. Return: ???
  6920. Note:    reportedly called by Kana Kanji Converter and MSKK
  6921. --------N-2F4E53BL00-------------------------
  6922. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  6923.     AX = 4E53h ("NS")
  6924.     BL = 00h (function "installation check")
  6925.     BH = module ID (see below)
  6926. Return: AX = 0000h if specified module installed
  6927.     BX = 4E53h if installed
  6928. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  6929.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  6930. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  6931.  
  6932. Values for module ID:
  6933.  01h    SilverCACHE
  6934.  02h    Workstation
  6935.  03h    NetBIOS
  6936.  04h    Peer
  6937.  20h    NS Share
  6938.  80h    Netware help TSR
  6939. --------N-2F4E53BL01-------------------------
  6940. INT 2F - SilverNET - GET RUNTIME PARAMETER
  6941.     AX = 4E53h ("NS")
  6942.     BL = 01h (function "get runtime parameter")
  6943.     BH = module ID (see AX=4E53h/BL=00h)
  6944.     CX = parameter index (see below)
  6945. Return: AX = WORD value at specified index
  6946. Desc:    retrieve a word of data from the specified SilverNET module
  6947.  
  6948. Values for Peer parameter index (* = read-only):
  6949.  00h *    maximum outstanding SMB buffers
  6950.  02h *    maximum logged-in nodes
  6951.  04h *    number of shareable resources
  6952.  06h *    number of characters to print per time slice
  6953.  08h *    number of printers that can be shared
  6954.  0Ah *    number of nodes logged in
  6955.  0Ch *    number of files to allow opened
  6956.  0Eh    how fast to despool (/PSLICE)
  6957.  10h    audit flag
  6958.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  6959.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  6960.     else DOS SFT)
  6961.  36h    spool flag
  6962.     bit 0: LPT1 needs despooling
  6963.     bit 1: LPT2 needs despooling
  6964.     bit 2: LPT2 needs despooling
  6965.     bit 4: COM1 needs despooling
  6966.     bit 5: COM2 needs despooling
  6967.     bit 6: COM3 needs despooling
  6968.  
  6969. Values for NS Share parameter index (* = read-only):
  6970.  00h    version number (high byte = minor, low byte = major)
  6971.  10h *    segment of first lock record (other records in consecutive paragraphs)
  6972.     (if PSP field = 0000h, lock record is free)
  6973.  12h *    maximum possible number of lock records
  6974.  14h *    starting segment of sharing buffer
  6975.     (NS Share's sharing records are identical to DOS SHARE except that
  6976.     fields which are normally offsets into SHARE are segment numbers)
  6977.  18h *    size of sharing buffer in paragraphs
  6978.  1Ah *    total free paragraphs in sharing buffer
  6979.  1Ch *    current number of shared files
  6980.  1Eh *    current number of locked records
  6981.  
  6982. Values for Workstation parameter index (* = read-only):
  6983.  00h    version number (high byte = minor, low byte = major)
  6984.  02h *    size of each network buffer for file operations
  6985.  04h *    number of redirector file buffers
  6986.  06h *    size of each print cache buffer
  6987.  08h *    number of network LPT printers
  6988.  0Ch    flush time in ticks (idle time on network printer before flushing)
  6989.  0Eh    (16 WORDs) last active time for each printer
  6990.  2Eh *    stub segment if program split into two parts
  6991.  60h    receive name number for datagram listens
  6992.  62h *    18-byte machine name
  6993.  74h *    LASTDRIVE (01h = A:, etc.)
  6994.  7Ch    row number of message box on screen
  6995.  7Eh    message time in clock ticks
  6996.  82h *    number of network adapters in use
  6997.  84h    station ID broadcast flag (never set on redirectors)
  6998.  96h *    NetBIOS names left
  6999.  98h *    NCBs left
  7000.  9Ah *    sessions left
  7001.  A2h *    total number of network printers (LPT+COM)
  7002.  A4h *    number of serial network printers
  7003.  A8h *    segment containing file cache buffers
  7004.  AAh *    segment containing print cache buffers
  7005.  ACh *    bytes remaining free in HMA before program loaded
  7006.  AEh *    start of free memory in HMA
  7007.  B2h *    flag: using HMA
  7008. --------N-2F4E53BL02-------------------------
  7009. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  7010.     AX = 4E53h ("NS")
  7011.     BL = 02h (function "set runtime parameters")
  7012.     BH = module ID (see AX=4E53h/BL=00h)
  7013.     CX = parameter index (see AX=4E53h/BL=01h)
  7014.     DX = new value for specified parameter
  7015. Desc:    set a WORD value in the specified SilverNET module
  7016. Note:    not all indexed parameters are writable; modifying a read-only
  7017.       parameter can result in system crashes
  7018. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  7019. ----------2F53-------------------------------
  7020. INT 2F U - POWER.EXE - APM event broadcasting???
  7021.     AH = 53h
  7022.     AL = event???
  7023.         05h CPU idle
  7024.         0Bh PM event broadcast API
  7025. Return: ???
  7026. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  7027.       and PC-Cache v8.0
  7028. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  7029. ----------2F530B-----------------------------
  7030. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  7031.     AX = 530Bh
  7032.     BX = subfunction
  7033.         0003h ???
  7034.         0004h ???
  7035.     ???
  7036. Return: ???
  7037. Note:    it appears that subfunction 0003h reads or restores the current mouse
  7038.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  7039.       the converse
  7040. ----------2F5400-----------------------------
  7041. INT 2F U - POWER.EXE - INSTALLATION CHECK
  7042.     AX = 5400h
  7043. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  7044.     BX = 504Dh ("PM")
  7045.     CF clear
  7046. Note:    called by MS Windows 3.1 POWER.DRV
  7047. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  7048. ----------2F5401-----------------------------
  7049. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  7050.     AX = 5401h
  7051.     BX = function
  7052.         0000h get status
  7053.         Return: BL = power management status
  7054.                 bit 0: CPU idle
  7055.                 bit 1: ???
  7056.         ???
  7057. Return: AX = function status
  7058.         0000h success
  7059.         else  error code
  7060. Note:    called by MS Windows 3.1 POWER.DRV
  7061. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  7062. ----------2F5402-----------------------------
  7063. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  7064.     AX = 5402h
  7065.     BH = subfunction
  7066.         00h get
  7067.         other set
  7068.         BL = detection strategy (00h-0Fh or FFh)
  7069. Return: BX = current/new detection strategy
  7070. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  7071. ----------2F5403-----------------------------
  7072. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  7073.     AX = 5403h
  7074.     BX = new power management setting or 0000h to get current setting
  7075. Return: AX = status
  7076.         0000h successful
  7077.         BX = power management setting (see below)
  7078.         other error code
  7079. SeeAlso: AX=5401h,AX=5480h
  7080.  
  7081. Values for power management setting:
  7082.  0001h-0005h "min"
  7083.  0006h         "reg"
  7084.  0007h-0008h "max"
  7085. --------t-2F5453-----------------------------
  7086. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  7087.     AX = 5453h
  7088.     BX = subfunction
  7089.         00h installation check
  7090.         CX = 0000h
  7091.         DS:SI -> 8-char blank-padded name
  7092.         Return: AX = FFFFh installed
  7093.                 CX = ID number of already-installed copy
  7094.                = anything else, not installed
  7095.                 CX = ID number for TSR when installed
  7096.         01h get user parameters
  7097.         CX = TSR ID number
  7098.         Return: AX = 0000h successful
  7099.                ES:BX -> user parameter block (see below)
  7100.                = nonzero failed
  7101.         02h check if hotkey in use
  7102.         CL = scan code of hot key
  7103.         Return: AX = FFFFh hot key conflicts with another TSR
  7104.                  otherwise safe to use the hotkey
  7105.         03h replace default critical error handler
  7106.         CX = TSR ID number
  7107.         DS:SI -> new routine for INT 24h
  7108.         Return: AX = nonzero, unable to install new handler
  7109.         04h get internal data area
  7110.         CX = TSR ID number
  7111.         Return: AX = 0000h
  7112.                 ES:BX -> TSR's internal data area (see below)
  7113.                = nonzero, TSR not found
  7114.         05h set multiple hot keys
  7115.         CX = TSR ID number
  7116.         DL = number of additional hot keys to allocate
  7117.         DS:SI -> table of hot keys
  7118.             BYTE  hotkey scan code
  7119.             BYTE  hotkey shift state
  7120.             BYTE  flag value to pass to TSR (nonzero)
  7121.         Return: AX = nonzero, unable to install hot keys
  7122.         06h - 0Fh reserved
  7123.         10h enable TSR
  7124.         CX = TSR ID number
  7125.         Return: AX = nonzero, unable to enable
  7126.         11h disable TSR
  7127.         CX = TSR ID number
  7128.         Return: AX = nonzero, unable to disable
  7129.         12h unload TSR
  7130.         CX = TSR ID number
  7131.         Return: AX = nonzero, invalid TSR number
  7132.         Note: if any interrupts used by TSR have been grabbed by
  7133.             another TSR, the TesSeRact routines will wait until
  7134.             it is safe to remove the indicated TSR from memory
  7135.         13h restart TSR
  7136.         CX = TSR ID number of TSR which was unloaded but is still in
  7137.              memory
  7138.         Return: AX = nonzero, unable to restart TSR
  7139.         14h get status word
  7140.         CX = TSR ID number
  7141.         Return: AX = FFFFh invalid ID number
  7142.                = other, successful
  7143.                 BX = bit flags
  7144.         15h set status word
  7145.         CX = TSR ID number
  7146.         DX = new bit flags
  7147.         Return: AX = nonzero, unable to set status word
  7148.         16h get INDOS state at popup
  7149.         CX = TSR ID number
  7150.         Return: AX = 0000h successful
  7151.                 BX = value of INDOS flag
  7152.         17h - 1Fh reserved
  7153.         20h call user procedure
  7154.         CX = TSR ID number
  7155.         ES:DI -> user-defined data
  7156.         Return: AX = 0000h successful
  7157.         21h stuff keystrokes into keyboard buffer
  7158.         CX = TSR ID number
  7159.         DL = speed
  7160.             00h stuff keystrokes only when buffer is empty
  7161.             01h stuff up to four keystrokes per clock tick
  7162.             02h stuff up to 15 keystrokes per clock tick
  7163.         DH = scan code flag
  7164.             if zero, buffer contains alternating ASCII and scan codes
  7165.             if nonzero, buffer contains only ASCII codes
  7166.         SI = number of keystrokes
  7167.         ES:DI -> buffer to stuff
  7168.         Return: AX = 0000h success
  7169.                  F0F0h user aborted with ^C or ^Break
  7170.                  other unable to stuff keystrokes
  7171.         22h (v1.10) trigger popup
  7172.         CX = TSR ID number
  7173.         Return: AX = 0000h success, TSR will either pop up or beep to
  7174.                    indicate that it is unable to pop up
  7175.                  nonzero invalid ID number
  7176.         23h (v1.10) invoke TSR's background function
  7177.         CX = TSR ID number
  7178.         Return: AX = 0000h success
  7179.                  FFFFh not safe to call background function
  7180.                  nonzero invalid ID number
  7181.         24h - 2Fh reserved
  7182. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  7183.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  7184.       do the SWAP?? programs by Innovative Data Concepts.
  7185.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  7186.       of the user parameter block) using the name "AVATAR  "
  7187. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  7188. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  7189.  
  7190. Values for TesSeract names:
  7191.  "AVATAR  "    AVATAR.SYS
  7192.  "QeditTSR"    TSR version of SemWare's Qedit editor
  7193.  "SCRNBLNK"    Trusted Access screen blanker
  7194.  
  7195. Format of User Parameter Block:
  7196. Offset    Size    Description
  7197.  00h  8 BYTEs    blank-padded TSR name
  7198.  08h    WORD    TSR ID number
  7199.  0Ah    DWORD    bitmap of supported functions
  7200.  0Eh    BYTE    scan code of primary hotkey
  7201.             00h = pop up when shift states match
  7202.             FFh = no popup (if shift state also FFh)
  7203.  0Fh    BYTE    shift state of primary hotkey
  7204.             FFh = no popup (if scan code also FFh)
  7205.  10h    BYTE    number of secondary hotkeys
  7206.  11h    DWORD    pointer to extra hotkeys set by func 05h
  7207.  15h    WORD    current TSR status flags
  7208.  17h    WORD    PSP segment of TSR
  7209.  19h    DWORD    DTA for TSR
  7210.  1Dh    WORD    default DS for TSR
  7211.  1Fh    DWORD    stack at popup
  7212.  23h    DWORD    stack at background invocation
  7213. Index:    hotkeys;TesSeRact TSR interface
  7214.  
  7215. Format of TSR internal data area:
  7216. Offset    Size    Description
  7217.  00h    BYTE    revision level of TesSeRact library
  7218.  01h    BYTE    type of popup in effect
  7219.  02h    BYTE    INT 08 occurred since last invocation
  7220.  03h    BYTE    INT 13 occurred since last invocation
  7221.  04h    BYTE    active interrupts
  7222.  05h    BYTE    active soft interrupts
  7223.  06h    BYTE    DOS major version
  7224.  07h    BYTE    how long to wait before popping up
  7225.  08h    DWORD    pointer to INDOS flag
  7226.  0CH    DWORD    pointer to DOS critical error flag
  7227.  10h    WORD    PSP segment of interrupted program
  7228.  12h    WORD    PSP segment of prog interrupted by INT 28
  7229.  14h    DWORD    DTA of interrupted program
  7230.  18h    DWORD    DTA of program interrupted by INT 28
  7231.  1Ch    WORD    SS of interrupted program
  7232.  1Eh    WORD    SP of interrupted program
  7233.  20h    WORD    SS of program interrupted by INT 28
  7234.  22h    WORD    SP of program interrupted by INT 28
  7235.  24h    DWORD    INT 24 of interrupted program
  7236.  28h  3 WORDs    DOS 3+ extended error info
  7237.  2Eh    BYTE    old BREAK setting
  7238.  2Fh    BYTE    old VERIFY setting
  7239.  30h    BYTE    were running MS WORD 4.0 before popup
  7240.  31h    BYTE    MS WORD 4.0 special popup flag
  7241.  32h    BYTE    enhanced keyboard call in use
  7242.  33h    BYTE    delay for MS WORD 4.0
  7243. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  7244.     DWORD    old interrupt vector
  7245.     BYTE    interrupt number
  7246.     WORD    offset in TesSeRact code segment of new interrupt handler
  7247. ----------2F5480-----------------------------
  7248. INT 2F U - POWER.EXE - GET/SET ???
  7249.     AX = 5480h
  7250.     BX = direction
  7251.         0000h get
  7252.         other set
  7253.     CX = size of buffer (at least 0010h)
  7254.     DS:SI -> buffer
  7255. Return: AX = status
  7256.         0000h successful
  7257.         other error code
  7258. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  7259. ----------2F5481-----------------------------
  7260. INT 2F U - POWER.EXE - GET STATISTICS
  7261.     AX = 5481h
  7262.     BX = ??? (0000h or 0001h)
  7263.     CX = length of buffer
  7264.     DS:SI -> buffer for statistics (see below)
  7265. Return: AX = status
  7266.         0000h successful
  7267.         else  error code
  7268. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  7269.  
  7270. Format of statistics:
  7271. Offset    Size    Description
  7272.  00h    DWORD    total ???
  7273.  04h    DWORD    ??? during which CPU was idle (divide by previous to get idle
  7274.             rate)
  7275. ----------2F5482-----------------------------
  7276. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  7277.     AX = 5482h
  7278.     BX = new polling frequency or 0000h to get current frequency
  7279. Return: AX = 0000h (successful)
  7280.     BX = current frequency if BX=0000h on entry
  7281. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  7282. ----------2F548F-----------------------------
  7283. INT 2F U - POWER.EXE - GET/SET ???
  7284.     AX = 548Fh
  7285.     BX = ??? or 0000h to get current ???
  7286. Return: AX = 0000h (successful)
  7287.     BX = current ???
  7288.     CX = ???
  7289. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  7290. --------l-2F5500-----------------------------
  7291. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  7292.     AX = 5500h
  7293. Return: AX = 0000h if an instance of COMMAND.COM is already running
  7294.     DS:SI -> entry point table
  7295. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  7296.       been moved into the HMA; only the primary COMMAND.COM retains this
  7297.       portion
  7298.     procedures called from a dispatcher in COMMAND's resident portion;
  7299.       most assume that the segment address of the resident portion is on
  7300.       the stack and are thus not of general use
  7301. SeeAlso: AX=5501h
  7302. --------l-2F5501-----------------------------
  7303. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  7304.     AX = 5501h
  7305. Return: ???
  7306. Note:    used to determine whether the caller is the first instance of ROM
  7307.       COMMAND.COM
  7308. SeeAlso: AX=5500h
  7309. --------R-2F5600DXFFFF-----------------------
  7310. INT 2F - INTERLNK - INSTALLATION CHECK
  7311.     AX = 5600h
  7312.     DX = FFFFh
  7313.     BL = instance number (00h = any, 01h = first loaded, etc.)
  7314. Return: AL = FFh if installed
  7315.         BL = instance number
  7316.         CX = ???
  7317.         DX = resident CS
  7318. SeeAlso: AX=5601h,AX=5602h
  7319. --------R-2F5601DXFFFF-----------------------
  7320. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  7321.     AX = 5601h
  7322.     DX = FFFFh
  7323.     BH = drive number (0=A:)
  7324. Return: (as for AL=00h if redirected drive)
  7325. SeeAlso: AX=5600h
  7326. --------R-2F5602DXFFFF-----------------------
  7327. INT 2F - INTERLNK - GET ???
  7328.     AX = 5602h
  7329.     DX = FFFFh
  7330. Return: CX = ???
  7331. SeeAlso: AX=5600h
  7332. ----------2F57-------------------------------
  7333. INT 2F U - ???
  7334.     AH = 57h
  7335.     ???
  7336. Return: ???
  7337. Note:    reportedly used by Iomega Corp.
  7338. --------v-2F6282-----------------------------
  7339. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  7340.     AX = 6282h
  7341.     CX:DX -> ??? or 0000h:0000h
  7342.     DI = 0000h ???
  7343.          FFFFh ???
  7344.          other segment of ???
  7345. Return: BX = 0062h
  7346. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  7347.       (DATAMON only)
  7348. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  7349. --------v-2F6284BX0000-----------------------
  7350. INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK
  7351.     AX = 6284h
  7352.     BX = 0000h
  7353.     CX = 0000h
  7354. Return: AX = segment of resident code
  7355.     BX = 5555h
  7356.     CX = 5555h
  7357. --------v-2F6284BX0001-----------------------
  7358. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  7359.     AX = 6284h
  7360.     BX = 0001h
  7361.     CX = 0001h
  7362. Return: AX:BX -> ???
  7363.     CX = BX
  7364. --------v-2F6284BX0002-----------------------
  7365. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  7366.     AX = 6284h
  7367.     BX = 0002h
  7368.     CX = 0002h
  7369. Return: AX = ???
  7370.     BX = ???
  7371.     CX = AX
  7372.     DX = BX
  7373. --------v-2F6284BX0003-----------------------
  7374. INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS
  7375.     AX = 6284h
  7376.     BX = 0003h
  7377.     CX = flags
  7378.         bit 12: ???
  7379.         10: ???
  7380.          5: ???
  7381.          3: ???
  7382.     DX = flags
  7383.         bit 15: ???
  7384. --------v-2F6284BX0004-----------------------
  7385. INT 2F U - PC Tools v8.0+ DATAMON - ???
  7386.     AX = 6284h
  7387.     BX = 0004h
  7388.     CX = 0004h
  7389. Return: AX = 5555h
  7390.     BX = ??? (0800h)
  7391.     CX = ??? (FCCCh)
  7392. --------V-2F6400-----------------------------
  7393. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  7394.     AX = 6400h
  7395. Return: AL = 00h not installed
  7396.          FFh installed
  7397. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  7398. SeeAlso: INT 10/AX=5555h
  7399. Index:    screen saver;SCRNSAV2
  7400. --------N-2F7000-----------------------------
  7401. INT 2F - License Service API - INSTALLATION CHECK
  7402.     AX = 7000h
  7403.     CX = license server index (0000h to 001Fh)
  7404. Return: AL = status
  7405.         00h not installed
  7406.         FFh installed
  7407. Notes:    The License Service API is being maintained by Microsoft but is being
  7408.       supported by a large number of companies including Apple, Banyan,
  7409.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  7410.       and Wordperfect (not a complete list!)
  7411.     Each license service provider must search for the next free index
  7412.       slot to use
  7413. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  7414. --------N-2F7001-----------------------------
  7415. INT 2F - License Service API - REQUEST LICENSE
  7416.     AX = 7001h
  7417.     CX = license server index (0000h to 001Fh)
  7418.     DS:DX -> SLSREQEUST structure (see below)
  7419. Return: AX = status
  7420.         0000h success
  7421.         else  provider error code
  7422.     ES:BX = provider specific handle for the license context
  7423. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  7424.  
  7425. Format of SLSREQUEST structure:
  7426. Offset    Size    Description
  7427.  00h    DWORD    (return) status code
  7428.  04h    DWORD    (return) handle identifying context
  7429.  08h    DWORD    (call) address of Publisher string
  7430.  0Ch    DWORD    (call) address of Product string
  7431.  10h    DWORD    (call) address of Version string
  7432.  14h    DWORD    units required
  7433.  18h    DWORD    address of comment string
  7434.  1Ch    DWORD    address of SLSCHALLENGE structure (see below)
  7435.  
  7436. Format of SLSCHALLENGE structure:
  7437. Offset    Size    Description
  7438.  00h    DWORD    algorithm (currently always 1)
  7439.  04h    DWORD    secret to be challenged (1-255)
  7440.  08h    DWORD    size of challenge in bytes (1-255)
  7441.  0Ch  N BYTEs    challenge data
  7442. --------N-2F7002-----------------------------
  7443. INT 2F - License Service API - RELEASE LICENSE
  7444.     AX = 7002h
  7445.     CX = license server index (0000h to 001Fh)
  7446.     DS:DX -> SLSRELEASE structure (see below)
  7447.     ES:BX = provider specific handle for the license context
  7448. Return: AL = status
  7449.         00h not installed
  7450.         FFh installed
  7451. SeeAlso: AX=7001h,AX=7005h
  7452.  
  7453. Format of SLSRELEASE structure:
  7454. Offset    Size    Description
  7455.  00h    DWORD    handle indentifying license context
  7456.  04h    DWORD    total units consumed
  7457.  08h    DWORD    address of comment string
  7458. --------N-2F7003-----------------------------
  7459. INT 2F - License Service API - UPDATE
  7460.     AX = 7003h
  7461.     CX = license server index (0000h to 001Fh)
  7462.     DS:DX -> SLSUPDATE structure
  7463.     ES:BX = provider specific handle for the license context
  7464. Return: AL = status
  7465.         00h not installed
  7466.         FFh installed
  7467. SeeAlso: AX=7004h,AX=7005h
  7468.  
  7469. Format of SLSUPDATE structure:
  7470. Offset    Size    Description
  7471.  00h    DWORD    (return) status code
  7472.  04h    DWORD    (call) handle identifying license context
  7473.  08h    DWORD    (call) total units consumed
  7474.  0Ch    DWORD    additional units required
  7475.  10h    DWORD    address of comment string
  7476.  14h    DWORD    address of SLSCHALLENGE structure (see AX=7001h)
  7477. --------N-2F7004-----------------------------
  7478. INT 2F - License Service API - GET ERROR
  7479.     AX = 7004h
  7480.     CX = license server index (0000h to 001Fh)
  7481.     DS:DX -> SLSGETERROR structure (see below)
  7482.     ES:BX = provider specific handle for the license context
  7483. Return: AL = status
  7484.         00h not installed
  7485.         FFh installed
  7486. SeeAlso: AX=7000h,AX=7001h
  7487.  
  7488. Format of SLSGETERROR structure:
  7489. Offset    Size    Description
  7490.  00h    DWORD    (return) status code
  7491.  04h    DWORD    handle identifying license context
  7492.  08h    DWORD    error code
  7493.  0Ch    DWORD    buffer size in bytes
  7494.  10h  N BYTEs    data buffer
  7495. --------N-2F7005-----------------------------
  7496. INT 2F - License Service API - QUERY LICENSE
  7497.     AX = 7005h
  7498.     CX = license server index (0000h to 001Fh)
  7499.     DS:DX -> SLSQUERY structure (see below)
  7500.     ES:BX = provider specific handle for the license context
  7501. Return: AL = status
  7502.         00h not installed
  7503.         FFh installed
  7504. SeeAlso: AX=7001h,AX=7002h
  7505.  
  7506. Format of SLSQUERY structure:
  7507. Offset    Size    Description
  7508.  00h    DWORD    (return) status code
  7509.  04h    DWORD    handle identifying license context
  7510.  08h    DWORD    information index
  7511.  0Ch    DWORD    buffer size in bytes
  7512.  10h  N BYTEs    data buffer
  7513. --------d-2F7200-----------------------------
  7514. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  7515.     AX = 7200h
  7516. Return: AL = FFh if installed
  7517.         ES = segment of device driver header (see below)
  7518. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  7519.  
  7520. Format of device driver header:
  7521. Offset    Size    Description
  7522.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  7523.  0Ah    BYTE    number of subunits (drives) supported by driver
  7524.  0Bh  3 BYTEs    signature "SRD"
  7525.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  7526.  12h  4 BYTEs    ASCII driver version string "N.NN"
  7527.  16h    BYTE    00h
  7528.  17h    BYTE    configuration format version (currently 00h)
  7529.  18h    WORD    offset of drive configuration data
  7530. --------N-2F7A00-----------------------------
  7531. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  7532.     AX = 7A00h
  7533. Return: AL = 00h not installed
  7534.        = FFh installed
  7535.         ES:DI -> FAR entry point for routines accessed exclusively
  7536.             through INT 7A in NetWare versions through 2.0a.  Call
  7537.             with same values as INT 7A
  7538. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  7539. --------N-2F7A10-----------------------------
  7540. INT 2F U - Novell NetWare - TBMI v1.1+ - GET TBMI STATUS
  7541.     AX = 7A10h
  7542. Return: DH = major TBMI version number
  7543.     DL = minor TBMI version number (01h for v1.1)
  7544.     CX = segment address of TBMI resident part
  7545.     BX = status word of TBMI (see below)
  7546. Note:    TBMI is the Task-Switched Buffer Manager Interface
  7547. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  7548.  
  7549. Bitfields for status word:
  7550.  bit 0    INT2F intercepted by TBMI
  7551.  bit 1    INT7A intercepted by TBMI
  7552.  bit 2    INT64 intercepted by TBMI
  7553.  bits 3-14 reserved or unused ???
  7554.  bit 15 outstanding task ID was detected
  7555. --------N-2F7A11-----------------------------
  7556. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT2F HANDLERS
  7557.     AX = 7A11h
  7558. Return: ES:BX -> old INT 2F handler
  7559.     DS:DX -> TBMI INT 2F handler
  7560. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h,AX=7A1Ah
  7561. --------N-2F7A12-----------------------------
  7562. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT64 HANDLERS
  7563.     AX = 7A12h
  7564. Return: ES:BX -> old INT 64 handler
  7565.     DS:DX -> TBMI INT 64 handler
  7566. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  7567. --------N-2F7A13-----------------------------
  7568. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT7A HANDLERS
  7569.     AX = 7A13h
  7570. Return: ES:BX -> old INT 7A handler
  7571.     DS:DX -> TBMI INT 7A handler
  7572. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  7573. --------N-2F7A14-----------------------------
  7574. INT 2F U - Novell NetWare - TBMI v1.1+ - GET STATISTICS
  7575.     AX = 7A14h
  7576.     CX = statistic to retrieve
  7577.         0000h available diagnostic functions???
  7578.         Return: CX = maximum available function??? (000Ch for v2.0)
  7579.         0001h buffers in use
  7580.         Return: CX = TBMI buffers currently in use
  7581.         0002h maximum buffers used
  7582.         Return: CX = maximum number of buffers ever in use
  7583.         0003h unavailable buffers
  7584.         Return: CX = count of unavailable TBMI buffers
  7585.         0004h old interrupt usage
  7586.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  7587.                 INT 64, and INT 7A
  7588.         0005h far call usage
  7589.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  7590.                 including internal accesses)
  7591.         0006h task buffering
  7592.         Return: CX = TBMI task buffering status (enabled/disabled or
  7593.                 disable/enable switch count???)
  7594.         0007h current task ID
  7595.         Return: CX = TBMI current task ID number (0000h if ???)
  7596.         0008h outstanding ID count
  7597.         Return: CX = number of outstanding TBMI IDs
  7598.         0009h configured ECBs
  7599.         Return: CX = number of TBMI Event Control Blocks configured
  7600.         000Ah configured data ECBs
  7601.         Return: CX = number of TBMI data ECBs configured
  7602.         000Bh configured sockets
  7603.         Return: CX = number of TBMI sockets configured (from NETCFG)
  7604.         000Ch current sockets
  7605.         Return: CX = number of TBMI sockets currently in use
  7606. Return: BX = maximum supported subfunction (000Ch)
  7607. SeeAlso: AX=7A10h
  7608. --------N-2F7A15-----------------------------
  7609. INT 2F OU - Novell NetWare - TBMI v1.1 only - RESET ???
  7610.     AX = 7A15h
  7611. Return: BX = new value of ???
  7612. Desc:    set ??? to its default value
  7613. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7614. SeeAlso: AX=7A17h
  7615. --------N-2F7A16-----------------------------
  7616. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  7617.     AX = 7A16h
  7618.     CX = ???
  7619.     ???
  7620. Return: ???
  7621. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7622. --------N-2F7A17-----------------------------
  7623. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  7624.     AX = 7A17h
  7625.     ???
  7626. Return: BX = old value of ???
  7627.     CX = new value of ???
  7628. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7629. SeeAlso: AX=7A15h
  7630. --------N-2F7A18-----------------------------
  7631. INT 2F U - Novell NetWare - TASKID v1.0 - INSTALLATION CHECK
  7632.     AX = 7A18h
  7633. Return: AL = FFh if installed
  7634.         BX = configuration flags (see below)
  7635.         CX = resident code segment
  7636. SeeAlso: AX=7A10h
  7637.  
  7638. Bitfields for configuration flags:
  7639.  bit 0    INT 2F hooked
  7640.  bit 3    INT 08 hooked
  7641.  other    unused
  7642. --------N-2F7A19-----------------------------
  7643. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 08 HANDLERS
  7644.     AX = 7A19h
  7645. Return: AL = FFh
  7646.     DS:DX -> TASKID INT 08 handler
  7647.     ES:BX -> original INT 08 handler
  7648. --------N-2F7A1A-----------------------------
  7649. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 2F HANDLERS
  7650.     AX = 7A1Ah
  7651. Return: AL = FFh
  7652.     DX:DX -> TASKID INT 2F handler
  7653.     ES:BX -> original INT 2F handler
  7654. SeeAlso: AX=7A11h,AX=7A19h
  7655. --------N-2F7A1B-----------------------------
  7656. INT 2F U - Novell NetWare - TASKID v1.0 - GET DIAGNOSTICS INFORMATION
  7657.     AX = 7A1Bh
  7658.     CX = desired information
  7659.         0000h supported functions
  7660.         0001h TASKID ID number
  7661.         Return: CX = ID number
  7662.         0002h set-ID count
  7663.         Return: CX = ID set count
  7664. Return: AL = FFh
  7665.     BX = highest supported subfunction number (0002h)
  7666. SeeAlso: AX=7A14h,AX=7A18h
  7667. --------N-2F7A1C-----------------------------
  7668. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7669.     AX = 7A1Ch
  7670.     BP = ???
  7671.     CX:DX = ???
  7672. Return: AX = 70FFh
  7673. --------N-2F7A1D-----------------------------
  7674. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7675.     AX = 7A1Dh
  7676.     ???
  7677. Return: ES = ???
  7678.     ???
  7679.     SI destroyed
  7680. --------N-2F7A1E-----------------------------
  7681. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7682.     AX = 7A1Eh
  7683.     ES:SI -> ???
  7684.     ???
  7685. Return: ???
  7686. --------N-2F7A20BX0000-----------------------
  7687. INT 2F - Novell NetWare - Advanced NetWare 4.0 DOS Requester - GET CALL ADDRESS
  7688.     AX = 7A20h
  7689.     BX = 0000h
  7690. Return: AX = 0000h on success
  7691.         ES:BX -> far call address for DOS Requester
  7692. Note:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  7693.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  7694.       is backward compatible with NetWare 2.1x through 3.11 servers as
  7695.       well.     Note that there was a NetWare 4.0 in the early 1980's, which
  7696.       can cause confusion.
  7697. --------N-2F7A40-----------------------------
  7698. INT 2F - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  7699.     AX = 7A40h
  7700. Return: AX = 7AFFh if installed
  7701.         BX = ???
  7702.         bit 0: ???
  7703.         bit 1: ???
  7704.         bits 15-2: ???
  7705.         CX = version (CH=major, CL=minor)
  7706.         DX = 0000h
  7707.         ES:DI -> entry point for TCP/IP stack (see below)
  7708. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  7709.     this function is also supported by the Beame&Whiteside BWLWP40 shim,
  7710.       but it only returns AL and ES:DI, and does not support AX=7A41h
  7711. SeeAlso: AX=7A41h,INT 60"Excelan"
  7712.  
  7713. Call entry point with:
  7714.     ES:SI -> parameter block (see below)
  7715.     ???
  7716. Return: ES:SI parameter block updated
  7717.  
  7718. Format of parameter block:
  7719. Offset    Size    Description
  7720.  00h    DWORD    ???
  7721.  04h    WORD    (return) ???
  7722.  06h    WORD    (return) ???
  7723.  08h  4 BYTEs    ???
  7724.  0Ch    BYTE    flags???
  7725.  0Dh  7 BYTEs    ???
  7726.  14h    BYTE    (return) ???
  7727.  15h    BYTE    (call) ??? number, bit 7 set if ???
  7728.  16h    BYTE    ???
  7729.  17h    BYTE    (return) result or error code
  7730.     ???
  7731. --------N-2F7A41-----------------------------
  7732. INT 2F - Novell NetWare - TCP/IP Protocol Stack - WINDOWS SUPPORT???
  7733.     AX = 7A41h
  7734.     ES:DI -> FAR entry point for ??? (will be called with BX=1,2,3,4)
  7735. Return: AX = 7AFFh if supported
  7736.         BX = ??? (see AX=7A40h)
  7737.         CX = version (CH=major, CL=minor)
  7738.         DX = 0000h
  7739.         ES:SI -> DWORD containing passed value of ES:DI
  7740.         ES:DI -> entry point for TCP/IP stack
  7741. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  7742.     the pointer which is set to ES:DI is cleared to 0000h:0000h when
  7743.       a Windows exit broadcast is received
  7744. SeeAlso: AX=7A40h
  7745. --------N-2F7A4DBX0001-----------------------
  7746. INT 2F - Novell Netware - ???
  7747.     AX = 7A4Dh
  7748.     BX = 0001h
  7749.     ES:DI -> ???
  7750. Return: AL = FFh if ???
  7751.         ES:DI -> ???
  7752. Note:    called by NETBIOS.EXE v3.01
  7753. --------N-2F7A80-----------------------------
  7754. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  7755.     AX = 7A80h
  7756. Return: nothing
  7757. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  7758.       TSRs that it is unsafe to call the shell in the future.
  7759.     must be passed through so that all interested programs see the exit
  7760.     on receiving this call, IPXODI clears an internal pointer to a
  7761.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  7762.       0000h:0000h and stops calling it
  7763. SeeAlso: AX=7A81h
  7764. --------N-2F7A81-----------------------------
  7765. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  7766.     AX = 7A81h
  7767.     CX:DX -> shell's INT 21h entry point
  7768. Return: nothing
  7769. Notes:    the shell calls this function as it loads to allow interested TSRs
  7770.       and drivers to make a local copy of the shell's entry point
  7771.     must be passed through so that all interested programs see it
  7772. --------N-2F7A85-----------------------------
  7773. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  7774.     AX = 7A85h
  7775.     CX = broadcast server number
  7776. Return: CX = 0000h if broadcast message handled by another program
  7777.     CX unchanged if broadcast not handled
  7778. --------N-2F7A90-----------------------------
  7779. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  7780.     AX = 7A90h
  7781. Return: AL = 00h if present
  7782.         BX = ???
  7783.         CX = PSP segment of NETBIOS resident code
  7784. SeeAlso: AX=7AFEh
  7785. --------N-2F7AC1-----------------------------
  7786. INT 2F - LAN HiJack - LHR - DISABLE???
  7787.     AX = 7AC1h
  7788. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7789.       to take over control of a workstation remotely; LHR is the program
  7790.       run on the slave workstation
  7791. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  7792. --------N-2F7AC2-----------------------------
  7793. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  7794.     AX = 7AC2h
  7795. Note:    sets BIOS keyboard status byte to an internal variable
  7796. SeeAlso: AX=7AC3h,AX=7ACFh
  7797. --------N-2F7AC3-----------------------------
  7798. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  7799.     AX = 7AC3h
  7800. SeeAlso: AX=7AC2h,AX=7ACFh
  7801. --------N-2F7AC8-----------------------------
  7802. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  7803.     AX = 7AC8h
  7804.     BL = function(s) to enable (see below)
  7805. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  7806.  
  7807. Bitfields for function(s) to enable/disable:
  7808.  bit 0    ???
  7809.  bit 1    remote keyboard enabled
  7810.  bit 2    support remote's mouse
  7811.  bits 3-7 unused
  7812. --------N-2F7AC9-----------------------------
  7813. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  7814.     AX = 7AC9h
  7815.     BL = function(s) to disable (see AX=7AC8h)
  7816. SeeAlso: AX=7AC1h,AX=7AC8h
  7817. --------N-2F7ACA-----------------------------
  7818. INT 2F - LAN HiJack - LHJ - ???
  7819.     AX = 7ACAh
  7820.     BL = ???
  7821. Return: ???
  7822. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7823.       to take over control of a workstation remotely; LHJ is the program
  7824.       run on the controlling workstation
  7825. --------N-2F7ACB-----------------------------
  7826. INT 2F - LAN HiJack - LHJ - ???
  7827.     AX = 7ACBh
  7828.     BX = ???
  7829. Return: ???
  7830. Note:    this function appears to be related to the keyboard
  7831. SeeAlso: AX=7ACCh
  7832. --------N-2F7ACC-----------------------------
  7833. INT 2F - LAN HiJack - LHJ - ???
  7834.     AX = 7ACCh
  7835.     BX = ???
  7836. Return: ???
  7837. Note:    this function appears to be related to the mouse
  7838. SeeAlso: AX=7ACBh
  7839. --------N-2F7ACFBX0000-----------------------
  7840. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  7841.     AX = 7ACFh
  7842.     BX = 0000h
  7843. Return: BX = segment of resident code if installed
  7844. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7845.       to take over control of a workstation remotely; LHR is the program
  7846.       run on the slave workstation
  7847. --------N-2F7AF0-----------------------------
  7848. INT 2F - Novell Netware - DOSNP.EXE v1.30G - INSTALLATION CHECK
  7849.     AX = 7AF0h
  7850. Return: AL = FFh if present
  7851.         ES = 7AF0h
  7852.         CX = PSP segment of resident code
  7853. --------N-2F7AF1-----------------------------
  7854. INT 2F - Novell Netware - Access Server Driver - INSTALLATION CHECK
  7855.     AX = 7AF1h
  7856.     BL = sequence number (01h first driver, 02h second, 00h no driver)
  7857. Return: AX <> 7AF1h if present
  7858.         BH = total number of drivers
  7859.         ---if BL nonzero on entry---
  7860.         AL = number of ports provided by specified driver
  7861.         ES:DI -> driver entry point (see below)
  7862.         ES:DX -> ID string
  7863.  
  7864. Call driver entry point with:
  7865.    AH    function
  7866.    01h initialize port
  7867.     AL = port number (00h-0Fh)
  7868.     ES:BX -> configuration parameter block (see below)
  7869.     interrupts disabled
  7870.     Return: CF clear if successful
  7871.         CF set on error
  7872.    02h get port status
  7873.     AL = port number (00h-0Fh)
  7874.     interrupts disabled
  7875.     Return: CF clear if successful
  7876.             BL = transmitter status (see below)
  7877.             BH = receiver status (see below)
  7878.             DL = external status signals (see below)
  7879.         CF set on error
  7880.         interrupts disabled
  7881.    03h get input from port
  7882.     AL = port number (00h-0Fh)
  7883.     CX = size of data buffer
  7884.     ES:BX -> buffer for data
  7885.     interrupts disabled
  7886.     Return: CF clear if successful
  7887.         CF set on error
  7888.         interrupts disabled
  7889.         CX = number of bytes read
  7890.     Note:    the driver will add a NUL to the buffer when a break
  7891.           signal is detected
  7892.    04h send output data to port
  7893.     AL = port number (00h-0Fh)
  7894.     CX = number of bytes to send
  7895.     ES:BX -> buffer containing data
  7896.     interrupts disabled
  7897.     Return: CF clear if successful
  7898.         CF set on error
  7899.         interruptsa disabled
  7900.         CX = number of bytes actually written
  7901.    05h get I/O character counts
  7902.     AL = port number (00h-0Fh)
  7903.     interrupts disabled
  7904.     Return: CF clear if successful
  7905.             BX = number of bytes pending transmission
  7906.             CX = number of bytes available for reading
  7907.         CF set on error
  7908.         interrupts disabled
  7909.    06h control XON/XOFF
  7910.     AL = port number (00h-0Fh)
  7911.     DL = new state
  7912.         (00h software flow control disabled, else enabled)
  7913.     interrupts disabled
  7914.     Return: CF clear if successful
  7915.         CF set on error
  7916.         interrupts disabled
  7917.    07h get error counts and statistics
  7918.     AL = port number (00h-0Fh)
  7919.     ES:BX -> buffer for statistics (see below)
  7920.     interrupts disabled
  7921.     Return: CF clear if successful
  7922.             ES:BX buffer filled
  7923.         CF set on error
  7924.         interrupts disabled
  7925.    08h general request
  7926.     AL = port number (00h-0Fh)
  7927.     DX = requested operations
  7928.         bit 0: flush transmit buffers
  7929.         bit 1: flush receive buffers
  7930.         bit 4: define XON/XOFF characters
  7931.     ES:BX -> XON/XOFF characters (see below) if DX bit 4 set
  7932.     interrupts disabled
  7933.     Return: CF clear if successful
  7934.         CF set on error
  7935.         interrupts disabled
  7936.    09h deadman timer management
  7937.     AL = port number (00h-0Fh)
  7938.     BX = next time interval in seconds (0000h to disable timer)
  7939.     interrupts disabled
  7940.     Return: CF clear
  7941.         interrupts disabled
  7942.    0Ah get buffer sizes
  7943.     AL = port number (00h-0Fh)
  7944.     interrupts disabled
  7945.     Return: CF clear if successful
  7946.            BX = size of transmit buffer
  7947.            CX = size of receive buffer
  7948.         CF set on error
  7949.         interrupts disabled
  7950.  
  7951. Values for transmitter status:
  7952.  00h    uninitialized
  7953.  01h    ready, not transmitting
  7954.  02h    transmitting
  7955.  03h    XOFF received
  7956.  04h    transmitting, buffer full
  7957.  05h    XOFF received and buffer full
  7958.  
  7959. Values for receiver status:
  7960.  00h    uninitialized
  7961.  01h    ready
  7962.  02h    receive buffer full, data may have been lost
  7963.  
  7964. Bitfields for external status signals:
  7965.  bits 7,6 undefined
  7966.  bit 5    CTS active
  7967.  bit 4    DSR active
  7968.  bit 3    DCD active
  7969.  bits 2,1 undefined
  7970.  bit 0    ring indicator
  7971.  
  7972. Format of configuration parameter block:
  7973. Offset    Size    Description
  7974.  00h    BYTE    receive baud rate index
  7975.         00h 50 bps, 01h 75 bps, 02h 110 bps, 03h 134.5 bps,
  7976.         04h 150 bps, 05h 300 bps, 06h 600 bps, 07h 1200 bps,
  7977.         08h 1800 bps, 09h 2000 bps, 0Ah 2400 bps, 0Bh 3600 bps,
  7978.         0Ch 4800 bps, 0Dh 7200 bps, 0Eh 9600 bps, 0Fh 19200 bps,
  7979.         10h 38400 bps, 11h 57600 bps, 12h 115200 bps
  7980.  01h    BYTE    receive bits per character (0=5 bits..3=8 bits)
  7981.  02h    BYTE    receive stop bits
  7982.  03h    BYTE    receive parity
  7983.         00h none, 01h odd, 02h even, 03h mark, 04h space
  7984.  04h    BYTE    transmit baud rate index (same as receive baud rate)
  7985.  05h    BYTE    transmit bits per character (0=5 bits..3=8 bits)
  7986.  06h    BYTE    transmit stop bits
  7987.  07h    BYTE    transmit parity (same as receive parity)
  7988.  08h    BYTE    DTR state (00h off, 01h on)
  7989.  09h    BYTE    RTS state (00h off, 01h on)
  7990.  0Ah    BYTE    flow control
  7991.         00h none, 01h XON/XOFF, 02h RTS/CTS, 03h both
  7992.  0Bh    BYTE    break control (00h off, 01h on)
  7993.  
  7994. Format of statistics:
  7995. Offset    Size    Description
  7996.  00h    BYTE    port number
  7997.  01h    BYTE    external status signals (see above)
  7998.  02h    BYTE    transmitter status (see above)
  7999.  03h    BYTE    receiver status (see above)
  8000.  04h    DWORD    number of characters received
  8001.  08h    DWORD    number of characters transmitted
  8002.  0Ch    WORD    input parity errors
  8003.  0Eh    WORD    input framing errors
  8004.  10h    WORD    lost characters due to hardware overrun
  8005.  12h    WORD    lost characters due to data buffer overrun
  8006. Note:    the counts are not allowed to wrap around; once a count reaches FFFFh
  8007.       or FFFFFFFFh, it is no longer incremented
  8008.  
  8009. Format of XON/XOFF characters:
  8010. Offset    Size    Description
  8011.  00h    BYTE    04h (number of bytes following)
  8012.  01h    BYTE    transmit XON character
  8013.  02h    BYTE    transmit XOFF character
  8014.  03h    BYTE    receive XON character
  8015.  04h    BYTE    receive XOFF character
  8016. --------N-2F7AFE-----------------------------
  8017. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  8018.     AX = 7AFEh
  8019. Return: AL = FFh if present
  8020.         ES = (data???) segment of DOSNP
  8021. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  8022.        NetWare
  8023. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  8024.       present
  8025. SeeAlso: AX=7A90h
  8026. --------N-2F7AFFBX0000-----------------------
  8027. INT 2F - Novell NetWare - TBMI v1.1+ - INSTALLATION CHECK???
  8028.     AX = 7AFFh
  8029.     BX = 0000h
  8030.     CX = 4E65h ("Ne")
  8031.     DX = 7457h ("tW")
  8032.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  8033. Return: AL = FFh if installed
  8034.         CX = configured sockets (14h)
  8035.         DS:SI -> data table ???
  8036.         ES:DI -> IPX far call handler
  8037. Notes:    for IPX/SPX this call reportedly returns DS:DI pointing to the table
  8038.       of pointers to service events queue head and tail
  8039.     this function is also supported by IPXODI
  8040. SeeAlso: AX=7AFFh/BX=0001h
  8041. --------N-2F7AFFBX0001-----------------------
  8042. INT 2F - Novell NetWare - TBMI v1.1+, shell v3.01d - INSTALLATION CHECK???
  8043.     AX = 7AFFh
  8044.     BX = 0001h
  8045.     CX = 4E65h ("Ne")
  8046.     DX = 7457h ("tW")
  8047. Return: AL = FFh if installed
  8048.         CX = ???  (8000h)
  8049.         SI = ??? (or -> ???) (0002h)
  8050.         ES:DI -> IPX far call handler
  8051.         ES:DX -> 6-byte data area ???
  8052. Note:    this function is also supported by IPXODI
  8053. SeeAlso: AX=7AFFh/BX=0000h
  8054. --------d-2F7F00-----------------------------
  8055. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  8056.     AX = 7F00h
  8057. Return: AL = FFh if installed
  8058. SeeAlso: AX=7F01h,AX=7F02h,AX=7F03h
  8059. --------d-2F7F01-----------------------------
  8060. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  8061.     AX = 7F01h
  8062.     DS:DX -> command record (see below)
  8063. Return: AL = status
  8064.         00h successful
  8065.         else error code
  8066. SeeAlso: AX=7F00h,AX=7F02h,INT 11/AH=FFh"SDLP",INT 21/AX=4402h"ASPI"
  8067. SeeAlso: INT 4F/AX=8100h
  8068.  
  8069. Format of command record:
  8070. Offset    Size    Description
  8071.  00h    BYTE    ID
  8072.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation
  8073.  0Bh    WORD    segment of buffer
  8074.  0Dh    WORD    offset of buffer
  8075.  0Fh    BYTE    status
  8076.  10h    BYTE    sense
  8077.  12h    WORD    count
  8078. --------d-2F7F02-----------------------------
  8079. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  8080.     AX = 7F02h
  8081. SeeAlso: AX=7F00h,AX=7F01h
  8082. --------d-2F7F03-----------------------------
  8083. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  8084.     AX = 7F03h
  8085. Return: AL = status
  8086.         00h successful
  8087.         01h unable to uninstall
  8088. SeeAlso: AX=7F00h
  8089. ----------2F7F24-----------------------------
  8090. INT 2F - Multiplex - ???
  8091.     AX = 7F24h
  8092.     ???
  8093. Return: ???
  8094. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  8095. ----------2F7F26-----------------------------
  8096. INT 2F - Multiplex - ???
  8097.     AX = 7F26h
  8098.     ???
  8099. Return: ???
  8100. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  8101. --------!------------------------------------
  8102.