home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / TEXT / INFO / INTER30A.ZIP / INTERRUP.C < prev    next >
Encoding:
Text File  |  1992-04-26  |  302.8 KB  |  8,317 lines

  1. Interrupt List, part 3 of 7
  2. This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
  3. ----------20---------------------------------
  4. INT 20 - Minix - SEND/RECEIVE MESSAGE
  5.     AX = process ID of other process
  6.     BX -> message
  7.     CX = 1 send
  8.          2 receive
  9.          3 send&receive
  10. Note:    the message contains the system call number (numbered as in V7 
  11.       Unix(tm)) and the call parameters
  12. ----------20---------------------------------
  13. INT 20 - DOS 1+ - TERMINATE PROGRAM
  14.     CS = PSP segment
  15. Return: never
  16. Note:    (see notes for INT 21/AH=00h)
  17. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  18. ----------2100-------------------------------
  19. INT 21 - DOS 1+ - TERMINATE PROGRAM
  20.     AH = 00h
  21.     CS = PSP segment
  22. Notes:    Microsoft recomments using INT 21/AH=4Ch for DOS 2+
  23.     execution continues at address stored in INT 22 after DOS performs
  24.       whatever cleanup it needs to do
  25.     if the PSP is its own parent, the process's memory is not freed; if
  26.       INT 22 additionally points into the terminating program, the
  27.       process is effectively NOT terminated
  28.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  29. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  30. ----------2101-------------------------------
  31. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  32.     AH = 01h
  33. Return: AL = character read
  34. Notes:    ^C/^Break are checked, and INT 23 executed if read
  35.     character is echoed to standard output
  36.     standard input is always the keyboard and standard output the screen
  37.       under DOS 1.x, but they may be redirected under DOS 2+
  38. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  39. ----------2102-------------------------------
  40. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  41.     AH = 02h
  42.     DL = character to write
  43. Return: AL = last character output (despite the official docs which state
  44.         nothing is returned) (at least DOS 3.3-5.0)
  45. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  46.     standard output is always the screen under DOS 1.x, but may be
  47.       redirected under DOS 2+
  48.     the last character output will be the character in DL unless DL=09h
  49.       on entry, in which case AL=20h as tabs are expanded to blanks
  50. SeeAlso: AH=06h,AH=09h
  51. ----------2103-------------------------------
  52. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  53.     AH = 03h
  54. Return: AL = character read
  55. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  56.     STDAUX is usually the first serial port
  57. SeeAlso: AH=04h,INT 14/AH=02h
  58. ----------2104-------------------------------
  59. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  60.     AH = 04h
  61.     DL = character to write
  62. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  63.     STDAUX is usually the first serial port
  64.     if STDAUX is busy, this function will wait until it becomes free
  65. SeeAlso: AH=03h,INT 14/AH=01h
  66. ----------2105-------------------------------
  67. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  68.     AH = 05h
  69.     DL = character to print
  70. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  71.     STDPRN is usually the first parallel port, but may be redirected under
  72.       DOS 2+
  73.     if the printer is busy, this function will wait
  74. SeeAlso: INT 17/AH=00h
  75. ----------2106-------------------------------
  76. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  77.     AH = 06h
  78.     DL = character (except FFh)
  79. Return: AL = character output (despite official docs which state nothing is
  80.         returned) (at least DOS 3.3-5.0)
  81. Notes:    does not check ^C/^Break
  82.     writes to standard output, which is always the screen under DOS 1.x,
  83.       but may be redirected under DOS 2+
  84. SeeAlso: AH=02h,AH=09h
  85. ----------2106--DLFF-------------------------
  86. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  87.     AH = 06h
  88.     DL = FFh
  89. Return: ZF set if no character available
  90.     ZF clear if character available
  91.         AL = character read
  92. Notes:    ^C/^Break are NOT checked
  93.     if the returned character is 00h, the user pressed a key with an
  94.       extended keycode, which will be returned by the next call of this
  95.       function
  96.     reads from standard input, which is always the keyboard under DOS 1.x,
  97.       but may be redirected under DOS 2+
  98. SeeAlso: AH=0Bh
  99. ----------2107-------------------------------
  100. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  101.     AH = 07h
  102. Return: AL = character read from standard input
  103. Notes:    does not check ^C/^Break
  104.     standard input is always the keyboard under DOS 1.x, but may be
  105.       redirected under DOS 2+
  106.     if the interim console flag is set (see AX=6301h), partially-formed
  107.       double-byte characters may be returned
  108. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  109. ----------2108-------------------------------
  110. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  111.     AH = 08h
  112. Return: AL = character read from standard input
  113. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  114.     standard input is always the keyboard under DOS 1.x, but may be
  115.       redirected under DOS 2+
  116.     if the interim console flag is set (see AX=6301h), partially-formed
  117.       double-byte characters may be returned
  118. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  119. ----------2109-------------------------------
  120. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  121.     AH = 09h
  122.     DS:DX -> '$'-terminated string
  123. Return: AL = 24h (the '$' terminating the string, despite official docs which
  124.         state that nothing is returned) (at least DOS 3.3-5.0)
  125. Notes:    ^C/^Break checked, and INT 23 called if pressed
  126.     standard output is always the screen under DOS 1.x, but may be
  127.       redirected under DOS 2+
  128. SeeAlso: AH=02h,AH=06h"OUTPUT"
  129. ----------210A-------------------------------
  130. INT 21 - DOS 1+ - BUFFERED INPUT
  131.     AH = 0Ah
  132.     DS:DX -> buffer (see below)
  133. Return: buffer filled with user input
  134. Notes:    ^C/^Break checked, and INT 23 called if detected
  135.     reads from standard input, which may be redirected under DOS 2+
  136.     if the maximum buffer size (see below) is set to 00h, this call returns
  137.       immediately without reading any input
  138. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  139.  
  140. Format of input buffer:
  141. Offset    Size    Description
  142.  00h    BYTE    maximum characters buffer can hold
  143.  01h    BYTE    (input) number of chars from last input which may be recalled
  144.         (return) number of characters actually read, excluding CR
  145.  02h  N BYTEs    actual characters read, including the final carriage return
  146. ----------210A00-----------------------------
  147. INT 21 - WCED v1.6 - INSTALLATION CHECK
  148.     AX = 0A00h
  149.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  150. Return: buffer offset 02h-05h filled with "Wced" if installed
  151. Note:    WCED is a free command-line editor and history utility by Stuart
  152.       Russell
  153. SeeAlso: AH=FFh"CED"
  154. ----------210B-------------------------------
  155. INT 21 - DOS 1+ - GET STDIN STATUS
  156.     AH = 0Bh
  157. Return: AL = 00h if no character available
  158.        = FFh if character is available
  159. Notes:    ^C/^Break checked, and INT 23 called if pressed
  160.     standard input is always the keyboard under DOS 1.x, but may be
  161.       redirected under DOS 2+
  162.     if the interim console flag is set (see AX=6301h), this function
  163.       returns AL=FFh if a partially-formed double-byte character is
  164.       available
  165. SeeAlso: AH=06h"INPUT",AX=4406h
  166. ----------210B56-----------------------------
  167. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  168.     AX = 0B56h
  169. Return: AX = 4952h if resident
  170. SeeAlso: AX=0D20h
  171. ----------210C-------------------------------
  172. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  173.     AH = 0Ch
  174.     AL = STDIN input function to execute after flushing buffer
  175.     other registers as appropriate for the input function
  176. Return: as appropriate for the specified input function
  177. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  178.       no input is attempted
  179. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  180. ----------210D-------------------------------
  181. INT 21 - DOS 1+ - DISK RESET
  182.     AH = 0Dh
  183. Notes:    writes all modified disk buffers to disk, but does not update directory
  184.       information (that is only done when files are closed or a SYNC call
  185.       is issued)
  186. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  187. ----------210D20-----------------------------
  188. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  189.     AX = 0D20h
  190. Return: AX = 1971h if resident
  191. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  192. ----------210E-------------------------------
  193. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  194.     AH = 0Eh
  195.     DL = new default drive (00h = A:, 01h = B:, etc)
  196. Return: AL = number of potentially valid drive letters
  197. Notes:    under Novell NetWare, the return value is always 32, the number of
  198.       drives that NetWare supports
  199.     under DOS 3+, the return value is the greatest of 5, the value of
  200.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  201.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  202.       may be accessed as either A: or B:
  203.     otherwise, the return value is the highest drive actually present
  204.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  205.       and 3+ a maximum of 26 drives
  206. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  207. ----------210F-------------------------------
  208. INT 21 - DOS 1+ - OPEN FILE USING FCB
  209.     AH = 0Fh
  210.     DS:DX -> unopened File Control Block (see below)
  211. Return: AL = status
  212.         00h successful
  213.         FFh file not found or access denied
  214. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  215.     an unopened FCB has the drive, filename, and extension fields filled
  216.       in and all other bytes cleared
  217.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  218. SeeAlso: AH=10h,AH=16h,AH=3Dh
  219.  
  220. Format of File Control Block:
  221. Offset    Size    Description
  222.  -7    BYTE    extended FCB if FFh
  223.  -6   5 BYTEs    reserved
  224.  -1    BYTE    file attribute if extended FCB
  225.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  226.  01h  8 BYTEs    blank-padded file name 
  227.  09h  3 BYTEs    blank-padded file extension
  228.  0Ch    WORD    current block number
  229.  0Eh    WORD    logical record size
  230.  10h    DWORD    file size
  231.  14h    WORD    date of last write (see AX=5700h)
  232.  16h    WORD    time of last write (see AX=5700h) (DOS 1.1+)
  233.  18h  8 BYTEs    reserved (see below)
  234.  20h    BYTE    record within current block
  235.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  236.         byte is omitted)
  237. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  238.       offset -7, rather than the address of the drive number field
  239.  
  240. Format of reserved field for DOS 1.0:
  241. Offset    Size    Description
  242.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  243.         ID)
  244.  18h    WORD    number of first cluster in file
  245.  1Ah    WORD    last cluster number accessed (absolute)
  246.  1Ch    WORD    relative current cluster number
  247.  1Eh    BYTE    dirty flag (00h = not dirty)
  248.  1Fh    BYTE    unused
  249.  
  250. Format of reserved field for DOS 1.10-1.25:
  251. Offset    Size    Description
  252.  18h    BYTE    bit 7: set if logical device
  253.         bit 6: not dirty
  254.         bits 5-0: disk number or logical device ID
  255.  19h    WORD    starting cluster number
  256.  1Bh    WORD    absolute current cluster number
  257.  1Dh    WORD    relative current cluster number
  258.  1Fh    BYTE    unused
  259.  
  260. Format of reserved field for DOS 2.x:
  261. Offset    Size    Description
  262.  18h    BYTE    bit 7: set if logical device
  263.         bit 6: set if open???
  264.         bits 5-0: ???
  265.  19h    WORD    starting cluster number
  266.  1Bh    WORD    ???
  267.  1Dh    BYTE    ???
  268.  1Eh    BYTE    ???
  269.  1Fh    BYTE    ???
  270.  
  271. Format of reserved field for DOS 3.x:
  272. Offset    Size    Description
  273.  18h    BYTE    number of system file table entry for file
  274.  19h    BYTE    attributes
  275.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  276.               01 = SHARE.EXE not loaded, character device
  277.               10 = SHARE.EXE loaded, remote file
  278.               11 = SHARE.EXE loaded, local file
  279.         bits 5-0: low six bits of device attribute word
  280. ---SHARE.EXE loaded, local file (DOS 3.x and 5.0)---
  281.  1Ah    WORD    starting cluster of file
  282.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record (see AH=52h)
  283.          (DOS 5.0) unique sequence number of sharing record
  284.  1Eh    BYTE    file attribute
  285.  1Fh    BYTE    ???
  286. ---SHARE.EXE loaded, remote file---
  287.  1Ah    WORD    number of sector containing directory entry
  288.  1Ch    WORD    relative cluster within file of last cluster accessed
  289.  1Eh    BYTE    absolute cluster number of last cluster accessed
  290.  1Fh    BYTE    ???
  291. ---SHARE.EXE not loaded---
  292.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  293.  1Bh    WORD    starting cluster of file
  294.  1Dh    WORD    number of sector containing directory entry
  295.  1Fh    BYTE    number of directory entry within sector
  296. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  297.       of the device driver header, then the BYTE at 1Ah is overwritten.
  298. ----------2110-------------------------------
  299. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  300.     AH = 10h
  301.     DS:DX -> File Control Block (see AH=0Fh)
  302. Return: AL = status
  303.         00h successful
  304.         FFh failed
  305. Notes:    a successful close forces all disk buffers used by the file to be
  306.       written and the directory entry to be updated
  307.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  308. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  309. ----------2111-------------------------------
  310. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  311.     AH = 11h
  312.     DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
  313. Return: AL = status
  314.         00h successful
  315.         [DTA] unopened FCB for first matching file
  316.         FFh no matching filename, or bad FCB
  317. Notes:    the type of the returned FCB depends on whether the input FCB was a
  318.       normal or an extended FCB
  319.     for extended FCBs with search attribute 08h, the volume label (if any)
  320.       will be returned even if the current directory is not the root dir.
  321.     DOS 3+ also allows the '*' wildcard
  322.     the search FCB must not be modified if AH=12h will be used to continue
  323.       searching; DOS 3.3 has set the following parts of the FCB:
  324.          0Ch    BYTE    ???
  325.          0Dh    WORD    directory entry number of matching file
  326.          0Fh    WORD    cluster number of current directory
  327.          11h  4 BYTEs    ???
  328.          15h    BYTE    drive number (1=A:)
  329.     at least for DOS 3.3, the unopened FCB in the DTA is actually the drive
  330.       number followed by the file's directory entry
  331. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  332. ----------2112-------------------------------
  333. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  334.     AH = 12h
  335.     DS:DX -> unopened FCB (see AH=0Fh)
  336. Return: AL = status
  337.         00h successful
  338.         [DTA] = unopened FCB
  339.         FFh no more matching filenames
  340. Note:    (see AH=11h)
  341.     assumes that successful FindFirst executed on search FCB before call
  342. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  343. ----------2113-------------------------------
  344. INT 21 - DOS 1+ - DELETE FILE USING FCB
  345.     AH = 13h
  346.     DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for
  347.         deletion ('?' wildcards allowed)
  348. Return: AL = status
  349.         00h one or more files successfully deleted
  350.         FFh no matching files or all were read-only or locked
  351. Notes:    DOS 1.25+ deletes everything in the current directory (including
  352.       subdirectories) and sets the first byte of the name to 00h (entry
  353.       never used) instead of E5h if called on an extended FCB with
  354.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  355.       2 for DOS 1.x).  This may have originally been an optimization to
  356.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  357.       the directory search upon encountering a never-used entry), but can
  358.       corrupt the filesystem under DOS 2+ because subdirectories are
  359.       removed without deleting the files they contain.
  360.     currently-open files should not be deleted
  361. SeeAlso: AH=41h,INT 2F/AX=1113h
  362. ----------2114-------------------------------
  363. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  364.     AH = 14h
  365.     DS:DX -> opened FCB (see AH=0Fh)
  366. Return: AL = status
  367.         00h successful
  368.         01h end of file (no data)
  369.         02h segment wrap in DTA
  370.         03h end of file, partial record read
  371.     [DTA] = record read from file
  372. Notes:    reads a record of the size specified in the FCB beginning at the
  373.       current file position, then updates the current block and current
  374.       record fields in the FCB
  375.     if a partial record was read, it is zero-padded to the full size
  376.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  377. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  378. ----------2115-------------------------------
  379. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  380.     AH = 15h
  381.     DS:DX -> opened FCB (see AH=0Fh)
  382.     [DTA] = record to write
  383. Return: AL = status
  384.         00h successful
  385.         01h disk full
  386.         02h segment wrap in DTA
  387. Notes:    writes a record of the size specified in the FCB beginning at the
  388.       current file position, then updates the current block and current
  389.       record fields in the FCB
  390.     if less than a full sector is written, the data is placed in a DOS
  391.       buffer to be written out at a later time
  392.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  393. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  394. ----------2116-------------------------------
  395. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  396.     AH = 16h
  397.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  398. Return: AL = status
  399.         00h successful
  400.         FFh directory full or file exists and is read-only or locked
  401. Notes:    if file already exists, it is truncated to zero length
  402.     if an extended FCB is used, the file is given the attribute in the
  403.       FCB
  404.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  405. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  406. ----------2117-------------------------------
  407. INT 21 - DOS 1+ - RENAME FILE USING FCB
  408.     AH = 17h
  409.     DS:DX -> modified FCB (see also AH=0Fh)
  410.         the old filename ('?' wildcards OK) is in the standard location
  411.         while the new filename ('?' wildcards OK) is stored in the 11
  412.         bytes beginning at offset 11h
  413. Return:    AL = status
  414.         00h successfully renamed
  415.         FFh no matching files,file is read-only, or new name already exists
  416. Note:    subdirectories may be renamed using an extended FCB with the
  417.       appropriate attribute
  418. SeeAlso: AH=0Fh,AH=13h,AH=56h,INT 2F/AX=1111h
  419. ----------2118-------------------------------
  420. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  421.     AH = 18h
  422. Return: AL = 00h
  423. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  424.       which is meaningless under MSDOS
  425. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
  426. ----------2119-------------------------------
  427. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  428.     AH = 19h
  429. Return: AL = drive (00h = A:, 01h = B:, etc)
  430. SeeAlo: AH=0Eh,AH=47h
  431. ----------211A-------------------------------
  432. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  433.     AH = 1Ah
  434.     DS:DX -> Disk Transfer Area (DTA)
  435. Note:    the DTA is set to PSP:0080h when a program is started
  436. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  437. ----------211B-------------------------------
  438. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  439.     AH = 1Bh
  440. Return: AL = sectors per cluster (allocation unit)
  441.     CX = bytes per sector
  442.     DX = total number of clusters
  443.     DS:BX -> media ID byte (see below)
  444. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  445.       versions return a pointer to a copy of the FAT's ID byte
  446. SeeAlso: AH=1Ch,AH=36h
  447.  
  448. Values for media ID byte:
  449.  FFh    floppy, double-sided, 8 sectors per track (320K)
  450.  FEh    floppy, single-sided, 8 sectors per track (160K)
  451.  FDh    floppy, double-sided, 9 sectors per track (360K)
  452.  FCh    floppy, single-sided, 9 sectors per track (180K)
  453.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  454.  F8h    hard disk
  455.  F0h    other
  456. ----------211C-------------------------------
  457. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  458.     AH = 1Ch
  459.     DL = drive (00h = default, 01h = A:, etc)
  460. Return: AL = sectors per cluster (allocation unit)
  461.     CX = bytes per sector
  462.     DX = total number of clusters
  463.     DS:BX -> media ID byte (see AH=1Bh)
  464. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  465.       versions return a pointer to a copy of the FAT's ID byte
  466. SeeAlso: AH=1Bh,AH=36h
  467. ----------211D-------------------------------
  468. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  469.     AH = 1Dh
  470. Return: AL = 00h
  471. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  472.       drives", which is meaningless under MSDOS
  473. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  474. ----------211E-------------------------------
  475. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  476.     AH = 1Eh
  477. Return: AL = 00h
  478. Note:    corresponds to a CP/M BDOS function which is meaningless under MSDOS
  479. SeeAlso: AH=18h,AH=1Dh,AH=20h
  480. ----------211F-------------------------------
  481. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  482.     AH = 1Fh
  483. Return: AL = status
  484.         00h successful
  485.         DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x,
  486.             AH=32h for DOS 2+)
  487.         FFh invalid drive
  488. Note:    documented for DOS 5.0, but undocumented in prior versions
  489. SeeAlso: AH=32h
  490.  
  491. Format of DOS 1.1 and MSDOS 1.25 drive parameter block:
  492. Offset    Size    Description
  493.  00h    BYTE    sequential device ID
  494.  01h    BYTE    logical drive number (0=A:)
  495.  02h    WORD    bytes per sector
  496.  04h    BYTE    highest sector number within a cluster
  497.  05h    BYTE    shift count to convert clusters into sectors
  498.  06h    WORD    starting sector number of first FAT
  499.  08h    BYTE    number of copies of FAT
  500.  09h    WORD    number of directory entries
  501.  0Bh    WORD    number of first data sector
  502.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  503.  0Fh    BYTE    sectors per FAT
  504.  10h    WORD    starting sector of directory
  505.  12h    WORD    address of allocation table
  506. Note:    the DOS 1.0 table is the same except that the first and last fields
  507.       are missing
  508. ----------2120-------------------------------
  509. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  510.     AH = 20h
  511. Return: AL = 00h
  512. Note:    corresponds to the CP/M BDOS function "get/set default user number",
  513.       which is meaningless under MSDOS
  514. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  515. ----------2121-------------------------------
  516. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  517.     AH = 21h
  518.     DS:DX -> opened FCB (see AH=0Fh)
  519. Return: AL = status
  520.         00h successful    
  521.         01h end of file, no data read
  522.         02h segment wrap in DTA, no data read
  523.         03h end of file, partial record read
  524.     [DTA] = record read from file
  525. Notes:    the record is read from the current file position as specified by the
  526.       random record and record size fields of the FCB
  527.     the file position is not updated after reading the record
  528.     if a partial record is read, it is zero-padded to the full size
  529.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  530. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  531. ----------2122-------------------------------
  532. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  533.     AH = 22h
  534.     DS:DX -> opened FCB (see AH=0Fh)
  535.     [DTA] = record to write
  536. Return: AL = status
  537.         00h successful
  538.         01h disk full
  539.         02h segment wrap in DTA
  540. Notes:    the record is written to the current file position as specified by the
  541.       random record and record size fields of the FCB
  542.     the file position is not updated after writing the record
  543.     if the record is located beyond the end of the file, the file is
  544.       extended but the intervening data remains uninitialized
  545.     if the record only partially fills a disk sector, it is copied to a
  546.       DOS disk buffer to be written out to disk at a later time
  547.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  548. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  549. ----------2123-------------------------------
  550. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  551.     AH = 23h
  552.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  553. Return: AL = status
  554.         00h successful (matching file found)
  555.         FCB random record field filled with size in records, rounded up
  556.         to next full record
  557.         FFh failed (no matching file found)
  558. Note:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  559. SeeAlso: AH=42h
  560. ----------2124-------------------------------
  561. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  562.     AH = 24h
  563.     DS:DX -> opened FCB (see AH=0Fh)
  564. Notes:    computes the random record number corresponding to the current record
  565.       number and record size, then stores the result in the FCB
  566.     normally used when switching from sequential to random access
  567.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  568. SeeAlso: AH=21h,AH=27h,AH=42h
  569. ----------2125-------------------------------
  570. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  571.     AH = 25h
  572.     AL = interrupt number
  573.     DS:DX -> new interrupt handler
  574. Note:    this function is preferred over direct modification of the interrupt
  575.       vector table
  576. SeeAlso: AH=35h
  577. ----------212501-----------------------------
  578. INT 21 - Phar Lap 386/DOS-Extender - RESET 386/DOS-EXTENDER DATA STRUCTURES 
  579.     AX = 2501h
  580. Return: CF clear
  581. Note:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  582.       system calls.     Only available when directly using 386/DOS-Extender,
  583.       or when using a product that was created using 386-DOS/Extender
  584. SeeAlso: AH=30h"Phar Lap"
  585. ----------212502-----------------------------
  586. INT 21 - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  587.     AX = 2502h
  588.     CL = interrupt number
  589. Return: ES:EBX -> 48-bit address of protected-mode interrupt handler
  590.     CF clear
  591. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  592. ----------212503-----------------------------
  593. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  594.     AX = 2503h
  595.     CL = interrupt number
  596. Return: EBX = 32-bit address of real-mode interrupt handler
  597.     CF clear
  598. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  599. ----------212504-----------------------------
  600. INT 21 - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  601.     AX = 2504h
  602.     CL = interrupt number
  603.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  604. Return: CF clear
  605. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  606. ----------212505-----------------------------
  607. INT 21 - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  608.     AX = 2505h
  609.     CL = interrupt number
  610.     EBX = 32-bit address of real-mode interrupt handler
  611. Return: CF clear
  612. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  613. ----------212506-----------------------------
  614. INT 21 - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CONTRL IN PROT MODE
  615.     AX = 2506h
  616.     CL = interrupt number
  617.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  618. Return: CF clear
  619. Note:    This function modifies both the real-mode low-memory interrupt
  620.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  621.     Interrupts occurring in real mode are resignaled in protected mode.
  622. ----------212507-----------------------------
  623. INT 21 - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  624.     AX = 2507h
  625.     CL = interrupt number
  626.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  627.     EBX = 32-bit address of real-mode interrupt handler
  628. Return: CF clear
  629. Note:    interrupts are disabled until both vectors have been modified
  630. SeeAlso: AX=2504h,AX=2505h
  631. ----------212508-----------------------------
  632. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  633.     AX = 2508h
  634.     BX = segment selector
  635. Return: CF clear if successful
  636.         ECX = linear base address of segment
  637.     CF set if invalid segment selector
  638. ----------212509-----------------------------
  639. INT 21 - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  640.     AX = 2509h
  641.     EBX = linear address to convert
  642. Return: CF clear if successful
  643.         ECX = physical address (carry flag clear)
  644.     CF set if linear address not mapped in page tables
  645. ----------21250A-----------------------------
  646. INT 21 - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  647.     AX = 250Ah
  648.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  649.          to modify
  650.     EBX = physical base address of memory to map (multiple of 4K)
  651.     ECX = number of physical 4K pages to map
  652. Return: CF clear if successful
  653.         EAX = 32-bit offset in segment of mapped memory
  654.     CF set on error
  655.         EAX = error code
  656.         08h insufficient memory to create page tables
  657.         09h invalid segment selector
  658. SeeAlso: INT 31/AX=0800h
  659. ----------21250C-----------------------------
  660. INT 21 - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  661.     AX = 250Ch
  662. Return: CF clear
  663.     AL = base interrupt vector for IRQ0-IRQ7
  664.     AH = base interrupt vector for IRQ8-IRQ15
  665.     BL = interrupt vector for BIOS print screen function
  666. SeeAlso: INT 31/AX=0400h
  667. ----------21250D-----------------------------
  668. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  669.     AX = 250Dh
  670. Return: CF clear
  671.     EAX = 32-bit address of real-mode 386/DOS-Extender proc that will call
  672.           through from real mode to a protected-mode routine
  673.     EBX = 32-bit real-mode address of intermode call data buffer
  674.     ECX = size in bytes of intermode call data buffer
  675.     ES:EDX -> protected-mode address of intermode call data buffer
  676. ----------21250E-----------------------------
  677. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  678.     AX = 250Eh
  679.     EBX = 32-bit address of real-mode procedure to call
  680.     ECX = number of two-byte words to copy from protected-mode stack
  681.           to real-mode stack
  682. Return: CF clear if successful
  683.         all segment registers unchanged
  684.         all general registers contain values set by real-mode procedure
  685.         all other flags set as they were left by real-mode procedure
  686.     CF set on error
  687.         EAX = error code
  688.         01h not enough real-mode stack space
  689. SeeAlso: AH=E1h"OS/286",INT 31/AX=0301h
  690. ----------21250F-----------------------------
  691. INT 21 - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  692.     AX = 250Fh
  693.     ES:EBX -> 48-bit protected-mode address to convert
  694.     ECX = length of data, in bytes
  695. Return: CF clear if successful
  696.         ECX = 32-bit MS-DOS address
  697.     CF set on error
  698.         ECX destroyed
  699. SeeAlso: AX=2510h
  700. ----------212510-----------------------------
  701. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  702.     AX = 2510h
  703.     EBX = 32-bit address of real-mode procedure to call
  704.     ECX = number of two-byte words to copy to protected-mode stack to
  705.           real-mode stack
  706.     DS:EDX -> pointer to parameter block (see below)
  707. Return: CF clear if successful
  708.         all segment registers unchanged,
  709.         EDX unchanged
  710.         all other general registers contain values set by real-mode proc
  711.         all other flags are set as they were left by real-mode procedure
  712.         real-mode register values are returned in the parameter block
  713.     CF set on error
  714.         EAX = error code
  715.         01h not enough real-mode stack space
  716. SeeAlso: AX=250Fh
  717.  
  718. Format of parameter block:
  719. Offset    Size    Description
  720.  00h    WORD    real-mode DS value
  721.  02h    WORD    real-mode ES value
  722.  04h    WORD    real-mode FS value
  723.  06h    WORD    real-mode GS value
  724.  08h    DWORD    real-mode EAX value
  725.  0Ch    DWORD    real-mode EBX value
  726.  10h    DWORD    real-mode ECX value
  727.  14h    DWORD    real-mode EDX value
  728. ----------212511-----------------------------
  729. INT 21 - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  730.     AX = 2511h
  731.     DS:EDX -> pointer to parameter block (see below)
  732. Return: all segment registers unchanged
  733.     EDX unchanged
  734.     all other registers contain values set by the real-mode int handler
  735.     the flags are set as they were left by the real-mode interrupt handler
  736.     real-mode register values are returned in the parameter block
  737. SeeAlso: AX=2503h,AX=2505h,AH=E3h"OS/286",INT 31/AX=0300h
  738.  
  739. Format of parameter block:
  740. Offset    Size    Description
  741.  00h    WORD    interrupt number
  742.  02h    WORD    real-mode DS value
  743.  04h    WORD    real-mode ES value
  744.  06h    WORD    real-mode FS value
  745.  08h    WORD    real-mode GS value
  746.  0Ah    DWORD    real-mode EAX value
  747.  0Eh    DWORD    real-mode EDX value
  748. Note: all other real-mode values set from protected-mode registers
  749. ----------212512-----------------------------
  750. INT 21 - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  751.     AX = 2512h
  752.     DS:EDX -> pointer to ASCIIZ program name
  753.     ES:EBX -> pointer to parameter block (see below)
  754.     ECX = size in bytes of LDT buffer
  755. Return: CF clear if successful
  756.         EAX = number of segment descriptors in LDT
  757.     CF set on error
  758.         EAX = error code
  759.         02h file not found or path invalid
  760.         05h access denied
  761.         08h insufficient memory
  762.         0Ah environment invalid
  763.         0Bh invalid file format
  764.         80h LDT too small
  765.  
  766. Format of parameter block:
  767. Offset    Size    Description
  768. Input:
  769.  00h    DWORD    32-bit offset of environment string
  770.  04h    WORD    segment of environment string
  771.  06h    DWORD    32-bit offset of command-tail string
  772.  0Ah    WORD    segment of command-tail string
  773.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  774.  10h    WORD    segment of LDT buffer
  775. Output:
  776.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  777.  14h    WORD    real/protected mode flag
  778.         0000h  real mode
  779.         0001h  protected mode
  780.  16h    DWORD    initial EIP value
  781.  1Ah    WORD    initial CS value
  782.  1Ch    DWORD    initial ESP value
  783.  20h    WORD    initial SS value
  784.  22h    WORD    initial DS value
  785.  24h    WORD    initial ES value
  786.  26h    WORD    initial FS value
  787.  28h    WORD    initial GS value
  788. ----------212513-----------------------------
  789. INT 21 - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  790.     AX = 2513h
  791.     BX = segment selector of descriptor in GDT or LDT
  792.     CL = access-rights byte for alias descriptor
  793.     CH = use-type bit (USE16 or USE32) for alias descriptor
  794. Return: CF clear if successful
  795.         AX = segment selector for created alias
  796.     CF set on error
  797.         EAX = error code
  798.         08h insufficient memory (can't grow LDT)
  799.         09h invalid segment selector in BX
  800. ----------212514-----------------------------
  801. INT 21 - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  802.     AX = 2514h
  803.     BX = segment selector of descriptor in GDT or LDT
  804.     CL = new access-rights byte 
  805.     CH = new use-type bit (USE16 or USE32)
  806. Return: CF clear if successful
  807.     CF set on error
  808.         EAX = error code
  809.         09h invalid selector in BX
  810. SeeAlso: AX=2515h,INT 31/AX=0009h
  811. ----------212515-----------------------------
  812. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  813.     AX = 2515h
  814.     BX = segment selector of descriptor in GDT or LDT
  815. Return: CF clear if successful
  816.         CL = access-rights byte for segment
  817.         CH = use-type bit (USE16 or USE32)
  818.     ECX<16-31> destroyed
  819.     CF set on error
  820.         EAX = error code
  821.         09h invalid segment selector in BX
  822. SeeAlso: AX=2514h
  823. ----------212516-----------------------------
  824. INT 21 - Phar Lap 386/DOS-Extender - FREE ALL MEMORY OWNED BY LDT
  825.     AX = 2516h
  826.     ???
  827. Return: ???
  828. ----------212517-----------------------------
  829. INT 21 - Phar Lap 386/DOS-Extender - GET INFO ON DOS DATA BUFFER
  830.     AX = 2517h
  831.     ???
  832. Return: ???
  833. ----------212518-----------------------------
  834. INT 21 - Phar Lap 386/DOS-Extender - SPECIFY HANDLER FOR MOVED SEGMENTS
  835.     AX = 2518h
  836.     ???
  837. Return: ???
  838. ----------212519-----------------------------
  839. INT 21 - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  840.     AX = 2519h
  841. Return: CF clear
  842.     EAX = error code
  843.         0000h  no error
  844.         0001h  out of physical memory
  845.         0002h  out of swap space (unable to grow swap file)
  846.         0003h  out of LDT entries and unable to grow LDT
  847.         0004h  unable to change extended memory allocation mark
  848.         FFFFFFFFh    paging disabled
  849. Note:    VMM is the Virtual Memory Manager option
  850. ----------21251A-----------------------------
  851. INT 21 - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  852.     AX = 251Ah
  853.     EDX = number of 4k pages to lock
  854.     if BL = 00h
  855.         ECX = linear address of first page to lock
  856.     if BL = 01h
  857.         ES:ECX -> pointer to first page to lock
  858. Return: CF clear if successful
  859.     CF set on error
  860.         EAX = error code
  861.         08h insufficient memory
  862.         09h invalid address range
  863. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  864. ----------21251B-----------------------------
  865. INT 21 - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  866.     AX = 251Bh
  867.     EDX = number of pages to unlock
  868.     if BL = 00h
  869.         ECX = linear address of first page to unlock
  870.     if BL = 01h
  871.         ES:ECX -> pointer to first page to unlock
  872. Return: CF clear if successful
  873.     CF set on error
  874.         EAX = error code
  875.         09h invalid address range
  876. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  877. ----------21251D-----------------------------
  878. INT 21 - Phar Lap 386/DOS-Extender VMM - READ PAGE-TABLE ENTRY
  879.     AX = 251Dh
  880.     ???
  881. Return: ???
  882. SeeAlso: AX=251Eh,AX=EB00h,INT 31/AX=0506h
  883. ----------21251E-----------------------------
  884. INT 21 - Phar Lap 386/DOS-Extender VMM - WRITE PAGE-TABLE ENTRY
  885.     AX = 251Eh
  886.     ???
  887. Return: ???
  888. SeeAlso: AX=251Dh,INT 31/AX=0507h
  889. ----------21251F-----------------------------
  890. INT 21 - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  891.     AX = 251Fh
  892.     ???
  893. Return: ???
  894. SeeAlso: AX=251Dh,AX=251Eh
  895. ----------212520-----------------------------
  896. INT 21 - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  897.     AX = 2520h
  898.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  899.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  900. Return: carry flag clear    
  901.  
  902. Format of VM stats buffer:
  903. Offset    Size    Description
  904.  00h    DWORD    VM status
  905.         0001h VM subsystem is present
  906.         0000h VM not present
  907.  04h    DWORD    "nconvpg" number of conventional memory pages available
  908.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  909.  0Ch    DWORD    "nextpg" total number of extended memory pages
  910.  10h    DWORD    "extlim" extender memory pages limit
  911.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  912.  18h    DWORD    "alockpg" number of locked pages owned by application
  913.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  914.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  915.  24h    DWORD    linear address of beginning of application address space
  916.  28h    DWORD    linear address of end of application address space
  917.  2Ch    DWORD    number of seconds since last time VM stats were reset
  918.  30h    DWORD    number of page faults since last time
  919.  34h    DWORD    number of pages written to swap file since last time
  920.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  921.  3Ch    DWORD    number of virtual pages allocated to the application
  922.  40h    DWORD    size in pages of swap file
  923.  44h    DWORD    number of system pages allocated with EMS calls
  924.  48h    DWORD    minimum number of conventional memory pages
  925.  4Ch    DWORD    maximum size in bytes to which swap file can be increased
  926.  50h    DWORD    "vmflags" bit 0 = 1 if page fault in progress
  927.  54h 16 BYTEs    reserved for future expansion (set to zero)
  928. ----------212521-----------------------------
  929. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEMORY USAGE
  930.     AX = 2521h
  931.     EBX = max 4k pages of physical extended memory which program may use
  932. Return: CF clear if successful
  933.        EBX = maximum limit in pages
  934.        ECX = minimum limit in pages
  935.     CF set on error
  936.         EAX = error code
  937.         08h insufficient memory or -nopage switch used
  938. SeeAlso: AX=2522h
  939. ----------212522-----------------------------
  940. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY ALTERNATE PAGE-FAULT HANDLER
  941.     AX = 2522h
  942.     ???
  943. Return: ???
  944. SeeAlso: AX=2523h
  945. ----------212523-----------------------------
  946. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  947.     AX = 2523h
  948.     ???
  949. Return: ???
  950. SeeAlso: AX=2522h
  951. ----------212524-----------------------------
  952. INT 21 - Phar Lap 386/DOS-Extender VMM - INSTALL PAGE-REPLACEMENT HANDLERS
  953.     AX = 2524h
  954.     ???
  955. Return: ???
  956. ----------212525-----------------------------
  957. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENTIONAL MEM USAGE
  958.     AX = 2525h
  959.     EBX = limit in 4k pages of physical conventional memory which program 
  960.           may use
  961. Return: CF clear if successful
  962.         EBX = maximum limit in pages
  963.         ECX = minimum limit in pages
  964.     CF set on error
  965.         EAX = error code
  966.         08h insufficient memory or -nopage switch used
  967. SeeAlso: AX=2521h
  968. ----------212526-----------------------------
  969. INT 21 - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  970.     AX = 2526h
  971.     ???
  972. Return: ???
  973. ----------2125C0-----------------------------
  974. INT 21 - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  975.     AX = 25C0h
  976.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  977. Return: CF clear if successful
  978.         AX = real-mode paragraph address of memory
  979.     CF set on error
  980.         AX = error code
  981.         07h MS-DOS memory control blocks destroyed
  982.         08h insufficient memory
  983.         BX = size in paragraphs of largest available memory block
  984. SeeAlso: AX=25C1h,AX=25C2h
  985. ----------2125C1-----------------------------
  986. INT 21 - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  987.     AX = 25C1h
  988.     CX = real-mode paragraph address of memory block to free
  989. Return: CF clear if successful
  990.         EAX destroyed
  991.     CF set on error
  992.         AX = error code
  993.         07h MS-DOS memory control blocks destroyed
  994.         09h invalid memory block address in CX
  995. SeeAlso: AX=25C0h,AX=25C2h
  996. ----------2125C2-----------------------------
  997. INT 21 - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  998.     AX = 25C2h
  999.     BX = new requested block size in paragraphs
  1000.     CX = real-mode paragraph address of memory block to modify
  1001. Return: CF clear if successful
  1002.         EAX destroyed
  1003.     CF set on error
  1004.         AX = error code
  1005.         07h MS-DOS memory control blocks destroyed
  1006.         08h insufficient memory
  1007.         09h invalid memory block address in CX
  1008.         BX = size in paragraphs of largest available memory block
  1009. SeeAlso: AX=25C0h,AX=25C1h
  1010. ----------2125C3-----------------------------
  1011. INT 21 - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  1012.     AX = 25C3h
  1013.     ES:EBX -> pointer to parameter block (see below)
  1014.     DS:EDX -> pointer to ASCIIZ program filename
  1015. Return: CF clear if successful
  1016.         all registers unchanged
  1017.     CF set on error
  1018.         EAX = error code
  1019.         01h function code in AL is invalid ???
  1020.         02h file not found or path invalid
  1021.         05h access denied
  1022.         08h insufficient memory to load program
  1023.         0Ah environment invalid
  1024.         0Bh invalid file format
  1025.  
  1026. Format of parameter block:
  1027. Offset    Size    Description
  1028.  00h    DWORD    32-bit offset of environment string
  1029.  04h    WORD    segment selector of environment string
  1030.  06h    DWORD    32-bit offset of command-tail string
  1031.  0Ah    WORD    segment selector of command-tail string
  1032. ----------2126-------------------------------
  1033. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  1034.     AH = 26h
  1035.     DX = segment at which to create PSP (see below for format)
  1036. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  1037.       taken from interrupt vector table
  1038.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  1039.       copy
  1040. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  1041.  
  1042. Format of PSP:
  1043. Offset    Size    Description
  1044.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  1045.  02h    WORD    segment of first byte beyond memory allocated to program
  1046.  04h    BYTE    unused filler
  1047.  05h    BYTE    CP/M CALL 5 service request (FAR JMP to 000C0h)
  1048.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  1049.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  1050.  08h  2 BYTEs    remainder of FAR JMP at 05h
  1051.  0Ah    DWORD    stored INT 22 termination address
  1052.  0Eh    DWORD    stored INT 23 control-Break handler address
  1053.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  1054.  16h    WORD    segment of parent PSP
  1055.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  1056.  2Ch    WORD    DOS 2+ segment of environment for process
  1057.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  1058.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  1059.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  1060.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  1061.         used by SHARE in DOS 3.3
  1062.  3Ch  4 BYTEs    unused by DOS versions <= 5.00
  1063.  40h  2 BYTEs    DOS 5.0 version to return on INT 21/AH=30h
  1064.  42h 14 BYTEs    unused by DOS versions <= 5.00
  1065.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  1066.  53h  9 BYTEs    unused in DOS versions <= 5.00
  1067.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  1068.         overwrites second FCB if opened
  1069.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  1070.         overwrites beginning of commandline if opened
  1071.  7Ch  4 BYTEs    unused
  1072.  80h 128 BYTEs    commandline / default DTA
  1073.         command tail is BYTE for length of tail, N BYTEs for the tail,
  1074.         followed by a BYTE containing 0Dh
  1075. Notes:    in DOS versions 3.0 and up, the limit on simultaneously open files may
  1076.       be increased by allocating memory for a new open file table, filling
  1077.       it with FFh, copying the first 20 bytes from the default table, and
  1078.       adjusting the pointer and count at 34h and 32h.  However, DOS
  1079.       versions through  at least 3.30 will only copy the first 20 file
  1080.       handles into a child PSP (including the one created on EXEC).
  1081.     network redirectors based on the original MS-Net implementation use
  1082.       values of 80h-FEh in the open file table to indicate remote files
  1083.     MSDOS 5.00 incorrectly fills the FCB fields when loading a program
  1084.       high; the first FCB is empty and the second contains the first
  1085.       parameter
  1086.  
  1087. Format of environment block:
  1088. Offset    Size    Description
  1089.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  1090.       N BYTEs    second environment variable, ASCIZ string
  1091.     ...
  1092.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  1093.     BYTE    00h
  1094. ---DOS 3+---
  1095.     WORD    number of strings following environment (normally 1)
  1096.       N BYTEs    ASCIZ full pathname of program owning this environment
  1097.         other strings may follow
  1098. ----------2127-------------------------------
  1099. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  1100.     AH = 27h
  1101.     CX = number of records to read
  1102.     DS:DX -> opened FCB (see AH=0Fh)
  1103. Return: AL = status
  1104.         00h successful, all records read
  1105.         01h end of file, no data read
  1106.         02h segment wrap in DTA, no data read
  1107.         03h end of file, partial read
  1108.     [DTA] = records read from file
  1109.     CX = number of records read (return AL = 00h or 03h)
  1110. Notes:    read begins at current file position as specified in FCB; the file
  1111.       position is updated after reading
  1112.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1113. SeeAlso: AH=21h,AH=28h,AH=3Fh
  1114. ----------2128-------------------------------
  1115. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  1116.     AH = 28h
  1117.     CX = number of records to write
  1118.     DS:DX -> opened FCB (see AH=0Fh)
  1119.     [DTA] = records to write
  1120. Return: AL = status
  1121.         00h successful
  1122.         01h disk full or file read-only
  1123.         02h segment wrap in DTA
  1124.     CX = number of records written
  1125. Notes:    write begins at current file position as specified in FCB; the file
  1126.       position is updated after writing
  1127.     if CX = 0000h on entry, no data is written; instead the file size is
  1128.       adjusted to be the same as the file position specified by the random
  1129.       record and record size fields of the FCB
  1130.     if the data to be written is less than a disk sector, it is copied into
  1131.       a DOS disk buffer, to be written out to disk at a later time
  1132.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1133. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  1134. ----------2129-------------------------------
  1135. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  1136.     AH = 29h
  1137.     AL = parsing options
  1138.         bit 0: skip leading separators
  1139.         bit 1: use existing drive number in FCB if no drive is specified,
  1140.            instead of setting field to zero
  1141.         bit 2: use existing filename in FCB if no base name is specified,
  1142.            instead of filling field with blanks
  1143.         bit 3: use existing extension in FCB if no extension is specified,
  1144.            instead of filling field with blanks
  1145.         bits 4-7: reserved (0)
  1146.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  1147.     ES:DI -> buffer for unopened FCB
  1148. Return: AL = result code
  1149.         00h successful parse, no wildcards encountered
  1150.         01h successful parse, wildcards present
  1151.         FFh failed (invalid drive specifier)
  1152.     DS:SI -> first unparsed character
  1153.     ES:DI buffer filled with unopened FCB (see AH=0Fh)
  1154. Notes:    asterisks expanded to question marks in the FCB
  1155.     all processing stops when a filename terminator is encountered
  1156.     cannot be used with filespecs which include a path (DOS 2+)
  1157. SeeAlso: AH=0Fh,AH=16h,AH=26h
  1158. ----------212A-------------------------------
  1159. INT 21 - DOS 1+ - GET SYSTEM DATE
  1160.     AH = 2Ah
  1161. Return: CX = year (1980-2099)
  1162.     DH = month
  1163.     DL = day
  1164. ---DOS 1.10+---
  1165.     AL = day of week (00h=Sunday)
  1166. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h
  1167. ----------212B-------------------------------
  1168. INT 21 - DOS 1+ - SET SYSTEM DATE
  1169.     AH = 2Bh
  1170.     CX = year (1980-2099)
  1171.     DH = month
  1172.     DL = day
  1173. Return: AL = status
  1174.         00h successful
  1175.         FFh invalid date, system date unchanged
  1176. Note:    DOS 3.3+ also sets CMOS clock
  1177. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  1178. ----------212B--CX4149-----------------------
  1179. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  1180.     AH = 2Bh
  1181.     CX = 4149h ('AI')
  1182.     DX = 413Fh ('A?')
  1183. Return: AL <> FFh if installed
  1184. Note:    Borland's TKERNEL makes this call
  1185. ----------212B--CX4358-----------------------
  1186. INT 21 - PC Tools v5.x PC-Cache - INSTALLATION CHECK
  1187.     AH = 2Bh
  1188.     CX = 4358h ('CX')
  1189. Return: AL = FFh if PC-Cache not installed
  1190.     AL = 00h if installed
  1191.         CX = 6378h ('cx')
  1192.         BX = ???
  1193.         DX = ???
  1194. SeeAlso: INT 16/AX=FFA5h/CX=1111h
  1195. ----------212B--CX4445-----------------------
  1196. INT 21 - DESQview - INSTALLATION CHECK
  1197.     AH = 2Bh
  1198.     CX = 4445h ('DE')
  1199.     DX = 5351h ('SQ')
  1200.     AL = subfunction (DV v2.00+)
  1201.         01h get version
  1202.         Return: BX = version (BH = major, BL = minor)
  1203.         Note: early copies of v2.00 return 0002h
  1204.         02h get shadow buffer info, and start shadowing
  1205.         Return: BH = rows in shadow buffer
  1206.             BL = columns in shadow buffer
  1207.             DX = segment of shadow buffer
  1208.         04h get shadow buffer info
  1209.         Return: BH = rows in shadow buffer
  1210.             BL = columns in shadow buffer
  1211.             DX = segment of shadow buffer
  1212.         05h stop shadowing
  1213. Return: AL = FFh if DESQview not installed
  1214. Note:    in DESQview v1.x, there were no subfunctions; this call only identified
  1215.     whether or not DESQview was loaded
  1216. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h
  1217. ----------212B--CX454C-----------------------
  1218. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  1219.     AH = 2Bh
  1220.     CX = 454Ch ('EL')
  1221.     DX = 5253h ('RS')
  1222. Return: ES:BX -> ELRES history structure (see below)
  1223.     DX = DABEh (signature, DAve BEnnett)
  1224. Note:    ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett
  1225.       which stores recent errorlevel values, allows them to be retrieved
  1226.       for use in batch files, and can place them in an environment variable
  1227. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  1228.  
  1229. Format of ELRES history structure:
  1230. Offset    Size    Description
  1231.  00h    WORD    number of return codes which can be stored by following buffer
  1232.  02h    WORD    current position in buffer (treated as a ring)
  1233.  04h  N BYTEs    ELRES buffer
  1234. ----------212B01CX5441-----------------------
  1235. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  1236.     AX = 2B01h
  1237.     CX = 5441h ('TA')
  1238.     DX = 4D45h ('ME')
  1239. ---v2.60---
  1240.     BH = ???
  1241.         00h skip ???, else do
  1242. Return: AL = 02h if installed
  1243.     ES:DX -> data area in TAME-RES (see below)
  1244. Note:    TAME is a shareware program by David G. Thomas which gives up CPU time
  1245.       to other partitions under a multitasker when the current partition's
  1246.       program incessantly polls the keyboard or system time
  1247.  
  1248. Format of TAME 2.10-2.20 data area:
  1249. Offset    Size    Description
  1250.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  1251.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  1252.  02h    DWORD    number of task switches
  1253.  06h    DWORD    number of keyboard polls
  1254.  0Ah    DWORD    number of time polls
  1255.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  1256.  12h    DWORD    original INT 10h
  1257.  16h    DWORD    original INT 14h
  1258.  1Ah    DWORD    original INT 15h
  1259.  1Eh    DWORD    original INT 16h
  1260.  22h    DWORD    original INT 17h
  1261.  26h    DWORD    original INT 21h
  1262.  2Ah    DWORD    original INT 28h
  1263.  2Eh    WORD    offset of TAME INT 10h handler
  1264.  30h    WORD    offset of TAME INT 14h handler
  1265.  32h    WORD    offset of TAME INT 15h handler
  1266.  34h    WORD    offset of TAME INT 16h handler
  1267.  36h    WORD    offset of TAME INT 17h handler
  1268.  38h    WORD    offset of TAME INT 21h handler
  1269.  3Ah    WORD    offset of TAME INT 28h handler
  1270.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  1271.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  1272.  40h    WORD    number of polls remaining before next task switch
  1273.  42h    WORD    /KEYIDLE value
  1274.  44h    BYTE    flags for interrupts already grabbed by TAME
  1275.         bit 0: INT 10h
  1276.             1: INT 14h
  1277.             2: INT 15h
  1278.             3: INT 16h
  1279.             4: INT 17h
  1280.             5: INT 21h
  1281.             6: INT 28h
  1282.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  1283.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  1284.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  1285.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  1286.  49h    BYTE    window or task number for this task
  1287.  4Ah    BYTE    multitasker type ???
  1288.         01h DESQview
  1289.         02h DoubleDOS
  1290.         03h TopView
  1291.         ???
  1292.  4Bh    BYTE    type of task switching selected
  1293.         bit 0: DESQview???
  1294.             1: DoubleDOS???
  1295.             2: TopView???
  1296.             3: KeySwitch
  1297.             4: HLT instruction
  1298.  4Ch    BYTE    ???
  1299.  4Dh    BYTE    flags
  1300.         bit 1: /FREQ instead of /MAX
  1301.  4Eh    BYTE    /FG: value
  1302.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  1303.  50h    BYTE    ???
  1304.  
  1305. Format of TAME 2.30 data area:
  1306. Offset    Size    Description
  1307.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  1308.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  1309.  02h    DWORD    number of task switches
  1310.  06h    DWORD    number of keyboard polls
  1311.  0Ah    DWORD    number of time polls
  1312.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  1313.  12h    DWORD    time of last /CLEAR or TAME-RES load
  1314.  16h    DWORD    time yielded
  1315.  1Ah    DWORD    time spent polling
  1316.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  1317.  22h    DWORD    original INT 10h
  1318.  26h    DWORD    original INT 14h
  1319.  2Ah    DWORD    original INT 15h
  1320.  2Eh    DWORD    original INT 16h
  1321.  32h    DWORD    original INT 17h
  1322.  36h    DWORD    original INT 21h
  1323.  3Ah    DWORD    original INT 28h
  1324.  3Eh    WORD    offset of TAME INT 10h handler
  1325.  40h    WORD    offset of TAME INT 14h handler
  1326.  42h    WORD    offset of TAME INT 15h handler
  1327.  44h    WORD    offset of TAME INT 16h handler
  1328.  46h    WORD    offset of TAME INT 17h handler
  1329.  48h    WORD    offset of TAME INT 21h handler
  1330.  4Ah    WORD    offset of TAME INT 28h handler
  1331.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  1332.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  1333.  50h    WORD    number of polls remaining before next task switch
  1334.  52h    WORD    /KEYIDLE value
  1335.  54h    WORD    /FG: value
  1336.  56h    WORD    task switches left until next FGONLY DESQview API call
  1337.  58h    WORD    multitasker version
  1338.  5Ah    WORD    virtual screen segment
  1339.  5Ch    BYTE    flags for interrupts already grabbed by TAME
  1340.         bit 0: INT 10h
  1341.             1: INT 14h
  1342.             2: INT 15h
  1343.             3: INT 16h
  1344.             4: INT 17h
  1345.             5: INT 21h
  1346.             6: INT 28h
  1347.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  1348.  5Eh    BYTE    window or task number for this task
  1349.  5Fh    BYTE    multitasker type
  1350.         01h DESQview
  1351.         02h DoubleDOS
  1352.         03h TopView
  1353.         04h OmniView
  1354.         05h VM/386
  1355.  60h    BYTE    type of task switching selected (bit flags)
  1356.         bit 0: DESQview
  1357.             1: DoubleDOS
  1358.             2: TopView
  1359.             3: OmniView
  1360.             4: KeySwitch
  1361.             5: HLT instruction
  1362.  61h    BYTE    watch_DOS
  1363.  62h    BYTE    bit flags
  1364.         bit 0: TAME enabled
  1365.             1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  1366.             2: /TIMEPOLL
  1367.             3: /KEYPOLL
  1368.             4: inhibit timer
  1369.             5: enable status monitoring
  1370.  63h    BYTE    old status
  1371.  64h    WORD    signature DA34h
  1372.  
  1373. Format of TAME 2.60 data area:
  1374. Offset    Size    Description
  1375.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  1376.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  1377.  02h    DWORD    number of task switches
  1378.  06h    DWORD    number of keyboard polls
  1379.  0Ah    DWORD    number of time polls
  1380.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  1381.  12h    DWORD    time of last /CLEAR or TAME-RES load
  1382.  16h    DWORD    time yielded
  1383.  1Ah    DWORD    time spent polling
  1384.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  1385.  22h  4 BYTEs    ???
  1386.  26h    DWORD    original INT 10h
  1387.  2Ah    DWORD    original INT 14h
  1388.  2Eh    DWORD    original INT 15h
  1389.  32h    DWORD    original INT 16h
  1390.  36h    DWORD    original INT 17h
  1391.  3Ah    DWORD    original INT 21h
  1392.  3Eh    DWORD    original INT 28h
  1393.  42h    WORD    offset of TAME INT 10h handler
  1394.  44h    WORD    offset of TAME INT 14h handler
  1395.  46h    WORD    offset of TAME INT 15h handler
  1396.  48h    WORD    offset of TAME INT 16h handler
  1397.  4Ah    WORD    offset of TAME INT 17h handler
  1398.  4Ch    WORD    offset of TAME INT 21h handler
  1399.  4Eh    WORD    offset of TAME INT 28h handler
  1400.  50h    WORD    X in /max:X,Y or /freq:X,Y
  1401.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  1402.  54h    WORD    number of polls remaining before next task switch
  1403.  56h    WORD    /KEYIDLE value
  1404.  58h  4 BYTEs    ???
  1405.  5Ch    WORD    X in /boost:X,Y
  1406.  5Eh    WORD    Y in /boost:X,Y
  1407.  60h    WORD    /FG: value
  1408.  62h    WORD    task switches left until next FGONLY DESQview API call
  1409.  64h    WORD    multitasker version ???
  1410.  66h    WORD    virtual screen segment
  1411.  68h    BYTE    flags for interrupts already grabbed by TAME
  1412.         bit 0: INT 10h
  1413.             1: INT 14h
  1414.             2: INT 15h
  1415.             3: INT 16h
  1416.             4: INT 17h
  1417.             5: INT 21h
  1418.             6: INT 28h
  1419.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  1420.  6Ah    BYTE    window or task number for this task
  1421.  6Bh    BYTE    multitasker type
  1422.         01h DESQview
  1423.         02h DoubleDOS
  1424.         03h TopView
  1425.         04h OmniView
  1426.         05h VM/386
  1427.  6Ch    BYTE    type of task switching selected (bit flags)
  1428.         bit 0: DESQview
  1429.             1: DoubleDOS
  1430.             2: TopView
  1431.             3: OmniView
  1432.             4: KeySwitch
  1433.             5: HLT instruction
  1434.  6Dh    BYTE    watch_DOS
  1435.  6Eh    BYTE    bit flags
  1436.         bit 0: TAME enabled
  1437.             1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  1438.             2: /TIMEPOLL
  1439.             3: /KEYPOLL
  1440.             4: inhibit timer
  1441.             5: enable status monitoring
  1442.  6Fh    BYTE    old status
  1443.  70h    WORD    signature DA34h
  1444. ----------212B44BX4D41-----------------------
  1445. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  1446.     AX = 2B44h ('D')
  1447.     BX = 4D41h ('MA')
  1448.     CX = 7063h ('pc')
  1449.     DX = 4157h ('AW')
  1450. Return: AX = 4F4Bh ('OK') if large host resident
  1451.        = 6F6Bh ('ok') if small host resident
  1452.     CX:DX -> API entry point
  1453. SeeAlso: INT 16/AH=79h
  1454.  
  1455. Call API entry point with:
  1456.     AX = 0000h get pcANYWHERE IV version
  1457.         DS:SI -> BYTE buffer for host type code
  1458.         Return: AH = version number
  1459.             AL = revision number
  1460.             DS:DI buffer byte filled with
  1461.             00h full-featured host
  1462.             01h limited-feature LAN host
  1463.             other API may not be supported
  1464.     AX = 0001h initialize operation
  1465.         DS:SI -> initialization request structure (see below)
  1466.         Return: AX = function status (see below)
  1467.     AX = 0002h get status
  1468.         Return: AH = current operating mode (see init req structure below)
  1469.             AL = current connection status
  1470.             bit 0: a physical connection is active
  1471.             bit 1: remove screen updating is active
  1472.             bit 2: connection checking is active
  1473.             bit 3: hot key detection is active
  1474.             bit 4: background file transfer is active
  1475.     AX = 0003h suspend remote screen updates
  1476.         Return: AX = function status (see below)
  1477.     AX = 0004h resume screen updates
  1478.         Return: AX = function status (see below)
  1479.     AX = 0005h end current remote access session
  1480.         DS:SI -> termination request structure (see below)
  1481.         Return: AX = function status (see below)
  1482.     AX = 0006h remove pcANYWHERE IV from memory
  1483.         Return: AX = status
  1484.             0000h successful
  1485.             FFD2h unable to release allocated memory
  1486.             FFD1h unable to release interrupt vectors
  1487.     AX = 8000h read data from communications channel
  1488.         DS:BX -> buffer
  1489.         CX = buffer size
  1490.         Return: AX >= number of characters read/available
  1491.             AX < 0 on error
  1492.     AX = 8001h write data to communications channel
  1493.         DS:BX -> buffer
  1494.         CX = buffer size
  1495.         Return: AX >= number of characters written
  1496.             AX < 0 on error
  1497.     AX = 8002h get connection status
  1498.         Return: AX = status
  1499.             > 0000h if connection active
  1500.             = 0000h if connection lost
  1501.             < 0000h on error
  1502.  
  1503. Format of initialization request structure:
  1504. Offset    Size    Description
  1505.  00h    BYTE    operating mode
  1506.         00h wait for a call
  1507.         01h hot key activates
  1508.         02h incoming call activates
  1509.         03h initiate a call
  1510.  01h  3 BYTEs    user ID to append to config file names
  1511.  04h    WORD    DS-relative pointer to path for config files
  1512.  06h    WORD    DS-relative pointer to path for program files
  1513.  
  1514. Format of termination request structure:
  1515. Offset    Size    Description
  1516.  00h    BYTE    operating mode after termination
  1517.         00h wait for a call
  1518.         01h hot key activates
  1519.         02h incoming call activates
  1520.         80h use current mode
  1521.         FFh remove from memory
  1522.  
  1523. Values for function status:
  1524.  0000h function completed successfully
  1525.  FFF2h unable to establish a connection when operating mode is
  1526.     "Initiate a call"
  1527.  FFF3h modem configuration is invalid (corrupt config)
  1528.  FFF4h modem initialization failed (no modem response)
  1529.  FFF5h the communications device could not be initialized
  1530.  FFF6h the host operator aborted the function
  1531.  FFF7h the communications driver type specified in the configuration file is
  1532.     different than the one loaded when pcANYWHERE IV was initially started
  1533.  FFF9h the configuration file is invalid
  1534.  FFFAh the configuration file could not be found
  1535.  FFFBh no session is active
  1536.  FFFCh a remote access session is active
  1537.  FFFDh the specified operating mode is invalid
  1538. ----------212C-------------------------------
  1539. INT 21 - DOS 1+ - GET SYSTEM TIME
  1540.     AH = 2Ch
  1541. Return: CH = hour
  1542.     CL = minute
  1543.     DH = second
  1544.     DL = 1/100 seconds
  1545. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  1546.       so returned times generally do not increment by 1
  1547.     on some systems, DL may always return 00h
  1548. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  1549. ----------212D-------------------------------
  1550. INT 21 - DOS 1+ - SET SYSTEM TIME
  1551.     AH = 2Dh
  1552.     CH = hour
  1553.     CL = minute
  1554.     DH = second
  1555.     DL = 1/100 seconds
  1556. Return: AL = result
  1557.         00h successful
  1558.         FFh invalid time, system time unchanged
  1559. Note:    DOS 3.3+ also sets CMOS clock
  1560. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  1561. ----------212E--DL00-------------------------
  1562. INT 21 - DOS 1+ - SET VERIFY FLAG
  1563.     AH = 2Eh
  1564.     DL = 00h (DOS 1.x/2.x only)
  1565.     AL = new state of verify flag
  1566.         00h off
  1567.         01h on
  1568. Notes:    default state at system boot is OFF
  1569.     when ON, all disk writes are verified provided the device driver
  1570.       supports read-after-write verification
  1571. SeeAlso: AH=54h
  1572. ----------212F-------------------------------
  1573. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  1574.     AH = 2Fh
  1575. Return: ES:BX -> current DTA
  1576. SeeAlso: AH=1Ah
  1577. ----------2130-------------------------------
  1578. INT 21 - DOS 2+ - GET DOS VERSION
  1579.     AH = 30h
  1580. ---DOS 5.0---
  1581.     AL = what to return in BH
  1582.         00h OEM number (as for DOS 2.0-4.0x)
  1583.         01h version flag
  1584. Return: AL = major version number (00h if DOS 1.x)
  1585.     AH = minor version number
  1586.     BL:CX = 24-bit user serial number (most versions do not use this)
  1587. ---if DOS <5 or AL=00h---
  1588.     BH = OEM number
  1589.         00h IBM
  1590.         05h Zenith
  1591.         16h DEC
  1592.         23h Olivetti
  1593.         29h Toshiba
  1594.         4Dh    Hewlett-Packard
  1595.         99h    STARLITE architecture (OEM DOS, NETWORK DOS, SMP DOS)
  1596.         FFh Microsoft, Phoenix
  1597. ---if DOS 5.0 and AL=01h---
  1598.     BH = version flag
  1599.         08h DOS is in ROM
  1600.         10h DOS is in HMA
  1601. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah
  1602.     the OS/2 v2.x Compatibility Box returns major version 14h
  1603.     DOS 4.01 and 4.02 identify themselves as version 4.00
  1604.     generic MSDOS 3.30, Compaq MSDOS 3.31, and others identify themselves
  1605.       as PC-DOS by returning OEM number 00h
  1606.     the version returned under DOS 4.0x may be modified by entries in
  1607.       the special program list (see AH=52h)
  1608.     the version returned under DOS 5.0 may be modified by SETVER; use
  1609.       AX=3306h to get the true version number
  1610. SeeAlso: AX=3306h,INT 2F/AX=122Fh
  1611. ----------2130-------------------------------
  1612. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  1613.     AH = 30h
  1614.     EAX = 00003000h
  1615.     EBX = 50484152h ("PHAR")
  1616. Return: AL = major DOS version
  1617.     AH = minor DOS version
  1618.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  1619.         BL = ASCII major version number
  1620.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  1621.         EDX = address of GDA
  1622. SeeAlso: AX=2501h,AX=FF00h
  1623. ----------2130--DXABCD-----------------------
  1624. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  1625.     AH = 30h
  1626.     DX = ABCDh
  1627. Return: DX = DCBAh if installed
  1628. SeeAlso: AX=0D20h,AX=30F1h
  1629. ----------213000-----------------------------
  1630. INT 21 - Btrieve Multi-User - INSTALLATION CHECK
  1631.     AX = 3000h
  1632. Return: AL >= 03h if INT 2F handler installed
  1633. SeeAlso: INT 2F/AX=AB00h,INT 7B"Btrieve",INT 7F/AX=0200h
  1634. ----------213000BX1234-----------------------
  1635. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  1636.     AX = 3000h
  1637.     BX = 1234h
  1638.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  1639. Return: AL = DOS major version
  1640.     AH = DOS minor version
  1641.     CX:BX -> Ctask global data block
  1642. Notes:    if first eight bytes of returned data block equal eight bytes passed
  1643.       in, CTask is resident
  1644.     CTask is a multitasking kernel for C written by Thomas Wagner
  1645. ----------2130F1-----------------------------
  1646. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  1647.     AX = 30F1h
  1648. Return: AL = 00h if resident
  1649. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  1650. ----------2131-------------------------------
  1651. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  1652.     AH = 31h
  1653.     AL = return code
  1654.     DX = number of paragraphs to keep resident
  1655. Return: never
  1656. Notes:    the value in DX only affects the memory block containing the PSP;
  1657.       additional memory allocated via AH=48h is not affected
  1658.     the minimum number of paragraphs which will remain resident is 11h
  1659.       for DOS 2.x and 06h for DOS 3+
  1660.     most TSRs can save some memory by releasing their environment block
  1661.       before terminating (see AH=26h,AH=49h)
  1662. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  1663. ----------2132-------------------------------
  1664. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  1665.     AH = 32h
  1666.     DL = drive number (00h = default, 01h = A:, etc)
  1667. Return: AL = status
  1668.         00h successful
  1669.         DS:BX -> Drive Parameter Block (DPB) for specified drive
  1670.         FFh invalid or network drive
  1671. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  1672.       except for the DWORD at offset 12h
  1673.     this call updates the DPB by reading the disk; the DPB may be accessed
  1674.       via the DOS list of lists (see AH=52h) if disk access is not
  1675.       desirable.
  1676.     documented for DOS 5.0, but undocumented in prior versions
  1677. SeeAlso: AH=1Fh,AH=52h
  1678.  
  1679. Format of DOS Drive Parameter Block:
  1680. Offset    Size    Description
  1681.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  1682.  01h    BYTE    unit number within device driver
  1683.  02h    WORD    bytes per sector
  1684.  04h    BYTE    highest sector number within a cluster
  1685.  05h    BYTE    shift count to convert clusters into sectors
  1686.  06h    WORD    number of reserved sectors at beginning of drive
  1687.  08h    BYTE    number of FATs
  1688.  09h    WORD    number of root directory entries
  1689.  0Bh    WORD    number of first sector containing user data
  1690.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  1691.  0Fh    BYTE    number of sectors per FAT
  1692.  10h    WORD    sector number of first directory sector
  1693.  12h    DWORD    address of device driver header
  1694.  16h    BYTE    media ID byte
  1695.  17h    BYTE    00h if disk accessed, FFh if not
  1696.  18h    DWORD    pointer to next DPB
  1697. ---DOS 2.x---
  1698.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  1699.         FFFFh = unknown
  1700.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  1701. ---DOS 3.x---
  1702.  1Ch    WORD    cluster at which to start search for free space when writing
  1703.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  1704. ---DOS 4.0-5.0---
  1705.  0Fh    WORD    number of sectors per FAT
  1706.  11h    WORD    sector number of first directory sector
  1707.  13h    DWORD    address of device driver header
  1708.  17h    BYTE    media ID byte
  1709.  18h    BYTE    00h if disk accessed, FFh if not
  1710.  19h    DWORD    pointer to next DPB
  1711.  1Dh    WORD    cluster at which to start search for free space when writing
  1712.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  1713. ----------2133-------------------------------
  1714. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  1715.     AH = 33h
  1716.     AL = subfunction
  1717.         00h get current extended break state
  1718.         Return: DL = current state, 00h = off, 01h = on
  1719.         01h set state of extended ^C/^Break checking
  1720.         DL = 00h off, check only on character I/O functions
  1721.              01h on, check on all DOS functions
  1722. Note:    under DOS 3.1+, this function does not use any of the DOS-internal
  1723.       stacks and is thus fully reentrant
  1724. SeeAlso: AX=3302h
  1725. ----------213302-----------------------------
  1726. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  1727.     AX = 3302h
  1728.     DL = new state
  1729.          00h for OFF or 01h for ON
  1730. Return: DL = old state of extended BREAK checking
  1731. Note:    this function does not use any of the DOS-internal stacks and is thus
  1732.       fully reentrant
  1733. SeeAlso: AH=33h
  1734. ----------213305-----------------------------
  1735. INT 21 - DOS 4+ - GET BOOT DRIVE
  1736.     AX = 3305h
  1737. Return: DL = boot drive (1=A:,...)
  1738. Notes:    fully reentrant
  1739.     NEC 9800-series PCs always call the boot drive A: and assign the other
  1740.       drive letters sequentially to the other drives in the system
  1741. ----------213306-----------------------------
  1742. INT 21 - DOS 5.0 - GET TRUE VERSION NUMBER
  1743.     AX = 3306h
  1744. Return:    BL = major version
  1745.     BH = minor version
  1746.     DL = revision (bits 2-0, all others 0)
  1747.     DH = version flags
  1748.         bit 3: DOS is in ROM
  1749.         bit 4: DOS in in HMA
  1750. Notes:    this function always returns the true version number, unlike AH=30h,
  1751.       whose return value may be changed with SETVER
  1752.     fully reentrant
  1753. BUG:    DR-DOS 5.0 returns CF set/AX=0001h for INT 21/AH=33h subfunctions
  1754.       other than 00h-02h and 05h, while MS-DOS returns AL=FFh for invalid
  1755.       subfunctions
  1756. SeeAlso: AH=30h
  1757. ----------21330F-----------------------------
  1758. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  1759.     AX = 330Fh
  1760. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  1761. SeeAlso: AX=30F1h,AX=33E0h
  1762. ----------2133E0-----------------------------
  1763. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  1764.     AX = 33E0h
  1765. Return: AL = E0h if resident (DOS returns AL=FFh)
  1766. SeeAlso: AX=330Fh,AX=357Fh
  1767. ----------2134-------------------------------
  1768. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  1769.     AH = 34h
  1770. Return: ES:BX -> one-byte InDOS flag
  1771. Notes:    the value of InDOS is incremented whenever an INT 21 function begins
  1772.       and decremented whenever one completes
  1773.     during an INT 28 call, it is safe to call some INT 21 functions even
  1774.       though InDOS may be 01h instead of zero
  1775.     InDOS alone is not sufficient for determining when it is safe to
  1776.       enter DOS, as the critical error handling decrements InDOS and
  1777.       increments the critical error flag for the duration of the critical
  1778.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  1779.       busy.
  1780.     the critical error flag is the byte immediately following InDOS in
  1781.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ (except COMPAQ
  1782.       DOS 3.0, where the critical error flag is located 1AAh bytes BEFORE
  1783.       the critical section flag)
  1784.     For DOS 3.1+, an undocumented call exists to get the address of the
  1785.       critical error flag (see AX=5D06h)
  1786. SeeAlso: AX=5D06h,AX=5D0Bh,INT 28
  1787. ----------2135-------------------------------
  1788. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  1789.     AH = 35h
  1790.     AL = interrupt number
  1791. Return: ES:BX -> current interrupt handler
  1792. SeeAlso: AH=25h,AX=2503h
  1793. ----------21357F-----------------------------
  1794. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  1795.     AX = 357Fh
  1796. Return: DX = FFFFh if installed
  1797. SeeAlso: AX=33E0h,AX=3DFFh
  1798. ----------2136-------------------------------
  1799. INT 21 - DOS 2+ - GET FREE DISK SPACE
  1800.     AH = 36h
  1801.     DL = drive number (00h = default, 01h = A:, etc)
  1802. Return: AX = FFFFh if invalid drive
  1803.     else
  1804.         AX = sectors per cluster
  1805.         BX = number of free clusters
  1806.         CX = bytes per sector
  1807.         DX = total clusters on drive
  1808. Notes:    free space on drive in bytes is AX * BX * CX
  1809.     total space on drive in bytes is AX * CX * DX
  1810.     "lost clusters" are considered to be in use
  1811.     according to Dave Williams' MSDOS reference, the value in DX is
  1812.       incorrect for non-default drives after ASSIGN is run
  1813. SeeAlso: AH=1Bh,AH=1Ch
  1814. ----------213700-----------------------------
  1815. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  1816.     AX = 3700h
  1817. Return: AL = status
  1818.         00h successful
  1819.         DL = current switch character
  1820.         FFh unsupported subfunction
  1821. Notes:    documented in some OEM versions of some releases of DOS
  1822.     supported by OS/2 compatibility box
  1823.     always returns AL=2Fh for DOS 5.0
  1824. SeeAlso: AX=3701h
  1825. ----------213701-----------------------------
  1826. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  1827.     AX = 3701h
  1828.     DL = new switch character
  1829. Return: AL = status
  1830.         00h successful
  1831.         FFh unsupported subfunction
  1832. Notes:    documented in some OEM versions of some releases of DOS
  1833.     supported by OS/2 compatibility box
  1834.     ignored by DOS 5.0
  1835. SeeAlso: AX=3700h
  1836. ----------2137-------------------------------
  1837. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  1838.     AH = 37h
  1839.     AL = subfunction
  1840.         02h get availdev flag
  1841.         Return: DL = 00h \DEV\ must precede character device names
  1842.                = nonzero \DEV\ is optional
  1843.         03h set availdev flag
  1844.         DL = 00h    \DEV\ is mandatory
  1845.            = nonzero    \DEV\ is optional
  1846. Return: AL = status
  1847.         00h successful
  1848.         FFh unsupported subfunction
  1849. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  1850.       names without generating an error even if the directory \DEV does
  1851.       not actually exist (other paths generate an error if they do not
  1852.       exist).
  1853.     although DOS 3.3+ accepts these calls, they have no effect, and
  1854.       AL=02h always returns DL=FFh
  1855. ----------2138-------------------------------
  1856. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  1857.     AH = 38h
  1858. --DOS 2.x--
  1859.     AL = 00h get current-country info
  1860.     DS:DX -> buffer for returned info (see below)
  1861. Return: CF set on error
  1862.         AX = error code (02h)
  1863.     CF clear if successful
  1864.         AX = country code (MSDOS 2.11 only)
  1865.         buffer at DS:DX filled
  1866. --DOS 3+--
  1867.     AL = 00h for current country
  1868.     AL = 01h thru 0FEh for specific country with code <255
  1869.     AL = 0FFh for specific country with code >= 255
  1870.        BX = 16-bit country code
  1871.     DS:DX -> buffer for returned info (see below)
  1872. Return:    CF set on error
  1873.         AX = error code (02h)
  1874.     CF clear if successful
  1875.         BX = country code
  1876.         DS:DX buffer filled
  1877. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  1878.  
  1879. Format of PCDOS 2.x country info:
  1880. Offset    Size    Description
  1881.  00h    WORD    date format  0 = USA    mm dd yy
  1882.                  1 = Europe dd mm yy
  1883.                  2 = Japan    yy mm dd
  1884.  02h    BYTE    currency symbol
  1885.  03h    BYTE    00h
  1886.  04h    BYTE    thousands separator char
  1887.  05h    BYTE    00h
  1888.  06h    BYTE    decimal separator char
  1889.  07h    BYTE    00h
  1890.  08h 24 BYTEs    reserved
  1891.  
  1892. Format of MSDOS 2.x,DOS 3+ country info:
  1893. Offset    Size    Description
  1894.  00h    WORD    date format (see above)
  1895.  02h  5 BYTEs    ASCIZ currency symbol string
  1896.  07h  2 BYTEs    ASCIZ thousands separator
  1897.  09h  2 BYTEs    ASCIZ decimal separator
  1898.  0Bh  2 BYTEs    ASCIZ date separator
  1899.  0Dh  2 BYTEs    ASCIZ time separator
  1900.  0Fh    BYTE    currency format
  1901.         bit 2 = set if currency symbol replaces decimal point
  1902.         bit 1 = number of spaces between value and currency symbol
  1903.         bit 0 = 0 if currency symbol precedes value
  1904.             1 if currency symbol follows value
  1905.  10h    BYTE    number of digits after decimal in currency
  1906.  11h    BYTE    time format
  1907.         bit 0 = 0 if 12-hour clock
  1908.             1 if 24-hour clock
  1909.  12h    DWORD    address of case map routine
  1910.         (FAR CALL, AL = character to map to upper case [>= 80h])
  1911.  16h  2 BYTEs    ASCIZ data-list separator
  1912.  18h 10 BYTEs    reserved
  1913.  
  1914. Values for country code:
  1915.  001h    United States
  1916.  002h    Canadian-French
  1917.  003h    Latin America
  1918.  01Fh    Netherlands
  1919.  020h    Belgium
  1920.  021h    France
  1921.  022h    Spain
  1922.  024h    Hungary (not supported by DR-DOS 5.0)
  1923.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  1924.  027h    Italy
  1925.  029h    Switzerland
  1926.  02Ah    Czechoslovakia (not supported by DR-DOS 5.0)
  1927.  02Bh    Austria (DR-DOS 5.0)
  1928.  02Ch    United Kingdom
  1929.  02Dh    Denmark
  1930.  02Eh    Sweden
  1931.  02Fh    Norway
  1932.  030h    Poland (not supported by DR-DOS 5.0)
  1933.  031h    Germany
  1934.  037h    Brazil (not supported by DR-DOS 5.0)
  1935.  03Dh    International English [Australia in DR-DOS 5.0]
  1936.  051h    Japan (DR-DOS 5.0)
  1937.  052h    Korea (DR-DOS 5.0)
  1938.  15Fh    Portugal
  1939.  166h    Finland
  1940.  311h    Middle East (DR-DOS 5.0)
  1941.  3CCh    Israel (DR-DOS 5.0)
  1942. ----------2138-------------------------------
  1943. INT 21 - DOS 3+ - SET COUNTRY CODE
  1944.     AH = 38h
  1945.     AL = 01h thru 0FEh for specific country with code <255
  1946.     AL = FFh for specific country with code >= 255
  1947.        BX = 16-bit country code
  1948.     DX = FFFFh
  1949. Return: CF set on error
  1950.         AX = error code (see AH=59h)
  1951.     CF clear if successful
  1952. Note:    not supported by OS/2
  1953. SeeAlso: INT 2F/AX=1403h
  1954. ----------2139-------------------------------
  1955. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  1956.     AH = 39h
  1957.     DS:DX -> ASCIZ pathname
  1958. Return: CF clear if successful
  1959.         AX destroyed
  1960.     CF set on error
  1961.         AX = error code (03h,05h) (see AH=59h)
  1962. Notes:    all directories in the given path except the last must exist
  1963.     fails if the parent directory is the root and is full
  1964.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  1965.       it is not possible to make that directory the current directory
  1966.       because the path would exceed 64 characters
  1967. SeeAlso: AH=3Ah,AH=3Bh,INT 2F/AX=1103h
  1968. ----------213A-------------------------------
  1969. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  1970.     AH = 3Ah
  1971.     DS:DX -> ASCIZ pathname of directory to be removed
  1972. Return: CF clear if successful
  1973.         AX destroyed
  1974.     CF set on error
  1975.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  1976. Note:    directory must be empty (contain only '.' and '..' entries)
  1977. SeeAlso: AH=39h,AH=3Bh,INT 2F/AX=1101h
  1978. ----------213B-------------------------------
  1979. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  1980.     AH = 3Bh
  1981.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  1982. Return: CF clear if successful
  1983.         AX destroyed
  1984.     CF set on error
  1985.         AX = error code (03h) (see AH=59h)
  1986. Notes:    if new directory name includes a drive letter, the default drive is
  1987.       not changed, only the current directory on that drive
  1988.     changing the current directory also changes the directory in which
  1989.       FCB file calls operate
  1990. SeeAlso: AH=47h,INT 2F/AX=1105h
  1991. ----------213C-------------------------------
  1992. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  1993.     AH = 3CH
  1994.     CX = file attribute
  1995.         bit 0: read-only
  1996.         1: hidden
  1997.         2: system
  1998.         3: volume label (ignored)
  1999.         4: reserved, must be zero (directory)
  2000.         5: archive bit
  2001.         7: if set, file is shareable under Novell NetWare
  2002.     DS:DX -> ASCIZ filename
  2003. Return: CF clear if successful
  2004.         AX = file handle
  2005.     CF set on error
  2006.         AX = error code (03h,04h,05h) (see AH=59h)
  2007. Note:    if a file with the given name exists, it is truncated to zero length
  2008. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh
  2009. ----------213D-------------------------------
  2010. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  2011.     AH = 3Dh
  2012.     AL = access and sharing modes
  2013.         bits 2-0: access mode
  2014.         000 read only
  2015.         001 write only
  2016.         010 read/write
  2017.         bit 3: reserved (0)
  2018.         bits 6-4: sharing mode (DOS 3+)
  2019.         000 compatibility mode
  2020.         001 "DENYALL" prohibit both read and write access by others
  2021.         010 "DENYWRITE" prohibit write access by others
  2022.         011 "DENYREAD" prohibit read access by others
  2023.         100 "DENYNONE" allow full access by others
  2024.         bit 7: inheritance
  2025.         if set, file is private to current process and will not be
  2026.           inherited by child processes
  2027.     DS:DX -> ASCIZ filename
  2028.     CL = attribute mask of files to look for (server call only)
  2029. Return: CF clear if successful
  2030.         AX = file handle
  2031.     CF set on error
  2032.         AX = error code (01h,02h,03h,04h,05h,0Ch) (see AH=59h)
  2033. Notes:    file pointer is set to start of file
  2034.     file handles which are inherited from a parent also inherit sharing
  2035.       and access restrictions
  2036.     files may be opened even if given the hidden or system attributes
  2037. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1226h
  2038.  
  2039. File sharing behavior:
  2040.       |    Second and subsequent Opens
  2041.  First      |Compat  Deny      Deny     Deny    Deny
  2042.  Open      |       All      Write     Read    None
  2043.       |R W RW R W RW R W RW R W RW R W RW
  2044.  - - - - -| - - - - - - - - - - - - - - - - -
  2045.  Compat    R |Y Y Y  N N N     1 N N    N N N  1 N N
  2046.     W |Y Y Y  N N N     N N N    N N N  N N N
  2047.     RW|Y Y Y  N N N     N N N    N N N  N N N
  2048.  - - - - -|
  2049.  Deny    R |C C C  N N N     N N N    N N N  N N N
  2050.  All    W |C C C  N N N     N N N    N N N  N N N
  2051.     RW|C C C  N N N     N N N    N N N  N N N
  2052.  - - - - -|
  2053.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N 
  2054.  Write    W |C C C  N N N     N N N    Y N N  Y N N 
  2055.     RW|C C C  N N N     N N N    N N N  Y N N
  2056.  - - - - -|
  2057.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  2058.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  2059.     RW|C C C  N N N     N N N    N N N  N Y N
  2060.  - - - - -|
  2061.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  2062.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  2063.     RW|C C C  N N N     N N N    N N N  Y Y Y
  2064. Legend: Y = open succeeds, N = open fails with error code 05h
  2065.     C = open fails, INT 24 generated
  2066.     1 = open succeeds if file read-only, else fails with error code
  2067.     2 = open succeeds if file read-only, else fails with INT 24
  2068. ----------213DFF-----------------------------
  2069. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  2070.     AX = 3DFFh
  2071. Return: AX = 4A44h if resident
  2072. SeeAlso: AX=357Fh,AX=4203h
  2073. ----------213E-------------------------------
  2074. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  2075.     AH = 3Eh
  2076.     BX = file handle
  2077. Return: CF clear if successful
  2078.         AX destroyed
  2079.     CF set on error
  2080.         AX = error code (06h) (see AH=59h)
  2081. Note:    if the file was written to, any pending disk writes are performed, the
  2082.       time and date stamps are set to the current time, and the directory
  2083.       entry is updated
  2084. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  2085. ----------213F-------------------------------
  2086. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  2087.     AH = 3Fh
  2088.     BX = file handle
  2089.     CX = number of bytes to read
  2090.     DS:DX -> buffer for data
  2091. Return: CF clear if successful
  2092.         AX = number of bytes actually read (0 if at EOF before call)
  2093.     CF set on error
  2094.         AX = error code (05h,06h) (see AH=59h)
  2095. Notes:    data is read beginning at current file position, and the file position
  2096.       is updated after a successful read
  2097.     the returned AX may be smaller than the request in CX if a partial
  2098.       read occurred
  2099.     if reading from CON, read stops at first CR
  2100. SeeAlso: AH=27h,AH=40h,INT 2F/AX=1108h,INT 2F/AX=1229h
  2101. ----------213F-------------------------------
  2102. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  2103.     AH = 3Fh
  2104.     BX = handle for character device "TDHDEBUG"
  2105.     CX = number of bytes to read
  2106.     DS:DX -> buffer for status block (see below)
  2107. Return: CF clear if successful
  2108.         AX = number of bytes actually read
  2109.     CF set on error
  2110.         AX = error code (05h,06h) (see AH=59h)
  2111. SeeAlso: AH=40h"Turbo Debug"
  2112.  
  2113. Format of status block:
  2114. Offset    Size    Description
  2115.  00h    BYTE    status of command
  2116.         00h successful
  2117.         01h invalid handle
  2118.         02h no more breakpoints available
  2119.         03h hardware does not support specified breakpoint type
  2120.         04h previous command prevents execution
  2121.         05h debugger hardware not found
  2122.         06h hardware failure
  2123.         07h invalid command
  2124.         08h driver not initialized yet
  2125.         FEh recursive entry (hardware breakpoint inside hw bp handler)
  2126. ---status for command 01h---
  2127.  01h    WORD    device driver interface version number (currently 1)
  2128.  03h    WORD    device driver software version
  2129.  05h    BYTE    maximum simultaneous hardware breakpoints
  2130.  06h    BYTE    configuration bits
  2131.         bit 0: CPU and DMA accesses are distinct
  2132.             1: can detect DMA transfers
  2133.             2: supports data mask
  2134.             3: hardware pass counter on breakpoints
  2135.             4: can match on data as well as addresses
  2136.  07h    BYTE    supported breakpoint types
  2137.         bit 0: memory read
  2138.             1: memory write
  2139.             2: memory read/write
  2140.             3: I/O read
  2141.             4: I/O write
  2142.             5: I/O read/write
  2143.             6: instruction fetch
  2144.  08h    WORD    supported addressing match modes
  2145.         bit 0: any address
  2146.             1: equal to test value
  2147.             2: not equal
  2148.             3: above test value
  2149.             4: below test value
  2150.             5: below or equal
  2151.             6: above or equal
  2152.             7: within range
  2153.             8: outside range
  2154.  0Ah    WORD    supported data matches
  2155.         bit 0: any data
  2156.             1: equal to test value
  2157.             2: not equal
  2158.             3: above test value
  2159.             4: below test value
  2160.             5: below or equal
  2161.             6: above or equal
  2162.             7: within range
  2163.             8: outside range
  2164.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  2165.  0Dh    WORD    size of onboard memory (in K)
  2166.  0Fh    WORD    maximum number of trace-back events
  2167.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  2168.         supported)
  2169. ---status for command 04h---
  2170.  01h    BYTE    handle to use when referring to the just-set breakpoint
  2171. ----------2140-------------------------------
  2172. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  2173.     AH = 40h
  2174.     BX = file handle
  2175.     CX = number of bytes to write
  2176.     DS:DX -> data to write
  2177. Return: CF clear if successful
  2178.         AX = number of bytes actually written
  2179.     CF set on error
  2180.         AX = error code (05h,06h) (see AH=59h)
  2181. Notes:    if CX is zero, no data is written, and the file is truncated or
  2182.       extended to the current position
  2183.     data is written beginning at current file position, and the file
  2184.       position is updated after a successful write
  2185.     the usual cause for AX < CX on return is a full disk
  2186. SeeAlso: AH=28h,AH=3Fh,INT 2F/AX=1109h
  2187. ----------2140-------------------------------
  2188. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  2189.     AH = 40h
  2190.     BX = handle for character device "TDHDEBUG"
  2191.     CX = number of bytes to write
  2192.     DS:DX -> hardware breakpoint command (see below)
  2193. Return: CF clear if successful
  2194.         AX = number of bytes actually written
  2195.     CF set on error
  2196.         AX = error code (05h,06h) (see AH=59h)
  2197. Note:    results are retrieved by reading from the device
  2198. SeeAlso: AH=3Fh"Turbo Debug"
  2199.  
  2200. Format of hardware breakpoint commands:
  2201. Offset    Size    Description
  2202.  00h    BYTE    command code
  2203.         00h install interrupt vectors
  2204.         01h get hardware capabilities
  2205.         02h enable hardware breakpoints
  2206.         03h disable hardware breakpoints
  2207.         04h set hardware breakpoint
  2208.         05h clear hardware breakpoint
  2209.         06h set I/O base address and reset hardware
  2210.         07h restore interrupt vectors
  2211. ---command code 00h---
  2212.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  2213.         hardware breakpoint; call with CPU state the same as on
  2214.         the breakpoint except for pushing AX and placing an entry
  2215.         code (FFh if breakout button or breakpoint handle) in AH
  2216. ---command code 04h---
  2217.  01h    BYTE    breakpoint type
  2218.         00h memory read
  2219.         01h memory write
  2220.         02h memory read/write
  2221.         03h I/O read
  2222.         04h I/O write
  2223.         05h I/O read/write
  2224.         06h instruction fetch
  2225.  02h    BYTE    address matching mode
  2226.         00h any address
  2227.         01h equal to test value
  2228.         02h different from test value
  2229.         03h above test value
  2230.         04h below test value
  2231.         05h below or equal to test value
  2232.         06h above or equal to test value
  2233.         07h within inclusive range
  2234.         08h outside specified range
  2235.  03h    DWORD    32-bit linear low address
  2236.  07h    DWORD    32-bit linear high address
  2237.  0Bh    WORD    pass count
  2238.  0Dh    BYTE    data size (01h, 02h, or 04h)
  2239.  0Eh    BYTE    source of matched bus cycle
  2240.         01h CPU
  2241.         02h DMA
  2242.         03h either
  2243.  0Fh    BYTE    data-matching mode
  2244.         00h match any
  2245.         01h equal to test value
  2246.         02h different from test value
  2247.         03h above test value
  2248.         04h below test value
  2249.         05h below or equal to test value
  2250.         06h above or equal to test value
  2251.         07h within specified range
  2252.         08h outside specified range
  2253.  10h    DWORD    low data value
  2254.  14h    DWORD    high data value
  2255.  18h    DWORD    data mask specifying which bits of the data are tested
  2256. ---command code 05h---
  2257.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  2258.         04h)
  2259. ---command code 06h---
  2260.  01h    WORD    base address of hardware debugger board
  2261. ----------214000BX0002-----------------------
  2262. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  2263.     AX = 4000h
  2264.     BX = 0002h
  2265.     CX = 0000h
  2266.     DS:DX = 0000h:0000h
  2267. Return: CF clear if installed
  2268.         AX = CS of resident code
  2269. Note:    FARTBELL is a joke program by Guenther Thiele which makes various
  2270.       noises when programs output a bell
  2271. SeeAlso: AX=4001h
  2272. ----------214001BX0002-----------------------
  2273. INT 21 - FARTBELL.EXE - FORCE NOISE
  2274.     AX = 4001h
  2275.     BX = 0002h
  2276.     CX = 0000h
  2277.     DS:DX = 0000h:0000h
  2278. Note:    FARTBELL is a joke program by Guenther Thiele which makes various
  2279.       noises when programs output a bell
  2280. SeeAlso: AX=4000h
  2281. ----------2141-------------------------------
  2282. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  2283.     AH = 41h
  2284.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  2285.     CL = attribute mask for deletion (server call only, see below)
  2286. Return: CF clear if successful
  2287.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  2288.     CF set on error
  2289.         AX = error code (02h,03h,05h) (see AH=59h)
  2290. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  2291.       the filespec must be canonical (as returned by AH=60h), and only
  2292.       files matching the attribute mask in CL are deleted
  2293.     DOS does not erase the file's data; it merely becomes inaccessible
  2294.       because the FAT chain for the file is cleared
  2295.     deleting a file which is currently open may lead to filesystem
  2296.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  2297.       referencing the deleted file, thus allowing writes to a nonexistant
  2298.       file.
  2299. SeeAlso: AH=13h,AX=4301h,AX=5D00h,AH=60h,INT 2F/AX=1113h
  2300. ----------214101DXFFFE-----------------------
  2301. INT 21 - SoftLogic Data Guardian - ???
  2302.     AX = 4101h
  2303.     DX = FFFEh
  2304. Return: AX = 0000h if installed
  2305. Note:    resident code sets several internal variables on this call
  2306. ----------2142-------------------------------
  2307. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  2308.     AH = 42h
  2309.     AL = origin of move
  2310.         00h start of file
  2311.         01h current file position
  2312.         02h end of file
  2313.     BX = file handle
  2314.     CX:DX = offset from origin of new file position
  2315. Return: CF clear if successful
  2316.         DX:AX = new file position in bytes from start of file
  2317.     CF set on error
  2318.         AX = error code (01h,06h) (see AH=59h)
  2319. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  2320.       start of the file; no error is returned in that case, but subsequent
  2321.       attempts at I/O will produce errors
  2322.     if the new position is beyond the current end of file, the file will
  2323.       be extended by the next write (see AH=40h)
  2324. SeeAlso: AH=24h,INT 2F/AX=1228h
  2325. ----------214203-----------------------------
  2326. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  2327.     AX = 4203h
  2328. Return: AX = 1234h if resident
  2329. SeeAlso: AX=3DFFh,AX=4243h
  2330. ----------214243-----------------------------
  2331. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  2332.     AX = 4243h
  2333. Return: AX = 5678h if resident
  2334. SeeAlso: AX=4203h,AX=4B04h
  2335. ----------214300-----------------------------
  2336. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  2337.     AX = 4300h
  2338.     DS:DX -> ASCIZ filename
  2339. Return: CF clear if successful
  2340.         CX = attributes (see AX=4301h)
  2341.         AX = CX (DR-DOS 5.0)
  2342.     CF set on error
  2343.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  2344. SeeAlso: AX=4301h,AH=B6h,INT 2F/AX=110Fh
  2345. ----------214301-----------------------------
  2346. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  2347.     AX = 4301h
  2348.     CX = new attributes
  2349.         bit 8: shareable (Novell NetWare)
  2350.         7: unused
  2351.         6: unused
  2352.         5: archive
  2353.         4: directory
  2354.         3: volume label
  2355.         2: system
  2356.         1: hidden
  2357.         0: read-only
  2358.     DS:DX -> ASCIZ filename
  2359. Return: CF clear if successful
  2360.         AX destroyed
  2361.     CF set on error
  2362.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  2363. Notes:    will not change volume label or directory attributes
  2364.     MSDOS 4.01 reportedly closes the file if it is currently open
  2365. SeeAlso: AX=4300h,INT 2F/AX=110Eh
  2366. ----------214302-----------------------------
  2367. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  2368.     AX = 4302h
  2369.     DS:DX -> ASCIZ pathname
  2370. Return: CF clear if successful
  2371.         CX = access rights
  2372.         bit 0 delete requires password
  2373.         bit 2 write requires password
  2374.         bit 3 read requires password
  2375.         bits 4-7=equal to bits 0-3
  2376.         bits 8-11=equal to bits 0-3
  2377.         AX = CX (DR-DOS 5.0)
  2378.     CF set on error
  2379.         AX = error code
  2380. SeeAlso: AX=4303h
  2381. ----------214303-----------------------------
  2382. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  2383.     AX = 4303h
  2384.     CX = access rights
  2385.          bit 0 delete requires password
  2386.          bit 2 write requires password
  2387.          bit 3 read requires password
  2388.          bits 4-7=equal to bits 0-3
  2389.          bits 8-11=equal to bits 0-3
  2390.          bit 15 new password is to be set
  2391.     DS:DX -> ASCIZ pathname
  2392.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  2393. Return: CF clear if successful
  2394.     CF set on error
  2395.         AX = error code
  2396. Note:    if the file is already protected, the old password must be added after
  2397.       the pathname, separated by a ";"
  2398. SeeAlso: AX=4302h,AX=4454h
  2399. ----------214304-----------------------------
  2400. INT 21 - DR-DOS 5.0 internal - GET ???
  2401.     AX = 4304h
  2402.     ???
  2403. Return: CF clear if successful
  2404.         CX = AX = ???
  2405.     CF set on error
  2406.         AX = error code (see AH=59h)
  2407. SeeAlso: AX=4305h
  2408. ----------214305-----------------------------
  2409. INT 21 - DR-DOS 5.0 internal - SET ???
  2410.     AX = 4305h
  2411.     ???
  2412. Return: CF clear if successful
  2413.     CF set on error
  2414.         AX = error code (see AH=59h)
  2415. SeeAlso: AX=4304h
  2416. ----------214400-----------------------------
  2417. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  2418.     AX = 4400h
  2419.     BX = handle
  2420. Return: CF clear if successful
  2421.         DX = device information word
  2422.         character device
  2423.           14: device driver can process IOCTL requests (see AX=4402h)
  2424.           13: output until busy supported
  2425.           11: driver supports OPEN/CLOSE calls
  2426.            7: set (indicates device)
  2427.            6: EOF on input
  2428.            5: raw (binary) mode
  2429.            4: device is special (uses INT 29)
  2430.            3: clock device
  2431.            2: NUL device
  2432.            1: standard output
  2433.            0: standard input
  2434.         disk file
  2435.           15: file is remote (DOS 3+)
  2436.           14: don't set file date/time on closing (DOS 3+)
  2437.           11: media not removable
  2438.            8: (DOS 4+) generate INT 24 if no disk space on write
  2439.            7: clear (indicates file)
  2440.            6: file has not been written
  2441.          5-0: drive number (0 = A:)
  2442.         AX destroyed
  2443.     CF set on error
  2444.         AX = error code (01h,05h,06h) (see AH=59h)
  2445. Note:    value in DH corresponds to high byte of device driver's attribute word
  2446.       if handle refers to a character device
  2447. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  2448. ----------214401-----------------------------
  2449. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  2450.     AX = 4401h
  2451.     BX = handle (must refer to character device)
  2452.     DX = device information word (see AX=4400h)
  2453.         (DH must be zero)
  2454. Return: CF clear if successful
  2455.     CF set on error
  2456.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2457. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  2458. ----------214402-----------------------------
  2459. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  2460.     AX = 4402h
  2461.     BX = file handle referencing character device
  2462.     CX = number of bytes to read
  2463.     DS:DX -> buffer
  2464. Return: CF clear if successful
  2465.         AX = number of bytes actually read
  2466.     CF set on error
  2467.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2468. Note:    format of data is driver-specific (see below for some specific cases)
  2469. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  2470. ----------214402-----------------------------
  2471. INT 21 - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER
  2472.     AX = 4402h
  2473.     BX = file handle for device "PROTMAN$"
  2474.     DS:DX -> request block (see below)
  2475.     CX = 000Eh (size of request block)
  2476.  
  2477. Format of request block for GetProtocolManagerInfo:
  2478. Offset    Size    Description
  2479.  00h    WORD    01h
  2480.  02h    WORD    returned status (see below)
  2481.  04h    DWORD    returned pointer to structure representing parsed user config
  2482.  08h    DWORD    unused
  2483.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  2484.  
  2485. Format of request block for RegisterModule:
  2486. Offset    Size    Description
  2487.  00h    WORD    02h
  2488.  02h    WORD    returned status (see below)
  2489.  04h    DWORD    pointer to module's common characteristics table (see below)
  2490.  08h    DWORD    pointer to list of modules to which the module is to be bound
  2491.  0Ch    WORD    unused
  2492.  
  2493. Format of request block for BindAndStart:
  2494. Offset    Size    Description
  2495.  00h    WORD    03h
  2496.  02h    WORD    returned status (see below)
  2497.  04h    DWORD    caller's virtual address in FailingModules structure
  2498.  08h    DWORD    unused
  2499.  0Ch    WORD    unused
  2500.  
  2501. Format of request block for GetProtocolManagerLinkage:
  2502. Offset    Size    Description
  2503.  00h    WORD    04h
  2504.  02h    WORD    returned status (see below)
  2505.  04h    DWORD    returned dispatch point
  2506.  08h    DWORD    unused
  2507.  0Ch    WORD    returned protocol manager DS
  2508. Note:    the dispatch point may be called as follows instead of using this IOCTL
  2509.     STACK: WORD  protocol manager DS
  2510.            DWORD pointer to request block
  2511.     Return: AX = returned status
  2512.         STACK popped
  2513.  
  2514. Format of request block for GetProtocolIniPath:
  2515. Offset    Size    Description
  2516.  00h    WORD    05h
  2517.  02h    WORD    returned status (see below)
  2518.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  2519.  08h    DWORD    unused
  2520.  0Ch    WORD    buffer length
  2521.  
  2522. Format of request block for RegisterProtocolManagerInfo:
  2523. Offset    Size    Description
  2524.  00h    WORD    06h
  2525.  02h    WORD    returned status (see below)
  2526.  04h    DWORD    pointer to structure containing parsed user config file
  2527.  08h    DWORD    unused
  2528.  0Ch    WORD    length of structure
  2529.  
  2530. Format of request block for InitAndRegister:
  2531. Offset    Size    Description
  2532.  00h    WORD    07h
  2533.  02h    WORD    returned status (see below)
  2534.  04h    DWORD    unused
  2535.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  2536.  0Ch    WORD    unused
  2537.  
  2538. Format of request block for UnbindAndStop:
  2539. Offset    Size    Description
  2540.  00h    WORD    08h
  2541.  02h    WORD    returned status (see below)
  2542.  04h    DWORD    failing modules as for BindAndStart
  2543.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  2544.         if 0000h:0000h, terminate a set of previously dynamically
  2545.           bound protocol modules
  2546.  0Ch    WORD    unused
  2547.  
  2548. Format of request block for BindStatus:
  2549. Offset    Size    Description
  2550.  00h    WORD    09h
  2551.  02h    WORD    returned status (see below)
  2552.  04h    DWORD    must be 0000h:0000h
  2553.         on return, points to root tree
  2554.  08h    DWORD    0000h:0000h
  2555.  0Ch    WORD    unused under DOS
  2556.  
  2557. Format of request block for RegisterStatus:
  2558. Offset    Size    Description
  2559.  00h    WORD    0Ah
  2560.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see below)
  2561.  04h    DWORD    0000h:0000h
  2562.  08h    DWORD    pointer to 16-byte ASCIZ module name
  2563.  0Ch    WORD    0000h
  2564.  
  2565. Values of status code:
  2566.  0000h success
  2567.  0001h wait for release--protocol has retained control of the data buffer
  2568.  0002h request queued
  2569.  0003h frame not recognized
  2570.  0004h frame rejected
  2571.  0005h frame should be forwarded
  2572.  0006h out of resource
  2573.  0007h invalid parameter
  2574.  0008h invalid function
  2575.  0009h not supported
  2576.  000Ah hardware error
  2577.  000Bh transmit error
  2578.  000Ch unrecognized destination
  2579.  000Dh buffer too small
  2580.  0020h already started
  2581.  0021h binding incomplete
  2582.  0022h driver not initialized
  2583.  0023h hardware not found
  2584.  0024h hardware failure
  2585.  0025h configuration failure
  2586.  0026h interrupt conflict
  2587.  0027h MAC incompatible
  2588.  0028h initialization failed
  2589.  0029h no binding
  2590.  002Ah network may be disconnected
  2591.  002Bh incompatible OS version
  2592.  002Ch already registered
  2593.  002Dh path not found
  2594.  002Eh insufficient memory
  2595.  002Fh info not found
  2596.  00FFh general failure
  2597.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  2598.  
  2599. Format of common characteristics table:
  2600. Offset    Size    Description
  2601.  00h    WORD    size of table in bytes
  2602.  02h    BYTE    NDIS major version
  2603.  03h    BYTE    NDIS minor version
  2604.  04h    WORD    reserved
  2605.  06h    BYTE    module major version
  2606.  07h    BYTE    module minor version
  2607.  08h    DWORD    module function flag bits
  2608.         bit 0: binding at upper boundary supported
  2609.         bit 1: binding at lower boundary supported
  2610.         bit 2: dynamically bound
  2611.         bits 3-31 reserved, must be 0
  2612.  0Ch 16 BYTEs    ASCIZ module name
  2613.  1Ch    BYTE    upper boundary protocol level
  2614.         01h Media Access Control
  2615.         02h Data link
  2616.         03h network
  2617.         04h transport
  2618.         05h session
  2619.         FFh not specified
  2620.  1Dh    BYTE    upper boundary interface type
  2621.         for MACs: 1 = MAC
  2622.         for data links and transports: to be defined
  2623.         for session: 1 = NCB
  2624.         any level: 0 = private (ISV-defined)
  2625.  1Eh    BYTE    lower boundary protocol level
  2626.         00h physical
  2627.         01h Media Access Control
  2628.         02h Data link
  2629.         03h network
  2630.         04h transport
  2631.         05h session
  2632.         FFh not specified
  2633.  1Fh    BYTE    lower boundary interface type
  2634.         same as offset 1Dh
  2635.  20h    WORD    module ID filled in by protocol manager
  2636.  22h    WORD    module DS
  2637.  24h    DWORD    system request entry point
  2638.  28h    DWORD    pointer to service-specific characteristics
  2639.         0000h:0000h if none
  2640.  2Ch    DWORD    pointer to service-specific status
  2641.         0000h:0000h if none
  2642.  30h    DWORD    pointer to upper dispatch table (see below)
  2643.         0000h:0000h if none
  2644.  34h    DWORD    pointer to lower dispatch table (see below)
  2645.         0000h:0000h if none
  2646.  38h    DWORD    reserved, must be 0
  2647.  3Ch    DWORD    reserved, must be 0
  2648. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  2649.       interpreted as 01h
  2650.  
  2651. Format of MAC Service-Specific Characteristics Table:
  2652. Offset    Size    Description
  2653.  00h    WORD    length of table in bytes
  2654.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  2655.         "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  2656.         "HDLC", or "ISDN"
  2657.  12h    WORD    length of station addresses in bytes
  2658.  14h 16 BYTEs    permanent station address
  2659.  24h 16 BYTEs    current station address
  2660.  34h    DWORD    current functional adapter address (00000000h if none)
  2661.  38h    DWORD    pointer to multicast address list
  2662.  3Ch    DWORD    link speed in bits/sec
  2663.  40h    DWORD    service flags
  2664.         bit 0: supports broadcast
  2665.             1: supports multicast
  2666.             2: supports functional/group addressing
  2667.             3: supports promiscuous mode
  2668.             4: station address software settable
  2669.             5: statistics always current
  2670.             6: supports InitiateDiagnostics
  2671.             7: supports loopback
  2672.             8: MAC does primarily ReceiveChain indications instead of
  2673.                ReceiveLookahead indications
  2674.             9: supports IBM source routing
  2675.            10: supports MAC reset
  2676.            11: supports Open/Close adapter
  2677.            12: supports interrupt request
  2678.            13: supports source routing bridge
  2679.            14: supports GDT virtual addresses (OS/2 version)
  2680.            15: multiple TransferDatas allowed durign a single
  2681.                indication
  2682.            16: MAC normally sets FrameSize = 0 in ReceiveLookahead
  2683.            17-31: reserved, must be 0
  2684.  44h    WORD    maximum frame size which may be both sent and received
  2685.  46h    DWORD    total transmit buffer capacity in bytes
  2686.  4Ah    WORD    transmit buffer allocation block size in bytes
  2687.  4Ch    DWORD    total receive buffer capacity in bytes
  2688.  50h    WORD    receive buffer allocation block size in bytes
  2689.  52h  3 BYTEs    IEEE vendor code
  2690.  55h    BYTE    vendor adapter code
  2691.  56h    DWORD    pointer to ASCIZ vendor adapter description
  2692.  5Ah    WORD    IRQ used by adapter
  2693.  5Ch    WORD    transmit queue depth
  2694.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  2695.  60h  N BYTEs    vendor-specific info
  2696.  
  2697. Format of NetBIOS Service-Specific Characteristics Table
  2698. Offset    Size    Description
  2699.  00h    WORD    length of table in bytes
  2700.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  2701.  12h    WORD    NetBIOS module code
  2702.  14h  N BYTEs    vendor-specific info
  2703.  
  2704. Format of MAC Service-Specific Status Table:
  2705. Offset    Size    Description
  2706.  00h    WORD    length of table in bytes
  2707.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  2708.         (FFFFFFFFh = never)
  2709.  06h    DWORD    MAC status bits
  2710.         bits 0-2: 000 hardware not installed
  2711.               001 hardware failed startup diagnostics
  2712.               010 hardware configuration problem
  2713.               011 hardware fault
  2714.               100 operating marginally due to soft faults
  2715.               101 reserved
  2716.               110 reserved
  2717.               111 hardware fully operational
  2718.         bit 3:      MAC bound
  2719.             4:      MAC open
  2720.             5:      diagnostics in progress
  2721.             6-31: reserved
  2722.  0Ah    WORD    current packet filter flags
  2723.         bit 0: directed/multicast or group/functional
  2724.             1: broadcast
  2725.             2: promiscuous
  2726.             3: all source routing
  2727.             4-15: reserved, must be zero
  2728.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  2729.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  2730.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  2731.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  2732.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  2733.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  2734.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  2735.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  2736.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  2737.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  2738.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  2739.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  2740.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  2741.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  2742.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  2743.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  2744.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  2745.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  2746.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  2747.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  2748.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  2749.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  2750.  64h  N BYTEs    vendor-specific info
  2751. ----------214402-----------------------------
  2752. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  2753.     AX = 4402h
  2754.     BX = handle for character device "GDMS"
  2755.     CX = number of bytes to read (>= 4)
  2756.     DS:DX -> buffer (see below)
  2757. Return: CF set on error
  2758.         AX = error code (see AH=59h)
  2759.     CF clear if successful
  2760.         AX = number of bytes read
  2761.  
  2762. Format of returned data:
  2763. Offset    Size    Description
  2764.  00h  4 BYTEs    ???
  2765.  04h    DWORD    pointer to ???
  2766.  08h  4 BYTEs    ???
  2767. ----------214402-----------------------------
  2768. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  2769.     AX = 4402h
  2770.     BX = handle for device "LA$TBYTE"
  2771.     CX = 0004h
  2772.     DS:DX -> DWORD to hold address of 39-byte table of ???
  2773. Return: CF set on error
  2774.         AX = error code (see AH=59h)
  2775.     CF clear if successful
  2776.         AX = number of bytes read
  2777. Note:    LASTBYTE.SYS is part of "The Last Byte" by Key Software Products
  2778. SeeAlso: AX=4402h"HIGHUMM"
  2779. ----------214402-----------------------------
  2780. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  2781.     AX = 4402h
  2782.     BX = handle for device "KSP$UMM"
  2783.     CX = 0004h
  2784.     DS:DX -> DWORD to hold entry point
  2785. Return: CF set on error
  2786.         AX = error code (see AH=59h)
  2787.     CF clear if successful
  2788.         AX = number of bytes read
  2789. Note:    HIGHUMM.SYS is part of "The Last Byte" by Key Software Products
  2790. SeeAlso: AX=4402h"LASTBYTE"
  2791.  
  2792. Call HIGHUMM.SYS entry point with:
  2793.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  2794.         DX = size in paragraphs
  2795.         Return: BX = segment number (if successful)
  2796.             DX = size of requested block/size of largest block
  2797.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  2798.         DX = segment number of UMB
  2799.     AH = 02h request a bank-switched memory block
  2800.         DX = size in paragraphs
  2801.         Return: BX = segment number (if successful)
  2802.             DX = size of requested block/size of largest block
  2803.     AH = 03h release a bank-switched memory block
  2804.         DX = segment number
  2805.     AH = 04h transfer data to/from high memory
  2806.         DS:SI -> source
  2807.         ES:DI -> destination
  2808.         CX = length in bytes
  2809.         Note: enables bank-switched memory, does the copy, then disables
  2810.         bank-switched memory
  2811.     AH = 05h get a word from bank-switched memory
  2812.         ES:DI -> word to read
  2813.         Return: DX = word
  2814.     AH = 06h put a word to bank-switched memory
  2815.         ES:DI -> word to write
  2816.         DX = word
  2817.     AH = 07h put a byte to bank-switched memory
  2818.         ES:DI -> byte to write
  2819.         DL = byte
  2820.     AH = 08h enable bank-switched memory
  2821.         DS:SI -> 6-byte status save area
  2822.     AH = 09h disable bank-switched memory
  2823.         DS:SI -> 6-byte save area from enable call (AH=08h)
  2824.     AH = 0Ah assign name to UMB or high bank-switched block
  2825.         DX = segment number
  2826.         DS:SI -> 8-byte blank-padded name
  2827.     AH = 0Bh locate UMB block by name
  2828.         DS:SI -> 8-byte blank-padded name
  2829.         Return: BX = segment number (if successful)
  2830.             DX = size of block
  2831.     AH = 0Ch locate bank-switched block by name
  2832.         DS:SI -> 8-byte blank-padded name
  2833.         Return: BX = segment number (if successful)
  2834.             DX = size of block
  2835. Return: AX = status code
  2836.         0001h successful
  2837.         0000h failed
  2838.         BL = error code
  2839.             80h not implemented
  2840.             B0h insufficient memory, smaller block available
  2841.             B1h insufficient memory, no blocks available
  2842.             B2h invalid segment number
  2843. Note:    only functions 00h and 01h are always available; the remaining
  2844.       functions are only enabled if the proper commandline switch is given
  2845. ----------214402-----------------------------
  2846. INT 21 - SMARTDRV.SYS - IOCTL - GET CACHE STATUS
  2847.     AX = 4402h
  2848.     BX = file handle for device "SMARTAAR"
  2849.     CX = number of bytes to read (min 28h)
  2850.     DS:DX -> buffer for status record (see below)
  2851. Return: CF clear if successful
  2852.         AX = number of bytes actually read
  2853.     CF set on error
  2854.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2855. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h
  2856.  
  2857. Format of SMARTDRV status record:
  2858. Offset    Size    Description
  2859.  00h    BYTE    write-through flag (always 01h)
  2860.  01h    BYTE    writes should be buffered (always 00h)
  2861.  02h    BYTE    cache enabled if 01h
  2862.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  2863.  04h    WORD    clock ticks between cache flushes (currently unused)
  2864.  06h    BYTE    cache contains locked tracks if nonzero
  2865.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  2866.  08h    BYTE    cache full track writes if nonzero
  2867.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  2868.  0Ah    DWORD    original INT 13 vector
  2869.  0Eh    BYTE    minor version number
  2870.  0Fh    BYTE    major version number
  2871.  10h    WORD    unused
  2872.  12h    WORD    sectors read            \
  2873.  14h    WORD    sectors already in cache     > may be scaled rather than
  2874.  16h    WORD    sectors already in track buffer /  absolute counts
  2875.  18h    BYTE    cache hit rate in percent
  2876.  19h    BYTE    track buffer hit rate in percent
  2877.  1Ah    WORD    total tracks in cache
  2878.  1Ch    WORD    number of tracks in use
  2879.  1Eh    WORD    number of locked tracks
  2880.  20h    WORD    number of dirty tracks
  2881.  22h    WORD    current cache size in 16K pages
  2882.  24h    WORD    original (maximum) cache size in 16K pages
  2883.  26h    WORD    minimum cache size in 16K pages
  2884.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  2885. ----------214402-----------------------------
  2886. INT 21 - CD-ROM device driver - IOCTL INPUT
  2887.     AX = 4402h
  2888.     BX = file handle referencing character device for CD-ROM driver
  2889.     CX = number of bytes to read
  2890.     DS:DX -> control block (see below)
  2891. Return: CF clear if successful
  2892.         AX = number of bytes actually read
  2893.     CF set on error
  2894.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2895. Note:    the data returned depends on the first byte of the control block; the
  2896.       remainder of the control block is filled by the driver
  2897. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  2898.  
  2899. Format of control block:
  2900. Offset    Size    Description
  2901.  00h    BYTE    data being requested
  2902.         00h device driver header address
  2903.         01h drive head location
  2904.         02h reserved
  2905.         03h error statistics
  2906.         04h audio channel info
  2907.         05h raw drive bytes (uninterpreted and device-specific)
  2908.         06h device status
  2909.         07h sector size
  2910.         08h volume size
  2911.         09h media change status
  2912.         0Ah audio disk info
  2913.         0Bh audio track info
  2914.         0Ch audio Q-Channel info
  2915.         0Dh audio sub-channel info
  2916.         0Eh UPC code
  2917. ---function 00h---
  2918.  01h    DWORD    device driver header address (see also AH=52h)
  2919. ---function 01h---
  2920.  01h    BYTE    addressing mode
  2921.         00h HSG
  2922.         01h Red Book
  2923.  02h    DWORD    current location of drive's head
  2924.         logical sector number in HSG mode
  2925.         frame/second/minute/unused in Red Book mode
  2926.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  2927. ---function 03h---
  2928.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  2929. ---function 04h---
  2930.  01h    BYTE    input channel (0-3) for output channel 0
  2931.  02h    BYTE    volume for output channel 0
  2932.  03h    BYTE    input channel (0-3) for output channel 1
  2933.  04h    BYTE    volume for output channel 1
  2934.  05h    BYTE    input channel (0-3) for output channel 2
  2935.  06h    BYTE    volume for output channel 2
  2936.  07h    BYTE    input channel (0-3) for output channel 3
  2937.  08h    BYTE    volume for output channel 3
  2938. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  2939.       right prime; a volume of 00h is off
  2940.     the default setting is for each input channel to be assigned to the
  2941.       same-numbered output channel at full (FFh) volume
  2942. ---function 05h---
  2943.  01h    BYTE    number of bytes read
  2944.  02h 128 BYTEs    buffer for drive bytes
  2945. ---function 06h---
  2946.  01h    DWORD    device parameters
  2947.         bit 0: door open
  2948.             1: door unlocked
  2949.             2: supports raw reading in addition to cooked
  2950.             3: writable
  2951.             4: can play audio/video tracks
  2952.             5: supports interleaving
  2953.             6: reserved
  2954.             7: supports prefetch requests
  2955.             8: supports audio channel control
  2956.             9: supports Red Book addressing in addition to HSG
  2957.            10: audio is playing
  2958. ---function 07h---
  2959.  01h    BYTE    read mode
  2960.         00h cooked
  2961.         01h raw
  2962.  02h    WORD    sector size in bytes
  2963. ---function 08h---
  2964.  01h    DWORD    volume size in sectors
  2965. ---function 09h---
  2966.  01h    BYTE    media change status
  2967.         00h don't know
  2968.         01h media unchanged
  2969.         FFh media has been changed
  2970. ---function 0Ah---
  2971.  01h    BYTE    lowest audio track number
  2972.  02h    BYTE    highest audio track number
  2973.  03h    DWORD    start address of lead-out track (Red Book format)
  2974. --function 0Bh---
  2975.  01h    BYTE    track number (set by caller)
  2976.  02h    DWORD    starting point of track (Red Book format)
  2977.  06h    BYTE    track control info
  2978.         bits 15,14,12: track type (notice: bits not contiguous!)
  2979.             000 two audio channels, no pre-emphasis
  2980.             001 two audio channels with pre-emphasis
  2981.             010 data track
  2982.             100 four audio channels, no pre-emphasis
  2983.             101 four audio channels with pre-emphasis
  2984.             other reserved
  2985.         bit 13: digital copy permitted
  2986. ---function 0Ch---
  2987.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  2988.  02h    BYTE    track number
  2989.  03h    BYTE    point or index
  2990.  04h    BYTE    minute    \
  2991.  05h    BYTE    second     > running time within track
  2992.  06h    BYTE    frame    /
  2993.  07h    BYTE    zero
  2994.  08h    BYTE    "AMIN" or "PMIN"     \
  2995.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  2996.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  2997. ---function 0Dh---
  2998.  01h    DWORD    starting frame address (Red Book format)
  2999.  05h    DWORD    transfer address
  3000.  09h    DWORD    number of sectors to read
  3001. Note:    copies 96 bytes of sub-channel info per sector into buffer
  3002. ---function 0Eh---
  3003.  01h    BYTE    CONTROL and ADR byte
  3004.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  3005.  09h    BYTE    zero
  3006.  0Ah    BYTE    "AFRAME"
  3007. ----------214402-----------------------------
  3008. INT 21 U - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  3009.     AX = 4402h
  3010.     BX = file handle for device "QEMM386$"
  3011.     CX = 0004h
  3012.     DS:DX -> DWORD buffer for API entry point
  3013. Return: CF clear if successful
  3014.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  3015.     CF set on error
  3016.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3017. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  3018. ----------214402-----------------------------
  3019. INT 21 U - Quarterdeck - QEMM-386 v6+ - GET ???
  3020.     AX = 4402h
  3021.     BX = file handle for device "EMMXXXX0"
  3022.     CX = 0006h (size of buffer in bytes)
  3023.     DS:DX -> buffer for ???
  3024.         first byte must be 01h on entry
  3025. Return: CF clear if successful
  3026.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  3027.     CF set on error
  3028.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3029. Note:    this call always returns an error if Windows3 support has been disabled
  3030.       with the NW3 switch to QEMM386.SYS
  3031. SeeAlso: INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  3032. ----------214402-----------------------------
  3033. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  3034.     AX = 4402h
  3035.     BX = file handle for device "HOOKROM$"
  3036.     CX = 0004h
  3037.     DS:DX -> DWORD buffer for address of hooked vector table (see below)
  3038. Return: CF clear if successful
  3039.         DS:DX buffer filled
  3040.     CF set on error
  3041.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3042. SeeAlso: AX=4402h"QEMM"
  3043.  
  3044. Format of hooked vector table entry:
  3045. Offset    Size    Description
  3046.  00h  5 BYTEs    FAR jump to actual interrupt handler
  3047.          (end of table if first byte is not EAh)
  3048.  05h    BYTE    interrupt vector number
  3049. ----------214402-----------------------------
  3050. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  3051.     AX = 4402h
  3052.     BX = file handle for device "SCSIMGR$"
  3053.     CX = 0004h
  3054.     DS:DX -> buffer for function address
  3055. Return: CF clear if successful
  3056.         AX = 0004h
  3057.     CF set on error
  3058.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3059. Note:    the function address is called with the address of a SCSI Request
  3060.       Block on the stack and the caller must clean up the stack
  3061. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  3062.  
  3063. Format of SCSI Request Block (64 bytes):
  3064. Offset    Size    Description
  3065.  00h    BYTE    request number
  3066.         00h "HA_INQ"     host adapter inquiry
  3067.         01h "GET_TYPE"   get device type
  3068.         02h "EXEC_SIO"   execute SCSI I/O
  3069.         03h "ABORT_SRB"  abort SRB
  3070.         04h "RESET_DEV"  reset SCSI device
  3071.         05h "SET_HAPRMS" set host adapter parameters
  3072.  01h    BYTE    request status
  3073.         00h not done yet
  3074.         02h aborted
  3075.         04h SCSI I/O error
  3076.         80h invalid
  3077.         81h no adapter
  3078.          82h no device attached
  3079.         else status
  3080.  02h    BYTE    host adapter ID
  3081.  03h    BYTE    request flags
  3082.          bit 3: ???
  3083.  04h    DWORD    reserved
  3084. ---request 00h---
  3085.  08h    BYTE    (returned) number of host adapters
  3086.  09h    BYTE    (returned) target adapter ID
  3087.  0Ah 16 BYTEs    (returned) manager ID
  3088.  1Ah 16 BYTEs    (returned) adapter ID
  3089.  2Ah 16 BYTEs    (returned) parameters
  3090. ---request 01h---
  3091.  08h    BYTE    target ID
  3092.  09h    BYTE    logical unit number
  3093.  0Ah    BYTE    (returned) device type
  3094.          01h streamer
  3095. ---request 02h---
  3096.  08h    BYTE    target ID
  3097.  09h    BYTE    logical unit number
  3098.  0Ah    DWORD    data allocation length
  3099.  0Eh    BYTE    sense allocation length
  3100.  0Fh    DWORD    data buffer pointer
  3101.  13h    DWORD    next request pointer (for linking)
  3102.  17h    BYTE    CDB length
  3103.  18h    BYTE    (returned) host adapter status
  3104.          11h select timeout
  3105.         12h data overrun
  3106.         13h bus error
  3107.         14h bus failure
  3108.  19h    BYTE    (returned) target status
  3109.          02h sense data stored in SRB
  3110.          08h target busy
  3111.         18h reservation error
  3112.  1Ah    DWORD    post routine address
  3113.  1Eh    WORD    real mode Post DS
  3114.  20h    DWORD    SRB pointer
  3115.  24h    WORD    reserved
  3116.  26h    DWORD    SRB physical address
  3117.  2Ah 22 BYTEs    SCSIMGR$ workspace
  3118.  40h  N BYTEs    CCB (20-24 bytes)
  3119. ---request 04h---
  3120.  08h    BYTE    target ID
  3121.  09h    BYTE    logical unit number
  3122.  0Ah 14 BYTEs    reserved
  3123.  18h    BYTE    (returned) host adapter status (see above)
  3124.  19h    BYTE    (returned) target status (see above)
  3125.  1Ah    DWORD    post routine address
  3126.  1Eh 34 BYTEs    workspace
  3127.  
  3128. Format of CCB:
  3129. Offset    Size    Description
  3130.  00h    BYTE    command code
  3131.         01h rewind
  3132.         05h get block size limits
  3133.         08h read
  3134.         0Ah write
  3135.         10h write file marks
  3136.         11h SCSI Space (set position?)
  3137.         12h SCSI Inquire
  3138.         19h erase
  3139.         1Bh load/unload media
  3140.  01h    BYTE    flags        !!!
  3141.          bits 4-0: vary by function
  3142.         bits 7-5: logical unit number
  3143.  02h    BYTE    "adr_1"
  3144.  03h    BYTE    "adr_0"
  3145.  04h    BYTE    length
  3146.  05h    BYTE    control
  3147.      ...
  3148.  06h/0Ah 14 BYTEs buffer for sense data
  3149. ----------214402-----------------------------
  3150. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  3151.     AX = 4402h
  3152.     BX = file handle for device "386MAX$$"
  3153.     CX = 005Ah
  3154.     DS:DX -> 386MAX state buffer (see below)
  3155. Return: CF clear if successful
  3156.         buffer filled
  3157.         AX = number of bytes actually copied
  3158.     CF set on error
  3159.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3160. Notes:    the buffer must be one byte larger than the value given in CX; if the
  3161.       value is less than 5Ah, only a partial state record will be returned
  3162.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  3163.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  3164.       56h bytes for v5.11.
  3165.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  3166.       the word at offset 25h in the returned state, load all other
  3167.       registers as needed for the desired function, and execute an
  3168.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  3169.       if it is not otherwise modified by the API function.
  3170. SeeAlso: AX=4403h"386MAX",INT 67/AH=03h,INT 67/AH=3Fh
  3171.  
  3172. Format of 386MAX v6.01 state:
  3173. Offset    Size    Description
  3174.  00h    BYTE    version number of state structure (must be set on entry;
  3175.           v6.01 returns an error if not 03h)
  3176.  01h  6 BYTEs    signature "386MAX"
  3177.  07h  4 BYTEs    version string "N;NN" (i.e. "6;01" for v6.01)
  3178.  0Bh    WORD    segment of low-memory portion of 386MAX.SYS
  3179.  0Dh  2 BYTEs    ???
  3180.  0Fh    WORD    segment of ??? memory block or 0000h
  3181.  11h    WORD    bit flags
  3182.         bit 1: ???
  3183.         bit 2: ???
  3184.         bit 3: ??? (cleared by calling INT 67 functions)
  3185.         bit 5: ???
  3186.         bit 6: 386MAX active???
  3187.         bit 7: 386MAX is providing EMS services
  3188.         bit 8: ???
  3189.         bit 9: ??? (see INT 15/AX=2402h)
  3190.         bit 10: ???
  3191.         bit 11: ???
  3192.         bit 12: ???
  3193.         bit 13: QPMS has been used
  3194.         bit 14: ???
  3195.         bit 15: ???
  3196.  13h    WORD    starting address of video memory in K
  3197.  15h  8 BYTEs    ???
  3198.  1Dh    WORD    KBytes extended memory used by 386MAX
  3199.  1Fh  2 BYTEs    ???
  3200.  21h    WORD    ???
  3201.  23h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  3202.  25h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  3203.  27h    WORD    ???
  3204.  29h  2 BYTEs    ???
  3205.  2Bh    DWORD    ???
  3206.  2Fh  4 BYTEs    ???
  3207.  33h    WORD    system configuration??? flags
  3208.          bit 1: ROM compressed???
  3209.          bit 3: ???
  3210.         bit 5: 386MAX loaded into high memory
  3211.          bit 11: PC/XT (thus only single 8259 interrupt controller
  3212.                 present, DMA only in 1st megabyte, etc)
  3213.  35h    WORD    ??? bit flags
  3214.  37h  4 BYTEs    ???
  3215.  3Bh    WORD    segment of first MCB in high memory chain???
  3216.  3Dh    WORD    flags
  3217.          bit 2: no DPMI services
  3218.          bit 11: don't backfill holes in video memory area
  3219.         bit 12: don't backfill below video memory???
  3220.  3Fh    WORD    flags
  3221.          bit 7: ???
  3222.  41h    WORD    flags
  3223.          bit 0: Windows3 support enabled
  3224.         bit 8: ???
  3225.  43h  2 BYTEs    ???
  3226.  45h    WORD    amount of memory to report available on INT 15/AH=88h
  3227.  47h  4 BYTEs    ???
  3228.  4Bh    WORD    ???
  3229.  4Dh  2 BYTEs    ???
  3230.  4Fh    WORD    ???
  3231.  51h    WORD    bit flags
  3232.          bit 12: ???
  3233.  53h    DWORD    old INT 21h
  3234.  57h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  3235.  
  3236. Format of high memory info record:
  3237. Offset    Size    Description
  3238.  00h    WORD    segment address of memory region
  3239.  02h    WORD    size of memory region in paragraphs
  3240.  04h    BYTE    type or flags???
  3241.          00h if locked out
  3242.         02h if EMS page frame
  3243.         04h if high RAM
  3244.         42h if ROM
  3245.  05h    BYTE    ???
  3246.  
  3247. Format of ROM shadowing record:
  3248. Offset    Size    Description
  3249.  00h    WORD    segment of ROM???
  3250.  02h    WORD    segment of ROM???
  3251.  04h  2 BYTEs    ???
  3252.  06h    WORD    size of shadowed ROM in paragraphs
  3253.  08h  4 BYTEs    ???
  3254.  
  3255. Values for memory type:
  3256.  00h unused by EMS
  3257.  01h DOS
  3258.  04h page frame overlapping ROM???
  3259.  80h high memory
  3260.  84h page frame???
  3261.  87h video ROM???
  3262. Note:    the type may be 00h (unused) if the 16K page is split among different
  3263.       uses (such as ROM and high RAM)
  3264.  
  3265. Call 386MAX API (via OUT DX,AL) with:
  3266.     STACK: WORD value for DX
  3267.     AH = 01h get high memory information
  3268.         ES:DI -> buffer for array of high memory info records
  3269.             (see above)
  3270.         Return: CX = number of records placed in buffer
  3271.     AH = 02h get shadowed ROM info???
  3272.         ES:DI -> buffer for array of ROM shadowing records (see above)
  3273.         Return: CX = number of records placed in buffer
  3274.     AH = 03h get 386MAX state
  3275.         ES:DI -> 90-byte buffer for state (see above)
  3276.         Return: AH = 00h (successful)
  3277.             buffer filled
  3278.         Note:    unlike INT 21/AX=4402h"386MAX", this function omits
  3279.               the first byte specifying the state buffer version
  3280.     AH = 04h get memory types???
  3281.         ES:DI -> buffer for memory type info (array of bytes, one per
  3282.             16K page) (see above)
  3283.         Return:    CX = number of bytes placed in buffer
  3284.     AH = 05h get ???
  3285.         AL = subfunction
  3286.             00h invoke INT 15/AX=2401h first
  3287.             01h don't invoke INT 15/AX=2401h first
  3288.         CX = number of bytes to copy (0000h for default)
  3289.         SI = ???
  3290.         ES:DI -> buffer for ???
  3291.         Return: CX = number of bytes actually copied
  3292.             ???
  3293.     AH = 06h get memory speed info
  3294.         ES:DI -> buffer for memory speed records (see below)
  3295.         Return: AH = 00h (successful)
  3296.             CX = number of bytes placed in buffer
  3297.         Note:    this function can take over a second to execute
  3298.     AH = 07h ???
  3299.         ???
  3300.         Return:    ???
  3301.     AH = 08h ???
  3302.         AL = ??? (00h or nonzero)
  3303.     AH = 09h toggle ??? flags
  3304.         BX = bitmask of bits of ??? flags (word at state+11h) to toggle
  3305.         Return: AH = 00h (successful)
  3306.         Note: invokes INT 15/AX=2401h first
  3307.     AH = 0Ah toggle ??? flags
  3308.         BX = bitmask of bits of ??? (word at state+33h) to toggle
  3309.         Return: AH = 00h (successful)
  3310.         Notes:    invokes INT 15/AX=2401h first
  3311.             does ??? if bit 3 on after specified bits are toggled
  3312.     AH = 0Bh toggle ??? flags
  3313.         BX = bitmask of bits of ??? (word at state+35h) to toggle
  3314.         Return: AH = 00h (successful)
  3315.         Note: invokes INT 15/AX=2401h first
  3316.     AH = 0Ch toggle ??? flags
  3317.         BX = bitmask of bits of ??? (word at state+41h) to toggle
  3318.         Return: AH = 00h (successful)
  3319.         Note: invokes INT 15/AX=2401h first
  3320.     AH = 0Dh specify 386MAX high-memory location
  3321.         BX = segment address of high-memory real-mode portion of 386MAX
  3322.         ???
  3323.         Return: AH = status (00h successful)
  3324.             ???
  3325.     AH = 0Eh CRT controller register virtualization
  3326.         AL = subfunction
  3327.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  3328.             01h trap accesses to CRTC I/O ports
  3329.     AH = 0Fh reboot system
  3330.         Return: never
  3331.     AH = 11h get high memory information
  3332.         ES:DI -> 96-byte buffer for high memory info
  3333.         Return: AH = 00h (successful)
  3334.             ES:DI buffer filled
  3335.         Notes:    each byte in buffer contains bit flags for a 4K page in
  3336.               the A000h-FFFFh region
  3337.                 bit 0: ???
  3338.                 bit 1: physical address same as linear address
  3339.                 bit 2: EMS page frame
  3340.                 bit 6: ???
  3341.             this function can take over a second to execute
  3342.     AH = 12h ???
  3343.         AL = subfunction
  3344.             00h ???
  3345.             01h ???
  3346.         ???
  3347.         Return: AH = 00h (successful) if AL=00h or 01h
  3348.             AH = 8Fh otherwise
  3349.     AH = 13h page protection???
  3350.         AL = subfunction
  3351.             00h set all ??? 4K pages to read-only???
  3352.             01h set all ??? 4K pages to read-write???
  3353.         ???
  3354.         Return: AH = 00h (successful) if AL=00h or 01h
  3355.             AH = 8Fh otherwise
  3356.     AH = 15h ???
  3357.         ???
  3358.         Return: ???
  3359.     AH = 16h get 386MAX memory usage screen
  3360.         ES:DI -> buffer for memory info display
  3361.         CX = size of buffer in bytes
  3362.         Return:    ES:DI buffer filled with '$'-terminated string (if
  3363.                 large enough to hold entire usage screen)
  3364.     AH = 17h Windows 3 startup/termination
  3365.         AL = subfunction
  3366.             00h Windows3 initializing
  3367.             DX (on stack) = Windows startup flags
  3368.             DI = Windows version number (major in upper byte)
  3369.             ES:BX = 0000h:0000h
  3370.             DS:SI = 0000h:0000h
  3371.             Return: CX = 0000h if OK for Windows to load
  3372.                    <> 0 if Windows should not load
  3373.                 ES:BX -> startup info structure
  3374.                 DS:SI -> Virtual86 mode enable/disable callback
  3375.             01h Windows3 terminating
  3376.                 ES:BX -> ???
  3377.             DX (on stack) = Windows exit flags
  3378.             Return: ???
  3379.     AH = 18h QPMS (Qualitas Protected Memory Services)
  3380.         AL = subfunction
  3381.             00h get QPMS configuration
  3382.                 Return: BX = starting segment of QPMS memory window
  3383.                 CX = number of 4K pages reserved for QPMS???
  3384.                 DX = number of 4K pages in QPMS window???
  3385.             01h map QPMS memory page???
  3386.                 BX = 4K page number within memory reserved for QPMS???
  3387.             CL = 4K page number within QPMS memory window???
  3388.             02h mark all QPMS memory read-only
  3389.             03h mark all QPMS memory read-write
  3390.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  3391.     AH = 19h get linear address for physical address
  3392.         EDX = physical address (low word on stack)
  3393.         Return: AH = status
  3394.                 00h successful
  3395.                     EDX = linear address at which physical address
  3396.                     may be accessed
  3397.                 8Bh physical address currently not addressable
  3398.         Note: calls INT 15/AX=2401h first
  3399.     AH = 1Ah set page table entry???
  3400.         EDX = new page table entry??? (low word on stack)
  3401.         ESI = linear address of page???
  3402.         Return: AH = status (00h,8Bh)
  3403.         Note: calls INT 15/AX=2401h first
  3404.     AH = 1Bh get ???
  3405.         Return: AH = status
  3406.             BX = ???
  3407.             CX = ???
  3408.             EDX = physical address of ???
  3409.     AH = 1Ch get original interrupt vector
  3410.         AL = interrupt vector (00h-7Fh)
  3411.         Return: AH = 00h (successful)
  3412.             EDX = original vector before 386MAX loaded (segment in
  3413.                 high word, offset in low word)
  3414.         Note:    no range checking is performed; requests for INTs 80h-
  3415.               FFh will return random values
  3416.     AH = 1Dh display string???
  3417.         SI = ???
  3418.         Return: AH = 00h (successful)
  3419.             ???
  3420.     AH = 1Eh ???
  3421.         ES:DI -> ???
  3422.         ???
  3423.         Return: ???
  3424.     AH = 1Fh ???
  3425.         ???
  3426.         Return: AX = 0000h if successful
  3427.             BX = ??? (0001h for 386MAX v6.01)
  3428.             CL = ???
  3429.             DL = ??? (5Ah for 386MAX v6.01)
  3430.             DH = ??? (00h for 386MAX v6.01)
  3431.             SI = ???
  3432.             ES???:DI -> ???
  3433.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  3434.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  3435. Return: AH = status (as for EMS INT 67 calls)
  3436.         00h successful
  3437.         80h internal error
  3438.         81h hardware malfunction
  3439.         83h invalid handle
  3440.         84h    undefined function
  3441.         8Ah invalid logical page nuber
  3442.         8Bh illegal physical page number
  3443.         8Fh undefined subfunction
  3444.         A4h access denied
  3445.         etc.
  3446.     STACK popped (value placed in DX if no specific return value for DX)
  3447.  
  3448. Format of memory speed record:
  3449. Offset    Size    Description
  3450.  00h    DWORD    page table entry for 4K page
  3451.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  3452.          entire 4K page
  3453. ----------214402-----------------------------
  3454. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  3455.     AX = 4402h
  3456.     BX = file handle for device "PGS1600$"
  3457.     CX = 0018h (size of buffer)
  3458.     DS:DX -> configuration buffer (see below)
  3459. Return: CF clear if successful
  3460.         buffer filled
  3461.         AX = number of bytes actually copied
  3462.     CF set on error
  3463.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3464. Note:    PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  3465.       display adapter, which provides a 1600x1200 monochrome display as
  3466.       well as one of two emulations, MDA or CGA.
  3467. SeeAlso: AX=4403h"PGS1600"
  3468.  
  3469. Format of configuration information:
  3470. Offset    Size    Description
  3471.  00h    WORD    version (high byte = major, low byte = minor)
  3472.  02h    WORD    board initialisation mode
  3473.  04h    WORD    board I/O address
  3474.          03D0h CGA emulation
  3475.         03B0h MDA emulation
  3476.         0390h no emulation
  3477.         0350h no emulation, alternate
  3478.  06h    WORD    emulation buffer segment
  3479.          B800h   CGA emulation
  3480.         B000h   MDA emulation
  3481.         0000h   no emulation
  3482.  08h    WORD    PG1600 graphics buffer segment
  3483.  0Ah    WORD    number of bytes between consecutive graphic rows
  3484.  0Ch    WORD    horizontal pixel size
  3485.  0Eh    WORD    vertical pixel size
  3486.  10h    WORD    horizontal dots per inch
  3487.  12h    WORD    vertical dots per inch
  3488.  14h    WORD    graphics buffer bits per pixel
  3489.  16h    WORD    monitor bits per pixel
  3490. ----------214403-----------------------------
  3491. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  3492.     AX = 4403h
  3493.     BX = file handle referencing character device
  3494.     CX = number of bytes to write
  3495.     DS:DX -> data to write
  3496. Return: CF clear if successful
  3497.         AX = number of bytes actually written
  3498.     CF set on error
  3499.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3500. Notes:    format of data is driver-specific (see below for some specific cases)
  3501.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  3502.       KEYSTACK.SYS driver will push the specified characters on the
  3503.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  3504.       driver will push the characters onto the keyboard stack
  3505. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  3506. SeeAlso: INT 2F/AX=D44Fh
  3507. ----------214403-----------------------------
  3508. INT 21 - SMARTDRV.SYS - IOCTL - CACHE CONTROL
  3509.     AX = 4403h
  3510.     BX = handle for device "SMARTAAR"
  3511.     CX = number of bytes to write
  3512.     DS:DX -> SMARTDRV control block (see below)
  3513. Return: CF clear if successful
  3514.         AX = number of bytes actually written
  3515.            = 0000h if control block too small for given command
  3516.     CF set on error
  3517.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3518. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h
  3519.  
  3520. Format of SMARTDRV control block:
  3521. Offset    Size    Description
  3522.  00h    BYTE    function code
  3523.         00h flush cache
  3524.         01h flush and discard cache
  3525.         02h disable caching (flushes and discards cache first)
  3526.         03h enable caching
  3527.         04h control write caching
  3528.         05h set flushing tick count
  3529.         06h lock cache contents
  3530.         07h unlock cache contents
  3531.         08h set flush-on-reboot flag
  3532.         09h unused
  3533.         0Ah control full-track caching
  3534.         0Bh reduce cache size
  3535.         0Ch increase cache size
  3536.         0Dh set INT 13 chain address
  3537. ---function 04h---
  3538.  01h    BYTE    write caching control action
  3539.         00h turn off write-through
  3540.         01h turn on write-through
  3541.         02h turn off write buffering (also flushes cache)
  3542.         03h turn on write buffering (also flushes cache)
  3543. ---function 05h---
  3544.  01h    WORD    number of timer ticks between cache flushes
  3545. ---function 08h---
  3546.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  3547. ---function 0Ah---
  3548.  01h    BYTE    full-track writes are
  3549.         00h not cached
  3550.         01h cached
  3551. ---functions 0Bh,0Ch---
  3552.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  3553. ---function 0Dh---
  3554.  01h    DWORD    new address to which to chain on INT 13
  3555. Note:    the previous address is not preserved
  3556. ----------214403-----------------------------
  3557. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  3558.     AX = 4403h
  3559.     BX = file handle referencing character device for CD-ROM driver
  3560.     CX = number of bytes to write
  3561.     DS:DX -> control block (see below)
  3562. Return: CF clear if successful
  3563.         AX = number of bytes actually written
  3564.     CF set on error
  3565.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3566. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  3567.  
  3568. Format of control block:
  3569. Offset    Size    Description
  3570.  00h    BYTE    function code
  3571.         00h eject disk
  3572.         01h lock/unlock door
  3573.         02h reset drive
  3574.         03h control audio channel
  3575.         04h write device control string
  3576.         05h close tray
  3577. ---functions 00h,02h,05h---
  3578.  no further fields
  3579. ---function 01h---
  3580.  01h    BYTE    lock function
  3581.         00h unlock door
  3582.         01h lock door
  3583. ---function 03h---
  3584.  01h    BYTE    input channel (0-3) for output channel 0
  3585.  02h    BYTE    volume for output channel 0
  3586.  03h    BYTE    input channel (0-3) for output channel 1
  3587.  04h    BYTE    volume for output channel 1
  3588.  05h    BYTE    input channel (0-3) for output channel 2
  3589.  06h    BYTE    volume for output channel 2
  3590.  07h    BYTE    input channel (0-3) for output channel 3
  3591.  08h    BYTE    volume for output channel 3
  3592. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  3593.       right prime; a volume of 00h is off
  3594. ---function 04h---
  3595.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  3596.         interpretation
  3597. ----------214403-----------------------------
  3598. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  3599.     AX = 4403h
  3600.     BX = handle for device "SCSITAPE"
  3601.     CX = number of bytes to write
  3602.     DS:DX -> SCSITAPE control block (see below)
  3603. Return: CF clear if successful
  3604.         AX = number of bytes actually written
  3605.     CF set on error
  3606.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3607. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  3608.  
  3609. Format of SCSITAPE control block:
  3610. Offset    Size    Description
  3611.  00h    WORD    command type
  3612.         'F' Format (argument 1 = interleave, argument 2 = format type)
  3613.         'E' Erase
  3614.         'R' Rewind
  3615.         'L' Load
  3616.         'N' No Load
  3617.         'S' Space (argument 1 = count, argument 2 = type)
  3618.         'M' File Mark (argument 1 = count)
  3619.         'A' Reassign 
  3620.  02h    WORD    argument 1
  3621.  04h    WORD    argument 2
  3622.  06h    WORD    segment of command buffer
  3623.  08h    WORD    offset of command buffer
  3624.  0Ah    WORD    length of command buffer
  3625. ----------214403-----------------------------
  3626. INT 21 U - AI Architects - OS/x86??? - API
  3627.     AX = 4403h
  3628.     BX = handle for device "AIA_OS"
  3629.     CX = number of bytes to write (ignored)
  3630.     DS:DX -> 12-byte buffer, first byte is command:
  3631.             81h installation check
  3632.             82h get API entry point
  3633.             84h uninstall
  3634. Return: CF clear if successful
  3635.         AX = number of bytes actually written
  3636.     CF set on error
  3637.         AX = error code (01h,05h,06h,0Ch,0Dh) (see AH=59h)
  3638. Notes:    these functions are only available if the DOS extender was loaded as a
  3639.       device driver in CONFIG.SYS
  3640.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  3641. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  3642.  
  3643. Format of buffer on return:
  3644. Offset    Size    Description
  3645.  00h  4 BYTEs    signature "IABH"
  3646. ---if func 81h---
  3647.  (no additional fields)
  3648. ---if func 82h---
  3649.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  3650. ---if func 84h---
  3651.  04h    WORD    success indicator
  3652.  06h    WORD    segment of ???
  3653.  08h    WORD    segment of ??? memory block to free if nonzero
  3654.  0Ah    WORD    segment of ??? memory block to free if nonzero
  3655. ----------214403-----------------------------
  3656. INT 21 U - Qualitas 386MAX v6.01 - SET STATE
  3657.     AX = 4403h
  3658.     BX = handle for device "386MAX$$"
  3659.     CX = number of bytes to copy (up to 5Ah)
  3660.     DS:DX -> 386MAX state buffer (see AX=4402h"386MAX")
  3661. Return: CF clear if successful
  3662.         AX = number of bytes actually written
  3663.     CF set on error
  3664.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3665. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  3666.       (specifying the version of the state record) and the buffer must
  3667.       contain CX bytes AFTER the initial byte
  3668. SeeAlso: AX=4402h"386MAX"
  3669. ----------214403-----------------------------
  3670. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  3671.     AX = 4403h
  3672.     BX = file handle for device "PGS1600$"
  3673.     CX = 0018h (size of buffer)
  3674.     DS:DX -> configuration buffer (see AX=4402h"PGS1600")
  3675. Return: CF clear if successful
  3676.         AX = number of bytes actually written
  3677.     CF set on error
  3678.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3679. Note:    PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  3680.       display adapter, which provides a 1600x1200 monochrome display as
  3681.       well as one of two emulations, MDA or CGA.
  3682. SeeAlso: AX=4402h"PGS1600"
  3683. ----------214404-----------------------------
  3684. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  3685.     AX = 4404h
  3686.     BL = drive number (00h = default, 01h = A:, etc)
  3687.     CX = number of bytes to read
  3688.     DS:DX -> buffer
  3689. Return: CF clear if successful
  3690.         AX = number of bytes actually read
  3691.     CF set on error
  3692.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3693. Note:    format of data is driver-specific
  3694. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  3695. ----------214404-----------------------------
  3696. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  3697.     AX = 4404h
  3698.     BL = drive number (00h = default, 01h = A:, etc)
  3699.     CX = 0004h
  3700.     DS:DX -> DWORD buffer to receive device driver address
  3701. Note:    In addition to returning the address of the Stacker device driver,
  3702.       this call also sets the volume number at offset 3Eh in the device
  3703.       driver (see INT 25/AX=CDCDh)
  3704. SeeAlso: INT 25/AX=CDCDh
  3705. ----------214404-----------------------------
  3706. INT 21 - Stacker - GET STACVOL FILE SECTORS
  3707.     AX = 4404h
  3708.     BL = drive number (0 is current drive)
  3709.     CX = byte count (i.e., 200h = 1 sector)
  3710.     DS:DX -> buffer (see below)
  3711. Return:    Data Buffer contains the number of sectors requested from the
  3712.       STACVOL physical file for the drive specified.
  3713.  
  3714. Format of stacker buffer:
  3715. Offset    Size    Description
  3716.  00h    WORD    01CDh
  3717.  02h    WORD    sector count
  3718.  04h    DWORD    number of starting sector
  3719.  08h    DWORD    far pointer to Data Buffer
  3720. ----------214405-----------------------------
  3721. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  3722.     AX = 4405h
  3723.     BL = drive number (00h = default, 01h = A:, etc)
  3724.     CX = number of bytes to write
  3725.     DS:DX -> data to write
  3726. Return: CF clear if successful
  3727.         AX = number of bytes actually written
  3728.     CF set on error
  3729.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3730. Note:    format of data is driver-specific
  3731. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  3732. ----------214405-----------------------------
  3733. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  3734.     AX = 4405h
  3735.     BX = drive number (00h = default, 01h = A:, etc)
  3736.     CX = number of bytes to write
  3737.     DS:DX -> SCSIDISK control block (see AX=4403h"ST-01")
  3738. Return: CF clear if successful
  3739.         AX = number of bytes actually written
  3740.     CF set on error
  3741.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3742. SeeAlso: AX=4403h"ST-01"
  3743. ----------214406-----------------------------
  3744. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  3745.     AX = 4406h
  3746.     BX = file handle
  3747. Return: CF clear if successful
  3748.         AL = input status
  3749.         00h not ready (device) or at EOF (file)
  3750.         FFh ready
  3751.     CF set on error
  3752.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3753. Note:    files may not register as being at EOF if positioned there by AH=42h
  3754. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  3755. ----------214407-----------------------------
  3756. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  3757.     AX = 4407h
  3758.     BX = file handle
  3759. Return: CF clear if successful
  3760.         AL = input status
  3761.         00h not ready
  3762.         FFh ready
  3763.     CF set on error
  3764.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  3765. Note:    for DOS 2+, files are always ready for output, even if the disk is
  3766.       full or no media is in the drive
  3767. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  3768. ----------214408-----------------------------
  3769. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  3770.     AX = 4408h
  3771.     BL = drive number (00h = default, 01h = A:, etc)
  3772. Return: CF clear if successful
  3773.         AX = 0000h if removable
  3774.            = 0001h if fixed
  3775.     CF set on error
  3776.         AX = error code (01h,0Fh) (see AH=59h)
  3777. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  3778. ----------214409-----------------------------
  3779. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  3780.     AX = 4409h
  3781.     BL = drive number (00h = default, 01h = A:, etc)
  3782. Return: CF clear if successful
  3783.         DX = device attribute word
  3784.         bit 15: drive is SUBSTituted
  3785.         bit 12: drive is remote
  3786.         bit  9: direct I/O not allowed
  3787.     CF set on error
  3788.         AX = error code (01h,0Fh) (see AH=59h)
  3789. Note:    on local drives, DX bits not listed above are the attribute word from
  3790.       the device driver header (see AH=52h); for remote drives, the other
  3791.       bits appear to be undefined
  3792. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  3793. ----------21440A-----------------------------
  3794. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  3795.     AX = 440Ah
  3796.     BX = handle
  3797. Return: CF clear if successful
  3798.         DX = attribute word (as stored in SFT)
  3799.         bit 15: set if remote
  3800.         bit 14: date/time not set on close
  3801.     CF set on error
  3802.         AX = error code (01h,06h) (see AH=59h)
  3803. Note:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  3804.       the file server on which the handle is located in CX
  3805. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  3806. ----------21440B-----------------------------
  3807. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  3808.     AX = 440Bh
  3809.     CX = pause between retries (default 1)
  3810.     DX = number of retries (default 3)
  3811. Return: CF clear if successful
  3812.     CF set on error
  3813.         AX = error code (01h) (see AH=59h)
  3814. Notes:    delay is dependent on processor speed (value in CX specifies number of
  3815.       64K-iteration empty loops to execute)
  3816.     if DX=0000h on entry, the retry count is left unchanged
  3817. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  3818. ----------21440C-----------------------------
  3819. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  3820.     AX = 440Ch
  3821.     BX = device handle
  3822.     CH = category code
  3823.         00h unknown (DOS 3.3+)
  3824.         01h COMn: (DOS 3.3+)
  3825.         03h CON (DOS 3.3+)
  3826.         05h LPTn:
  3827.         9Eh Media Access Control driver (STARLITE)
  3828.     CL = function
  3829.         00h MAC driver Bind (STARLITE)
  3830.         45h set iteration count
  3831.         4Ah select code page
  3832.         4Ch start code-page preparation
  3833.         4Dh end code-page preparation
  3834.         5Fh set display information (DOS 4.0)
  3835.         65h get iteration count
  3836.         6Ah query selected code page
  3837.         6Bh query prepare list
  3838.         7Fh get display information (DOS 4.0)
  3839.     DS:DX -> (DOS) parameter block (see below)
  3840.     SI:DI -> (OS/2 comp box) parameter block (see below)
  3841. Return: CF set on error
  3842.         AX = error code (see AH=59h)
  3843.     CF clear if successful
  3844.         DS:DX -> iteration count if CL=65h
  3845.     DS:DX -> (OS/2 comp box) data block
  3846. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=1A01h
  3847.  
  3848. Format of parameter block for function 00h:
  3849. Offset    Size    Description
  3850.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  3851.  08h    WORD    version
  3852.  0Ah    WORD    flags
  3853.         bit 0: media requires connect or listen request before use
  3854.         bit 1: network is a LAN (broadcast/multicast supported)
  3855.         bit 2: point-to-point network
  3856.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  3857.         by MAC driver)
  3858.  0Eh    WORD    context
  3859.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  3860.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  3861.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  3862.  16h    WORD    addressing format (filled in by MAC driver)
  3863.         0000h general addressing
  3864.         0001h Ethernet addressing
  3865.         0002h Token Ring addressing
  3866.         0003h Token Bus addressing
  3867.  18h    DWORD    Send entry point (filled in by MAC driver)
  3868.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  3869.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  3870.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  3871.  
  3872. Format of parameter block for function 45h:
  3873. Offset    Size    Description
  3874.  00h    WORD    number of times output is attempted before driver assumes
  3875.         device is busy
  3876.  
  3877. Format of parameter block for functions 4Ah and 6Ah:
  3878. Offset    Size    Description
  3879.  00h    WORD    length of data
  3880.  02h    WORD    code page ID
  3881.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  3882.           start/end for each of N ranges (DOS 4.0)
  3883.     WORD    0000h  end of data (DOS 4.0)
  3884.  
  3885. Format of parameter block for function 4Dh:
  3886. Offset    Size    Description
  3887.  00h    WORD    length of data
  3888.  02h    WORD    code page ID
  3889.  
  3890. Format of parameter block for function 4Ch:
  3891. Offset    Size    Description
  3892.  00h    WORD    flags
  3893.         DISPLAY.SYS = 0000h
  3894.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  3895.             prepare cartridge selection
  3896.  02h    WORD    length of remainder of parameter block
  3897.  04h    WORD    number of code pages following
  3898.  06h  N WORDs    code page 1,...,N
  3899.  
  3900. Format of parameter block for functions 5Fh and 7Fh:
  3901. Offset    Size    Description
  3902.  00h    BYTE    level (0 for DOS 4.x and 5.0)
  3903.  01h    BYTE    reserved (0)
  3904.  02h    WORD    length of following data (14)
  3905.  04h    WORD    control flags
  3906.           bit 0 set for blink, clear for intensity
  3907.           bits 1 to 15 reserved
  3908.  06h    BYTE    mode type (1=text, 2=graphics)
  3909.  07h    BYTE    reserved (0)
  3910.  08h    WORD    colors
  3911.            0 = monochrome
  3912.            else N bits per pixel
  3913.  0Ah    WORD    pixel columns
  3914.  0Ch    WORD    pixel rows
  3915.  0Eh    WORD    character columns
  3916.  10h    WORD    character rows
  3917.  
  3918. Format of parameter block for function 6Bh:
  3919. Offset    Size    Description
  3920.  00h    WORD    length of following data
  3921.  02h    WORD    number of hardware code pages
  3922.  04h  N WORDs    hardware code pages 1,...,N
  3923.     WORD    number of prepared code pages
  3924.       N WORDs    prepared code pages 1,...,N
  3925. ----------21440C-----------------------------
  3926. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  3927.     AX = 440Ch
  3928.     BX = device handle
  3929.     CH = category code
  3930.         07h tape (ASPITAPE.SYS)
  3931.     CL = function
  3932.         01h "mtop" - perform tape operation
  3933.         02h "mtget" - get tape status
  3934.         03h ignore end-of-tape errors
  3935.         04h enable end-of-tape errors
  3936.     DS:DX -> parameter block (see below)
  3937. Return: CF set on error
  3938.         AX = error code (see AH=59h)
  3939.     CF clear if successful
  3940.         DS:DX -> data block
  3941. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  3942.       SCSI Programming Interface (ASPI).  It provides the following device
  3943.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  3944.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  3945.       also be the following names 'MTx' and 'NMTx' which default to 1024
  3946.       byte blocks.    The names may also have a '$' appended to try and make
  3947.       them unique from file names of 'RMT0' etc.
  3948.     once opend these devices must be put into RAW mode
  3949. SeeAlso: AX=4402h"ASPI"
  3950.  
  3951. Format of mtop parameter block:
  3952. Offset    Size    Description
  3953.  00h    WORD    operation code
  3954.         00h "MTWEOF" - write an end-of-file record
  3955.         01h "MTFSF" - forward space file
  3956.         02h "MTBSF" - backward space file
  3957.         03h "MTFSR" - forward space record
  3958.         04h "MTBSR" - backward space record
  3959.         05h "MTREW" - rewind
  3960.         06h "MTOFFL" - rewind and unload
  3961.         07h "MTNOP" - perform TEST UNIT READY
  3962.  02h    DWORD    repetition count
  3963.  
  3964. Format of mtget parameter block:
  3965. Offset    Size    Description
  3966.  00h    BYTE    ASPI host ID
  3967.  01h    BYTE    SCSI target ID
  3968.  02h    BYTE    SCSI logical unit number
  3969.  03h    BYTE    device parameters
  3970.         bit 0: drive must use fixed-block read and write
  3971.         bit 7: drive is an ASPI device
  3972.  04h    BYTE    current device state
  3973.         bit 0: device currently opened in buffered mode
  3974.         bit 1: drive currently opened in nonbuffered mode
  3975.         bit 2: rewind drive on last close
  3976.         bit 3: drive has been written on
  3977.         bit 4: drive has been read from
  3978.         bit 5: next read will return 0 bytes
  3979.         bit 6: EOM will resemble EOF
  3980.         bit 7: drive may be busy rewinding
  3981.  05h    BYTE    unit number within driver
  3982.  06h    WORD    fixed block blocksize
  3983.  08h    BYTE    last SCSI status
  3984.  09h    BYTE    last SCSI sense key
  3985.  0Ah    WORD    last SCSI opcode (packed)
  3986.         bits 0-7: SCSI operation (SCSI packet byte 0)
  3987.         bits 8-10: SCSI flags (SCSI packet byte 1)
  3988.         bits 11-12: ASPI "Direction Bits" (ASPI SRB byte 3)
  3989.  0Ch    WORD    residual bytes from SCSI opcode
  3990. ----------21440D-----------------------------
  3991. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  3992.     AX = 440Dh
  3993.     BL = drive number (00h=default,01h=A:,etc)
  3994.     CH = category code
  3995.         08h disk drive
  3996.     CL = function
  3997.         40h set device parameters
  3998.         41h write logical device track
  3999.         42h format and verify logical device track
  4000.         46h (DOS 4+) set volume serial number (see also AH=69h)
  4001.         47h (DOS 4+) set access flag
  4002.         60h get device parameters
  4003.         61h read logical device track
  4004.         62h verify logical device track
  4005.         66h (DOS 4+) get volume serial number (see also AH=69h)
  4006.         67h (DOS 4+) get access flag
  4007.         68h (DOS 5+) sense media type
  4008.     DS:DX -> (DOS) parameter block (see below)
  4009.     SI:DI -> (OS/2 comp box) parameter block (see below)
  4010. Return: CF set on error
  4011.         AX = error code (see AH=59h)
  4012.     CF clear if successful
  4013.         DS:DX -> data block if CL=60h or CL=61h
  4014. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  4015.       entries in the BPB for diskettes.
  4016.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0
  4017. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  4018.  
  4019. Format of parameter block for functions 40h, 60h:
  4020. Offset    Size    Description
  4021.  00h    BYTE    special functions
  4022.         bit 0 set if function to use current BPB, clear if Device
  4023.             BIOS Parameter Block field contains new default BPB
  4024.         bit 1 set if function to use track layout fields only
  4025.             must be clear if CL=60h
  4026.         bit 2 set if all sectors in track same size (should be set)
  4027.         bits 3-7 reserved
  4028.  01h    BYTE    device type
  4029.         00h  320K/360K disk
  4030.         01h  1.2M disk
  4031.         02h  720K disk
  4032.         03h  single-density 8-inch disk
  4033.         04h  double-density 8-inch disk
  4034.         05h  fixed disk
  4035.         06h  tape drive
  4036.         07h  (DOS 3.3+) 1.44M floppy
  4037.         08h  read/write optical disk
  4038.         09h  (DOS 5.0) 2.88M floppy
  4039.         0Ah  other type of block device
  4040.  02h    WORD    device attributes
  4041.         bit 0 set if nonremovable medium
  4042.         bit 1 set if door lock supported
  4043.         bits 2-15 reserved
  4044.  04h    WORD    number of cylinders
  4045.  06h    BYTE    media type
  4046.         for 1.2M drive
  4047.             00h 1.2M disk (default)
  4048.             01h 320K/360K disk
  4049.         always 00h for other drive types
  4050.  07h 31 BYTEs    device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
  4051.  26h    WORD    number of sectors per track (start of track layout field)
  4052.         not used by function 60h
  4053.  28h  N word pairs: number,size of each sector in track
  4054.  
  4055. Format of parameter block for functions 41h, 61h:
  4056. Offset    Size    Description
  4057.  00h    BYTE    special functions (reserved, must be zero)
  4058.  01h    WORD    number of disk head
  4059.  03h    WORD    number of disk cylinder
  4060.  05h    WORD    number of first sector to read/write
  4061.  07h    WORD    number of sectors
  4062.  09h    DWORD    transfer address
  4063.  
  4064. Format of parameter block for functions 42h, 62h:
  4065. Offset    Size    Description
  4066.  00h    BYTE    reserved, must be zero (DOS <3.2)
  4067.           bit 0=0: format/verify track
  4068.             1: format status call (DOS 3.2+)
  4069.           bits 1-7 reserved, must be zero
  4070.         on return (DOS 4.x):
  4071.           bit 0: set if specified tracks, sectors/track supported
  4072.           bit 1: set if function not supported by BIOS
  4073.           bit 2: set if specified tracks, sectors/track not supported
  4074.           bit 3: set if no disk in drive
  4075.  01h    WORD    number of disk head
  4076.  03h    WORD    number of disk cylinder
  4077.  
  4078. Format of parameter block for functions 46h, 66h:
  4079. Offset    Size    Description
  4080.  00h    WORD    info level (00h)
  4081.  02h    DWORD    disk serial number (binary)
  4082.  06h 11 BYTEs    volume label or "NO NAME    "
  4083.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  4084.  
  4085. Format of parameter block for functions 47h, 67h:
  4086. Offset    Size    Description
  4087.  00h    BYTE    special-function field (must be zero)
  4088.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  4089.  
  4090. Format of parameter block for function 68h:
  4091. Offset    Size    Description
  4092.  00h    BYTE    01h for default media type, 00h for any other media type
  4093.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  4094. ----------21440E-----------------------------
  4095. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  4096.     AX = 440Eh
  4097.     BL = drive number (00h=default,01h=A:,etc)
  4098. Return: CF set on error
  4099.         AX = error code (01h,0Fh) (see AH=59h)
  4100.     CF clear if successful
  4101.         AL = 00h block device has only one logical drive assigned
  4102.          1..26 the last letter used to reference the drive (1=A:,etc)
  4103. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  4104. ----------21440F-----------------------------
  4105. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  4106.     AX = 440Fh
  4107.     BL = physical drive number (00h=default,01h=A:,etc))
  4108. Return: CF set on error
  4109.         AX = error code (01h,0Fh) (see AH=59h)
  4110.     CF clear if successful
  4111.         drive now responds to next logical drive number
  4112. Note:    maps logical drives to physical drives, similar to DOS's treatment of
  4113.       a single physical floppy drive as both A: and B:
  4114. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  4115. ----------214410-----------------------------
  4116. INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  4117.     AX = 4410h
  4118.     BX = handle for device
  4119.     CH = category code (see AX=440Ch)
  4120.     CL = function code
  4121. Return: CF clear if successful
  4122.         AX = 0000h    specified IOCTL function is supported
  4123.     CF set on error
  4124.         AL = 01h    IOCTL capability not available
  4125. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  4126.       standard DOS 3.2 set may use this call first to see whether a
  4127.       particular call is supported
  4128. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  4129. ----------214410BXFFFF-----------------------
  4130. INT 21 U - NewSpace - ENABLE DRIVER
  4131.     AX = 4410h
  4132.     BX = FFFFh
  4133. Notes:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  4134.       all files as they are written and decompresses them as they are read
  4135.     compressed files are not accessible unless the driver is enabled
  4136. SeeAlso: AX=4411h/BX=FFFFh
  4137. ----------214411-----------------------------
  4138. INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  4139.     AX = 4411h
  4140.     BL = drive number
  4141.     CH = category code (see AX=440Dh)
  4142.     CL = function code
  4143. Return: CF clear if successful
  4144.         AX = 0000h    specified IOCTL function is supported
  4145.     CF set on error
  4146.         AL = 01h    IOCTL capability not available
  4147. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  4148.       standard DOS 3.2 set may use this call first to see whether a
  4149.       particular call is supported
  4150. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  4151. ----------214411BXFFFF-----------------------
  4152. INT 21 U - NewSpace - DISABLE DRIVER
  4153.     AX = 4411h
  4154.     BX = FFFFh
  4155. Notes:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  4156.       all files as they are written and decompresses them as they are read
  4157.     compressed files are not accessible unless the driver is enabled
  4158. SeeAlso: AX=4410h/BX=FFFFh
  4159. ----------214412-----------------------------
  4160. INT 21 - DR-DOS 5.0 - DETERMINE DOS TYPE
  4161.     AX = 4412h
  4162.     CF set
  4163. Return: CF set if not DR DOS
  4164.         AX = error code (see AH=59h)
  4165.     CF clear if DR DOS
  4166.         DX = AX = version code
  4167.         1060h = ???
  4168.         1063h = DR-DOS 3.41 ???
  4169.         1065h = DR-DOS 5.0
  4170.         1067h = DR-DOS 6.0
  4171. Note:    this call is identical to AX=4452h
  4172. SeeAlso: AX=4452h
  4173. ----------214412BXFFFF-----------------------
  4174. INT 21 U - NewSpace - INSTALLATION CHECK???
  4175.     AX = 4412h
  4176.     BX = FFFFh
  4177. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  4178.     BX:DX -> ???
  4179.     CX = ???
  4180. SeeAlso: AX=4411h/BX=FFFFh
  4181. ----------214413BXFFFF-----------------------
  4182. INT 21 U - NewSpace - GET ???
  4183.     AX = 4413h
  4184.     BX = FFFFh
  4185. Return: AX = code segment of NewRes (resident driver for NewSpace)
  4186.     BX = offset of ???
  4187. SeeAlso: AX=4412h/BX=FFFFh
  4188. ----------214414-----------------------------
  4189. INT 21 U - DR-DOS 5.0 - SET GLOBAL PASSWORD
  4190.     AX = 4414h
  4191.     DS:DX -> password string (blank-padded to 8 characters)
  4192. Note:    this call is identical to AX=4454h
  4193. SeeAlso: AX=4454h
  4194. ----------214414BXFFFF-----------------------
  4195. INT 21 U - NewSpace - DEBUGGING DUMP
  4196.     AX = 4414h
  4197.     BX = FFFFh
  4198. Return:    debugging dump written to X:\NEWSPACE.SMP
  4199. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  4200. ----------2144-------------------------------
  4201. INT 21 U - DR-DOS 5.0
  4202.     AH = 44h
  4203.     AL = 16h to 18h
  4204. Note:    these subfunctions are identical to AX=4456h to 4458h
  4205. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  4206. ----------214451-----------------------------
  4207. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  4208.     AX = 4451h
  4209. Return: CF set if not Concurrent DOS
  4210.         AX = error code (see AH=59h)
  4211.     CF clear if successful
  4212.         AH = 14h
  4213.         AL = version (high nybble = major version, low nybble = minor ver)
  4214. SeeAlso: AX=4452h,AX=4459h
  4215. ----------214452-----------------------------
  4216. INT 21 - DR DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  4217.     AX = 4452h
  4218.     CF set
  4219. Return: CF set if not DR DOS
  4220.         AX = error code (see AH=59h)
  4221.     CF clear if DR DOS
  4222.         DX = AX = version code
  4223.         1060h = ???
  4224.         1063h = DR-DOS 3.41 ???
  4225.         1065h = DR-DOS 5.0
  4226.         1067h = DR-DOS 6.0
  4227. Notes:    the DR-DOS version is stored in the environment variable VER
  4228. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  4229. ----------214454-----------------------------
  4230. INT 21 U - DR-DOS 3.41+ internal - SET GLOBAL PASSWORD
  4231.     AX = 4454h
  4232.     DS:DX -> password string (blank-padded to 8 characters)
  4233. SeeAlso: AX=4303h,AX=4414h
  4234. ----------214456-----------------------------
  4235. INT 21 U - DR-DOS 5.0+ internal - ???
  4236.     AX = 4456h
  4237.     DL = flag
  4238.         bit 0: ???
  4239. Return: AL = ???
  4240. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  4241. ----------214457-----------------------------
  4242. INT 21 U - DR-DOS 5.0+ internal - ???
  4243.     AX = 4457h
  4244.     DH = subfunction
  4245.         00h ???
  4246.             DL = 00h ???
  4247.            = 01h ???
  4248.            else Return: AX = ???
  4249.         01h
  4250.            Return: AX = ???
  4251.         02h
  4252.            DL = ???
  4253.         Return: AX = ???
  4254.         other
  4255.            Return: AX = ???
  4256. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  4257. ----------214458-----------------------------
  4258. INT 21 U - DR DOS 5.0+ internal - GET POINTER TO TABLE OF ???
  4259.     AX = 4458h
  4260. Return: ES:BX -> internal table (see below)
  4261.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0)
  4262. SeeAlso: AX=4452h
  4263.  
  4264. Format of internal table:
  4265. Offset    Size    Description
  4266.  00h    DWORD    pointer to ???
  4267.  04h  7 BYTEs    ???
  4268.  0Bh    WORD    K of extended memory at startup
  4269.  0Dh    BYTE    number of far jump entry points
  4270.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see below)
  4271.  10h    WORD    ???
  4272.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  4273.         or 0000h if already used (DR-DOS 6.0 only)
  4274.  14h    ???    ???
  4275. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  4276.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  4277.       called from CONFIG.SYS. The word is set to zero later and the area
  4278.       lost.
  4279.  
  4280. Format of jump table for DR-DOS 5.0-6.0:
  4281. Offset    Size    Description
  4282.  00h  5 BYTEs    far jump to entry point corresponding to CP/M CALL 5
  4283.  05h  5 BYTEs    far jump to entry point corresponding to INT 20
  4284.  0Ah  5 BYTEs    far jump to entry point corresponding to INT 21
  4285.  0Fh  5 BYTEs    far jump to entry point corresponding to ???
  4286.  14h  5 BYTEs    far jump to entry point corresponding to ???
  4287.  19h  5 BYTEs    far jump to entry point corresponding to ???
  4288.  1Eh  5 BYTEs    far jump to entry point corresponding to ???
  4289.  23h  5 BYTEs    far jump to entry point corresponding to ???
  4290.  28h  5 BYTEs    far jump to entry point corresponding to ???
  4291.  2Dh  5 BYTEs    far jump to entry point corresponding to ???
  4292.  32h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  4293.  37h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  4294.  3Ch  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  4295.  41h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  4296.  46h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  4297.  4Bh  5 BYTEs    far jump to entry point corresponding to ???
  4298. ----------214459-----------------------------
  4299. INT 21 - DR MultiUser DOS 5.0 - API
  4300.     AX = 4459h
  4301.     CL = function (see INT E0"CP/M")
  4302.     DS,DX = parameters
  4303. Notes:    DR-DOS 5.0 returns CF set and AX=0001h
  4304.     this API is also available on INT E0
  4305. SeeAlso: AX=4452h,INT E0"CP/M"
  4306. ----------2144FFBXFFFF-----------------------
  4307. INT 21 U - NewSpace - ???
  4308.     AX = 44FFh
  4309.     BX = FFFFh
  4310.     DX = ???
  4311. Note:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  4312.       all files as they are written and decompresses them as they are read
  4313. SeeAlso: AX=4414h/BX=FFFFh
  4314. ----------2145-------------------------------
  4315. INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
  4316.     AH = 45h
  4317.     BX = file handle
  4318. Return: CF clear if successful
  4319.         AX = new handle
  4320.     CF set on error
  4321.         AX = error code (04h,06h) (see AH=59h)
  4322. Notes:    moving file pointer for either handle will also move it for the other,
  4323.       because both will refer to the same system file table
  4324.     for DOS versions prior to 3.3, file writes may be forced to disk by
  4325.       duplicating the file handle and closing the duplicate
  4326. SeeAlso: AH=3Dh,AH=46h
  4327. ----------2146-------------------------------
  4328. INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
  4329.     AH = 46h
  4330.     BX = file handle
  4331.     CX = file handle to become duplicate of first handle
  4332. Return: CF clear if successful
  4333.     CF set on error
  4334.         AX = error code (04h,06h) (see AH=59h)
  4335. Notes:    closes file with handle CX if it is still open
  4336.     DOS 3.30 hangs if BX=CX on entry
  4337.     moving file pointer for either handle will also move it for the other,
  4338.       because both will refer to the same system file table
  4339. SeeAlso: AH=3Dh,AH=45h
  4340. ----------2147-------------------------------
  4341. INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
  4342.     AH = 47h
  4343.     DL = drive number (00h = default, 01h = A:, etc)
  4344.     DS:SI -> 64-byte buffer for ASCIZ pathname
  4345. Return: CF clear if successful
  4346.         AX = 0100h (undocumented)
  4347.     CF set on error
  4348.         AX = error code (0Fh) (see AH=59h)
  4349. Notes:    the returned path does not include a drive or the initial backslash
  4350.     many Microsoft products for Windows rely on AX being 0100h on success
  4351. SeeAlso: AH=19h,AH=3Bh
  4352. ----------2148-------------------------------
  4353. INT 21 - DOS 2+ - ALLOCATE MEMORY
  4354.     AH = 48h
  4355.     BX = number of paragraphs to allocate
  4356. Return: CF clear if successful
  4357.         AX = segment of allocated block
  4358.     CF set on error
  4359.         AX = error code (07h,08h) (see AH=59h)
  4360.         BX = size of largest available block
  4361. Notes:    DOS 3.30 coalesces free blocks while scanning for a block to allocate
  4362.     .COM programs are initially allocated the largest available memory
  4363.       block, and should free some memory with AH=49h before attempting any
  4364.       allocations
  4365. SeeAlso: AH=49h,AH=4Ah,AH=58h
  4366. ----------2149-------------------------------
  4367. INT 21 - DOS 2+ - FREE MEMORY
  4368.     AH = 49h
  4369.     ES = segment of block to free
  4370. Return: CF clear if successful
  4371.     CF set on error
  4372.         AX = error code (07h,09h) (see AH=59h)
  4373. Notes:    apparently never returns an error 07h, despite official docs; DOS 3.30
  4374.       code contains only an error 09h exit
  4375.     DOS 3.30 does not coalesce adjacent free blocks when a block is freed,
  4376.       only when a block is allocated or resized
  4377. SeeAlso: AH=48h,AH=4Ah
  4378. ----------214A-------------------------------
  4379. INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
  4380.     AH = 4Ah
  4381.     BX = new size in paragraphs
  4382.     ES = segment of block to resize
  4383. Return: CF clear if successful
  4384.     CF set on error
  4385.         AX = error code (07h,08h,09h) (see AH=59h)
  4386.         BX = maximum paragraphs available for specified memory block
  4387. Notes:    under PCDOS 2.1 and 3.1 and MSDOS 3.2 and 3.3, if there is insufficient
  4388.       memory to expand the block as much as requested, the block will be
  4389.       made as large as possible
  4390.     DOS 3.30 coalesces any free blocks immediately following the block to
  4391.       be resized
  4392. SeeAlso: AH=48h,AH=49h
  4393. ----------214B-------------------------------
  4394. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  4395.     AH = 4Bh
  4396.     AL = type of load
  4397.         00h load and execute
  4398.         01h load but do not execute
  4399.         03h load overlay
  4400.         04h load and execute in background (European MSDOS 4.0 only)
  4401.         (see also AH=80h)
  4402.     DS:DX -> ASCIZ program name (must include extension)
  4403.     ES:BX -> parameter block (see below)
  4404. Return: CF clear if successful
  4405.         BX,DX destroyed
  4406.         if subfunction 01h, process ID set to new program's PSP; get with
  4407.         INT 21/AH=62h
  4408.     CF set on error
  4409.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
  4410. Notes:    DOS 2.x destroys all registers, including SS:SP
  4411.     for functions 00h and 01h, the calling process must ensure that there
  4412.       is enough unallocated memory available; if necessary, by releasing
  4413.       memory with AH=49h or AH=4Ah
  4414.     for function 01h, the value to be passed to the child program is put
  4415.       on top of the child's stack
  4416.     for function 03h, DOS assumes that the overlay is being loaded into
  4417.       memory allocated by the caller
  4418.     function 01h has been documented for DOS 5+, but was undocumented in
  4419.       prior versions
  4420. BUG:    DOS 2.00 assumes that DS points at the current program's PSP
  4421. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,INT 2E
  4422.  
  4423. Format of EXEC parameter block for AL=00h,01h,04h:
  4424. Offset    Size    Description
  4425.  00h    WORD    segment of environment to copy for child process (copy caller's
  4426.         environment if 0000h)
  4427.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4428.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4429.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4430.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  4431.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  4432.  
  4433. Format of EXEC parameter block for AL=03h:
  4434. Offset    Size    Description
  4435.  00h    WORD    segment at which to load overlay
  4436.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  4437.  
  4438. Format of .EXE file header:
  4439. Offset    Size    Description
  4440.  00h  2 BYTEs    .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  4441.  02h    WORD    number of bytes in last 512-byte page of executable
  4442.  04h    WORD    total number of 512-byte pages in executable (includes any
  4443.         partial last page)
  4444.  06h    WORD    number of relocation entries
  4445.  08h    WORD    header size in paragraphs
  4446.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  4447.         executable's size
  4448.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  4449.  0Eh    WORD    initial SS relative to start of executable
  4450.  10h    WORD    initial SP
  4451.  12h    WORD    checksum (one's complement of sum of all words in executable)
  4452.  14h    DWORD    initial CS:IP relative to start of executable
  4453.  18h    WORD    offset within header of relocation table
  4454.  1Ah    WORD    overlay number (normally 0000h = main program)
  4455. ---Borland TLINK---
  4456.  1Ch  2 BYTEs    ??? (apparently always 01h 00h)
  4457.  1Eh    BYTE    signature FBh
  4458.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  4459.  20h  2 BYTEs    ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  4460. ---ARJ self-extracting archive---
  4461.  1Ch  4 BYTEs    signature "RJSX"
  4462. ---LZEXE 0.91 compressed executable---
  4463.  1Ch  4 BYTEs    signature "LZ91"
  4464. ---PKLITE compressed executable---
  4465.  1Ch  2 BYTEs    ???
  4466.  1Eh  6 BYTEs    signature "PKLITE" (followed by copyright message)
  4467. ---LHarc 1.x self-extracting archive---
  4468.  1Ch  4 BYTEs    unused???
  4469.  20h  3 BYTEs    jump to start of extraction code
  4470.  23h  2 BYTEs    ???
  4471.  25h 12 BYTEs    signature "LHarc's SFX "
  4472. ---LHA 2.x self-extracting archive---
  4473.  1Ch  8 BYTEs    ???
  4474.  24h 10 BYTEs    signature "LHA's SFX "
  4475. ---other linkers---
  4476.  1Ch    var    optional information
  4477. ---
  4478.   N   N DWORDs    relocation items
  4479. ---new executable only---
  4480.  3Ch    DWORD    offset of new executable header if offset of relocation table
  4481.         is 40h or greater
  4482. Notes:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  4483.       versions of the MS linker set it that way
  4484.     if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  4485.       program is loaded as high in memory as possible
  4486.     the maximum allocation is set to FFFFh by default
  4487.  
  4488. Format of new executable header:
  4489. Offset    Size    Description
  4490.  00h  2 BYTEs    "NE" (4Eh 45h) signature
  4491.  02h  2 BYTEs    linker version (major, then minor)
  4492.  04h    WORD    offset to entry table (see below)
  4493.  06h    WORD    length of entry table in bytes
  4494.  08h    DWORD    file load CRC (0 in Borland's TPW)
  4495.  0Ch    BYTE    program flags
  4496.         bits 0-1 DGROUP type
  4497.           0 = none
  4498.           1 = single shared
  4499.           2 = multiple (unshared)
  4500.           3 = (null)
  4501.         bit 2:    global initialization
  4502.         bit 3:    protected mode only
  4503.         bit 4:    8086 instructions
  4504.         bit 5:    80286 instructions
  4505.         bit 6:    80386 instructions
  4506.         bit 7:    80x87 instructions
  4507.  0Dh    BYTE    application flags
  4508.         bits 0-2: application type
  4509.             001 full screen (not aware of Windows/P.M. API)
  4510.             010 compatible with Windows/P.M. API
  4511.             011 uses Windows/P.M. API
  4512.         bit 3: is a Family Application (OS/2)
  4513.         bit 5: 0=executable, 1=errors in image
  4514.         bit 7: DLL or driver rather than application
  4515.  0Eh    WORD    auto data segment index
  4516.  10h    WORD    initial local heap size
  4517.  12h    WORD    initial stack size
  4518.  14h    DWORD    program entry point (CS:IP)
  4519.  18h    DWORD    initial stack pointer (SS:SP)
  4520.  1Ch    WORD    segment count
  4521.  1Eh    WORD    module reference count
  4522.  20h    WORD    length of nonresident names table
  4523.  22h    WORD    offset from start of this header to segment table (see below)
  4524.  24h    WORD    offset from start of this header to resource table
  4525.  26h    WORD    offset from start of this header to resident names table
  4526.  28h    WORD    offset from start of this header to module reference table
  4527.  2Ah    WORD    offset from start of this header to imported names table
  4528.  2Ch    DWORD    offset from start of file to nonresident names table
  4529.  30h    WORD    count of moveable entry point listed in entry table
  4530.  32h    WORD    file alignment size shift count
  4531.         0 is equivalent to 9 (default 512-byte pages)
  4532.  34h    WORD    number of resource table entries
  4533.  36h    BYTE    target operating system
  4534.         00h unknown
  4535.         01h OS/2
  4536.         02h Windows
  4537.         03h European MS-DOS 4.x
  4538.         04h Windows 386
  4539.         05h BOSS (Borland Operating System Services)
  4540.  37h    BYTE    other EXE flags
  4541.         bit 0: supports long filenames
  4542.         bit 1: 2.X protected mode
  4543.         bit 2: 2.X proportional font
  4544.         bit 3: gangload area
  4545.  38h    WORD    offset to return thunks or start of gangload area
  4546.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  4547.  3Ch    WORD    minimum code swap area size
  4548.  3Eh  2 BYTEs    expected Windows version (minor version first)
  4549.  
  4550. Format of Codeview trailer (at end of executable):
  4551. Offset    Size    Description
  4552.  00h    WORD    signature 4E42h ('NB')
  4553.  02h    WORD    Microsoft debug info version number
  4554.  04h    DWORD    Codeview header offset
  4555.  
  4556. Format of segment table record:
  4557.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  4558.  02h    WORD    length of image in file
  4559.  04h    WORD    attributes
  4560.         bit 0: data segment rather than code segment
  4561.         bit 1: unused???
  4562.         bit 2: real mode
  4563.         bit 3: iterated
  4564.         bit 4: movable
  4565.         bit 5: sharable
  4566.         bit 6: preloaded rather than demand-loaded
  4567.         bit 7: execute-only
  4568.         bit 8: relocations (directly following code for this segment)
  4569.         bit 9: debug info
  4570.         bits 10,11: 80286 DPL bits
  4571.         bit 12:        discardable
  4572.         bits 13-15: discard priority
  4573.  06h    WORD    size to allocate
  4574.  
  4575. Format of new executable entry table item (list):
  4576. Offset    Size    Description
  4577.  00h    BYTE    number of entry points (00h if end of entry table list)
  4578.  01h    BYTE    segment number (00h if end of entry table list)
  4579.  02h 3N BYTEs    entry records
  4580.          Offset    Size    Description
  4581.          00h    BYTE    flags
  4582.                  bit 0: exported
  4583.                 bit 1: single data
  4584.                 bits 2-7: unused???
  4585.          01h    WORD    offset within segment
  4586.  
  4587. Format of new executable relocation data (immediately follows segment image):
  4588. Offset    Size    Description
  4589.  00h    WORD    number of relocation items
  4590.  02h 8N BYTEs    relocation items
  4591.          Offset    Size    Description
  4592.          00h    BYTE    relocation type
  4593.                  00h LOBYTE
  4594.                 02h BASE
  4595.                 03h PTR
  4596.                 05h OFFS
  4597.                 0Bh PTR48
  4598.                 0Dh OFFS32
  4599.          01h    BYTE    flags
  4600.                  bit 2: additive
  4601.          02h    WORD    offset within segment
  4602.          04h    WORD    target address segment
  4603.          06h    WORD    target address offset
  4604.          
  4605. Linear Executable (enhanced mode executable) header:
  4606. Offset    Size    Description
  4607.  00h  2 BYTEs    "LE" (4Ch 45h) signature
  4608.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  4609.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  4610.  04h    DWORD    executable format level
  4611.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  4612.         01h Intel 80286 or upwardly compatible
  4613.         02h Intel 80386 or upwardly compatible            
  4614.         03h Intel 80486 or upwardly compatible            
  4615.         04h Intel 80586 or upwardly compatible
  4616.         20h Intel i860 (N10) or compatible
  4617.         21h Intel "N11" or compatible
  4618.         40h MIPS Mark I (R2000, R3000) or compatible
  4619.         41h MIPS Mark II (R6000) or compatible
  4620.         42h MIPS Mark III (R4000) or compatible
  4621.  0Ah    WORD    target operating system
  4622.         01h OS/2
  4623.         02h Windows
  4624.         03h DOS4.x
  4625.         04h Windows 386
  4626.  0Ch    DWORD    module version
  4627.  10h    DWORD    module type
  4628.         bit 2: initialization (only for DLLs)
  4629.             0 = global
  4630.             1 = per-process
  4631.         bit 4: no internal fixups in executable image
  4632.         bit 5: no external fixups in executable image
  4633.         bits 8,9,10:
  4634.             0 = unknown
  4635.             1 = incompatible with PM windowing \
  4636.             2 = compatible with PM windowing    > (only for
  4637.             3 = uses PM windowing API       /    programs)
  4638.         bit 13: module not loadable (only for programs)
  4639.         bit 15: module is DLL rather than program
  4640.  14h    DWORD    number of memory pages
  4641.  18h    Initial CS:EIP
  4642.     DWORD    object number
  4643.     DWORD    offset
  4644.  20h    Initial SS:ESP
  4645.     DWORD    object number
  4646.     DWORD    offset
  4647.  28h    DWORD    memory page size
  4648.  2Ch    DWORD    bytes on last page
  4649.  30h    DWORD    fixup section size
  4650.  34h    DWORD    fixup section checksum
  4651.  38h    DWORD    loader section size
  4652.  3Ch    DWORD    loader section checksum
  4653.  40h    DWORD    offset of object table (see below)
  4654.  44h    DWORD    object table entries
  4655.  48h    DWORD    object page map table offset
  4656.  4CH    DWORD    object iterate data map offset
  4657.  50h    DWORD    resource table offset
  4658.  54h    DWORD    resource table entries
  4659.  58h    DWORD    resident names table offset
  4660.  5Ch    DWORD    entry table offset
  4661.  60h    DWORD    module directives table offset
  4662.  64h    DWORD    Module Directives entries
  4663.  68h    DWORD    Fixup page table offset
  4664.  6Ch    DWORD    Fixup record table offset
  4665.  70h    DWORD    imported modules name table offset
  4666.  74h    DWORD    imported modules count
  4667.  78h    DWORD    imported procedures name table offset
  4668.  7Ch    DWORD    per-page checksum table offset
  4669.  80h    DWORD    data pages offset
  4670.  84h    DWORD    preload page count
  4671.  88h    DWORD    non-resident names table offset
  4672.  8Ch    DWORD    non-resident names table length
  4673.  90h    DWORD    non-resident names checksum
  4674.  94h    DWORD    automatic data object
  4675.  98h    DWORD    debug information offset
  4676.  9Ch    DWORD    debug information length
  4677.  A0h    DWORD    preload instance pages number
  4678.  A4h    DWORD    demand instance pages number
  4679.  A8h    DWORD    extra heap allocation
  4680.  ACh    ???    (at most 24 additional bytes here)
  4681. Note:    used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  4682.  
  4683. Format of object table entry:
  4684. Offset    Size    Description
  4685.  00h    DWORD    virtual size in bytes
  4686.  04h    DWORD    relocation base address
  4687.  08h    DWORD    object flags
  4688.          bit 0: readable
  4689.         bit 1: writable
  4690.         bit 2: executable
  4691.         bit 3: resource
  4692.         bit 4: discardable
  4693.         bit 5: shared
  4694.         bit 6: preloaded
  4695.         bit 7: invalid
  4696.         bit 8-9: type
  4697.             00 normal
  4698.             01 zero-filled
  4699.             10 resident
  4700.             11 resident/contiguous
  4701.         bit 10: "RESIDENT/LONG_LOCKABLE"
  4702.         bit 11: reserved???
  4703.         bit 12: "16:16_ALIAS"
  4704.         bit 13: "BIG" (32-bit???)
  4705.         bit 14: conforming
  4706.         bit 15: "OBJECT_I/O_PRIVILEGE_LEVEL"
  4707.         bits 16-31: reserved
  4708.  0Ch    DWORD    page map index
  4709.  10h    DWORD    page map entries
  4710.  10h  4 BYTEs    ??? (apparently always zeros)
  4711.  
  4712. Format of object page map table entry:
  4713. Offset    Size    Description
  4714.  00h  4 BYTEs    ???
  4715.  
  4716. Format of resident names table entry:
  4717. Offset    Size    Description
  4718.  00h    BYTE    length of name
  4719.  01h  N BYTEs    name
  4720.  N+1  3 BYTEs    ???
  4721.  
  4722. Format of linear executable entry table:
  4723. Offset    Size    Description
  4724.  00h    BYTE    number of entries in table
  4725.  01h 10 BYTEs per entry
  4726.          Offset    Size    Description
  4727.          00h    BYTE    bit flags
  4728.                  bit 1: 32-bit entry
  4729.          01h    WORD    object number
  4730.          03h    BYTE    bit flags
  4731.                  bit 0: exported
  4732.                 bit 1: ???
  4733.          04h    DWORD    offset of entry point
  4734.          08h  2 BYTEs    ???
  4735.  
  4736. Format of Borland debugging information header (following load image):
  4737. Offset    Size    Description
  4738.  00h    WORD    signature 52FBh
  4739.  02h    WORD    version ID
  4740.  04h    DWORD    size of name pool in bytes
  4741.  08h    WORD    number of names in namem pool
  4742.  0Ah    WORD    number of type entries
  4743.  0Ch    WORD    number of structure members
  4744.  0Eh    WORD    number of symbols
  4745.  10h    WORD    number of global symbols
  4746.  12h    WORD    number of modules
  4747.  14h    WORD    number of locals (optional)
  4748.  16h    WORD    number of scopes in table
  4749.  18h    WORD    number of line-number entries
  4750.  1Ah    WORD    number of include files
  4751.  1Ch    WORD    number of segment records
  4752.  1Eh    WORD    number of segment/file correlations
  4753.  20h    DWORD    size of load image after removing uninitialized data and debug
  4754.          info
  4755.  24h    DWORD    debugger hook; pointer into debugged program whose meaning
  4756.          depends on program flags
  4757.  28h    BYTE    program flags
  4758.          bit 0: case-sensitive link
  4759.         bit 1: pascal overlay program
  4760.  29h    WORD    no longer used
  4761.  2Bh    WORD    size of data pool in bytes
  4762.  2Dh    BYTE    padding
  4763.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  4764.  30h    WORD    number of classes
  4765.  32h    WORD    number of parents
  4766.  34h    WORD    number of global classes (currently unused)
  4767.  36h    WORD    number of overloads (currently unused)
  4768.  38h    WORD    number of scope classes
  4769.  3Ah    WORD    number of module classes
  4770.  3Ch    WORD    number of coverage offsets
  4771.  3Eh    DWORD    offset relative to symbol base of name pool
  4772.  42h    WORD    number of browser information records
  4773.  44h    WORD    number of optimized symbol records
  4774.  46h    WORD    debugging flags
  4775.  48h  8 BYTEs    padding
  4776. Note:    additional information on the Borland debugging info may be found in
  4777.       Borland's Open Architecture Handbook
  4778. ----------214B-------------------------------
  4779. INT 21 - ELRES v1.0 only - INSTALLATION CHECK
  4780.     AH = 4Bh
  4781.     DS:DX = 0000h:0000h
  4782. Return: ES:BX -> ELRES history structure (see AH=2Bh/CX=454Ch)
  4783.     DX = DABEh (signature, DAve BEnnett)
  4784. Note:    ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett
  4785. SeeAlso: AH=2Bh/CX=454Ch
  4786. ----------214B04-----------------------------
  4787. INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
  4788.     AX = 4B04h
  4789. Return: CF clear if "MG" resident
  4790.     AX = 044Bh if "699"/"Thirteen Minutes" resident
  4791. SeeAlso: AX=4243h,AX=4B25h
  4792. ----------214B05-----------------------------
  4793. INT 21 - DOS 5.0 - SET EXECUTION STATE
  4794.     AX = 4B05h
  4795.     DS:DX -> execution state structure (see below)
  4796. Return: CF clear if successful
  4797.         AX = 0000h
  4798.     CF set on error
  4799.         AX = error code (see AH=59h)
  4800. Note:    used by programs which intercept AX=4B00h to prepare new programs for
  4801.       execution (including setting the DOS version number).     No DOS, BIOS
  4802.       or other software interrupt may be called after return from this call
  4803.       before commencement of the child process.  If DOS is running in the
  4804.       HMA, A20 is turned off on return from this call.
  4805. SeeAlso: AH=4Bh
  4806.  
  4807. Format of execution state structure:
  4808. Offset    Size    Description
  4809.  00h    WORD    reserved (00h)
  4810.  02h    WORD    type flags
  4811.         bit 0: program is an .EXE
  4812.             1: program is an overlay
  4813.  04h    DWORD    pointer to ASCIZ name of program file
  4814.  08h    WORD    PSP segment of new program
  4815.  0Ah    DWORD    starting CS:IP of new program
  4816.  0Eh    DWORD    program size including PSP
  4817. ----------214B25-----------------------------
  4818. INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
  4819.     AX = 4B25h
  4820. Return: DI = 1234h if resident
  4821. SeeAlso: AX=4B04h,AX=4B40h
  4822. ----------214B40-----------------------------
  4823. INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
  4824.     AX = 4B40h
  4825. Return: AX = 5678h if resident
  4826. SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
  4827. ----------214B41-----------------------------
  4828. INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
  4829.     AX = 4B41h
  4830.     ???
  4831. Return: ???
  4832. SeeAlso: AX=4B40h
  4833. ----------214B4A-----------------------------
  4834. INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
  4835.     AX = 4B4Ah
  4836. Return: AL = 57h if resident
  4837. SeeAlso: AX=4B40h,AX=4B4Bh
  4838. ----------214B4B-----------------------------
  4839. INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
  4840.     AX = 4B4Bh
  4841. Return: CF clear if resident
  4842. SeeAlso: AX=4B4Ah,AX=4B4Dh
  4843. ----------214B4D-----------------------------
  4844. INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
  4845.     AX = 4B4Dh
  4846. Return: CF clear if resident
  4847. SeeAlso: AX=4B4Ah,AX=4B50h
  4848. ----------214B50-----------------------------
  4849. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
  4850.     AX = 4B50h
  4851. Return: AX = 1234h if resident
  4852. SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
  4853. ----------214B53-----------------------------
  4854. INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
  4855.     AX = 4B53h
  4856. Return: CF clear if resident
  4857. SeeAlso: AX=4B50h,AX=4B55h
  4858. ----------214B55-----------------------------
  4859. INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
  4860.     AX = 4B55h
  4861. Return: AX = 1231h if resident
  4862. SeeAlso: AX=4B53h,AX=4B59h
  4863. ----------214B59-----------------------------
  4864. INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
  4865.     AX = 4B59h
  4866. Return: CF clear if resident
  4867. SeeAlso: AX=4B50h,AX=4B5Eh
  4868. ----------214B5E-----------------------------
  4869. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  4870.     AX = 4B5Eh
  4871. Return: CF clear if resident
  4872. SeeAlso: AX=4B59h,AX=4B87h
  4873. ----------214B60-----------------------------
  4874. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
  4875.     AX = 4B60h
  4876.     ???
  4877. Return: ???
  4878. SeeAlso: AX=4B50h
  4879. ----------214B87-----------------------------
  4880. INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
  4881.     AX = 4B87h
  4882. Return: AX = 6663h if resident
  4883. SeeAlso: AX=4B5Eh,AX=4B95h
  4884. ----------214B95-----------------------------
  4885. INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
  4886.     AX = 4B95h
  4887. Return: AX = 1973h if resident
  4888. SeeAlso: AX=4B87h,AX=4BA7h
  4889. ----------214BA7-----------------------------
  4890. INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
  4891.     AX = 4BA7h
  4892. Return: AX = B459h if resident
  4893. SeeAlso: AX=4B95h,AX=4BAAh
  4894. ----------214BAA-----------------------------
  4895. INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
  4896.     AX = 4BAAh
  4897. Return: CF clear if resident
  4898. SeeAlso: AX=4BA7h,AX=4BAFh
  4899. ----------214BAF-----------------------------
  4900. INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
  4901.     AX = 4BAFh
  4902. Return: AL = AFh if "Magnitogorsk" resident
  4903.     AL = FAh if "948"/"Screenplus1" resident
  4904. SeeAlso: AX=4BAAh,AX=4BDDh
  4905. ----------214BDD-----------------------------
  4906. INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
  4907.     AX = 4BDDh
  4908. Return: AX = 1234h
  4909. SeeAlso: AX=4BAFh,AX=4BFEh
  4910. ----------214BEE-----------------------------
  4911. INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
  4912.     AX = 4BEEh
  4913. Return: AX = 1234h if grab successful
  4914.        = 2345h if failed (INT 21 grabbed previously)
  4915. Notes:    F-DRIVER.SYS is part of the F-PROT virus/trojan protection package by
  4916.       Fridrik Skulason
  4917.     when called the first time, this function moves the INT 21 monitoring
  4918.       code from its original location in the INT 21 chain to be the first
  4919.       thing called by INT 21.  This is the mechanism used by F-NET.
  4920. SeeAlso: INT 2F/AX=4653h
  4921. ----------214BF0-----------------------------
  4922. INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
  4923.     AX = 4BF0h
  4924. Return: CF clear if installed
  4925.         AX = 899Dh
  4926. Note:    DIET is an executable-compression program
  4927. SeeAlso: AX=4BF1h
  4928. ----------214BF1-----------------------------
  4929. INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
  4930.     AX = 4BF1h
  4931. Return: ???
  4932. SeeAlso: AX=4BF0h
  4933. ----------214BFE-----------------------------
  4934. INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
  4935.     AX = 4BFEh
  4936. Return: AX = 1234h if "Hitchcock" resident
  4937.     AX = ABCDh if "1193"/"Copyright" resident
  4938.     DI = 55BBh if "Dark Avenger-1028" resident
  4939. SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
  4940. ----------214BFF-----------------------------
  4941. INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
  4942.     AX = 4BFFh
  4943. Return: BL = FFh if "USSR-707" resident
  4944.     DI = 55AAh if "Justice" resident
  4945.     CF clear if "Europe 92" resident
  4946. SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
  4947. ----------214BFFSI0000-----------------------
  4948. INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
  4949.     AX = 4BFFh
  4950.     SI = 0000h
  4951.     DI = 0000h
  4952. Return: DI = 55AAh if installed
  4953. SeeAlso: AX=4BFFh"Justice",AX=5252h
  4954. ----------214C-------------------------------
  4955. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  4956.     AH = 4Ch
  4957.     AL = return code
  4958. Return: never returns
  4959. Notes:    unless the process is its own parent (see AH=26h, offset 16h in PSP),
  4960.       all open files are closed and all memory belonging to the process
  4961.       is freed
  4962.     all network file locks should be removed before calling this function
  4963. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
  4964. SeeAlso: INT 60/DI=0601h
  4965. ----------214D-------------------------------
  4966. INT 21 - DOS 2+ - GET RETURN CODE
  4967.     AH = 4Dh
  4968. Return: AH = termination type
  4969.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  4970.         01h control-C abort
  4971.         02h critical error abort
  4972.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  4973.     AL = return code
  4974. Note:    the word in which DOS stores the return code is cleared after being
  4975.       read by this function, so the return code can only be retrieved once
  4976. SeeAlso: AH=4Bh,AH=4Ch
  4977. ----------214E-------------------------------
  4978. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  4979.     AH = 4Eh
  4980.     AL = special flag for use by APPEND (see note below)
  4981.     CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored)
  4982.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  4983. Return: CF clear if successful
  4984.         [DTA] = FindFirst data block (see below)
  4985.     CF set on error
  4986.         AX = error code (02h,03h,12h) (see AH=59h)
  4987. Notes:    for search attributes other than 08h, all files with at MOST the
  4988.       specified combination of hidden, system, and directory attributes
  4989.       will be returned.  Under DOS 2.x, searching for attribute 08h
  4990.       (volume label) will also return normal files, while under DOS 3+
  4991.       only the volume label (if any) will be returned.
  4992.     this call also returns successfully if given the name of a character
  4993.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  4994.       and the current date and time.  DOS 3+ returns attribute 40h and the
  4995.       current date and time.
  4996.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  4997.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  4998.       found pathname will be stored, otherwise, the actual found path
  4999.       will be prepended to the original filespec without a path.
  5000.     under LANtastic, this call may be used to obtain a list of a server's
  5001.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  5002.       resources may be obtained by searching for "\\SERVER\@*.*"
  5003. BUG:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  5004.       with a character device name (no wildcards) and search attributes
  5005.       which include the volume-label bit (08h) will fail unless there is
  5006.       an intervening DOS call which implicitly or explicity performs a
  5007.       directory search without the volume-label bit.  Such implicit
  5008.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  5009.       (AH=41h), and RENAME (AH=56h)
  5010. SeeAlso: AH=11h,AH=4Fh,AX=4301h,INT 2F/AX=111Bh,INT 2F/AX=B711h
  5011.  
  5012. Format of FindFirst data block:
  5013. Offset    Size    Description
  5014. ---PCDOS 3.10, PCDOS 4.01, MSDOS 3.2/3.3/5.0---
  5015.  00h    BYTE    drive letter
  5016.  01h 11 BYTEs    search template
  5017.  0Ch    BYTE    search attributes
  5018. ---DOS 2.x (and some DOS 3.x???)---
  5019.  00h    BYTE    search attributes
  5020.  01h    BYTE    drive letter
  5021.  02h 11 BYTEs    search template
  5022. ---WILDUNIX.COM---
  5023.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  5024.  0Ch    BYTE    search attributes
  5025. ---DOS 2.x and most 3.x---
  5026.  0Dh    WORD    entry count within directory
  5027.  0Fh    DWORD    pointer to DTA???
  5028.  13h    WORD    cluster number of start of parent directory
  5029. ---PCDOS 4.01, MSDOS 3.2/3.3/5.0---
  5030.  0Dh    WORD    entry count within directory
  5031.  0Fh    WORD    cluster number of start of parent directory
  5032.  11h  4 BYTEs    reserved
  5033. ---all versions, documented fields---
  5034.  15h    BYTE    attribute of file found
  5035.  16h    WORD    file time
  5036.             bits 11-15: hour
  5037.             bits 5-10:    minute
  5038.             bits 0-4:    seconds/2
  5039.  18h    WORD    file date
  5040.             bits 9-15:    year-1980
  5041.             bits 5-8:    month
  5042.             bits 0-4:    day
  5043.  1Ah    DWORD    file size
  5044.  1Eh 13 BYTEs    ASCIZ filename+extension
  5045. ----------214E-------------------------------
  5046. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  5047.     AH = 4Eh
  5048.     DS:DX = 0000h:0000h
  5049. Return:    AH = 99h if installed
  5050. Note:    WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  5051.       Hosgood and Terry Barnaby
  5052. ----------214F-------------------------------
  5053. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  5054.     AH = 4Fh
  5055.     [DTA] = data block from previous FindFirst or FindNext call
  5056. Return: CF clear if successful
  5057.     CF set on error
  5058.         AX = error code (12h) (see AH=59h)
  5059. SeeAlso: AH=12h,AH=4Eh
  5060. ----------2150-------------------------------
  5061. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  5062.     AH = 50h
  5063.     BX = segment of PSP for new process
  5064. Notes:    DOS uses the current PSP address to determine which processes own files
  5065.       and memory; it corresponds to process identifiers used by other OSs
  5066.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  5067.       handler without setting the Critical Error flag
  5068.     under DOS 3+, this function does not use any of the DOS-internal stacks
  5069.       and is thus fully reentrant
  5070.     supported by OS/2 compatibility box
  5071.     not documented for DOS 2.x-4.x, but newly documented for 5.0.
  5072. SeeAlso: AH=26h,AH=51h,AH=62h
  5073. ----------2151-------------------------------
  5074. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  5075.     AH = 51h
  5076. Return: BX = segment of PSP for current process
  5077. Notes:    DOS uses the current PSP address to determine which processes own files
  5078.       and memory; it corresponds to process identifiers used by other OSs
  5079.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  5080.       handler without setting the Critical Error flag
  5081.     under DOS 3+, this function does not use any of the DOS-internal stacks
  5082.       and is thus fully reentrant
  5083.     supported by OS/2 compatibility box
  5084.     identical to the documented AH=62h
  5085.     undocumented for DOS 2.x-4.x, but newly documented for 5.0.
  5086. SeeAlso: AH=26h,AH=50h,AH=62h
  5087. ----------2152-------------------------------
  5088. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  5089.     AH = 52h
  5090. Return: ES:BX -> DOS list of lists
  5091. Note:    partially supported by OS/2 v1.1 compatibility box (however, most
  5092.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  5093.       pointer is FFFFh:FFFFh).
  5094.  
  5095. Format of List of Lists:
  5096. Offset    Size    Description
  5097.  -12    WORD    (DOS 3.1-3.3) sharing retry count (see AX=440Bh)
  5098.  -10    WORD    (DOS 3.1-3.3) sharing retry delay (see AX=440Bh)
  5099.  -8    DWORD    (DOS 3.x) pointer to current disk buffer
  5100.  -4    WORD    (DOS 3.x) pointer in DOS code segment of unread CON input
  5101.         when CON is read via a handle, DOS reads an entire line,
  5102.           and returns the requested portion, buffering the rest
  5103.           for the next read.  0000h indicates no unread input
  5104.  -2    WORD    segment of first memory control block
  5105.  00h    DWORD    pointer to first Drive Parameter Block (see AH=32h)
  5106.  04h    DWORD    pointer to first System File Table (see below)
  5107.  08h    DWORD    pointer to active CLOCK$ device's header
  5108.  0Ch    DWORD    pointer to active CON device's header
  5109. ---DOS 2.x---
  5110.  10h    BYTE    number of logical drives in system
  5111.  11h    WORD    maximum bytes/block of any block device
  5112.  13h    DWORD    pointer to first disk buffer (see below)
  5113.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5114.         NUL is always the first device on DOS's linked list of device 
  5115.         drivers. (see below for format)
  5116. ---DOS 3.0---
  5117.  10h    BYTE    number of block devices
  5118.  11h    WORD    maximum bytes/block of any block device
  5119.  13h    DWORD    pointer to first disk buffer (see below)
  5120.  17h    DWORD    pointer to array of current directory structures (see below)
  5121.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  5122.  1Ch    DWORD    pointer to STRING= workspace area
  5123.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  5124.  22h    DWORD    pointer to FCB table
  5125.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  5126.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5127.         NUL is always the first device on DOS's linked list of device 
  5128.         drivers. (see below for format)
  5129. ---DOS 3.1-3.3---
  5130.  10h    WORD    maximum bytes per sector of any block device
  5131.  12h    DWORD    pointer to first disk buffer in buffer chain (see below)
  5132.  16h    DWORD    pointer to array of current directory structures (see below)
  5133.  1Ah    DWORD    pointer to system FCB tables (see below)
  5134.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  5135.  20h    BYTE    number of block devices installed
  5136.  21h    BYTE    number of available drive letters (largest of 5, installed
  5137.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  5138.         current directory structure array.
  5139.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5140.         NUL is always the first device on DOS's linked list of device
  5141.         drivers. (see below for format)
  5142.  34h    BYTE    number of JOIN'ed drives
  5143. ---DOS 4.x---
  5144.  10h    WORD    maximum bytes per sector of any block device
  5145.  12h    DWORD    pointer to disk buffer info record (see below)
  5146.  16h    DWORD    pointer to array of current directory structures (see below)
  5147.  1Ah    DWORD    pointer to system FCB tables (see below)
  5148.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  5149.         (always 00h for DOS 5.0)
  5150.  20h    BYTE    number of block devices installed
  5151.  21h    BYTE    number of available drive letters (largest of 5, installed
  5152.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  5153.         current directory structure array.
  5154.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5155.         NUL is always the first device on DOS's linked list of device
  5156.         drivers. (see below for format)
  5157.  34h    BYTE    number of JOIN'ed drives???
  5158.  35h    WORD    pointer within IBMDOS code segment to list of special program
  5159.         names (see below)
  5160.         (always 0000h for DOS 5.0)
  5161.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  5162.         (see below)
  5163.         may be called by any IFS driver which does not wish to
  5164.         service functions 20h or 24h-28h itself
  5165.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  5166.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  5167.  41h    WORD    the y in BUFFERS x,y
  5168.  43h    BYTE    boot drive (1=A:)
  5169.  44h    BYTE    01h if 80386+, 00h otherwise???
  5170.  45h    WORD    extended memory size in K
  5171. ---DOS 5.0---
  5172.  10h 39 BYTEs    as for DOS 4.x (see above)
  5173.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  5174.  3Bh    WORD    ??? pointer to function in DOS CS
  5175.  3Dh    WORD    ??? apparently 0000h if DOS loaded low, PSP of most-recently
  5176.         EXECed program if DOS in HMA
  5177.  3Fh  8 BYTEs    as for DOS 4.x (see above)
  5178.  
  5179. Format of memory control block (see also below):
  5180. Offset    Size    Description
  5181.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  5182.  01h    WORD    PSP segment of owner or
  5183.         0000h if free
  5184.         0006h if DR-DOS XMS UMB
  5185.         0007h if DR-DOS excluded upper memory ("hole")
  5186.         0008h if belongs to DOS
  5187.         FFFAh if 386MAX UMB control block
  5188.         FFFDh if 386MAX locked-out memory
  5189.         FFFEh if 386MAX UMB (immediately follows its control block)
  5190.  03h    WORD    size of memory block in paragraphs
  5191.  05h  3 BYTEs    unused
  5192. ---DOS 2.x,3.x---
  5193.  08h  8 BYTEs    unused
  5194. ---DOS 4+ ---
  5195.  08h  8 BYTEs    ASCII program name if PSP memory block or DR-DOS UMB,
  5196.           else garbage
  5197.         null-terminated if less than 8 characters
  5198. Notes:    the next MCB is at segment (current + size + 1)
  5199.     under DOS 3.1+, the first memory block is the DOS data segment,
  5200.       containing installable drivers, buffers, etc.
  5201.     under DOS 4.x it is divided into subsegments, each with its own memory
  5202.       control block (see below), the first of which is at offset 0000h
  5203.     for DOS 5.0, blocks owned by DOS may have either "SC" or "SD" in bytes
  5204.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  5205.       "SD" is system data, device drivers, etc.
  5206.     Some versions of DR-DOS use only seven characters of the program name,
  5207.       placing a NUL in the eighth byte.
  5208.  
  5209. Format of MSDOS 5.0 UMB control block:
  5210. Offset    Size    Description
  5211.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  5212.  01h    WORD    first available paragraph in UMB if control block at start
  5213.         of UMB, 000Ah if control block at end of UMB
  5214.  03h    WORD    length in paragraphs of following UMB or locked-out region
  5215.  05h  3 BYTEs    unused
  5216.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  5217.  
  5218. Format of STARLITE memory control block:
  5219. Offset    Size    Description
  5220.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  5221.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  5222.  03h    WORD    size of memory block in paragraphs
  5223.  05h    BYTE    unused
  5224.  06h    WORD    segment address of next memory control block (0000h if last)
  5225.  08h    WORD    segment address of previous memory control block or 0000h
  5226.  0Ah  6 BYTEs    reserved
  5227.  
  5228. Format of DOS 4.x data segment subsegment control blocks:
  5229. Offset    Size    Description
  5230.  00h    BYTE    subsegment type (blocks typically appear in this order)
  5231.         "D"  device driver
  5232.         "E"  device driver appendage
  5233.         "I"  IFS (Installable File System) driver
  5234.         "F"  FILES=  control block storage area (for FILES>5)
  5235.         "X"  FCBS=   control block storage area, if present
  5236.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  5237.         "B"  BUFFERS=  storage area
  5238.         "L"  LASTDRIVE=     current directory structure array storage area
  5239.         "S"  STACKS=  code and data area, if present (see below)
  5240.         "T"  INSTALL= transient code
  5241.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  5242.  03h    WORD    size of subsegment in paragraphs
  5243.  05h  3 BYTEs    unused
  5244.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  5245.           was loaded (unused for other types)
  5246.  
  5247. Format of data at start of STACKS code segment (if present):
  5248. Offset    Size    Description
  5249.  00h    WORD    ???
  5250.  02h    WORD    number of stacks (the x in STACKS=x,y)
  5251.  04h    WORD    size of stack control block array (should be 8*x)
  5252.  06h    WORD    size of each stack (the y in STACKS=x,y)
  5253.  08h    DWORD    ptr to STACKS data segment
  5254.  0Ch    WORD    offset in STACKS data segment of stack control block array
  5255.  0Eh    WORD    offset in STACKS data segment of last element of that array
  5256.  10h    WORD    offset in STACKS data segment of the entry in that array for
  5257.         the next stack to be allocated (initially same as value in 0Eh
  5258.         and works its way down in steps of 8 to the value in 0Ch as
  5259.         hardware interrupts pre-empt each other)
  5260. Note:    the STACKS code segment data may, if present, be located as follows:
  5261.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  5262.         in the IBMBIO segment (seen at 0070:0190h)
  5263.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  5264.         segment, which may be determined by inspecting the segment
  5265.         pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  5266.         70h, 72-77h which have not been redirected by device drivers or
  5267.         TSRs.
  5268.     DOS 4.x:    Identified by sub-segment control block type "S" within the DOS
  5269.         data segment.
  5270.  
  5271. Format of array elements in STACKS data segment:
  5272. Offset    Size    Description
  5273.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  5274.         higher stack.
  5275.  01h    BYTE    not used
  5276.  02h    WORD    previous SP
  5277.  04h    WORD    previous SS
  5278.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  5279.         top of the stack is preset to point back to this control block.
  5280.  
  5281. SHARE.EXE hooks (DOS 3.1-5.00):
  5282. (offsets from first system file table--pointed at by ListOfLists+04h)
  5283. Offset    Size    Description
  5284. -3Ch    DWORD    pointer to FAR routine for ???
  5285.         Note: not called by MSDOS 3.3, set to 0000h:0000h by SHARE 3.3
  5286. -38h    DWORD    pointer to FAR routine called on opening file
  5287.         on call, internal DOS location points at filename(see AX=5D06h)
  5288.         Return: CF clear if successful
  5289.             CF set on error
  5290.                 AX = DOS error code (24h) (see AH=59h)
  5291.         Note: SHARE assumes DS=SS=DOS DS, direct-accesses DOS internals
  5292.             to get name of file just opened
  5293. -34h    DWORD    pointer to FAR routine called on closing file
  5294.         ES:DI -> system file table
  5295.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5296.             does something to every lock record for file
  5297. -30h    DWORD    pointer to FAR routine to close all files for given computer
  5298.         (called by AX=5D03h)
  5299.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5300. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  5301.         (called by AX=5D04h)
  5302.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5303. -28h    DWORD    pointer to FAR routine to close file by name
  5304.         (called by AX=5D02h)
  5305.         DS:SI -> DOS parameter list (see AX=5D00h)
  5306.            DPL's DS:DX -> name of file to close
  5307.         Return: CF clear if successful
  5308.             CF set on error
  5309.                 AX = DOS error code (03h) (see AH=59h)
  5310.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5311. -24h    DWORD    pointer to FAR routine to lock region of file
  5312.         call with BX = file handle
  5313.               CX:DX = starting offset
  5314.               SI:AX = size
  5315.         Return: CF set on error
  5316.                 AL = DOS error code (21h) (see AH=59h)
  5317.         Note: only called if file is marked as remote
  5318.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5319. -20h    DWORD    pointer to FAR routine to unlock region of file
  5320.         call with BX = file handle
  5321.               CX:DX = starting offset
  5322.               SI:AX = size
  5323.         Return: CF set on error
  5324.                 AL = DOS error code (21h) (see AH=59h)
  5325.         Note: only called if file is marked as remote
  5326.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5327. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  5328.         call with ES:DI -> system file table entry for file
  5329.             CX = length of region from current position in file
  5330.         Return: CF set if any portion of region locked
  5331.                 AX = 0021h
  5332.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5333. -18h    DWORD    pointer to FAR routine to get open file list entry
  5334.         (called by AX=5D05h)
  5335.         call with DS:SI -> DOS parameter list (see AX=5D00h)
  5336.             DPL's BX = index of sharing record
  5337.             DPL's CX = index of SFT in SFT chain of sharing rec
  5338.         Return: CF set on error or not loaded
  5339.                 AX = DOS error code (12h) (see AH=59h)
  5340.             CF clear if successful
  5341.                 ES:DI -> filename
  5342.                 CX = number of locks owned by specified SFT
  5343.                 BX = network machine number
  5344.                 DX destroyed
  5345.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5346. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  5347.         call with DS:SI -> unopened FCB
  5348.               ES:DI -> system file table entry
  5349.         Return: BL = C0h???
  5350.         Note: copies following fields from SFT to FCB:
  5351.            starting cluster of file      0Bh     1Ah
  5352.            sharing record offset      33h     1Ch
  5353.            file attribute          04h     1Eh
  5354. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  5355.         call with ES:DI -> system file table entry
  5356.               DS:SI -> FCB
  5357.         Return: CF set if SFT closed or sharing record offsets
  5358.                 mismatched
  5359.             CF clear if successful
  5360.                 BX = starting cluster number from FCB
  5361. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  5362.         DS:SI -> system file table
  5363.         Return: AX = number of handle in JFT which already uses SFT
  5364.         Note: called during open/create of a file
  5365.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  5366.         Note: if SFT was opened with inheritance enabled and sharing
  5367.             mode 111, does something to all other SFTs owned by
  5368.             same process which have the same file open mode and
  5369.             sharing record
  5370. -08h    DWORD    pointer to FAR routine for ???
  5371.         Note: SHARE assumes SS=DS=DOS DS, direct-accesses DOS internals
  5372.         Note: closes various handles referring to file most-recently
  5373.             opened
  5374. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  5375.           entries
  5376.         call with ES:DI -> system file table entry for file (see below)
  5377.               AX = subfunction (apply to each related SFT)
  5378.                 00h: update time stamp (offset 0Dh) and date
  5379.                      stamp (offset 0Fh)
  5380.                 01h: update file size (offset 11h) and starting
  5381.                      cluster (offset 0Bh).  Sets last-accessed
  5382.                      cluster fields to start of file if file
  5383.                      never accessed
  5384.                 02h: as function 01h, but last-accessed fields
  5385.                      always changed
  5386.                 03h: do both functions 00h and 02h
  5387.         Note: follows ptr at offset 2Bh in system file table entries
  5388.         Note: NOP if opened with no-inherit or via FCB
  5389.  
  5390. Format of sharing record:
  5391. Offset    Size    Description
  5392.  00h    BYTE    flag
  5393.         00h free block
  5394.         01h allocated block
  5395.         FFh end marker
  5396.  01h    WORD    size of block
  5397.  03h    BYTE    checksum of pathname (including NUL)
  5398.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  5399.  04h    WORD    offset in SHARE's DS of lock record (see below)
  5400.  06h    DWORD    pointer to start of system file table chain for file
  5401.  0Ah    WORD    unique sequence number
  5402.  0Ch    var    ASCIZ full pathname
  5403.  
  5404. Format of SHARE.EXE lock record:
  5405. Offset    Size    Description
  5406.  00h    WORD    offset in SHARE's DS of next lock table in list
  5407.  02h    DWORD    offset in file of start of locked region
  5408.  06h    DWORD    offset in file of end of locked region
  5409.  0Ah    DWORD    pointer to System File Table entry for this file
  5410.  0Eh    WORD    PSP segment of lock's owner
  5411.  
  5412. Format of DOS 2.x system file tables:
  5413. Offset    Size    Description
  5414.  00h    DWORD    pointer to next file table
  5415.  04h    WORD    number of files in this table
  5416.  06h  28h bytes per file
  5417.     Offset    Size    Description
  5418.      00h    BYTE    number of file handles referring to this file
  5419.      01h    BYTE    file open mode (see AH=3Dh)
  5420.      02h    BYTE    file attribute
  5421.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  5422.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  5423.      0Fh    WORD    ???
  5424.      11h    WORD    ???
  5425.      13h    DWORD    file size???
  5426.      17h    WORD    file date in packed format (see AX=5700h)
  5427.      19h    WORD    file time in packed format (see AX=5700h)
  5428.      1Bh    BYTE    device attribute (see AX=4400h)
  5429.     ---character device---
  5430.      1Ch    DWORD    pointer to device driver
  5431.     ---block device---
  5432.      1Ch    WORD    starting cluster of file
  5433.      1Eh    WORD    relative cluster in file of last cluster accessed
  5434.     ------
  5435.      20h    WORD    absolute cluster number of current cluster
  5436.      22h    WORD    ???
  5437.      24h    DWORD    current file position???
  5438.  
  5439. Format of DOS 3.0 system file tables and FCB tables:
  5440. Offset    Size    Description
  5441.  00h    DWORD    pointer to next file table
  5442.  04h    WORD    number of files in this table
  5443.  06h  38h bytes per file
  5444.     Offset    Size    Description
  5445.      00h-1Eh as for DOS 3.1+ (see below)
  5446.      1Fh    WORD    byte offset of directory entry within sector
  5447.      21h 11 BYTES    filename in FCB format (no path/period, blank-padded)
  5448.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  5449.      30h    WORD    (SHARE.EXE) ??? network machine number
  5450.      32h    WORD    PSP segment of file's owner
  5451.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  5452.      36h    WORD    ??? apparently always 0000h
  5453.  
  5454. Format of DOS 3.1-3.3x system file tables and FCB tables:
  5455. Offset    Size    Description
  5456.  00h    DWORD    pointer to next file table
  5457.  04h    WORD    number of files in this table
  5458.  06h  35h bytes per file
  5459.     Offset    Size    Description
  5460.      00h    WORD    number of file handles referring to this file
  5461.      02h    WORD    file open mode (see AH=3Dh)
  5462.             bit 15 set if this file opened via FCB
  5463.      04h    BYTE    file attribute (see AX=4301h)
  5464.      05h    WORD    device info word (see AX=4400h)
  5465.             bit 15 set if remote file
  5466.             bit 14 set means do not set file date/time on closing
  5467.             bit 12 set means don't inherit on EXEC
  5468.      07h    DWORD    pointer to device driver header if character device
  5469.             else pointer to DOS Drive Parameter Block (see AH=32h)
  5470.      0Bh    WORD    starting cluster of file
  5471.      0Dh    WORD    file time in packed format (see AX=5700h)
  5472.      0Fh    WORD    file date in packed format (see AX=5700h)
  5473.      11h    DWORD    file size
  5474.     ---system file table---
  5475.      15h    DWORD    current offset in file (may be larger than size of
  5476.             file; INT 21/AH=42h does not check new position)
  5477.     ---FCB table---
  5478.      15h    WORD    counter for last I/O to FCB
  5479.      17h    WORD    counter for last open of FCB
  5480.             (these are separate to determine the times of the
  5481.             latest I/O and open)
  5482.     ---
  5483.      19h    WORD    relative cluster within file of last cluster accessed
  5484.      1Bh    WORD    absolute cluster number of last cluster accessed
  5485.             0000h if file never read or written???
  5486.      1Dh    WORD    number of sector containing directory entry
  5487.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  5488.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  5489.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  5490.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  5491.      31h    WORD    PSP segment of file's owner (see AH=26h)
  5492.      33h    WORD    offset within SHARE.EXE code segment of 
  5493.             sharing record (see above)  0000h = none
  5494.  
  5495. Format of DOS 4.0-5.0 system file tables and FCB tables:
  5496. Offset    Size    Description
  5497.  00h    DWORD    pointer to next file table
  5498.  04h    WORD    number of files in this table
  5499.  06h  3Bh bytes per file
  5500.     Offset    Size    Description
  5501.      00h    WORD    number of file handles referring to this file
  5502.      02h    WORD    file open mode (see AH=3Dh)
  5503.             bit 15 set if this file opened via FCB
  5504.      04h    BYTE    file attribute (see AX=4301h)
  5505.      05h    WORD    device info word (see AX=4400h)
  5506.             bit 15 set if remote file
  5507.             bit 14 set means do not set file date/time on closing
  5508.             bit 13 set if named pipe
  5509.             bit 12 set if no inherit
  5510.             bit 11 set if network spooler
  5511.      07h    DWORD    pointer to device driver header if character device
  5512.             else pointer to DOS Drive Parameter Block (see AH=32h)
  5513.             or REDIR data
  5514.      0Bh    WORD    starting cluster of file
  5515.      0Dh    WORD    file time in packed format (see AX=5700h)
  5516.      0Fh    WORD    file date in packed format (see AX=5700h)
  5517.      11h    DWORD    file size
  5518.      15h    DWORD    current offset in file
  5519.     ---local file---
  5520.      19h    WORD    relative cluster within file of last cluster accessed
  5521.      1Bh    DWORD    number of sector containing directory entry
  5522.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  5523.     ---network redirector---
  5524.      19h    DWORD    pointer to REDIRIFS record
  5525.      1Dh  3 BYTEs    ???
  5526.     ------
  5527.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  5528.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  5529.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  5530.      31h    WORD    PSP segment of file's owner (see AH=26h)
  5531.      33h    WORD    offset within SHARE.EXE code segment of 
  5532.             sharing record (see above)  0000h = none
  5533.      35h    WORD    (local) absolute cluster number of last clustr accessed
  5534.             (redirector) ???
  5535.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  5536.  
  5537. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  5538. Offset    Size    Description
  5539.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network)
  5540.  43h    WORD    drive attributes (see also note below and AX=5F07h)
  5541.         bit 15: uses network redirector     \ invalid if 00, installable
  5542.             14: physical drive         / file system if 11
  5543.             13: JOIN'ed      \ path above is true path that would be
  5544.             12: SUBST'ed  / needed if not under SUBST or JOIN
  5545.  45h    DWORD    pointer to Drive Parameter Block for drive (see AH=32h)
  5546. ---local drives---
  5547.  49h    WORD    starting cluster of current directory
  5548.         0000h = root, FFFFh = never accessed
  5549.  4Bh    WORD    ??? seems to be FFFFh always
  5550.  4Dh    WORD    ??? seems to be FFFFh always
  5551. ---network drives---
  5552.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  5553.  4Dh    WORD    stored user data from INT 21/AX=5F03h???
  5554. ------
  5555.  4Fh    WORD    offset in current directory path of backslash corresponding to
  5556.           root directory for drive
  5557.         this value specifies how many characters to hide from the
  5558.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  5559.           drive letter and colon, SUBST, JOIN, and networks change it
  5560.           so that only the appropriate portion of the true path is
  5561.           visible to the user
  5562. ---DOS 4.x---
  5563.  51h    BYTE    ??? used by network
  5564.  52h    DWORD    pointer to IFS driver for this drive, 00000000h if native DOS
  5565.  56h    WORD    ???
  5566. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  5567.       after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
  5568.     normally, only one of bits 13&12 may be set together with bit 14, but
  5569.       DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  5570.       0001 SUBST, 0101 ASSIGN
  5571.  
  5572. Format of DR-DOS 5.0-6.0 current directory structure entry (array):
  5573. Offset    Size    Description
  5574.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  5575.  43h    WORD    drive attributes
  5576.         1000h SUBSTed drive
  5577.         3000h??? JOINed drive
  5578.         4000h physical drive
  5579.         5000h ASSIGNed drive
  5580.         7000h JOINed drive
  5581.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  5582.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  5583.  47h    WORD    cluster number of start of parent directory (0000h = root)
  5584.  49h    WORD    entry number of current directory in parent directory
  5585.  4Bh    WORD    cluster number of start of current directory
  5586.  4Dh  2 BYTEs    ??? apparently always 0001h
  5587.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  5588.         0000h if physical root directory
  5589.  
  5590. Format of device driver header:
  5591. Offset    Size    Description
  5592.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  5593.  04h    WORD    device attributes
  5594.         Character device:
  5595.            bit 15 set
  5596.            bit 14 IOCTL supported (see AH=44h)
  5597.            bit 13 (DOS 3+) output until busy supported
  5598.            bit 12 reserved
  5599.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  5600.            bits 10-8 reserved
  5601.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  5602.                 (see AX=4410h,AX=4411h)
  5603.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  5604.                 (see AX=440Ch,AX=440Dh)
  5605.            bit 5  reserved
  5606.            bit 4  device is special (use INT 29 "fast console output")
  5607.            bit 3  device is CLOCK$ (all reads/writes use transfer
  5608.                 record described below)
  5609.            bit 2  device is NUL
  5610.            bit 1  device is standard output
  5611.            bit 0  device is standard input
  5612.         Block device:
  5613.            bit 15 clear
  5614.            bit 14 IOCTL supported
  5615.            bit 13 non-IBM format
  5616.            bit 12 reserved
  5617.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  5618.            bit 10 reserved
  5619.            bit 9  direct I/O not allowed???
  5620.               (set by DOS 3.3 DRIVER.SYS for "new" drives)
  5621.            bit 8  ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  5622.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  5623.                 (see AX=4410h,AX=4411h)
  5624.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  5625.                 implies support for commands 17h and 18h
  5626.                 (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
  5627.            bits 5-2 reserved
  5628.            bit 1   driver supports 32-bit sector addressing
  5629.            bit 0   reserved
  5630.  06h    WORD    device strategy entry point
  5631.         call with ES:BX -> request header (see INT 2F/AX=0802h)
  5632.  08h    WORD    device interrupt entry point
  5633. ---character device---
  5634.  0Ah  8 BYTEs    blank-padded character device name
  5635. ---block device---
  5636.  0Ah    BYTE    number of subunits (drives) supported by driver
  5637.  0Bh  7 BYTEs    unused
  5638. ---
  5639.  12h    WORD    (CD-ROM driver) reserved, must be 0000h
  5640.  14h    BYTE    (CD-ROM driver) drive letter (must initially be 00h)
  5641.  15h    BYTE    (CD-ROM driver) number of units
  5642.  16h  6 BYTEs    (CD-ROM driver) signature 'MSCDnn' where 'nn' is version 
  5643.             (currently '00')
  5644.  
  5645. Format of CLOCK$ transfer record:
  5646. Offset    Size    Description
  5647.  00h    WORD    number of days since 1-Jan-1980
  5648.  02h    BYTE    minutes
  5649.  03h    BYTE    hours
  5650.  04h    BYTE    hundredths of second
  5651.  05h    BYTE    seconds
  5652.  
  5653. Format of DOS 2.x disk buffer:
  5654. Offset    Size    Description
  5655.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5656.         least-recently used buffer is first in chain
  5657.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  5658.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  5659.  08h    WORD    logical sector number
  5660.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  5661.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  5662.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5663.  10h        buffered data
  5664.  
  5665. Format of DOS 3.x disk buffer:
  5666. Offset    Size    Description
  5667.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5668.         least-recently used buffer is first in chain
  5669.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  5670.  05h    BYTE    flags
  5671.         bit 7: ???
  5672.         bit 6: buffer dirty
  5673.         bit 5: buffer has been referenced
  5674.         bit 4: ???
  5675.         bit 3: sector in data area
  5676.         bit 2: sector in a directory, either root or subdirectory
  5677.         bit 1: sector in FAT
  5678.         bit 0: boot sector??? (guess)
  5679.  06h    WORD    logical sector number
  5680.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  5681.  09h    BYTE    sector offset between copies if multiple copies to be written
  5682.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5683.  0Eh    WORD    unused??? (almost always 0)
  5684.  10h        buffered data
  5685.  
  5686. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  5687. Offset    Size    Description
  5688.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  5689.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5690.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5691.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5692.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  5693.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  5694.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  5695.  11h    WORD    ??? seems always to be 0001h
  5696.  13h    WORD    segment of EMS physical page frame
  5697.  15h    WORD    ??? seems always to be zero
  5698.  17h  4 WORDs    EMS partial page mapping information???
  5699.  
  5700. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  5701. Offset    Size    Description
  5702.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  5703.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5704.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5705.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5706.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  5707.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  5708.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  5709.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  5710.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  5711.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  5712.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  5713.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  5714.           into EMS
  5715.  18h    WORD    EMS handle for buffers, zero if not in EMS
  5716.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  5717.  1Ch    WORD    ??? appears always to be 0001h
  5718.  1Eh    WORD    segment of EMS physical page frame
  5719.  20h    WORD    ??? appears always to be zero
  5720.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  5721.  
  5722. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  5723. Offset    Size    Description
  5724.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  5725.         in EMS
  5726.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  5727.         this chain are in the same segment.
  5728.  06h    BYTE    number of dirty buffers on this chain
  5729.  07h    BYTE    reserved (00h)
  5730. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  5731.       address modulo NDBCH,     0 <= N <= NDBCH-1
  5732.     each chain resides completely within one EMS page
  5733.     this structure is in main memory even if buffers are in EMS
  5734.  
  5735. Format of DOS 4.0-5.0 disk buffer:
  5736. Offset    Size    Description
  5737.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  5738.  02h    WORD    backward ptr, offset only
  5739.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  5740.  05h    BYTE    flags
  5741.         bit 7: remote buffer
  5742.         bit 6: buffer dirty
  5743.         bit 5: buffer has been referenced
  5744.         bit 4: search data buffer (only valid if remote buffer)
  5745.         bit 3: sector in data area
  5746.         bit 2: sector in a directory, either root or subdirectory
  5747.         bit 1: sector in FAT
  5748.         bit 0: reserved
  5749.  06h    DWORD    logical sector number
  5750.  0Ah    BYTE    number of copies to write
  5751.         for FAT sectors, same as number of FATs
  5752.         for data and directory sectors, usually 1
  5753.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  5754.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5755.  11h    WORD    buffer use count if remote buffer (see flags above)
  5756.  13h    BYTE    reserved
  5757.  14h        buffered data
  5758. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  5759.       (computed as the sum of high and low words of the logical sector
  5760.       number divided by NDBCH) are on the same doubly-linked circular
  5761.       chain; for DOS 5.0, only a single circular chain exists.
  5762.     the links consist of offset addresses only, the segment being the same
  5763.       for all buffers in the chain.
  5764.  
  5765. Format of DOS 5.0 disk buffer info:
  5766. Offset    Size    Description
  5767.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  5768.         (see above)
  5769.  04h    WORD    0000h (DOS 5 does not hash disk buffers, so offset 00h points
  5770.             directly at the only buffer chain)
  5771.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5772.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5773.  0Ch    BYTE    buffer location
  5774.         00h base memory, no workspace buffer
  5775.         01h HMA, workspace buffer in base memory
  5776.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  5777.  11h  3 BYTEs    unused???
  5778.  14h    WORD    ???
  5779.  16h    BYTE    ??? apparently always 00h
  5780.  17h    BYTE    ??? apparently always FFh
  5781.  18h    BYTE    ??? apparently always 00h
  5782.  19h    BYTE    ??? apparently always 00h
  5783.  1Ah    WORD    ??? segment within HIMEM.SYS area when buffers are in HMA and
  5784.           UMBs are enabled???, else 0000h
  5785.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  5786.  1Dh    WORD    ???
  5787.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  5788.         memory chain in base 640K only (first UMB MCB usually at 9FFFh,
  5789.         locking out video memory with a DOS-owned memory block)
  5790.  21h    WORD    paragraph of start of most recent MCB chain search
  5791.  
  5792. Format of IFS driver list:
  5793. Offset    Size    Description
  5794.  00h    DWORD    pointer to next driver header
  5795.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  5796.  0Ch  4 BYTEs    ???
  5797.  10h    DWORD    pointer to IFS utility function entry point (see below)
  5798.         call with ES:BX -> IFS request (see below)
  5799.  14h    WORD    offset in header's segment of driver entry point
  5800.     ???
  5801.  
  5802. Call IFS utility function entry point with:
  5803.     AH = 20h miscellaneous functions
  5804.         AL = 00h get date
  5805.         Return: CX = year
  5806.             DH = month
  5807.             DL = day
  5808.         AL = 01h get process ID and computer ID
  5809.         Return: BX = current PSP segment
  5810.             DX = active network machine number
  5811.         AL = 05h get file system info
  5812.         ES:DI -> 16-byte info buffer
  5813.         Return: buffer filled
  5814.             Offset    Size    Description
  5815.              00h  2 BYTEs    unused
  5816.              02h    WORD    number of SFTs (actually counts only
  5817.                     the first two file table arrays)
  5818.              04h    WORD    number of FCB table entries
  5819.              06h    WORD    number of proctected FCBs
  5820.              08h  6 BYTEs    unused
  5821.              0Eh    WORD    largest sector size supported
  5822.         AL = 06h get machine name
  5823.         ES:DI -> 18-byte buffer for name
  5824.         Return: buffer filled with name starting at offset 02h
  5825.         AL = 08h get sharing retry count
  5826.         Return: BX = sharing retry count
  5827.         AL = other
  5828.         Return: CF set
  5829.     AH = 21h get redirection state
  5830.         BH = type (03h disk, 04h printer)
  5831.         Return: BH = state (00h off, 01h on)
  5832.     AH = 22h ??? some sort of time calculation
  5833.         AL = 00h ???
  5834.             nonzero ???
  5835.     AH = 23h ??? some sort of time calculation
  5836.     AH = 24h compare filenames
  5837.         DS:SI -> first ASCIZ filename
  5838.         ES:DI -> second ASCIZ filename
  5839.         Return: ZF set if files are same ignoring case and / vs \
  5840.     AH = 25h normalize filename
  5841.         DS:SI -> ASCIZ filename
  5842.         ES:DI -> buffer for result
  5843.         Return: filename uppercased, forward slashes changed to backslashes
  5844.     AH = 26h get DOS stack
  5845.         Return: DS:SI -> top of stack
  5846.             CX = size of stack in bytes
  5847.     AH = 27h increment InDOS flag
  5848.     AH = 28h decrement InDOS flag
  5849. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  5850.       pass them on to the default handler pointed at by [LoL+37h]
  5851.  
  5852. Format of IFS request block:
  5853. Offset    Size    Description
  5854.  00h    WORD    total size in bytes of request
  5855.  02h    BYTE    class of request
  5856.         02h ???
  5857.         03h redirection
  5858.         04h ???
  5859.         05h file access
  5860.         06h convert error code to string
  5861.         07h ???
  5862.  03h    WORD    returned DOS error code
  5863.  05h    BYTE    IFS driver exit status
  5864.         00h success
  5865.         01h ???
  5866.         02h ???
  5867.         03h ???
  5868.         04h ???
  5869.         FFh internal failure
  5870.  06h 16 BYTEs    ???
  5871. ---request class 02h---
  5872.  16h    BYTE    function code
  5873.         04h ???
  5874.  17h    BYTE    unused???
  5875.  18h    DWORD    pointer to ???
  5876.  1Ch    DWORD    pointer to ???
  5877.  20h  2 BYTEs    ???
  5878. ---request class 03h---
  5879.  16h    BYTE    function code
  5880.  17h    BYTE    ???
  5881.  18h    DWORD    pointer to ???
  5882.  1Ch    DWORD    pointer to ???
  5883.  22h    WORD    returned ???
  5884.  24h    WORD    returned ???
  5885.  26h    WORD    returned ???
  5886.  28h    BYTE    returned ???
  5887.  29h    BYTE    unused???
  5888. ---request class 04h---
  5889.  16h    DWORD    pointer to ???
  5890.  1Ah    DWORD    pointer to ???
  5891. ---request class 05h---
  5892.  16h    BYTE    function code
  5893.         01h flush disk buffers
  5894.         02h get disk space
  5895.         03h MKDIR
  5896.         04h RMDIR
  5897.         05h CHDIR
  5898.         06h delete file
  5899.         07h rename file
  5900.         08h search directory
  5901.         09h file open/create
  5902.         0Ah LSEEK
  5903.         0Bh read from file
  5904.         0Ch write to file
  5905.         0Dh lock region of file
  5906.         0Eh commit/close file
  5907.         0Fh get/set file attributes
  5908.         10h printer control
  5909.         11h ???
  5910.         12h process termination
  5911.         13h ???
  5912.     ---class 05h function 01h---
  5913.      17h  7    BYTEs    ???
  5914.      1Eh    DWORD    pointer to ???
  5915.      22h  4 BYTEs    ???
  5916.      26h    BYTE    ???
  5917.      27h    BYTE    ???
  5918.     ---class 05h function 02h---
  5919.      17h  7 BYTEs    ???
  5920.      1Eh    DWORD    pointer to ???
  5921.      22h  4 BYTEs    ???
  5922.      26h    WORD    returned total clusters
  5923.      28h    WORD    returned sectors per cluster
  5924.      2Ah    WORD    returned bytes per sector
  5925.      2Ch    WORD    returned available clusters
  5926.      2Eh    BYTE    returned ???
  5927.      2Fh    BYTE    ???
  5928.     ---class 05h functions 03h,04h,05h---
  5929.      17h  7 BYTEs    ???
  5930.      1Eh    DWORD    pointer to ???
  5931.      22h  4 BYTEs    ???
  5932.      26h    DWORD    pointer to directory name
  5933.     ---class 05h function 06h---
  5934.      17h  7 BYTEs    ???
  5935.      1Eh    DWORD    pointer to ???
  5936.      22h  4 BYTEs    ???
  5937.      26h    WORD    attribute mask
  5938.      28h    DWORD    pointer to filename
  5939.     ---class 05h function 07h---
  5940.      17h  7 BYTEs    ???
  5941.      1Eh    DWORD    pointer to ???
  5942.      22h  4 BYTEs    ???
  5943.      26h    WORD    attribute mask
  5944.      28h    DWORD    pointer to source filespec
  5945.      2Ch    DWORD    pointer to destination filespec
  5946.     ---class 05h function 08h---
  5947.      17h  7 BYTEs    ???
  5948.      1Eh    DWORD    pointer to ???
  5949.      22h  4 BYTEs    ???
  5950.      26h    BYTE    00h FINDFIRST
  5951.             01h FINDNEXT
  5952.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  5953.      2Ch    WORD    search attribute if FINDFIRST
  5954.      2Eh    DWORD    pointer to filespec if FINDFIRST
  5955.     ---class 05h function 09h---
  5956.      17h  7 BYTEs    ???
  5957.      1Eh    DWORD    pointer to ???
  5958.      22h    DWORD    pointer to IFS open file structure (see below)
  5959.      26h    WORD    ???  \ together, specify open vs. create, whether or
  5960.      28h    WORD    ???  / not to truncate
  5961.      2Ah  4 BYTEs    ???
  5962.      2Eh    DWORD    pointer to filename
  5963.      32h  4 BYTEs    ???
  5964.      36h    WORD    file attributes on call
  5965.             returned ???
  5966.      38h    WORD    returned ???
  5967.     ---class 05h function 0Ah---
  5968.      17h  7 BYTEs    ???
  5969.      1Eh    DWORD    pointer to ???
  5970.      22h    DWORD    pointer to IFS open file structure (see below)
  5971.      26h    BYTE    seek type (02h = from end)
  5972.      28h    DWORD    offset on call
  5973.             returned new absolute position
  5974.     ---class 05h functions 0Bh,0Ch---
  5975.      17h  7 BYTEs    ???
  5976.      1Eh    DWORD    pointer to ???
  5977.      22h    DWORD    pointer to IFS open file structure (see below)
  5978.      28h    WORD    number of bytes to transfer
  5979.             returned bytes actually transferred
  5980.      2Ah    DWORD    transfer address
  5981.     ---class 05h function 0Dh---
  5982.      17h  7 BYTEs    ???
  5983.      1Eh    DWORD    pointer to ???
  5984.      22h    DWORD    pointer to IFS open file structure (see below)
  5985.      26h    BYTE    file handle???
  5986.      27h    BYTE    unused???
  5987.      28h    WORD    ???
  5988.      2Ah    WORD    ???
  5989.      2Ch    WORD    ???
  5990.      2Eh    WORD    ???
  5991.     ---class 05h function 0Eh---
  5992.      17h  7 BYTEs    ???
  5993.      1Eh    DWORD    pointer to ???
  5994.      22h    DWORD    pointer to IFS open file structure (see below)
  5995.      26h    BYTE    00h commit file
  5996.             01h close file
  5997.      27h    BYTE    unused???
  5998.     ---class 05h function 0Fh---
  5999.      17h  7 BYTEs    ???
  6000.      1Eh    DWORD    pointer to ???
  6001.      22h  4 BYTEs    ???
  6002.      26h    BYTE    02h GET attributes
  6003.             03h PUT attributes
  6004.      27h    BYTE    unused???
  6005.      28h 12 BYTEs    ???
  6006.      34h    WORD    search attributes???
  6007.      36h    DWORD    pointer to filename
  6008.      3Ah    WORD    (GET) returned ??? 
  6009.      3Ch    WORD    (GET) returned ???
  6010.      3Eh    WORD    (GET) returned ???
  6011.      40h    WORD    (GET) returned ???
  6012.      42h    WORD    (PUT) new attributes
  6013.             (GET) returned attributes
  6014.     ---class 05h function 10h---
  6015.      17h  7 BYTEs    ???
  6016.      1Eh    DWORD    pointer to ???
  6017.      22h    DWORD    pointer to IFS open file structure (see below)
  6018.      26h    WORD    ???
  6019.      28h    DWORD    pointer to ???
  6020.      2Ch    WORD    ???
  6021.      2Eh    BYTE    ???
  6022.      2Fh    BYTE    subfunction
  6023.             01h get printer setup
  6024.             03h ???
  6025.             04h ???
  6026.             05h ???
  6027.             06h ???
  6028.             07h ???
  6029.             21h set printer setup
  6030.     ---class 05h function 11h---
  6031.      17h  7 BYTEs    ???
  6032.      1Eh    DWORD    pointer to ???
  6033.      22h    DWORD    pointer to IFS open file structure (see below)
  6034.      26h    BYTE    subfunction
  6035.      27h    BYTE    unused???
  6036.      28h    WORD    ???
  6037.      2Ah    WORD    ???
  6038.      2Ch    WORD    ???
  6039.      2Eh    BYTE    ???
  6040.      2Fh    BYTE    ???
  6041.     ---class 05h function 12h---
  6042.      17h 15 BYTEs    unused???
  6043.      26h    WORD    PSP segment
  6044.      28h    BYTE    type of process termination
  6045.      29h    BYTE    unused???
  6046.     ---class 05h function 13h---
  6047.      17h 15 BYTEs    unused???
  6048.      26h    WORD    PSP segment
  6049. ---request class 06h---
  6050.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  6051.  1Ah    BYTE    returned ???
  6052.  1Bh    BYTE    unused
  6053. ---request class 07h---
  6054.  16h    DWORD    pointer to IFS open file structure (see below)
  6055.  1Ah    BYTE    ???
  6056.  1Bh    BYTE    unused???
  6057.  
  6058. Format of IFS open file structure:
  6059. Offset    Size    Description
  6060.  00h    WORD    ???
  6061.  02h    WORD    device info word
  6062.  04h    WORD    file open mode
  6063.  06h    WORD    ???
  6064.  08h    WORD    file attributes
  6065.  0Ah    WORD    owner's network machine number
  6066.  0Ch    WORD    owner's PSP segment
  6067.  0Eh    DWORD    file size
  6068.  12h    DWORD    current offset in file
  6069.  16h    WORD    file time
  6070.  18h    WORD    file date
  6071.  1Ah 11 BYTEs    filename in FCB format
  6072.  25h    WORD    ???
  6073.  27h    WORD    hash value of SFT address
  6074.         (low word of linear address + segment&F000h)
  6075.  29h  3 WORDs    network info from SFT
  6076.  2Fh    WORD    ???
  6077.  
  6078. Format of one item in DOS 4+ list of special program names:
  6079. Offset    Size    Description
  6080.  00h    BYTE    length of name (00h = end of list)
  6081.  01h  N BYTEs    name in format name.ext
  6082.  N    2 BYTEs    DOS version to return for program (major,minor)
  6083.         (see AH=30h,INT 2F/AX=122Fh)
  6084. ---DOS 4 only---
  6085.  N+2    BYTE    number of times to return fake version number (FFh = always)
  6086. Note:    if the name of the executable for the program making the DOS "get
  6087.       version" call matches one of the names in this list, DOS returns the
  6088.       specified version rather than the true version number
  6089. ----------215252-----------------------------
  6090. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  6091.     AX = 5252h
  6092. Return: BX = FFEEh if resident
  6093. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  6094. ----------2153-------------------------------
  6095. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  6096.     AH = 53h
  6097.     DS:SI -> BIOS Parameter Block (see below)
  6098.     ES:BP -> buffer for Drive Parameter Block (see AH=32h for format)
  6099. Return: ES:BP buffer filled
  6100. Note:    for DOS 3+, the cluster at which to start searching is set to 0000h
  6101.       and the number of free clusters is set to FFFFh (unknown)
  6102.  
  6103. Format of BIOS Parameter Block:
  6104. Offset    Size    Description
  6105.  00h    WORD    number of bytes per sector
  6106.  02h    BYTE    number of sectors per cluster
  6107.  03h    WORD    number of reserved sectors at start of disk
  6108.  05h    BYTE    number of FATs
  6109.  06h    WORD    number of entries in root directory
  6110.  08h    WORD    total number of sectors
  6111.         for DOS 4+, set to zero if partition >32M, then set DWORD at
  6112.           15h to actual number of sectors
  6113.  0Ah    BYTE    media ID byte
  6114.  0Bh    WORD    number of sectors per FAT
  6115. ---DOS 3+---
  6116.  0Dh    WORD    number of sectors per track
  6117.  0Fh    WORD    number of heads
  6118.  11h    DWORD    number of hidden sectors
  6119.  15h 11 BYTEs    reserved    
  6120. ---DOS 4+ ---
  6121.  15h    DWORD    total number of sectors if word at 08h contains zero
  6122.  19h  6 BYTEs    ???
  6123.  1Fh    WORD    number of cylinders
  6124.  21h    BYTE    device type
  6125.  22h    WORD    device attributes (removable or not, etc)
  6126. ----------2154-------------------------------
  6127. INT 21 - DOS 2+ - GET VERIFY FLAG
  6128.     AH = 54h
  6129. Return: AL = verify flag
  6130.         00h off
  6131.         01h on (all disk writes verified after writing)
  6132. SeeAlso: AH=2Eh
  6133. ----------2155-------------------------------
  6134. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  6135.     AH = 55h
  6136.     DX = segment at which to create new PSP
  6137.     SI = (DOS 3+) value to place in memory size field at DX:[0002h]
  6138. Return: CF clear if successful
  6139.  
  6140. Notes:    creates a "child" PSP rather than making an exact copy of the current
  6141.       PSP; the new PSP's parent pointer is set to the current PSP and the
  6142.       reference count for each inherited file is incremented
  6143.     (DOS 2+) sets current PSP to DX
  6144.     (DOS 3+) marks "no inherit" file handles as closed in child PSP
  6145. SeeAlso: AH=26h,AH=50h
  6146. ----------2156-------------------------------
  6147. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  6148.     AH = 56h
  6149.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  6150.     ES:DI -> ASCIZ new filename (no wildcards)
  6151.     CL = attribute mask (server call only, see below)
  6152. Return: CF clear if successful
  6153.     CF set on error
  6154.         AX = error code (02h,03h,05h,11h) (see AH=59h)
  6155. Notes:    allows move between directories on same logical volume
  6156.     does not set the archive attribute (see AX=4300h), which results in
  6157.       incremental backups not backing up the file under its new name
  6158.     open files should not be renamed
  6159.     (DOS 3+) allows renaming of directories
  6160.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  6161.       error 12h (no more files) is returned on success, and both source and
  6162.       destination specs must be canonical (as returned by AH=60h).
  6163.       Wildcards in the destination are replaced by the corresponding char
  6164.       of each source file being renamed.  Under DOS 3.x, the call will fail
  6165.       if the destination wildcard is *.* or equivalent.  When invoked via
  6166.       AX=5D00h, only those files matching the attribute mask in CL are
  6167.       renamed.
  6168. SeeAlso: AH=17h,AX=4301h,AH=60h,AX=5D00h
  6169. ----------215700-----------------------------
  6170. INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
  6171.     AX = 5700h
  6172.     BX = file handle
  6173. Return: CF clear if successful
  6174.         CX = file's time
  6175.         bits 15-11: hours (0-23)
  6176.              10-5:  minutes
  6177.               4-0:  seconds/2
  6178.         DX = file's date
  6179.         bits 15-9: year - 1980
  6180.               8-5: month
  6181.               4-0: day
  6182.     CF set on error
  6183.         AX = error code (01h,06h) (see AH=59h)
  6184. SeeAlso: AX=5701h
  6185. ----------215701-----------------------------
  6186. INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
  6187.     AX = 5701h
  6188.     BX = file handle
  6189.     CX = new time (see AX=5700h)
  6190.     DX = new date (see AX=5700h)
  6191. Return: CF clear if successful
  6192.     CF set on error
  6193.         AX = error code (01h,06h) (see AH=59h)
  6194. SeeAlso: AX=5700h
  6195. ----------215702-----------------------------
  6196. INT 21 - DOS 4.x only - GET ???
  6197.     AX = 5702h
  6198.     BX = ??? (0000h through 0004h)
  6199.     DS:SI -> ???
  6200.     ES:DI -> result buffer
  6201.     CX = size of result buffer
  6202. Return: CX = size of returned data
  6203. SeeAlso: AX=5703h,AX=5704h
  6204. ----------215703-----------------------------
  6205. INT 21 - DOS 4.x only - GET ???
  6206.     AX = 5703h
  6207.     BX = file handle (only 0000h through 0004h valid)
  6208.     DS:SI -> ??? passed through to INT 2F/AX=112Dh
  6209.     ES:DI -> result buffer
  6210.     CX = size of result buffer
  6211. Return: CX = size of returned data
  6212.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  6213. SeeAlso: AX=5702h,AX=5704h,INT 2F/AX=112Dh
  6214. ----------215704-----------------------------
  6215. INT 21 - DOS 4.x only - TRUNCATE OPEN FILE TO ZERO LENGTH
  6216.     AX = 5704h
  6217.     BX = file handle (only 0000h through 0004h valid)
  6218.     DS:SI -> ??? passed through to INT 2F/AX=112Dh
  6219.     ES:DI -> result buffer
  6220.     CX = size of result buffer
  6221. Return: CX = size of returned data
  6222.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  6223. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  6224. ----------2158-------------------------------
  6225. INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY
  6226.     AH = 58h
  6227.     AL = subfunction
  6228.         00h get allocation strategy
  6229.         Return: AX = current strategy
  6230.                 00h low memory first fit
  6231.                 01h low memory best fit
  6232.                 02h low memory last fit
  6233.              ---DOS 5.0---
  6234.                 40h high memory first fit
  6235.                 41h high memory best fit
  6236.                 42h high memory last fit
  6237.                 80h first fit, try high then low memory
  6238.                 81h best fit, try high then low memory
  6239.                 82h last fit, try high then low memory
  6240.         01h set allocation strategy
  6241.         BL = new allocation strategy (see above)
  6242.         BH = 0 (DOS 5.0)
  6243.         02h (DOS 5.0) get UMB link state
  6244.         Return: AL = 00h UMBs not part of DOS memory chain
  6245.                = 01h UMBs in DOS memory chain
  6246.         03h (DOS 5.0) set UMB link state
  6247.         BX = 0000h remove UMBs from DOS memory chain
  6248.            = 0001h add UMBs to DOS memory chain
  6249. Return: CF clear if successful
  6250.     CF set on error
  6251.         AX = error code (01h) (see AH=59h)
  6252. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  6253.       2 or greater means last fit
  6254.     the Get subfunction returns the last value set
  6255.     a program which changes the allocation strategy should restore it
  6256.       before terminating
  6257.     DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
  6258. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
  6259. ----------2158CC-----------------------------
  6260. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  6261.     AX = 58CCh
  6262. Return: CF clear if resident
  6263. SeeAlso: AX=5252h,AX=6969h
  6264. ----------2159--BX0000-----------------------
  6265. INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
  6266.     AH = 59h
  6267.     BX = 0000h
  6268. Return: AX = extended error code (see below)
  6269.     BH = error class (see below)
  6270.     BL = recommended action (see below)
  6271.     CH = error locus (see below)
  6272.     CL, DX, SI, DI, BP, DS, and ES destroyed
  6273. Notes:    functions available under DOS 2.x map the true DOS 3+ error code into
  6274.       one supported under DOS 2.x
  6275.     you should call this function to retrieve the true error code when an
  6276.       FCB or DOS 2.x call returns an error
  6277. SeeAlso: AX=5D0Ah,INT 2F/AX=122Dh
  6278.  
  6279. Values for extended error code:
  6280.     00h no error
  6281.     01h function number invalid
  6282.     02h file not found
  6283.     03h path not found
  6284.     04h too many open files (no handles available)
  6285.     05h access denied
  6286.     06h invalid handle
  6287.     07h memory control block destroyed
  6288.     08h insufficient memory
  6289.     09h memory block address invalid
  6290.     0Ah environment invalid (usually >32K in length)
  6291.     0Bh format invalid
  6292.     0Ch access code invalid
  6293.     0Dh data invalid
  6294.     0Eh reserved
  6295.     0Fh invalid drive
  6296.     10h attempted to remove current directory
  6297.     11h not same device
  6298.     12h no more files
  6299. ---DOS 3+---
  6300.     13h disk write-protected
  6301.     14h unknown unit
  6302.     15h drive not ready
  6303.     16h unknown command
  6304.     17h data error (CRC)
  6305.     18h bad request structure length
  6306.     19h seek error
  6307.     1Ah unknown media type (non-DOS disk)
  6308.     1Bh sector not found
  6309.     1Ch printer out of paper
  6310.     1Dh write fault
  6311.     1Eh read fault
  6312.     1Fh general failure
  6313.     20h sharing violation
  6314.     21h lock violation
  6315.     22h disk change invalid
  6316.         ES:DI -> ASCIZ volume label of required disk
  6317.     23h FCB unavailable
  6318.     24h sharing buffer overflow
  6319.     25h (DOS 4+) code page mismatch
  6320.     26h (DOS 4+) cannot complete file operation (out of input)
  6321.     27h (DOS 4+) insufficient disk space
  6322.     28h-31h reserved
  6323.     32h network request not supported
  6324.     33h remote computer not listening
  6325.     34h duplicate name on network
  6326.     35h network name not found
  6327.     36h network busy
  6328.     37h network device no longer exists
  6329.     38h network BIOS command limit exceeded
  6330.     39h network adapter hardware error
  6331.     3Ah incorrect response from network
  6332.     3Bh unexpected network error
  6333.     3Ch incompatible remote adapter
  6334.     3Dh print queue full
  6335.     3Eh queue not full
  6336.     3Fh not enough space to print file
  6337.     40h network name was deleted
  6338.     41h network: Access denied
  6339.     42h network device type incorrect
  6340.     43h network name not found
  6341.     44h network name limit exceeded
  6342.     45h network BIOS session limit exceeded
  6343.     46h temporarily paused
  6344.     47h network request not accepted
  6345.     48h network print/disk redirection paused
  6346.     49h (LANtastic) invalid network version
  6347.     4Ah (LANtastic) account expired
  6348.     4Bh (LANtastic) password expired
  6349.     4Ch (LANtastic) login attempt invalid at this time
  6350.     4Dh (LANtastic v3+) disk limit exceeded on network node
  6351.     4Eh (LANtastic v3+) not logged in to network node
  6352.     4Fh reserved
  6353.     50h file exists
  6354.     51h reserved
  6355.     52h cannot make directory
  6356.     53h fail on INT 24h
  6357.     54h (DOS 3.3+) too many redirections
  6358.     55h (DOS 3.3+) duplicate redirection
  6359.     56h (DOS 3.3+) invalid password
  6360.     57h (DOS 3.3+) invalid parameter
  6361.     58h (DOS 3.3+) network write fault
  6362.     59h (DOS 4+) function not supported on network
  6363.     5Ah (DOS 4+) required system component not installed
  6364.  
  6365. Values for Error Class:
  6366.     01h out of resource (storage space or I/O channels)
  6367.     02h temporary situation (file or record lock)
  6368.     03h authorization (denied access)
  6369.     04h internal (system software bug)
  6370.     05h hardware failure
  6371.     06h system failure (configuration file missing or incorrect)
  6372.     07h application program error
  6373.     08h not found
  6374.     09h bad format
  6375.     0Ah locked
  6376.     0Bh media error
  6377.     0Ch already exists
  6378.     0Dh unknown
  6379.  
  6380. Values for Suggested Action:
  6381.     01h retry
  6382.     02h delayed retry
  6383.     03h prompt user to reenter input
  6384.     04h abort after cleanup
  6385.     05h immediate abort
  6386.     06h ignore
  6387.     07h retry after user intervention
  6388.  
  6389. Values for Error Locus:
  6390.     01h unknown or not appropriate
  6391.     02h block device (disk error)
  6392.     03h network related
  6393.     04h serial device (timeout)
  6394.     05h memory related
  6395. ----------215A-------------------------------
  6396. INT 21 - DOS 3+ - CREATE TEMPORARY FILE
  6397.     AH = 5Ah
  6398.     CX = file attribute (see AX=4301h)
  6399.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  6400.         generated filename
  6401. Return: CF clear if successful
  6402.         AX = file handle opened for read/write in compatibility mode
  6403.         DS:DX pathname extended with generated name for temporary file
  6404.     CF set on error
  6405.         AX = error code (03h,04h,05h) (see AH=59h)
  6406. Notes:    creates a file with a unique name which must be explicitly deleted
  6407.     COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  6408.       wraps around to the end of the segment
  6409. SeeAlso: AH=3Ch,AH=5Bh
  6410. ----------215B-------------------------------
  6411. INT 21 - DOS 3+ - CREATE NEW FILE
  6412.     AH = 5Bh
  6413.     CX = file attribute (see AX=4301h)
  6414.     DS:DX -> ASCIZ filename
  6415. Return: CF clear if successful
  6416.         AX = file handle opened for read/write in compatibility mode
  6417.     CF set on error
  6418.         AX = error code (03h,04h,05h,50h) (see AH=59h)
  6419. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  6420.       rather than truncating it; this permits its use in creating semaphore
  6421.       files because it is an atomic "test and set" operation
  6422. SeeAlso: AH=3Ch,AH=5Ah
  6423. ----------215C-------------------------------
  6424. INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
  6425.     AH = 5Ch
  6426.     AL = subfunction
  6427.         00h lock region of file
  6428.         01h unlock region of file
  6429.     BX = file handle
  6430.     CX:DX = start offset of region within file
  6431.     SI:DI = length of region in bytes
  6432. Return: CF clear if successful
  6433.     CF set on error
  6434.         AX = error code (01h,06h,21h,24h) (see AH=59h)
  6435. Notes:    error returned unless SHARE or network installed
  6436.     an unlock call must specify the same region as some prior lock call
  6437.     locked regions become entirely inaccessible to other processes
  6438.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  6439.       handles inherited by child processes (see AH=4Bh) do not
  6440. SeeAlso: AX=440Bh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  6441. ----------215D00-----------------------------
  6442. INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
  6443.     AX = 5D00h
  6444.     DS:DX -> DOS parameter list (see below)
  6445.     DPL contains all register values for a call to INT 21h
  6446. Return: as appropriate for function being called
  6447. Notes:    does not check AH.  Out of range values will crash the system
  6448.     executes using specified computer ID and process ID
  6449.     sharing delay loops skipped
  6450.     a special sharing mode is enabled
  6451.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h)
  6452.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  6453.       DELETE (AH=41h), and RENAME (AH=56h)
  6454.     functions which take filenames require canonical names (as returned
  6455.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  6456. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  6457.  
  6458. Format of DOS parameter list:
  6459. Offset    Size    Description
  6460.  00h    WORD    AX 
  6461.  02h    WORD    BX
  6462.  04h    WORD    CX
  6463.  06h    WORD    DX
  6464.  08h    WORD    SI
  6465.  0Ah    WORD    DI
  6466.  0Ch    WORD    DS
  6467.  0Eh    WORD    ES
  6468.  10h    WORD    reserved (0)
  6469.  12h    WORD    computer ID (0 = current system)
  6470.  14h    WORD    process ID (PSP segment on specified computer)
  6471. ----------215D01-----------------------------
  6472. INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  6473.     AX = 5D01h
  6474.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  6475.         process ID fields used
  6476. Return: CF set on error
  6477.         AX = error code (see AH=59h)
  6478.     CF clear if successful
  6479. Notes:    flushes buffers and updates directory entries for each file which has
  6480.       been written to; if remote file, calls INT 2F/AX=1107h
  6481.     the computer ID and process ID are stored but ignored under DOS 3.3
  6482. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  6483. ----------215D02-----------------------------
  6484. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  6485.     AX = 5D02h
  6486.     DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS,
  6487.         computer ID, and process ID used
  6488.     DPL's DS:DX -> ASCIZ name of file to close
  6489. Return: CF set on error
  6490.         AX = error code (see AH=59h)
  6491.     CF clear if successful
  6492. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h)
  6493.     name must be canonical fully-qualified, such as returned by AH=60h
  6494. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  6495. ----------215D03-----------------------------
  6496. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  6497.     AX = 5D03h
  6498.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used
  6499. Return: CF set on error
  6500.         AX = error code (see AH=59h)
  6501.     CF clear if successful
  6502. Note:    error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h)
  6503. SeeAlso: AX=5D02h,AX=5D04h
  6504. ----------215D04-----------------------------
  6505. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  6506.     AX = 5D04h
  6507.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  6508.         process ID fields used
  6509. Return: CF set on error
  6510.         AX = error code (see AH=59h)
  6511.     CF clear if successful
  6512. Note:    error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h)
  6513. SeeAlso: AX=5D02h,AX=5D03h
  6514. ----------215D05-----------------------------
  6515. INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  6516.     AX = 5D05h
  6517.     DS:DX -> DOS parameter list (see AX=5D00h)
  6518.     DPL's BX = index of sharing record (see AH=52h)
  6519.     DPL's CX = index of SFT in sharing record's SFT list
  6520. Return: CF clear if successful
  6521.         ES:DI -> ASCIZ filename
  6522.         BX = network machine number of SFT's owner
  6523.         CX = number of locks held by SFT's owner
  6524.     CF set if either index out of range
  6525.         AX = 0012h (no more files)
  6526. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h]) (see AH=52h)
  6527.     names are always canonical fully-qualified, such as returned by AH=60h
  6528. SeeAlso: AH=5Ch,AH=60h 
  6529. ----------215D06-----------------------------
  6530. INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  6531.     AX = 5D06h
  6532. Return: CF set on error
  6533.        AX = error code (see AH=59h)
  6534.     CF clear if successful
  6535.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  6536.         (critical error flag is first byte)
  6537.         CX = size in bytes of area which must be swapped while in DOS
  6538.         DX = size in bytes of area which must always be swapped
  6539. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  6540.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  6541.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  6542.       DOS 2.x by forcing use of correct stack
  6543.     swapping the data area allows reentering DOS unless DOS is in a
  6544.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  6545.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  6546. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  6547.  
  6548. Format of DOS 3.10-3.30 Swappable Data Area:
  6549. Offset    Size    Description
  6550.  00h    BYTE    critical error flag
  6551.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  6552.  02h    BYTE    drive on which current critical error occurred, or FFh
  6553.  03h    BYTE    locus of last error
  6554.  04h    WORD    extended error code of last error
  6555.  06h    BYTE    suggested action for last error
  6556.  07h    BYTE    class of last error
  6557.  08h    DWORD    ES:DI pointer for last error
  6558.  0Ch    DWORD    current DTA
  6559.  10h    WORD    current PSP
  6560.  12h    WORD    stores SP across an INT 23
  6561.  14h    WORD    return code from last process termination (zerod after reading
  6562.         with AH=4Dh)
  6563.  16h    BYTE    current drive
  6564.  17h    BYTE    extended break flag
  6565. ---remainder need only be swapped if in DOS---
  6566.  18h    WORD    value of AX on call to INT 21
  6567.  1Ah    WORD    PSP segment for sharing/network
  6568.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  6569.  1Eh    WORD    first usable memory block found when allocating memory
  6570.  20h    WORD    best usable memory block found when allocating memory
  6571.  22h    WORD    last usable memory block found when allocating memory
  6572.  24h    WORD    memory size in paragraphs (used only during initialization)
  6573.  26h    WORD    ???
  6574.  28h    BYTE    INT 24 returned Fail
  6575.  29h    BYTE    bit flags for allowable actions on INT 24
  6576.  2Ah    BYTE    ??? flag
  6577.  2Bh    BYTE    FFh if Ctrl-Break termination, 00h otherwise
  6578.  2Ch    BYTE    ??? flag of some kind
  6579.  2Dh    BYTE    ??? (doesn't seem to be referenced)
  6580.  2Eh    BYTE    day of month
  6581.  2Fh    BYTE    month
  6582.  30h    WORD    year - 1980
  6583.  32h    WORD    number of days since 1-1-1980
  6584.  34h    BYTE    day of week (0 = Sunday)
  6585.  35h    BYTE    working SFT pointer at SDA+2AAh is valid ???
  6586.  36h    BYTE    safe to call INT 28 if nonzero
  6587.  37h    BYTE    flag: if nonzero, INT 24 abort turned into INT 24 fail
  6588.         (set only during process termination)
  6589.  38h 26 BYTEs    device driver request header
  6590.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  6591.  56h 22 BYTEs    device driver request header
  6592.  6Ch 22 BYTEs    device driver request header
  6593.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  6594.  83h    BYTE    ??? apparently not referenced by kernel
  6595.  84h  3 BYTEs    24-bit user number (see AH=30h)
  6596.  87h    BYTE    OEM number (see AH=30h)
  6597.  88h  2 BYTEs    ???
  6598.  8Ah  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  6599.  90h    BYTE    ??? buffer for single-byte I/O functions
  6600.  91h    BYTE    ??? apparently not referenced by kernel
  6601.  92h 128 BYTEs    buffer for filename
  6602. 112h 128 BYTEs    buffer for filename
  6603. 192h 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  6604. 1A7h 32 BYTEs    directory entry for found file
  6605. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  6606. 218h 11 BYTEs    FCB-format filename for device name comparison
  6607. 223h    BYTE    unused???
  6608. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  6609. 22Fh  2 BYTEs    ???
  6610. 231h    WORD    ???
  6611. 233h  5 BYTEs    ???
  6612. 238h    BYTE    extended FCB file attribute
  6613. 239h    BYTE    type of FCB (00h regular, FFh extended)
  6614. 23Ah    BYTE    directory search attributes
  6615. 23Bh    BYTE    file open mode???
  6616. 23Ch    BYTE    ??? flag bits 0 and 4
  6617. 23Dh    BYTE    ??? flag or counter
  6618. 23Eh    BYTE    ??? flag
  6619. 23Fh    BYTE    flag indicating how DOS function was invoked
  6620.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  6621. 240h    BYTE    ???
  6622. 241h    BYTE    ??? flag
  6623. 242h    BYTE    flag: 00h if read, 01h if write
  6624. 243h    BYTE    drive number for ???
  6625. 244h    BYTE    ???
  6626. 245h    BYTE    ??? flag or counter
  6627. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  6628. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  6629. 248h    BYTE    ??? flag or counter
  6630. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  6631. 24Ah    BYTE    ??? flag
  6632. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  6633.         (normally E5h, but 00h as described under INT 21/AH=13h)
  6634. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  6635. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  6636. 254h    WORD    stores SP across INT 24
  6637. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  6638. 25Ah    WORD    ???
  6639. 25Ch    WORD    ??? temp
  6640. 25Eh    WORD    ??? flag (only low byte referenced)
  6641. 260h    WORD    ??? temp
  6642. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  6643. 263h    BYTE    ??? (doesn't seem to be referenced)
  6644. 264h    DWORD    pointer to device header
  6645. 268h    DWORD    pointer to current SFT
  6646. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  6647. 270h    DWORD    pointer to caller's FCB
  6648. 274h    WORD    number of SFT to which file being opened will refer
  6649. 276h    WORD    temporary storage for file handle
  6650. 278h    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  6651. 27Ch    WORD    offset in DOS DS of first filename argument
  6652. 27Eh    WORD    offset in DOS DS of second filename argument
  6653. 280h    WORD    offset of last component in pathname or FFFFh
  6654. 282h    WORD    ??? offset of transfer address???
  6655. 284h    WORD    ??? relative cluster within file being accessed ???
  6656. 286h    WORD    ??? absolute cluster number being accessed ???
  6657. 288h    WORD    ??? current sector number
  6658. 28Ah    WORD    ??? current cluster number
  6659. 28Ch    WORD    ??? current offset in file DIV bytes per sector
  6660. 28Eh  2 BYTEs    ??? 
  6661. 290h    WORD    ??? current offset in file MOD bytes per sector
  6662. 292h    DWORD    current offset in file
  6663. 296h    WORD    ???
  6664. 298h    WORD    ???
  6665. 29Ah    WORD    ???
  6666. 29Ch    WORD    ???
  6667. 29Eh    WORD    ???
  6668. 2A0h    WORD    ???
  6669. 2A2h    DWORD    number of bytes appended to file
  6670. 2A6h    DWORD    pointer to ??? disk buffer
  6671. 2AAh    DWORD    pointer to working SFT
  6672. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  6673. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  6674. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  6675. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  6676.         also switched to for duration of INT 24
  6677. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  6678.         (see AH=4Eh)
  6679. 2CDh 32 BYTEs    directory entry for file being renamed
  6680. 2EDh 331 BYTEs    critical error stack
  6681.    403h     35 BYTEs scratch SFT
  6682. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  6683. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  6684. ---DOS 3.2,3.3 only---
  6685. 738h    BYTE    device driver lookahead flag (see AH=64h)
  6686. 739h    BYTE    ??? looks like a drive number
  6687. 73Ah    BYTE    ??? flag of some kind
  6688. 73Ah    BYTE    ???
  6689. ----------215D07-----------------------------
  6690. INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  6691.     AX = 5D07h
  6692. Return: DL = mode
  6693.         00h redirected output is combined
  6694.         01h redirected output in separate print jobs
  6695. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  6696. ----------215D08-----------------------------
  6697. INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  6698.     AX = 5D08h
  6699.     DL = mode
  6700.         00h redirected output is combined
  6701.         01h redirected output placed in separate jobs, start new print job
  6702.         now
  6703. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  6704. ----------215D09-----------------------------
  6705. INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  6706.     AX = 5D09h
  6707. Note:    forces redirected printer output to be printed, and starts a new print
  6708.       job
  6709. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  6710. ----------215D0A-----------------------------
  6711. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  6712.     AX = 5D0Ah
  6713.     DS:DX -> 11-word DOS parameter list (see AX=5D00h)
  6714. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  6715.       DX,DI, and ES in corresponding registers
  6716. Note:    documented for DOS 5+, but undocumented in earlier versions
  6717. SeeAlso: AH=59h
  6718. ----------215D0B-----------------------------
  6719. INT 21 U - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  6720.     AX = 5D0Bh
  6721. Return: CF set on error
  6722.         AX = error code (see AH=59h)
  6723.     CF clear if successful
  6724.         DS:SI -> swappable data area list (see below)
  6725. Note:    copying and restoring the swappable data areas allows DOS to be
  6726.       reentered unless it is in a critical section delimited by calls to
  6727.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  6728. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  6729.  
  6730. Format of DOS 4.x swappable data area list:
  6731. Offset    Size    Description
  6732.  00h    WORD    count of data areas
  6733.  02h  N BYTEs    "count" copies of data area record
  6734.         Offset    Size    Description
  6735.          00h    DWORD    address
  6736.          04h    WORD    length and type
  6737.                 bit 15 set if swap always, clear if swap in DOS
  6738.                 bits 14-0: length in bytes
  6739.  
  6740. Format of DOS 4.0-5.0 swappable data area:
  6741. Offset    Size    Description
  6742.  00h    BYTE    critical error flag
  6743.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  6744.  02h    BYTE    drive on which current critical error occurred or FFh
  6745.  03h    BYTE    locus of last error
  6746.  04h    WORD    extended error code of last error
  6747.  06h    BYTE    suggested action for last error
  6748.  07h    BYTE    class of last error
  6749.  08h    DWORD    ES:DI pointer for last error
  6750.  0Ch    DWORD    current DTA
  6751.  10h    WORD    current PSP
  6752.  12h    WORD    stores SP across an INT 23
  6753.  14h    WORD    return code from last process termination (zerod after reading
  6754.         with AH=4Dh)
  6755.  16h    BYTE    current drive
  6756.  17h    BYTE    extended break flag
  6757.  18h  2 BYTEs    ???
  6758. ---remainder need only be swapped if in DOS---
  6759.  1Ah    WORD    value of AX on call to INT 21
  6760.  1Ch    WORD    PSP segment for sharing/network
  6761.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  6762.  20h    WORD    first usable memory block found when allocating memory
  6763.  22h    WORD    best usable memory block found when allocating memory
  6764.  24h    WORD    last usable memory block found when allocating memory
  6765.  26h    WORD    memory size in paragraphs (used only during initialization)
  6766.  28h    WORD    ???
  6767.  2Ah    BYTE    ???
  6768.  2Bh    BYTE    ???
  6769.  2Ch    BYTE    ???
  6770.  2Dh    BYTE    ???
  6771.  2Eh    BYTE    ???
  6772.  2Fh    BYTE    ??? (doesn't seem to be referenced)
  6773.  30h    BYTE    day of month
  6774.  31h    BYTE    month
  6775.  32h    WORD    year - 1980
  6776.  34h    WORD    number of days since 1-1-1980
  6777.  36h    BYTE    day of week (0 = Sunday)
  6778.  37h    BYTE    ???
  6779.  38h    BYTE    ???
  6780.  39h    BYTE    ???
  6781.  38h 30 BYTEs    device driver request header
  6782.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  6783.  5Ch 22 BYTEs    device driver request header
  6784.  72h 30 BYTEs    device driver request header
  6785.  90h  6    BYTEs    ???
  6786.  96h  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  6787.  9Ch  2 BYTEs    ???
  6788.  9Eh 128 BYTEs    buffer for filename
  6789. 11Eh 128 BYTEs    buffer for filename
  6790. 19Eh 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  6791. 1B3h 32 BYTEs    directory entry for found file
  6792. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  6793. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  6794. 236h    BYTE    ???
  6795. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  6796. 242h  2 BYTEs    ???
  6797. 244h    WORD    ???
  6798. 246h  5 BYTEs    ???
  6799. 24Bh    BYTE    extended FCB file attributes
  6800. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  6801. 24Dh    BYTE    directory search attributes
  6802. 24Eh    BYTE    file open mode
  6803. 24Fh    BYTE    ??? flag bits
  6804. 250h    BYTE    ??? flag or counter
  6805. 251h    BYTE    ??? flag
  6806. 252h    BYTE    flag indicating how DOS function was invoked
  6807.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  6808. 253h    BYTE    ???
  6809. 254h    BYTE    ???
  6810. 255h    BYTE    ???
  6811. 256h    BYTE    ???
  6812. 257h    BYTE    ???
  6813. 258h    BYTE    ???
  6814. 259h    BYTE    ???
  6815. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  6816. 25Bh    BYTE    ???
  6817. 25Ch    BYTE    type of process termination (00h-03h)
  6818. 25Dh    BYTE    ???
  6819. 25Eh    BYTE    ???
  6820. 25Fh    BYTE    ???
  6821. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  6822. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  6823. 268h    WORD    stores SP???
  6824. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  6825. 26Eh    WORD    segment of disk buffer
  6826. 270h    WORD    ???
  6827. 272h    WORD    ???
  6828. 274h    WORD    ???
  6829. 276h    WORD    ???
  6830. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  6831. 279h    BYTE    ??? (doesn't seem to be referenced)
  6832. 27Ah    DWORD    pointer to ???
  6833. 27Eh    DWORD    pointer to current SFT
  6834. 282h    DWORD    pointer to current directory structure for drive being accessed
  6835. 286h    DWORD    pointer to caller's FCB
  6836. 28Ah    WORD    number of SFT to which file being opened will refer
  6837. 28Ch    WORD    temporary storage for file handle
  6838. 28Eh    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  6839. 292h    WORD    offset in DOS DS of first filename argument
  6840. 294h    WORD    offset in DOS DS of second filename argument
  6841. 296h    WORD    ???
  6842. 298h    WORD    ???
  6843. 29Ah    WORD    ???
  6844. 29Ch    WORD    ???
  6845. 29Eh    WORD    ???
  6846. 2A0h    WORD    ???
  6847. 2A2h    WORD    ??? directory cluster number???
  6848. 2A4h    DWORD    ???
  6849. 2A8h    DWORD    ???
  6850. 2ACh    WORD    ???
  6851. 2AEh    DWORD    offset in file???
  6852. 2B2h    WORD    ???
  6853. 2B4h    WORD    bytes in partial sector
  6854. 2B6h    WORD    number of sectors
  6855. 2B8h    WORD    ???
  6856. 2BAh    WORD    ???
  6857. 2BCh    WORD    ???
  6858. 2BEh    DWORD    number of bytes appended to file
  6859. 2C2h    DWORD    pointer to ??? disk buffer
  6860. 2C6h    DWORD    pointer to ??? SFT
  6861. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  6862. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  6863. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  6864. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  6865.         also switched to for duration of INT 24
  6866. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  6867. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  6868.         performed, and 01h or 03h by INT 21/AX=6C00h)
  6869. 2D7h    WORD    ??? apparently unused
  6870. 2D9h    DWORD    stored ES:DI for AX=6C00h
  6871. 2DDh    WORD    extended file open action code (see AX=6C00h)
  6872. 2DFh    WORD    extended file open attributes (see AX=6C00h)
  6873. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  6874. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  6875. 2E7h    WORD    ???
  6876. 2E9h    WORD    ???
  6877. 2EBh    BYTE    ???
  6878. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  6879. 2EEh    WORD    ???
  6880. 2F0h    BYTE    ???
  6881. 2F1h    WORD    ??? bit flags
  6882. 2F3h    DWORD    pointer to user-supplied filename
  6883. 2F7h    DWORD    pointer to ???
  6884. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  6885. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  6886. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  6887. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  6888.         (see AH=4Eh)
  6889. 315h 32 BYTEs    directory entry for file being renamed
  6890. 335h 331 BYTEs    critical error stack
  6891. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  6892. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  6893. 780h    BYTE    device driver lookahead flag (see AH=64h)
  6894. 781h    BYTE    ??? looks like a drive number
  6895. 782h    BYTE    ??? flag of some kind
  6896. 783h    BYTE    ???
  6897. 784h    WORD    ???
  6898. 786h    WORD    ???
  6899. 788h    WORD    ???
  6900. 78Ah    WORD    ???
  6901. ----------215E00-----------------------------
  6902. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  6903.     AX = 5E00h
  6904.     DS:DX -> 16-byte buffer for ASCIZ machine name
  6905. Return: CF clear if successful
  6906.         CH = validity
  6907.         00h name invalid
  6908.         nonzero valid
  6909.             CL = NetBIOS number for machine name
  6910.             DS:DX buffer filled with blank-paded name
  6911.     CF set on error
  6912.         AX = error code (01h) (see AH=59h)
  6913. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  6914. SeeAlso: AX=5E01h
  6915. ----------215E01CH00-------------------------
  6916. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  6917.     AX = 5E01h
  6918.     CH = 00h undefine name (make it invalid)
  6919.        <> 0     define name
  6920.     CL = name number
  6921.     DS:DX -> 15-character blank-padded ASCIZ name
  6922. SeeAlso: AX=5E00h
  6923. ----------215E02-----------------------------
  6924. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  6925.     AX = 5E02h
  6926.     BX = redirection list index (see AX=5F02h)
  6927.     CX = length of setup string
  6928.     DS:SI -> setup string
  6929. Return: CF clear if successful
  6930.     CF set on error
  6931.         AX = error code (01h) (see AH=59h)
  6932. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  6933. ----------215E03-----------------------------
  6934. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  6935.     AX = 5E03h
  6936.     BX = redirection list index (see AX=5F02h)
  6937.     ES:DI -> 64-byte buffer for setup string
  6938. Return: CF clear if successful
  6939.         CX = length of setup string
  6940.         ES:DI buffer filled
  6941.     CF set on error
  6942.         AX = error code (01h) (see AH=59h)
  6943. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  6944. ----------215E04-----------------------------
  6945. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  6946.     AX = 5E04h
  6947.     BX = redirection list index (see AX=5F02h)
  6948.     DX = mode
  6949.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  6950. Return: CF set on error
  6951.         AX = error code (see AH=59h)
  6952.     CF clear if successful
  6953. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  6954. SeeAlso: AX=5E05h,INT 2F/AX=111Fh
  6955. ----------215E05-----------------------------
  6956. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  6957.     AX = 5E05h
  6958.     BX = redirection list index (see AX=5F02h)
  6959. Return: CF set on error
  6960.         AX = error code (see AH=59h)
  6961.     CF clear if successful
  6962.         DX = printer mode (see AX=5E04h)
  6963. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  6964. SeeAlso: AX=5E04h,INT 2F/AX=111Fh
  6965. ----------215F00-----------------------------
  6966. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  6967.     AX = 5F00h
  6968.     BL = redirection type
  6969.         03h printer
  6970.         04h disk drive
  6971. Return: CF set on error
  6972.         AX = error code (see AH=59h)
  6973.     CF clear if successful
  6974.         BH = redirection state
  6975.         00h off
  6976.         01h on
  6977. SeeAlso: AX=5F01h
  6978. ----------215F01-----------------------------
  6979. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  6980.     AX = 5F01h
  6981.     BL = redirection type
  6982.         03h printer
  6983.         04h disk drive
  6984.     BH = redirection state
  6985.         00h off
  6986.         01h on
  6987. Return: CF set on error
  6988.         AX = error code (see AH=59h)
  6989.     CF clear if successful
  6990. Note:    when redirection is off, the local device (if any) rather than the
  6991.       remote device is used
  6992. SeeAlso: AX=5F00h,INT 2F/AX=111Eh
  6993. ----------215F02-----------------------------
  6994. INT 21 - DOS 3.1+ network, Banyan VINES, PC-NFS - GET REDIRECTION LIST ENTRY
  6995.     AX = 5F02h
  6996.     BX = redirection list index
  6997.     DS:SI -> 16-byte buffer for ASCIZ device name
  6998.     ES:DI -> 128-byte buffer for ASCIZ network name
  6999. Return: CF clear if successful
  7000.         BH = device status
  7001.         00h valid
  7002.         01h invalid
  7003.         BL = device type
  7004.         03h printer
  7005.         04h disk drive
  7006.         CX = user data previously set with AX=5F03h
  7007.         DS:SI and ES:DI buffers filled
  7008.         DX,BP destroyed
  7009.     CF set on error
  7010.         AX = error code (01h,12h) (see AH=59h)
  7011. Notes:    this function is passed through to INT 2F/AX=111Eh
  7012.     error code 12h is returned if BX is greater than the size of the list
  7013. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  7014. ----------215F03-----------------------------
  7015. INT 21 - DOS 3.1+ network, Banyan VINES - REDIRECT DEVICE
  7016.     AX = 5F03h
  7017.     BL = device type
  7018.         03h printer
  7019.         04h disk drive
  7020.     CX = user data to save
  7021.     DS:SI -> ASCIZ local device name (16 bytes max)
  7022.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  7023. Return: CF clear if successful
  7024.     CF set on error
  7025.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  7026. Note:    if device type is disk drive, DS:SI must point at either a null string
  7027.       or a string consisting the drive letter followed by a colon; if a
  7028.       null string, the network attempts to access the destination without
  7029.       redirecting a local drive
  7030. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh
  7031. ----------215F04-----------------------------
  7032. INT 21 - DOS 3.1+ network, Banyan VINES - CANCEL REDIRECTION
  7033.     AX = 5F04h
  7034.     DS:SI -> ASCIZ device name or path
  7035. Return: CF clear if successful
  7036.     CF set on error
  7037.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  7038. Note:    the DS:SI string must be either a local device name, a drive letter
  7039.       followed by a colon, or a network directory beginning with two
  7040.       backslashes
  7041. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  7042. ----------215F05-----------------------------
  7043. INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY
  7044.     AX = 5F05h
  7045.     BX = redirection list index
  7046.     DS:SI -> buffer for ASCIZ source device name
  7047.     ES:DI -> buffer for destination ASCIZ network path
  7048. Return: CF set on error
  7049.         AX = error code (see AH=59h)
  7050.     CF clear if successful
  7051.         BH = device status flag (bit 0 clear if valid)
  7052.         BL = device type (03h if printer, 04h if drive)
  7053.         CX = stored parameter value (user data)
  7054.         BP = NETBIOS local session number
  7055.         DS:SI buffer filled
  7056.         ES:DI buffer filled
  7057. Notes:    the local session number allows sharing the redirector's session number
  7058.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  7059.       to correctly recover from errors
  7060. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  7061. ----------215F05-----------------------------
  7062. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  7063.     AX = 5F05h
  7064.     DL = drive number (0=A:)
  7065.     DS:SI -> ASCIZ name of the object to map the drive to
  7066. Return: CF set on error
  7067.         AX = error code (see AH=59h)
  7068.     CF clear if successful
  7069. SeeAlso: AX=5F06h"STARLITE"
  7070. ----------215F06-----------------------------
  7071. INT 21 U - Network - GET REDIRECTION LIST???
  7072.     AX = 5F06h
  7073.     ???
  7074. Return: ???
  7075. Note:    appears to be similar to AX=5F02h and AX=5F05h
  7076. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  7077. ----------215F06-----------------------------
  7078. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  7079.     AX = 5F06h
  7080.     DL = drive to be unmapped (0=A:)
  7081. Return: CF set on error
  7082.         AX = error code (see AH=59h)
  7083.     CF clear if successful
  7084. SeeAlso: AX=5F05h"STARLITE"
  7085. ----------215F07-----------------------------
  7086. INT 21 - DOS 5.0 - ENABLE DRIVE
  7087.     AX = 5F07h
  7088.     DL = drive number (0=A:)
  7089. Return: CF clear if successful
  7090.     CF set on error
  7091.         AX = error code (0Fh) (see AH=59h)
  7092. Note:    simply sets the "valid" bit in the drive's CDS
  7093. SeeAlso: AH=52h,AX=5F08h"DOS"
  7094. ----------215F07-----------------------------
  7095. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  7096.     AX = 5F07h
  7097.     DS:SI -> ASCIZ name of object to offer to network
  7098.     ES:DI -> ASCIZ name under which object will be known on the network
  7099.         MUST begin with three slashes
  7100. Return: CF set on error
  7101.         AX = error code (see AH=59h)
  7102.     CF clear if successful
  7103. SeeAlso: AX=5F08h"STARLITE"
  7104. ----------215F08-----------------------------
  7105. INT 21 - DOS 5.0 - DISABLE DRIVE
  7106.     AX = 5F08h
  7107.     DL = drive number (0=A:)
  7108. Return: CF clear if successful
  7109.     CF set on error
  7110.         AX = error code (0Fh) (see AH=59h)
  7111. Note:    simply clears the "valid" bit in the drive's CDS
  7112. SeeAlso: AH=52h,AX=5F07h"DOS"
  7113. ----------215F08-----------------------------
  7114. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  7115.     AX = 5F08h
  7116.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  7117. Return: CF set on error
  7118.         AX = error code (see AH=59h)
  7119.     CF clear if successful
  7120. SeeAlso: AX=5F07h"STARLITE"
  7121. ----------215F09-----------------------------
  7122. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  7123.     AX = 5F09h
  7124.     DS:DX -> ASCIZ name of the device driver to attach to
  7125. Return: CF set on error
  7126.         AX = error code (see AH=59h)
  7127.     CF clear if successful
  7128. Note:    the STARLITE distributed file system can attach to multiple networks
  7129.       simultaneously
  7130. SeeAlso: AX=5F0Ah
  7131. ----------215F0A-----------------------------
  7132. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  7133.     AX = 5F0Ah
  7134.     DS:DX -> ASCIZ name of device driver to detach from
  7135. Return: CF set on error
  7136.         AX = error code (see AH=59h)
  7137.     CF clear if successful
  7138. SeeAlso: AX=5F09h
  7139. ----------215F32-----------------------------
  7140. INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPipeInfo
  7141.     AX = 5F32h
  7142.     ???
  7143. Return: ???
  7144. SeeAlso: AX=5F33h,AX=5F34h
  7145. ----------215F33-----------------------------
  7146. INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPHandState
  7147.     AX = 5F33h
  7148.     ???
  7149. Return: ???
  7150. SeeAlso: AX=5F32h,AX=5F34h
  7151. ----------215F34-----------------------------
  7152. INT 21 - LAN Manager Enhanced DOS API local interface - DosSetNmPHandState
  7153.     AX = 5F34h
  7154.     ???
  7155. Return: ???
  7156. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  7157. ----------215F35-----------------------------
  7158. INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekNmPipe
  7159.     AX = 5F35h
  7160.     ???
  7161. Return: ???
  7162. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  7163. ----------215F36-----------------------------
  7164. INT 21 - LAN Manager Enhanced DOS API local interface - DosTransactNmPipe
  7165.     AX = 5F36h
  7166.     ???
  7167. Return: ???
  7168. SeeAlso: AX=5F34h,AX=5F37h
  7169. ----------215F37-----------------------------
  7170. INT 21 - LAN Manager Enhanced DOS API local interface - DosCallNmPipe
  7171.     AX = 5F37h
  7172.     ???
  7173. Return: ???
  7174. SeeAlso: AX=5F36h,AX=5F38h
  7175. ----------215F38-----------------------------
  7176. INT 21 - LAN Manager Enhanced DOS API local interface - DosWaitNmPipe
  7177.     AX = 5F38h
  7178.     ???
  7179. Return: ???
  7180. SeeAlso: AX=5F37h,AX=5F39h
  7181. ----------215F39-----------------------------
  7182. INT 21 - LAN Manager Enhanced DOS API local interface - DosRawReadNmPipe
  7183.     AX = 5F39h
  7184.     ???
  7185. Return: ???
  7186. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  7187. ----------215F3A-----------------------------
  7188. INT 21 - LAN Manager Enhanced DOS API local interface - DosRawWriteNmPipe
  7189.     AX = 5F3Ah
  7190.     ???
  7191. Return: ???
  7192. SeeAlso: AX=5F3Bh,INT 2F/AX=118Fh
  7193. ----------215F3B-----------------------------
  7194. INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleSetInfo
  7195.     AX = 5F3Bh
  7196.     ???
  7197. Return: ???
  7198. SeeAlso: AX=5F3Ch
  7199. ----------215F3C-----------------------------
  7200. INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleGetInfo
  7201.     AX = 5F3Ch
  7202.     ???
  7203. Return: ???
  7204. SeeAlso: AX=5F3Bh
  7205. ----------215F40-----------------------------
  7206. INT 21 - LAN Manager Enhanced DOS API local interface - NetMessageBufferSend
  7207.     AX = 5F40h
  7208.     ???
  7209. Return: ???
  7210. ----------215F42-----------------------------
  7211. INT 21 - LAN Manager Enhanced DOS API local interface - NetServiceControl
  7212.     AX = 5F42h
  7213.     ???
  7214. Return: ???
  7215. ----------215F44-----------------------------
  7216. INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaGetInfo
  7217.     AX = 5F44h
  7218.     ???
  7219. Return: ???
  7220. SeeAlso: AX=5F45h,AX=5F49h
  7221. ----------215F45-----------------------------
  7222. INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaSetInfo
  7223.     AX = 5F45h
  7224.     ???
  7225. Return: ???
  7226. SeeAlso: AX=5F44h
  7227. ----------215F46-----------------------------
  7228. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseEnum
  7229.     AX = 5F46h
  7230.     ???
  7231. Return: ???
  7232. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  7233. ----------215F47-----------------------------
  7234. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseAdd
  7235.     AX = 5F47h
  7236.     ???
  7237. Return: ???
  7238. SeeAlso: AX=5F46h,AX=5F48h
  7239. ----------215F48-----------------------------
  7240. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseDel
  7241.     AX = 5F48h
  7242.     ???
  7243. Return: ???
  7244. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  7245. ----------215F49-----------------------------
  7246. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseGetInfo
  7247.     AX = 5F49h
  7248.     ???
  7249. Return: ???
  7250. SeeAlso: AX=5F44h,AX=5F47h
  7251. ----------215F4A-----------------------------
  7252. INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteCopy
  7253.     AX = 5F4Ah
  7254.     ???
  7255. Return: ???
  7256. SeeAlso: AX=5F4Bh
  7257. ----------215F4B-----------------------------
  7258. INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteMove
  7259.     AX = 5F4Bh
  7260.     ???
  7261. Return: ???
  7262. SeeAlso: AX=5F4Ah
  7263. ----------215F4C-----------------------------
  7264. INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum
  7265.     AX = 5F4Ch
  7266.     ???
  7267. Return: ???
  7268. SeeAlso: AX=5F53h
  7269. ----------215F4D-----------------------------
  7270. INT 21 - LAN Manager Enhanced DOS API local interface - DosMakeMailslot
  7271.     AX = 5F4Dh
  7272.     ???
  7273. Return: ???
  7274. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  7275. ----------215F4E-----------------------------
  7276. INT 21 - LAN Manager Enhanced DOS API local interface - DosDeleteMailslot
  7277.     AX = 5F4Eh
  7278.     ???
  7279. Return: ???
  7280. SeeAlso: AX=5F4Dh,AX=5F4Fh
  7281. ----------215F4F-----------------------------
  7282. INT 21 - LAN Manager Enhanced DOS API local interface - DosMailslotInfo
  7283.     AX = 5F4Fh
  7284.     ???
  7285. Return: ???
  7286. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  7287. ----------215F50-----------------------------
  7288. INT 21 - LAN Manager Enhanced DOS API local interface - DosReadMailslot
  7289.     AX = 5F50h
  7290.     ???
  7291. Return: ???
  7292. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  7293. ----------215F51-----------------------------
  7294. INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekMailslot
  7295.     AX = 5F51h
  7296.     ???
  7297. Return: ???
  7298. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  7299. ----------215F52-----------------------------
  7300. INT 21 - LAN Manager Enhanced DOS API local interface - DosWriteMailslot
  7301.     AX = 5F52h
  7302.     ???
  7303. Return: ???
  7304. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  7305. ----------215F53-----------------------------
  7306. INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum2
  7307.     AX = 5F53h
  7308.     ???
  7309. Return: ???
  7310. SeeAlso: AX=5F4Ch
  7311. ----------215F80-----------------------------
  7312. INT 21 - LANtastic - GET LOGIN ENTRY
  7313.     AX = 5F80h
  7314.     BX = login entry index (0-based)
  7315.     ES:DI -> 16-byte buffer for machine name
  7316. Return: CF clear if successful
  7317.         buffer filled with machine name ("\\" prefix removed)
  7318.         DL = adapter number (v3+)
  7319.     CF set on error
  7320.         AX = error code
  7321.     BX = next login entry index (BX-1 is current index)
  7322. ----------215F81-----------------------------
  7323. INT 21 - LANtastic - LOGIN TO SERVER
  7324.     AX = 5F81h
  7325.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  7326.     BL = adapter number
  7327.         FFh try all valid adapters
  7328.         00h-03h try only specified adapter
  7329. Return: CF clear if successful
  7330.     CF set on error
  7331.         AX = error code
  7332. Note:    login path is of form "\\machine\username"
  7333. SeeAlso: AX=5F82h,AX=5F84h
  7334. ----------215F82-----------------------------
  7335. INT 21 - LANtastic - LOGOUT FROM SERVER
  7336.     AX = 5F82h
  7337.     ES:DI -> ASCIZ server name (in form "\\machine")
  7338. Return: CF clear if successful
  7339.     CF set on error
  7340.         AX = error code
  7341. SeeAlso: AX=5F81h
  7342. ----------215F83-----------------------------
  7343. INT 21 - LANtastic - GET USERNAME ENTRY
  7344.     AX = 5F83h
  7345.     BX = login entry index (0-based)
  7346.     ES:DI -> 16-byte buffer for username currently logged into
  7347. Return: CF clear if successful
  7348.         DL = adapter number (v3+)
  7349.     CF set on error
  7350.         AX = error code
  7351.     BX = next login entry index (BX-1 is current index)
  7352. ----------215F84-----------------------------
  7353. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  7354.     AX = 5F84h
  7355.     BX = server index not currently logged into
  7356.     ES:DI -> 16-byte buffer for server name which is available for logging
  7357.         in to ("\\" prefix omitted)
  7358. Return: CF clear if successful
  7359.         DL = adapter number to non-logged in server is on
  7360.     CF set on error
  7361.         AX = error code
  7362. SeeAlso: AX=5F81h
  7363. ----------215F85-----------------------------
  7364. INT 21 - LANtastic - CHANGE PASSWORD
  7365.     AX = 5F85h
  7366.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  7367. Return: CF clear if successful
  7368.     CF set on error
  7369.         AX = error code
  7370. Note:    must be logged into the named machine
  7371. ----------215F86-----------------------------
  7372. INT 21 - LANtastic - DISABLE ACCOUNT
  7373.     AX = 5F86h
  7374.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  7375. Return: CF clear if successful
  7376.     CF set on error
  7377.         AX = error code
  7378. Note:    must be logged into the named machine and concurrent logins set to 1
  7379.       by NET_MGR.  Requires system manager to re-enable account.
  7380. ----------215F87-----------------------------
  7381. INT 21 - LANtastic v3+ - GET ACCOUNT
  7382.     AX = 5F87h
  7383.     DS:SI -> 128-byte buffer for account information (see below)
  7384.     ES:DI -> ASCIZ machine name in form "\\machine"
  7385. Return:    CF clear if successful
  7386.     CF set on error
  7387.         AX = error code
  7388.     BX destroyed
  7389. Note:    must be logged into the specified machine
  7390.  
  7391. Format of user account structure:
  7392. Offset    Size    Description
  7393.  00h 16 BYTEs    blank-padded username
  7394.  10h 16 BYTEs    reserved (00h)
  7395.  20h 32 BYTEs    user description
  7396.  40h    BYTE    privilege bits
  7397.         bit 7: bypass access control lists
  7398.             6: bypass queue protection
  7399.             5: treat as local process
  7400.             4: bypass mail protection
  7401.             3: allow audit entry creation
  7402.             2: system manager
  7403.  41h    BYTE    maximum concurrent users
  7404.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  7405.         (bit set if half-hour not an allowed time)
  7406.  6Ch    WORD    internal (0002h)
  7407.  6Eh  2 WORDs    last login time
  7408.  72h  2 WORDs    account expiration date (MSDOS-format year/month:day)
  7409.  76h  2 WORDs    password expiration date (0 = none)
  7410.  7Ah    BYTE    number of days to extend password after change (1-31)
  7411.  7Bh  5 BYTEs    reserved
  7412. ----------215F97-----------------------------
  7413. INT 21 - LANtastic - COPY FILE
  7414.     AX = 5F97h
  7415.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  7416.     SI = source file handle
  7417.     DI = destination file handle
  7418. Return: CF clear if successful
  7419.         AX:DX = number of bytes copied
  7420.     CF set on error
  7421.         AX = error code
  7422. Note:    copy is performed by server
  7423. ----------215F98-----------------------------
  7424. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  7425.     AX = 5F98h
  7426.     DS:SI -> message buffer (see below)
  7427. Return: CF clear if successful
  7428.     CF set on error
  7429.         AX = error code
  7430. SeeAlso: AX=5F99h
  7431.  
  7432. Format of message buffer:
  7433. Offset    Size    Description
  7434.  00h    BYTE    reserved
  7435.  01h    BYTE    message type
  7436.         00h general 
  7437.         01h server warning
  7438.         02h-7Fh reserved
  7439.         80h-FFh user-defined
  7440.  02h 16 BYTEs    ASCIZ destination machine name
  7441.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  7442.  22h 16 BYTEs    ASCIZ user name
  7443.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  7444.  42h 80 BYTEs    message text
  7445. ----------215F99-----------------------------
  7446. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  7447.     AX = 5F99h
  7448.     ES:DI -> messsage buffer (see AX=5F98h for format)
  7449. Return: CF clear if successful
  7450.     CF set on error
  7451.         AX = error code
  7452. SeeAlso: AX=5F98h
  7453. ----------215F9A-----------------------------
  7454. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  7455.     AX = 5F9Ah
  7456. Return: CF clear if successful
  7457.         DL = bits describing processing for received unsolicited messages
  7458.         bit 0: beep before message is delivered
  7459.             1: deliver message to message service
  7460.             2: pop up message automatically (v3+)
  7461.     CF set on error
  7462.         AX = error code
  7463. SeeAlso: AX=5F9Bh,AX=5F9Ch
  7464. ----------215F9B-----------------------------
  7465. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG
  7466.     AX = 5F9Bh
  7467.     DL = bits describing processing for received unsolicited messages
  7468.          (see AX=5F9Ah)
  7469. Return: CF clear if successful
  7470.     CF set on error
  7471.         AX = error code
  7472. SeeAlso: AX=5F9Ah
  7473. ----------215F9C-----------------------------
  7474. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  7475.     AX = 5F9Ch
  7476.     CX = time to leave on screen in clock ticks
  7477.     DH = 0-based screen line on which to place message
  7478. Return:    CF clear if successful
  7479.     CF set on error
  7480.         AX = error code (0Bh)
  7481. Note:    the original screen contents are restored when the message is removed
  7482. SeeAlso: AX=5F9Ah
  7483. ----------215FA0-----------------------------
  7484. INT 21 - LANtastic - GET QUEUE ENTRY
  7485.     AX = 5FA0h
  7486.     BX = queue entry index (0000h is first entry)
  7487.     DS:SI -> buffer for queue entry (see below)
  7488.     ES:DI -> ASCIZ server name in form "\\name"
  7489. Return: CF clear if successful
  7490.     CF set on error
  7491.         AX = error code
  7492.     BX = entry index for next queue entry (BX-1 is current index)
  7493. SeeAlso: AX=5FA1h,AX=5FA2h
  7494.  
  7495. Format of queue entry:
  7496. Offset    Size    Description
  7497.  00h    BYTE    status of entry
  7498.         00h empty
  7499.         01h being updated
  7500.         02h being held
  7501.         03h waiting for despool
  7502.         04h being despooled
  7503.         05h canceled
  7504.         06h spooled file could not be accessed
  7505.         07h destination could not be accessed
  7506.         08h rush job
  7507.  01h    DWORD    size of spooled file
  7508.  05h    BYTE    type of entry
  7509.         00h printer queue file
  7510.         01h message
  7511.         02h local file
  7512.         03h remote file
  7513.         04h to remote modem
  7514.         05h batch processor file
  7515.  06h    BYTE    output control
  7516.         bit 6: don't delete (for mail)
  7517.         bit 5: mail file contains voice mail (v3+)
  7518.  07h    WORD    number of copies
  7519.  09h    DWORD    sequence number of queue entry
  7520.  0Dh 48 BYTEs    pathname of spooled file
  7521.  3Dh 16 BYTEs    user who spooled file
  7522.  4Dh 16 BYTEs    name of machine from which file was spooled
  7523.  5Dh    WORD    date file was spooled (see AX=5700h)
  7524.  5Fh    WORD    time file was spooled (see AX=5700h)
  7525.  61h 17 BYTEs    ASCIZ destination device or user name
  7526.  72h 48 BYTEs    comment field
  7527. ----------215FA1-----------------------------
  7528. INT 21 - LANtastic - SET QUEUE ENTRY
  7529.     AX = 5FA1h
  7530.     BX = handle of opened queue entry
  7531.     DS:SI -> queue entry (see AX=5FA0h)
  7532. Return: CF clear if successful
  7533.     CF set on error
  7534.         AX = error code
  7535. Note:    the only queue entry fields which may be changed are output control,
  7536.       number of copies, destination device, and comment
  7537. SeeAlso: AX=5FA0h,AX=5FA2h
  7538. ----------215FA2-----------------------------
  7539. INT 21 - LANtastic - CONTROL QUEUE
  7540.     AX = 5FA2h
  7541.     BL = control command
  7542.         00h start despooling (privileged)
  7543.         01h halt despooling (privileged)
  7544.         02h halt despooling at end of job (privileged)
  7545.         03h pause despooler at end of job (privileged)
  7546.         04h print single job (privileged)
  7547.         05h restart current job (privileged)
  7548.         06h cancel the current job
  7549.         07h hold queue entry
  7550.         08h release a held queue entry
  7551.         09h make queue entry a rushed job (privileged)
  7552.     CX:DX = sequence number to control (commands 06h-09h)
  7553.     DX = physical printer number (commands 00h-05h)
  7554.         00h-02h LPT1-LPT3
  7555.         03h,04h COM1,COM2
  7556.         other    all printers
  7557.     ES:DI -> ASCIZ computer name
  7558. Return: CF clear if successful
  7559.     CF set on error
  7560.         AX = error code
  7561. ----------215FA3-----------------------------
  7562. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  7563.     AX = 5FA3h
  7564.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  7565.     DS:SI -> buffer for printer status (see below)
  7566.     ES:DI -> ASCIZ server name in form "\\machine"
  7567. Return: CF clear if successful
  7568.     CF set on error
  7569.         AX = error code
  7570.     BX = next physical printer number
  7571.  
  7572. Format of printer status:
  7573. Offset    Size    Description
  7574.  00h    BYTE    printer state
  7575.         bit 7: printer paused
  7576.         bits 0-6: 0 printer disabled
  7577.               1 will stop at end of job
  7578.               2 print multiple jobs
  7579.  01h    WORD    queue index of print job being despooled
  7580.         FFFFh if not despooling--ignore all following fields
  7581.  03h    WORD    actual characters per second being output
  7582.  05h    DWORD    number of characters actually output so far
  7583.  09h    DWORD    number of bytes read from spooled file so far
  7584.  0Dh    WORD    copies remaining to print
  7585. ----------215FA4-----------------------------
  7586. INT 21 - LANtastic v3+ - GET STREAM INFO
  7587.     AX = 5FA4h
  7588.     BX = 0-based stream index number
  7589.     DS:SI -> buffer for stream information (see below)
  7590.     ES:DI -> ASCIZ machine name in form "\\machine"
  7591. Return: CF clear if successful
  7592.     CF set on error
  7593.         AX = error code
  7594.     BX = next stream number
  7595. SeeAlso: AX=5FA5h
  7596.  
  7597. Format of stream information:
  7598. Offset    Size    Description
  7599.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  7600.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  7601. ----------215FA5-----------------------------
  7602. INT 21 - LANtastic v3+ - SET STREAM INFO
  7603.     AX = 5FA5h
  7604.     BX = 0-based stream index number
  7605.     DS:SI -> buffer containing stream information (see AX=5FA4h)
  7606.     ES:DI -> ASCIZ machine name in form "\\machine"
  7607. Return: CF clear if successful
  7608.     CF set on error
  7609.         AX = error code
  7610. SeeAlso: AX=5FA4h
  7611. ----------215FA7-----------------------------
  7612. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  7613.     AX = 5FA7h
  7614.     DS:DX -> ASCIZ reason code (max 8 bytes)
  7615.     DS:SI -> ASCIZ variable reason code (max 128 bytes)
  7616.     ES:DI -> ASCIZ machine name in form "\\machine"
  7617. Return: CF clear if successful
  7618.     CF set on error
  7619.         AX = error code
  7620. ----------215FB0-----------------------------
  7621. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  7622.     AX = 5FB0h
  7623.     BX = server login entry index
  7624.     DS:SI -> buffer for active user entry (see below)
  7625.     ES:DI -> ASCIZ machine name in form "\\server"
  7626. Return: CF clear if successful
  7627.     CF set on error
  7628.         AX = error code
  7629.     BX = next login index
  7630.  
  7631. Format of active user entry:
  7632. Offset    Size    Description
  7633.  00h    WORD    virtual circuit number
  7634.  02h    BYTE    login state
  7635.         bit 0: fully logged in
  7636.             1: remote program load login
  7637.             3: user can create audit entries
  7638.             4: bypass mail protection
  7639.             5: treat as local process
  7640.             6: bypass queue protection
  7641.             7: bypass access control lists
  7642.  03h    BYTE    last command issued (see below)
  7643.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  7644.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  7645.  0Ch 16 BYTEs    name of user who is logged in
  7646.  1Ch 16 BYTEs    name of remote logged in machine
  7647.  
  7648. Values for last command:
  7649.  00h    login
  7650.  01h    process termination
  7651.  02h    open file
  7652.  03h    close file
  7653.  04h    create file
  7654.  05h    create new file
  7655.  06h    create unique file
  7656.  07h    commit data to disk
  7657.  08h    read file
  7658.  09h    write file
  7659.  0Ah    delete file
  7660.  0Bh    set file attributes
  7661.  0Ch    lock byte range
  7662.  0Dh    unlock byte range
  7663.  0Eh    create subdirectory
  7664.  0Fh    remove subdirectory
  7665.  10h    rename file
  7666.  11h    find first matching file
  7667.  12h    find next matching file
  7668.  13h    get disk free space
  7669.  14h    get a queue entry
  7670.  15h    set a queue entry
  7671.  16h    control the queue
  7672.  17h    return login information
  7673.  18h    return link description
  7674.  19h    seek on file
  7675.  1Ah    get server's time
  7676.  1Bh    create audit entry
  7677.  1Ch    open file in multitude of modes
  7678.  1Dh    change password
  7679.  1Eh    disable account
  7680.  1Fh    local server file copy
  7681. ---v3+---
  7682.  20h    get username from account file
  7683.  21h    translate server's logical path
  7684.  22h    make indirect file
  7685.  23h    get indirect file contents
  7686.  24h    get physical printer status
  7687.  25h    get logical print stream info
  7688.  26h    set logical print stream info
  7689.  27h    get user's account record
  7690. ----------215FB1-----------------------------
  7691. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  7692.     AX = 5FB1h
  7693.     DS:SI -> 64-byte buffer for link description
  7694.     ES:DI -> ASCIZ machine and shared directory name in form
  7695.          "\\machine\shared-resource"
  7696. Return: CF clear if successful
  7697.         CX = access control list privilege bits for requesting user
  7698.         bit 5: allow attribute changing
  7699.             6: allow physical access to device
  7700.             7: allow program execution
  7701.             8: allow file renaming
  7702.             9: allow directory deletion
  7703.            10: allow file deletion
  7704.            11: allow file/directory lookups
  7705.            12: allow directory creation
  7706.            13: allow file creation
  7707.            14: allow open for write and writing
  7708.            15: allow open for read and reading
  7709.     CF set on error
  7710.         AX = error code
  7711. ----------215FB2-----------------------------
  7712. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  7713.     AX = 5FB2h
  7714.     BX = username entry index (0 for first)
  7715.     DS:SI -> 16-byte buffer for username
  7716.     ES:DI -> ASCIZ server name in form "\\machine"
  7717. Return: CF clear if successful
  7718.     CF set on error
  7719.         AX = error code
  7720.     BX = next queue entry index
  7721. ----------215FB3-----------------------------
  7722. INT 21 - LANtastic v3+ - TRANSLATE PATH
  7723.     AX = 5FB3h
  7724.     DS:SI -> 128-byte buffer for ASCIZ result
  7725.     ES:DI -> full ASCIZ path, including server name
  7726.     DX = types of translation to be performed
  7727.         bit 0: expand last component as indirect file
  7728.         1: return actual path relative to server's physical disk
  7729. Return: CF clear if successful
  7730.     CF set on error
  7731.         AX = error code
  7732. Note:    always expands any indirect files along the path
  7733. SeeALso: AX=5FB4h
  7734. ----------215FB4-----------------------------
  7735. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  7736.     AX = 5FB4h
  7737.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  7738.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  7739. Return: CF clear if successful
  7740.     CF set on error
  7741.         AX = error code
  7742. Note:    the contents of the indirect file may be any valid server-relative path
  7743. ----------215FB5-----------------------------
  7744. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  7745.     AX = 5FB5h
  7746.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  7747.     ES:DI -> full ASCIZ path of indirect file
  7748. Return: CF clear if successful
  7749.     CF set on error
  7750.         AX = error code
  7751. ----------215FC0-----------------------------
  7752. INT 21 - LANtastic - GET TIME FROM SERVER
  7753.     AX = 5FC0h
  7754.     DS:SI -> time block (see below)
  7755.     ES:DI -> ASCIZ server name to get time from
  7756. Return: CF clear if successful
  7757.     CF set on error
  7758.         AX = error code
  7759.  
  7760. Format of time block:
  7761. Offset    Size    Description
  7762.  00h    WORD    year
  7763.  02h    BYTE    day
  7764.  03h    BYTE    month
  7765.  04h    BYTE    minutes
  7766.  05h    BYTE    hour
  7767.  06h    BYTE    hundredths of second
  7768.  07h    BYTE    second
  7769. ----------215FD0-----------------------------
  7770. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  7771.     AX = 5FD0h
  7772. Return: CF clear if successful
  7773.         CX = redirected printer timeout in clock ticks of 55ms
  7774.         0000h if timeout disabled
  7775.     CF set on error
  7776.         AX = error code
  7777. SeeAlso: AX=5FD1h
  7778. ----------215FD1-----------------------------
  7779. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  7780.     AX = 5FD1h
  7781.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  7782. Return: CF clear if successful
  7783.     CF set on error
  7784.         AX = error code
  7785. SeeAlso: AX=5FD0h
  7786. ----------215FE0-----------------------------
  7787. INT 21 - LANtastic - GET DOS SERVICE VECTOR
  7788.     AX = 5FE0h
  7789. Return: CF clear if successful
  7790.         ES:BX -> current FAR service routine
  7791.     CF set on error
  7792.         AX = error code
  7793. SeeAlso: AX=5FE1h
  7794. ----------215FE1-----------------------------
  7795. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  7796.     AX = 5FE1h
  7797.     ES:BX -> FAR routine to call for DOS service
  7798. Return: CF clear if successful
  7799.     CF set on error
  7800.         AX = error code
  7801. Note:    new handler must chain to previous handler as its first action
  7802. SeeAlso: AX=5FE0h
  7803. ----------215FE2-----------------------------
  7804. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  7805.     AX = 5FE2h
  7806. Return: CF clear if successful
  7807.         ES:BX -> current FAR message service routine
  7808.     CF set on error
  7809.         AX = error code
  7810. SeeAlso: AX=5FE3h
  7811. ----------215FE3-----------------------------
  7812. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  7813.     AX = 5FE3h
  7814.     ES:BX -> FAR routine for processing network messages
  7815. Return: CF clear if successful
  7816.     CF set on error
  7817.         AX = error code
  7818. Notes:    handler must chain to previous handler as its first action
  7819.     on invocation, ES:BX -> just-received message
  7820. SeeAlso: AX=5FE2h
  7821. ----------2160-------------------------------
  7822. INT 21 - DOS 3.0+ - CANONICALIZE FILENAME OR PATH
  7823.     AH = 60h
  7824.     DS:SI -> ASCIZ filename or path
  7825.     ES:DI -> 128-byte buffer for canonicalized name
  7826. Return: CF set on error
  7827.         AX = error code
  7828.         02h invalid component in directory path or drive letter only
  7829.         03h malformed path or invalid drive letter
  7830.         ES:DI buffer unchanged
  7831.     CF clear if successful
  7832.         AH = 00h
  7833.         AL = destroyed (00h or 5Ch or last char of current dir on drive)
  7834.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  7835.           \\MACHINE\PATH\FILE.EXT
  7836. Notes:    the input path need not actually exist
  7837.     letters are uppercased, forward slashes converted to backslashes,
  7838.       asterisks converted to appropriate number of question marks, and
  7839.       file and directory names are truncated to 8.3 if necessary.
  7840.     '.' and '..' in the path are resolved
  7841.     filespecs on local drives always start with "d:", those on network
  7842.       drives always start with "\\"
  7843.     if path string is on a JOINed drive, the returned name is the one that
  7844.       would be needed if the drive were not JOINed; similarly for a
  7845.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  7846.       possible to get a qualified name that is not legal under the current
  7847.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  7848.     under DOS 3.3 through 5.00, a device name is translated differently if
  7849.       the device name does not have an explicit directory or the directory
  7850.       is \DEV (relative directory DEV from the root directory works
  7851.       correctly).  In these cases, the returned string consists of the
  7852.       unchanged device name and extension appended to the string X:/
  7853.       (forward slash instead of backward slash as in all other cases) where
  7854.       X is the default or explicit drive letter.
  7855.     functions which take pathnames require canonical paths if invoked via
  7856.       INT 21/AX=5D00h
  7857.     supported by OS/2 v1.1 compatibility box
  7858.     NetWare 2.1x does not support characters with the high bit set; early
  7859.       versions of NetWare 386 support such characters except in this call.
  7860.       In addition, NetWare returns error code 3 for the path "X:\"; one
  7861.       should use "X:\." instead.
  7862.     for DOS 3.3-5.0, the input and output buffers may be the same, as the
  7863.       canonicalized name is built in an internal buffer and copied to the
  7864.       specified output buffer as the very last step
  7865. SeeAlso: INT 2F/AX=1123h,INT 2F/AX=1221h
  7866. ----------2161-------------------------------
  7867. INT 21 - DOS 3+ - UNUSED
  7868.     AH = 61h
  7869. Return: AL = 00h
  7870. Note:    this function does nothing and returns immediately
  7871. ----------2162-------------------------------
  7872. INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
  7873.     AH = 62h
  7874. Return: BX = segment of PSP for current process
  7875. Notes:    under DOS 3+, this function does not use any of the DOS-internal stacks
  7876.       and is thus fully reentrant
  7877.     the current PSP is not necessarily the caller's PSP
  7878.     identical to the undocumented AH=51h
  7879. SeeAlso: AH=50h,AH=51h
  7880. ----------216300-----------------------------
  7881. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
  7882.     AX = 6300h
  7883. Return: CF clear if successful
  7884.         DS:SI -> lead byte table (see below for format)
  7885.     CF set on error
  7886.         AX = error code (01h) (see AH=59h)
  7887. Notes:    does not preserve any registers other than SS:SP
  7888.     the US version of MSDOS 3.30 treats this as an unused function,
  7889.       setting AL=00h and returning immediately
  7890. SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
  7891.  
  7892. Format of lead byte table entry:
  7893. Offset    Size    Description
  7894.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  7895.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  7896.     ...
  7897.   N   2 BYTEs    00h,00h end flag
  7898. ----------216300-----------------------------
  7899. INT 21 - Asian DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD TABLE
  7900.     AX = 6300h
  7901. Return: AL = error code
  7902.         00h successful
  7903.         DS:SI -> DBCS table (see below)
  7904.         all other registers except CS:IP and SS:SP destroyed
  7905.         FFh not supported
  7906. Notes:    probably identical to AH=63h/AL=00h for DOS 2.25
  7907.     the US version of MSDOS 3.30 treats this as an unused function,
  7908.       setting AL=00h and returning immediately
  7909.     the US version of DOS 4.0+ accepts this function, but returns an empty
  7910.       list
  7911. SeeAlso: AX=6300h"DOS 2.25"
  7912.  
  7913. Format of DBCS table:
  7914. Offset    Size    Description
  7915.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  7916.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  7917.     ...
  7918.   N   2 BYTEs    00h,00h end flag
  7919. ----------216301-----------------------------
  7920. INT 21 - DOS 2.25, Asian DOS 3.2+ - SET KOREAN (HONGEUL) INPUT MODE
  7921.     AX = 6301h
  7922.     DL = new mode
  7923.         00h return only full characters on DOS keyboard input functions
  7924.         01h    return partially-formed characters also
  7925. Return: AL = status
  7926.         00h successful
  7927.         FFh invalid mode
  7928. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
  7929. ----------216302-----------------------------
  7930. INT 21 - DOS 2.25, Asian DOS 3.2+ - GET KOREAN (HONGEUL) INPUT MODE
  7931.     AX = 6302h
  7932. Return: AL = status
  7933.         00h successful
  7934.         DL = current input mode
  7935.             00h return only full characters
  7936.             01h return partial characters
  7937.         FFh not supported
  7938. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
  7939. ----------2164-------------------------------
  7940. INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
  7941.     AH = 64h
  7942.     AL = flag
  7943.         00h (default) call device driver function 5 (non-dest read)
  7944.             before INT 21/AH=01h,08h,0Ah
  7945.         nonzero don't call driver function 5
  7946. Return: nothing
  7947. Notes:    called by DOS 3.3+ PRINT.COM
  7948.     does not use any of the DOS-internal stacks and is thus fully
  7949.       reentrant
  7950. SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
  7951. ----------2165-------------------------------
  7952. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  7953.     AH = 65h
  7954.     AL = info ID
  7955.         01h get general internationalization info
  7956.         02h get pointer to uppercase table
  7957.         04h get pointer to filename uppercase table
  7958.         05h get pointer to filename terminator table
  7959.         06h get pointer to collating sequence table
  7960.         07h (DOS 4+) get pointer to Double-Byte Character Set table
  7961.     BX = code page (-1=global code page)
  7962.     DX = country ID (-1=current country)
  7963.     ES:DI -> country information buffer (see below)
  7964.     CX = size of buffer (>= 5)
  7965. Return: CF set on error
  7966.         AX = error code (see AH=59h)
  7967.     CF clear if succesful
  7968.         CX = size of country information returned
  7969.         ES:DI -> country information
  7970. Notes:    AL=05h appears to return same info for all countries and codepages; it
  7971.       has been documented for DOS 5.0, but was undocumented in ealier
  7972.       versions
  7973.     NLSFUNC must be installed to get info for countries other than the
  7974.       default
  7975.     subfunctions 02h and 04h are identical under OS/2
  7976. SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h
  7977.  
  7978. Format of country information:
  7979. Offset    Size    Description
  7980.  00h    BYTE    info ID
  7981. ---if info ID = 01h---
  7982.  01h    WORD    size
  7983.  03h    WORD    country ID
  7984.  05h    WORD    code page
  7985.  07h 34 BYTEs    country-dependent info (see AH=38h)
  7986. ---if info ID = 02h---
  7987.  01h    DWORD    pointer to uppercase table (see below)
  7988. ---if info ID = 04h---
  7989.  01h    DWORD    pointer to filename uppercase table (see below)
  7990. ---if info ID = 05h---
  7991.  01h    DWORD    pointer to filename character table (see below)
  7992. ---if info ID = 06h---
  7993.  01h    DWORD    pointer to collating table (see below)
  7994. ---if info ID = 07h (DOS 4+)---
  7995.  01h    DWORD    pointer to DBCS lead byte table (see below)
  7996.  
  7997. Format of uppercase table:
  7998. Offset    Size    Description
  7999.  00h    WORD    table size
  8000.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  8001.  
  8002. Format of collating table:
  8003. Offset    Size    Description
  8004.  00h    WORD    table size
  8005.  02h 256 BYTEs    values used to sort characters 00h to FFh
  8006.  
  8007. Format of filename terminator table:
  8008. Offset    Size    Description
  8009.  00h    WORD    table size (not counting this word)
  8010.  02h    BYTE    ??? (01h for MSDOS 3.30-5.00)
  8011.  03h    BYTE    lowest permissible character value for filename
  8012.  04h    BYTE    highest permissible character value for filename
  8013.  05h    BYTE    ??? (00h for MSDOS 3.30-5.00)
  8014.  06h    BYTE    first excluded character in range \ all characters in this
  8015.  07h    BYTE    last excluded character in range  / range are illegal
  8016.  08h    BYTE    ??? (02h for MSDOS 3.30-5.00)
  8017.  09h    BYTE    number of illegal (terminator) characters
  8018.  0Ah  N BYTES    characters which terminate a filename:    ."/\[]:|<>+=;,
  8019. Note:    partially documented for DOS 5.0, but undocumented for earlier versions
  8020.  
  8021. Format of filename uppercase table:
  8022. Offset    Size    Description
  8023.  00h    WORD    table size
  8024.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  8025.  
  8026. Format of DBCS lead byte table:
  8027. Offset    Size    Description
  8028.  00h    WORD    length
  8029.  02h 2N BYTEs    start/end for N lead byte ranges
  8030.     WORD    0000h    (end of table)
  8031. ----------2165-------------------------------
  8032. INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  8033.     AH = 65h
  8034.     AL = function
  8035.         20h capitalize character
  8036.         DL = character to capitalize
  8037.         Return: DL = capitalized character
  8038.         21h capitalize string
  8039.         DS:DX -> string to capitalize
  8040.         CX = length of string
  8041.         22h capitalize ASCIZ string
  8042.         DS:DX -> ASCIZ string to capitalize
  8043. Return: CF set on error
  8044.         AX = error code (see AH=59h)
  8045.     CF clear if successful
  8046. Note:    these calls have been documented for DOS 5+, but were undocumented in
  8047.       DOS 4.x.
  8048. ----------216523-----------------------------
  8049. INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  8050.     AX = 6523h
  8051.     DL = character
  8052.     DH = second character of double-byte character (if applicable)
  8053. Return: CF set on error
  8054.     CF clear if successful
  8055.         AX = type
  8056.         00h no
  8057.         01h yes
  8058.         02h neither yes nor no
  8059. ----------2165-------------------------------
  8060. INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  8061.     AH = 65h
  8062.     AL = function
  8063.         A0h capitalize filename character
  8064.         DL = character to capitalize
  8065.         Return: DL = capitalized character
  8066.         A1h capitalize counted filename string
  8067.         DS:DX -> filename string to capitalize
  8068.         CX = length of string
  8069.         A2h capitalize ASCIZ filename
  8070.         DS:DX -> ASCIZ filename to capitalize
  8071. Return: CF set on error
  8072.         AX = error code (see AH=59h)
  8073.     CF clear if successful
  8074. Note:    nonfunctional in DOS 4.00 through 5.00 due to a bug (the code sets a
  8075.       pointer depending on the high bit of AL, but doesn't clear the
  8076.       bit before branching by function number).
  8077. ----------216601-----------------------------
  8078. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  8079.     AX = 6601h
  8080. Return: CF set on error
  8081.         AX = error code (see AH=59h)
  8082.     CF clear if successful
  8083.         BX = active code page (see AX=6602h)
  8084.         DX = system code page
  8085. SeeAlso: AX=6602h
  8086. ----------216602-----------------------------
  8087. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  8088.     AX = 6602h
  8089.     BX = active code page
  8090.         437 US
  8091.         850 Multilingual
  8092.         852 Slavic/Latin II (DOS 5+)
  8093.         857 Turkish
  8094.         860 Portugal
  8095.         861    Iceland
  8096.         863 Canada (French)
  8097.         865 Norway/Denmark
  8098.     DX = system code page (active page at boot time)
  8099. Return: CF set on error
  8100.         AX = error code (see AH=59h)
  8101.     CF clear if successful
  8102. SeeAlso: AX=6601h
  8103. ----------2167-------------------------------
  8104. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  8105.     AH = 67h
  8106.     BX = size of new file handle table for process
  8107. Return: CF clear if successful
  8108.     CF set on error
  8109.         AX = error code (see AH=59h)
  8110. Notes:    if BX <= 20, no action is taken if the handle limit has not yet been
  8111.       increased, and the table is copied back into the PSP if the limit
  8112.       is currently > 20 handles
  8113.     for file handle tables of > 20 handles, DOS 3.30 never reuses the
  8114.       same memory block, even if the limit is being reduced; this can lead
  8115.       to memory fragmentation as a new block is allocated and the existing
  8116.       one freed
  8117.     only the first 20 handles are copied to child processes in DOS 3.3
  8118. BUG:    the original release of DOS 3.30 allocates a full 64K for the handle
  8119.       table on requests for an even number of handles
  8120. SeeAlso: AH=26h
  8121. ----------2168-------------------------------
  8122. INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
  8123.     AH = 68h
  8124.     BX = file handle
  8125. Return: CF clear if successful
  8126.         all data still in DOS disk buffers is written to disk immediately,
  8127.           and the file's directory entry is updated
  8128.     CF set on error
  8129.         AX = error code (see AH=59h)
  8130. SeeAlso: AX=5D01h,INT 2F/AX=1107h
  8131. ----------2169-------------------------------
  8132. INT 21 U - DOS 4.0 internal - GET/SET DISK SERIAL NUMBER
  8133.     AH = 69h
  8134.     AL = subfunction
  8135.         00h    get serial number
  8136.         01h set serial number
  8137.     BL = drive (0=default, 1=A, 2=B, etc)
  8138.     DS:DX -> disk info (see below)
  8139. Return: CF set on error
  8140.         AX = error code (see AH=59h)
  8141.     CF clear if successful
  8142.         AX destroyed
  8143.         (AL = 00h) buffer filled with appropriate values from extended BPB
  8144.         (AL = 01h) extended BPB on disk set to values from buffer
  8145. Notes:    does not generate a critical error; all errors are returned in AX
  8146.     error 0005h given if no extended BPB on disk
  8147.     does not work on network drives (error 0001h)
  8148.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  8149.        extended BPB on disk
  8150. SeeAlso: AX=440Dh
  8151.  
  8152. Format of disk info:
  8153. Offset    Size    Description
  8154.  00h    WORD    info level (zero)
  8155.  02h    DWORD    disk serial number (binary)
  8156.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  8157.  11h  8 BYTEs    (AL=00h only) filesystem type--string "FAT12   " or "FAT16   "
  8158. ----------2169-------------------------------
  8159. INT 21 - DR-DOS 5.0 - NULL FUNCTION
  8160.     AH = 69h
  8161. Return: AL = 00h
  8162. SeeAlso: AH=18h
  8163. ----------216969-----------------------------
  8164. INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
  8165.     AX = 6969h
  8166. Return: AX = 0666h if resident
  8167. SeeAlso: AX=58CCh,AH=76h"VIRUS"
  8168. ----------216A-------------------------------
  8169. INT 21 U - DOS 4+ internal - ???
  8170.     AH = 6Ah
  8171.     ???
  8172. Return: ???
  8173. Note:    may be equivalent to INT 21/AH=48h
  8174. ----------216B-------------------------------
  8175. INT 21 U - DOS 4.0 internal - ???
  8176.     AH = 6Bh
  8177.     AL = subfunction
  8178.         00h ???
  8179.         DS:SI -> Current Directory Structure???
  8180.         CL = drive (1=A:)
  8181.         01h ???
  8182.         DS:SI -> ???
  8183.         CL = file handle???
  8184.         02h ???
  8185.         DS:SI -> Current Directory Structure???
  8186.         DI = ???
  8187.         CX = drive (1=A:)
  8188. Return: CF set on error
  8189.         AX = error code (see INT 21/AH=59h)
  8190.     CF clear if successful
  8191. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  8192. SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
  8193. ----------216B-------------------------------
  8194. INT 21 U - DOS 5.0 - NULL FUNCTION
  8195.     AH = 6Bh
  8196. Return: AL = 00h
  8197. Note:    this function does nothing and returns immediately
  8198. SeeAlso: AH=6Bh"DOS 4"
  8199. ----------216C00-----------------------------
  8200. INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
  8201.     AX = 6C00h
  8202.     BL = open mode as in AL for normal open (INT 21/AH=3Dh)
  8203.         bit 7: inheritance
  8204.         bits 4-6: sharing mode
  8205.         bit 3 reserved
  8206.         bits 0-2: access mode
  8207.     BH = flags
  8208.         bit 6 = auto commit on every write
  8209.         bit 5 = return error rather than doing INT 24h
  8210.     CX = create attribute
  8211.         bits 6-15 reserved
  8212.         bit 5: archive
  8213.         bit 4: reserved
  8214.         bit 3: volume label
  8215.         bit 2: system
  8216.         bit 1: hidden
  8217.         bit 0: readonly
  8218.     DL = action if file exists/does not exists
  8219.         bits 7-4 action if file does not exist
  8220.             0000 fail
  8221.             0001 create
  8222.         bits 3-0 action if file exists
  8223.             0000 fail
  8224.             0001 open
  8225.             0010 replace/open
  8226.     DH = 00h (reserved)
  8227.     DS:SI -> ASCIZ file name
  8228. Return: CF set on error
  8229.        AX = error code (see AH=59h)
  8230.     CF clear if successful
  8231.        AX = file handle
  8232.        CX = 1 file opened
  8233.         2 file created
  8234.         3 file replaced
  8235. Note:    the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
  8236.       and DL=12h
  8237. SeeAlso: AH=3Ch,AH=3Dh
  8238. ----------217070BX6060-----------------------
  8239. INT 21 - PCW Weather Card interface - GET DATA SEGMENT
  8240.     AX = 7070h
  8241.     BX = 6060h
  8242.     CX = 7070h
  8243.     DX = 7070h
  8244.     SX = 7070h
  8245.     DX = 7070h
  8246. Return: AX = segment of data structure
  8247. Notes:    the data structure is at offset 516 from this segment.
  8248.     the update byte is at offset 514 from this segment.  Updates are
  8249.       once per second while this byte is nonzero and it is decremented
  8250.       once per second.  While this byte is 0 updates are once per minute.
  8251. SeeAlso: AX=7070h/BX=7070h
  8252.  
  8253. Format of data structure:
  8254. Offset    Type    Description
  8255.  00h    WORD    hour
  8256.  02h    WORD    minute
  8257.  04h    WORD    second
  8258.  06h    WORD    day
  8259.  08h    WORD    month
  8260.  0Ah    WORD    year
  8261.  0Ch    WORD    ???
  8262.  0Eh    WORD    relative barometric pressure (in 1/100 inches)
  8263.  10h    WORD    ???
  8264.  12h    WORD    ???
  8265.  14h    WORD    temperature 1 (in 1/10 degrees F)
  8266.  16h    WORD    temperature 1 lowest (in 1/10 degrees F)
  8267.  18h    WORD    temperature 1 highest (in 1/10 degrees F)
  8268.  1Ah    WORD    temperature 2 (in 1/10 degrees F)
  8269.  1Ch    WORD    temperature 2 lowest (in 1/10 degrees F)
  8270.  1Eh    WORD    temperature 2 highest (in 1/10 degrees F)
  8271.  20h    WORD    wind speed (in MPH)
  8272.  22h    WORD    average of 60 wind speed samples (in MPH)
  8273.  24h    WORD    highest wind speed (in MPH)
  8274.  26h    WORD    wind chill factor  (in 1/10 degrees F)
  8275.  28h    WORD    lowest wind chill factor (in 1/10 degrees F)
  8276.  2Ah    WORD    ???
  8277.  2Ch    WORD    wind direction (in degrees)
  8278.  2Eh    WORD    accumulated daily rainfall (in 1/10 inches)
  8279.  30h    WORD    accumulated annual rainfall (in 1/10 inches)
  8280. ----------217070BX7070-----------------------
  8281. INT 21 - PCW Weather Card interface - INSTALLATION CHECK
  8282.     AX = 7070h
  8283.     BX = 7070h
  8284.     CX = 7070h
  8285.     DX = 7070h
  8286.     SX = 7070h
  8287.     DX = 7070h
  8288. Return: AX = 0070h
  8289.     BX = 0070h
  8290.     CX = 0070h
  8291.     DX = 0070h
  8292.     SX = 0070h
  8293.     DX = 0070h
  8294. SeeAlso: AX=7070h/BX=6060h,AX=8080h
  8295. ----------2176-------------------------------
  8296. INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
  8297.     AH = 76h
  8298. Return: AL = 48h if resident
  8299. SeeAlso: AX=6969h,AX=7700h"VIRUS"
  8300. ----------217761-----------------------------
  8301. INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
  8302.     AX = 7761h ('wa')
  8303. Return: AX = 6177h
  8304. Note:    WATCH.COM is part of the "TSR" package by TurboPower Software
  8305. SeeAlso: INT 16/AX=7761h
  8306. ----------217700-----------------------------
  8307. INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
  8308.     AX = 7700h
  8309. Return: AX = 0920h if resident
  8310. SeeAlso: AH=76h,AH=7Fh
  8311. ----------217F-------------------------------
  8312. INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
  8313.     AH = 7Fh
  8314. Return: AH = 80h if resident
  8315. SeeAlso: AX=7700h,AH=83h"VIRUS"
  8316. ---------------------------------------------
  8317.