home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 13 / CD_ASCQ_13_0494.iso / maj / 4266 / interrup.c < prev    next >
Text File  |  1994-02-06  |  344KB  |  9,345 lines

  1. Interrupt List, part 3 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------B-1600-------------------------------
  4. INT 16 - KEYBOARD - GET KEYSTROKE
  5.     AH = 00h
  6. Return: AH = BIOS scan code
  7.     AL = ASCII character
  8. Notes:    on extended keyboards, this function discards any extended keystrokes,
  9.       returning only when a non-extended keystroke is available
  10.     the BIOS scan code is usually, but not always, the same as the hardware
  11.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  12.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  13.       differs for shifted special keys.
  14. SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,INT 18/AH=00h
  15. --------B-1601-------------------------------
  16. INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
  17.     AH = 01h
  18. Return: ZF set if no keystroke available
  19.     ZF clear if keystroke available
  20.         AH = BIOS scan code
  21.         AL = ASCII character
  22. Note:    if a keystroke is present, it is not removed from the keyboard buffer;
  23.       however, any extended keystrokes which are not compatible with 83/84-
  24.       key keyboards are removed in the process of checking whether a
  25.       non-extended keystroke is available
  26. SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h
  27. --------B-1602-------------------------------
  28. INT 16 - KEYBOARD - GET SHIFT FLAGS
  29.     AH = 02h
  30. Return: AL = shift flags (see below)
  31. SeeAlso: AH=12h,AH=22h,INT 17/AH=0Dh,INT 18/AH=02h
  32.  
  33. Bitfields for shift flags:
  34.  bit 7    Insert active
  35.  bit 6    CapsLock active
  36.  bit 5    NumLock active
  37.  bit 4    ScrollLock active
  38.  bit 3    Alt key pressed (either Alt on 101/102-key keyboards)
  39.  bit 2    Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  40.  bit 1    left shift key pressed
  41.  bit 0    right shift key pressed
  42. --------B-1603-------------------------------
  43. INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
  44.     AH = 03h
  45.     AL = subfunction
  46.         00h set default delay and rate (PCjr and some PS/2)
  47.         01h increase delay before repeat (PCjr)
  48.         02h decrease repeat rate by factor of 2 (PCjr)
  49.         03h increase delay and decrease repeat rate (PCjr)
  50.         04h turn off typematic repeat (PCjr and some PS/2)
  51.         05h set repeat rate and delay (AT,PS)
  52.         BH = delay value (00h = 250ms to 03h = 1000ms)
  53.         BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
  54.         06h get current typematic rate and delay (newer PS/2s)
  55.         Return: BL = repeat rate (see above)
  56.             BH = delay (see above)
  57. Note:    use INT 16/AH=09h to determine whether some of the subfunctions are
  58.       supported
  59. SeeAlso: INT 16/AH=09h,AH=29h"HUNTER",AH=2Ah"HUNTER"
  60. --------B-1604-------------------------------
  61. INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
  62.     AH = 04h
  63.     AL = keyclick state
  64.         00h off
  65.         01h on
  66. SeeAlso: AH=03h
  67. --------B-1605-------------------------------
  68. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  69.     AH = 05h
  70.     CH = scan code
  71.     CL = ASCII character
  72. Return: AL = 00h if successful
  73.          01h if keyboard buffer full
  74. Note:    under DESQview, the following "keystrokes" invoke the following
  75.       actions when they are read from the keyboard buffer:
  76.         38FBh or FB00h    switch to next window (only if main menu
  77.                 popped up)
  78.         38FCh or FC00h    pop up DESQview main menu
  79.         38FEh or FE00h    close the current window
  80.         38FFh or FF00h    pop up DESQview learn menu
  81. SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
  82. --------B-1605-------------------------------
  83. INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only)
  84.     AH = 05h
  85.     AL = function
  86.         01h set keyboard layout to French
  87.         02h set keyboard layout to German
  88.         03h set keyboard layout to Italian
  89.         04h set keyboard layout to Spanish
  90.         05h set keyboard layout to UK
  91.         80h check if function supported
  92.         Return: AL <> 80h if supported
  93. Return: ???
  94. Note:    this function is called by the DOS 3.2 KEYBxx.COM
  95. SeeAlso: AH=92h,AH=A2h
  96. --------B-1609-------------------------------
  97. INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
  98.     AH = 09h
  99. Return: AL = supported keyboard functions (see below)
  100. Note:    this function is only available if bit 6 of the second feature byte
  101.       returned by INT 15/AH=C0h is set
  102. SeeAlso: AH=03h,AH=0Ah,AH=10h,AH=11h,AH=12h,AH=20h,AH=21h,AH=22h,INT 15/AH=C0h
  103.  
  104. Bitfields for supported keyboard functions:
  105.  bit 7    reserved
  106.  bit 6    INT 16/AH=20h-22h supported (122-key keyboard support)
  107.  bit 5    INT 16/AH=10h-12h supported (enhanced keyboard support)
  108.  bit 4    INT 16/AH=0Ah supported
  109.  bit 3    INT 16/AX=0306h supported
  110.  bit 2    INT 16/AX=0305h supported
  111.  bit 1    INT 16/AX=0304h supported
  112.  bit 0    INT 16/AX=0300h supported
  113. --------B-160A-------------------------------
  114. INT 16 - KEYBOARD - GET KEYBOARD ID
  115.     AH = 0Ah
  116. Return: BX = keyboard ID or 0000h if no keyboard attached
  117. Note:    check return value from AH=09h to determine whether this function is
  118.       supported
  119. SeeAlso: AH=09h
  120. --------B-1610-------------------------------
  121. INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
  122.     AH = 10h
  123. Return: AH = BIOS scan code
  124.     AL = ASCII character
  125. Notes:    if no keystroke is available, this function waits until one is placed
  126.       in the keyboard buffer
  127.     the BIOS scan code is usually, but not always, the same as the hardware
  128.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  129.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  130.       differs for shifted special keys.
  131.     unlike AH=00h, this function does not discard extended keystrokes
  132.     INT 16/AH=09h can be used to determine whether this function is
  133.       supported, but only on later model PS/2s
  134. SeeAlso: AH=00h,AH=09h,AH=11h,AH=20h
  135. --------B-1611-------------------------------
  136. INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
  137.     AH = 11h
  138. Return: ZF set if no keystroke available
  139.     ZF clear if keystroke available
  140.         AH = BIOS scan code
  141.         AL = ASCII character
  142. Notes:    if a keystroke is available, it is not removed from the keyboard buffer
  143.     unlike AH=01h, this function does not discard extended keystrokes
  144.     some versions of the IBM BIOS Technical Reference erroneously report
  145.       that CF is returned instead of ZF
  146.     INT 16/AH=09h can be used to determine whether this function is
  147.       supported, but only on later model PS/2s
  148. SeeAlso: AH=01h,AH=09h,AH=10h,AH=21h
  149. --------B-1612-------------------------------
  150. INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
  151.     AH = 12h
  152. Return: AL = shift flags 1 (same as returned by AH=02h) (see below)
  153.     AH = shift flags 2 (see below)
  154. Notes:    AL bit 3 set only for left Alt key on many machines
  155.     AH bits 7 through 4 always clear on a Compaq SLT/286
  156.     INT 16/AH=09h can be used to determine whether this function is
  157.       supported, but only on later model PS/2s
  158. SeeAlso: AH=02h,AH=09h,AH=22h,AH=51h,INT 17/AH=0Dh
  159.  
  160. Bitfields for shift flags 1:
  161.  bit 7    Insert active
  162.  bit 6    CapsLock active
  163.  bit 5    NumLock active
  164.  bit 4    ScrollLock active
  165.  bit 3    Alt key pressed (either Alt on 101/102-key keyboards)
  166.  bit 2    Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  167.  bit 1    left shift key pressed
  168.  bit 0    right shift key pressed
  169.  
  170. Bitfields for shift flags 2:
  171.  bit 7    SysRq key pressed
  172.  bit 6    CapsLock pressed
  173.  bit 5    NumLock pressed
  174.  bit 4    ScrollLock pressed
  175.  bit 3    right Alt key pressed
  176.  bit 2    right Ctrl key pressed
  177.  bit 1    left Alt key pressed
  178.  bit 0    left Ctrl key pressed
  179. --------B-1620-------------------------------
  180. INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE (122-key kbd support only)
  181.     AH = 20h
  182. Return: AH = BIOS scan code (see AH=10h for details)
  183.     AL = ASCII character
  184. Note:    use AH=09h to determine whether this function is supported
  185. SeeAlso: AH=00h,AH=09h,AH=10h,AH=21h,AH=22h
  186. --------b-1620------------------------------------
  187. INT 16 - HUNTER 16 - SET TEMPORARY SHIFT
  188.     AH = 20h
  189.     AL = Shift Status
  190.         bit 4 Scroll Lock on
  191.         bit 5 Num Lock on
  192.         bit 6 Caps Lock on
  193. Notes:    the Husky Hunter 16 is an 8088-based ruggedized laptop.     Other family
  194.       members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
  195.     the user can override the specified settings by pressing the keys
  196. --------B-1621-------------------------------
  197. INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE (122-key kbd support only)
  198.     AH = 21h
  199. Return: ZF set if no keystroke available
  200.     ZF clear if keystroke available
  201.         AH = BIOS scan code
  202.         AL = ASCII character
  203. Notes:    use AH=09h to determine whether this function is supported
  204.     some versions of the IBM BIOS Technical Reference erroneously report
  205.       that CF is returned instead of ZF
  206. SeeAlso: AH=01h,AH=09h,AH=11h,AH=20h,AH=21h
  207. --------b-1621------------------------------------
  208. INT 16 - HUNTER 16 - CONTROL SHIFT KEYS
  209.     AH = 21h
  210.     AL = shift keys to control (see AH=02h shift states)
  211.     BL = shift state for disabled keys
  212. Note:    If a bit in AL is set the key is disabled and set to the state of the
  213.       corresponding bit in BL
  214. SeeAlso: AH=20h"HUNTER",AH=22h"HUNTER"
  215. --------B-1622-------------------------------
  216. INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS (122-key kbd support only)
  217.     AH = 22h
  218. Return: AL = shift flags 1 (see AH=12h)
  219.     AH = shift flags 2 (see AH=12h)
  220. Note:    use AH=09h to determine whether this function is supported
  221. SeeAlso: AH=02h,AH=09h,AH=12h,AH=20h,AH=21h
  222. --------b-1622------------------------------------
  223. INT 16 - HUNTER 16 - CONTROL CTRL-ALT-DEL
  224.     AH = 22h
  225.     AL = new Ctrl-Alt-Del state (00h enabled, nonzero disabled)
  226.     BX = 0708h
  227.     CX = 0910h
  228.     DX = 1112h
  229. Return: AL = 00h if successful
  230. SeeAlso: AH=21h"HUNTER",AH=23h"HUNTER",AH=2Ah
  231. --------b-1623------------------------------------
  232. INT 16 - HUNTER 16 - CONTROL EMERGENCY BREAKOUT
  233.     AH = 23h
  234.     AL = new state of breakout (00h enabled, nonzero disabled)
  235.     BX = 0708h   
  236.     CX = 0910h
  237.     DX = 1112h
  238. Return: AL = 00h if successful
  239. Desc:    Enables or disables the emergency breakout feature, where the
  240.       Hunter 16 at power on checks whether the X and P keys are pressed.
  241.       If so the machine will boot rather than continue the running program
  242. SeeAlso: AH=22h"HUNTER"
  243. --------b-1624------------------------------------
  244. INT 16 - HUNTER 16 - REDEFINE KEY CODES
  245.     AH = 24h
  246.     AL = Matrix Code (see below)
  247.     BL = new Key code
  248. Return: AL = status (00h successful, nonzero failed)
  249. SeeAlso: AH=2Bh,AH=2Ch
  250.  
  251. Values for Matrix Code:
  252.  Code  Key        Code    Key        Code    Key
  253.  00h   Esc key        1Eh    Space        3Bh    L
  254.  01h   1        21h    0        3Ch    ,
  255.  02h   Q        22h    -        3Eh    Right shift
  256.  03h   Tab        23h    '        42h    8
  257.  04h   Num Lock        24h    Keypad 4    43h    7
  258.  05h   \        25h    Enter        44h    U
  259.  08h   LShift        26h    Keypad 7    45h    I
  260.  09h   Ctrl        27h    .        46h    J
  261.  0Ah   "Paw" key    28h    Keypad 1    47h    K
  262.  0Bh   2        29h    Keypad 0    48h    M
  263.  0Ch   W        2Ch    =        49h    N 
  264.  0Dh   A        2Dh    Backspace    4Ah    /
  265.  0Eh   S        2Eh    Keypad 8    4Dh    6
  266.  0Fh   Z        2Fh    Keypad 9    4Eh    5
  267.  11h   Alt        30h    Keypad 5    4Fh    T
  268.  16h   4        31h    Keypad 6    50h    Y
  269.  17h   3        32h    Keypad 2    51h    G
  270.  18h   E        33h    Keypad 3    52h    H
  271.  19h   R        34h    Keypad .    53h    B
  272.  1Ah   D        37h    9        54h    V
  273.  1Bh   F        38h    O        55h    #
  274.  1Ch   X        39h    P        58h    Pwr
  275.  1Dh   C        3Ah    ;        59h    Shift Pwr
  276. --------b-1625------------------------------------
  277. INT 16 - HUNTER 16 - RESET KEYBOARD
  278.     AH = 25h
  279. Return: AL = 00h
  280. Desc:    restores the standard keyboard layout after any remapping
  281. SeeAlso: AH=24h,AH=2Bh,AH=2Ch
  282. --------b-1626------------------------------------
  283. INT 16 - HUNTER 16 - CONTROL KEYCLICK
  284.     AH = 26h
  285.     AL = new state of keyclicks (00h disabled, 01h enabled)
  286. Return: AL = 00h
  287. SeeAlso: AH=2Ah
  288. --------b-1627------------------------------------
  289. INT 16 - HUNTER 16 - CONTROL SCREEN DUMP AREA
  290.     AH = 27h
  291.     AL = what to dump
  292.         00h whole (virtual) window
  293.         01h LCD window only
  294. Return: AL = 00h
  295. Desc:    control whether printscren dumps the whole 80x25 screen or only the
  296.       part displayed in the LCD window
  297. Note:    the Hunter 16 has a 240x64 LCD display which serves as a window into
  298.       a 640x200 virtual screen
  299. --------b-1629------------------------------------
  300. INT 16 - HUNTER 16 - GET KEY REPEAT
  301.     AH = 29h
  302. Return: BL = Typematic rate (characters per second) (see below)
  303.     BH = delay (00h = 250ms, 01h = 500ms, 02h = 750ms, 03h = 1s)
  304. SeeAlso: AH=03h,AH=2Ah
  305.  
  306. Values for Typematic rate:
  307.  00h    30.0     08h    15.0     10h    7.5     18h    3.7
  308.  01h    26.7     09h    13.3     11h    6.7     19h    3.3
  309.  02h    24.0     0Ah    12.0     12h    6.0     1Ah    3.0
  310.  03h    21.8     0Bh    10.9     13h    5.5     1Bh    2.7
  311.  04h    20.0     0Ch    10.0     14h    5.0     1Ch    2.5
  312.  05h    18.5     0Dh     9.2     15h    4.6     1Dh    2.3
  313.  06h    17.1     0Eh     8.6     16h    4.3     1Eh    2.1
  314.  07h    16.0     0Fh     8.0     17h    4.0     1Fh    2.0
  315. SeeAlso: AH=2Ah
  316. --------b-162A------------------------------------
  317. INT 16 - HUNTER 16 - CONTROL KEY REPEAT
  318.     AH = 2Ah
  319.     AL = new state of keyboard autorepeat (00h disabled, 01h enabled)
  320. SeeAlso: AH=03h,AH=26h,AH=29h,AH=2Bh
  321. --------b-162B------------------------------------
  322. INT 16 - HUNTER 16 - REDEFINE KEY SCAN CODES
  323.     AH = 2Bh
  324.     AL = which key table to redefine
  325.         00h unshifted
  326.         01h shifted
  327.         02h Numlock
  328.     BH = standard scan code of key (00h-80h)
  329.     BL = new scan code
  330. Desc:    redefine the generated scan code from BH to BL
  331. SeeAlso: AH=24h,AH=2Ah,AH=2Ch
  332. --------b-162C------------------------------------
  333. INT 16 - HUNTER 16 - REDEFINE PAW KEY CODES
  334.     AH = 2Ch
  335.     AL = Matrix code of key (see AH=29h)
  336.     BL = new key code
  337. Return: AL = status (00h success, nonzero failed)
  338. Desc:    redefine the key code generated by holding the PAW key down and
  339.       pressing the key in AL
  340. SeeAlso: AH=24h,AH=2Bh
  341. --------b-162D------------------------------------
  342. INT 16 - HUNTER 16 - CONTROL BREAK KEYS
  343.     AH = 2Dh
  344.     AL = enabled break keys
  345.         bit 0 Ctrl-C
  346.         bit 1 Ctrl-Break
  347.     BX = 0708h
  348.     CX = 0910h
  349.     DX = 1112h
  350. Return: AL = status (00h success, FFh failed)
  351. SeeAlso: AH=21h"HUNTER"
  352. --------U-164252-----------------------------
  353. INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
  354.     AX = 4252h
  355. Return: AX = 5242h if installed
  356. Program: TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the
  357.       PC Magazine utility CAPTURE written by Tom Kihlken
  358. SeeAlso: AX=4253h,AX=4254h
  359. --------U-164253-----------------------------
  360. INT 16 - TEXTCAP 2.0 - UNINSTALL
  361.     AX = 4253h
  362. Return: AX = segment of resident code
  363. Notes:    the uninstall code does not check whether interrupt vectors have been
  364.       chained by other programs
  365.     the caller must free the main memory block (using the returned segment)
  366. SeeAlso: AX=4252h,AX=4254h
  367. --------U-164254-----------------------------
  368. INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
  369.     AX = 4254h
  370. Return: AX = status
  371.         4254h if screen dump will be written as soon as disk becomes idle
  372.         5442h if screen dump written
  373. SeeAlso: AX=4252h,AX=4253h
  374. --------e-164500-----------------------------
  375. INT 16 - Shamrock Software EMAIL - GET STATUS
  376.     AX = 4500h
  377.     DL = port number (01h = COM1)
  378.     ES:BX -> 13-byte buffer for ASCIZ name
  379. Return: AX = 4D00h if EMAIL installed on specified port
  380.         ES:BX -> "" if no connection
  381.           -> "*" if connection but caller has not identified name
  382.           -> name otherwise
  383.         CX = version (CH = major, CL = minor)
  384.         DL = privilege level of user (00h = guest)
  385.         DH = chosen language (00h German, 01h English)
  386. SeeAlso: AX=4501h,AX=4502h
  387. --------e-164501-----------------------------
  388. INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
  389.     AX = 4501h
  390.     DL = port number (01h = COM1)
  391. Return: AX = 4D00h if EMAIL installed on specified port
  392.         BX = maximum connect time in clock ticks
  393.         CX = maximum connect time for guests (without name) in clock ticks
  394.         DX = elapsed connect time of current user in clock ticks
  395. SeeAlso: AX=4500h
  396. --------e-164502-----------------------------
  397. INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
  398.     AX = 4502h
  399.     DL = port number (01h = COM1)
  400. Return: AX = 4D00h if EMAIL installed on specified port
  401.         BL = current value of serial port's Line Control Register
  402.         BH = flags
  403.         bit 0: ISO code
  404.         bit 1: pause
  405.         bit 2: linefeed
  406.         bit 3: ANSI sequences
  407.         CX = selected country code (33 = France, 49 = Germany, etc)
  408.         DX = baudrate divisor (115200/DX = baudrate)
  409. SeeAlso: AX=4500h
  410. --------e-164503-----------------------------
  411. INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
  412.     AX = 4503h
  413.     DL = port number (01h = COM1)
  414.     DH = maximum execution time in clock ticks (00h = 5 seconds)
  415.     ES:BX -> ASCIZ string with new user command-word
  416. Return: AX = 4D00h if EMAIL installed on specified port
  417. Notes:    a single user command (consisting of only uppercase letters and digits)
  418.       may be defined, and remains valid until it is overwritten or the
  419.       EMAIL program terminates; the user command must be activated by
  420.       calling AX=4504h at least once.
  421.     an existing command word may be redefined with this function
  422. SeeAlso: AX=4504h,AX=4505h
  423. --------e-164504-----------------------------
  424. INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
  425.     AX = 4504h
  426.     DL = port number (01h = COM1)
  427.     ES:BX -> 80-byte buffer for ASCIZ user input line
  428. Return: AX = 4D00h if EMAIL installed on specified port
  429.         DL = flags
  430.         bit 0: user function supported (always set)
  431.         bit 1: user entered user-function command word
  432.         if DL bit 1 set,
  433.         ES:BX buffer contains line entered by user which begins with
  434.             the defined command word and has been converted to all
  435.             caps
  436. Note:    caller must process the returned commandline and invoke AX=4505h
  437.       within five seconds with the result of that processing
  438. SeeAlso: AX=4503h,AX=4505h
  439. --------e-164505-----------------------------
  440. INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
  441.     AX = 4505h
  442.     DL = port number (01h = COM1)
  443.     DH = error flag
  444.         bit 3: set on error
  445.     ES:BX -> ASCIZ text to return to user, max 1024 bytes
  446. Return: AH = 4Dh if EMAIL installed on specified port
  447.     AL = status
  448.         00h successful
  449.         02h unable to perform function (timeout, prev call not complete)
  450.         other error
  451. Notes:    if the error flag in DH is set, the string is not sent and an error
  452.       message is generated instead; if this function is not called within
  453.       five seconds of AX=4504h, EMAIL automatically generates an error
  454.       message
  455.     the string is copied into an internal buffer, allowing this function's
  456.       caller to continue immediately
  457. SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
  458. --------e-164506-----------------------------
  459. INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
  460.     AX = 4506h
  461.     DL = port number (01h = COM1)
  462.     ES:BX -> 13-byte buffer for ASCIZ filename
  463. Return: AX = 4D00h if EMAIL installed on specified port
  464.         DH = Xmodem status
  465.         00h no XGET command given
  466.         01h XGET in progress
  467.         02h XGET completed successfully
  468.         ES:BX buffer filled with last filename given to XGET command
  469.         (without path)
  470. Note:    DH=02h will only be returned once per XGET; subsequent calls will
  471.       return DH=00h
  472. SeeAlso: AX=4500h,INT 17/AX=2408h
  473. --------K-164D4F-----------------------------
  474. INT 16 - M16_KBD.COM v5.6 - INSTALLATION CHECK
  475.     AX = 4D4Fh
  476. Return: AX = 6F6Dh if installed
  477.         ES = segment of resident code
  478. Program: M16_KBD is a shareware Cyrillic keyboard driver by I.V. Morozov
  479. SeeAlso: INT 10/AX=1130h/BX=4D4Fh
  480. --------J-165000-----------------------------
  481. INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE
  482.     AX = 5000h
  483.     BX = country code
  484.         0001h USA (English), 0051h Japan
  485. Return: AL = status
  486.         00h successful
  487.         01h bad country code
  488.         02h other error
  489. SeeAlso: AX=5001h,INT 10/AX=5000h,INT 17/AX=5000h
  490. --------J-165001-----------------------------
  491. INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE
  492.     AX = 5001h
  493. Return: AL = status
  494.         00h successful
  495.         BX = country code
  496.         02h error
  497. SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h
  498. --------J-1651-------------------------------
  499. INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS
  500.     AH = 51h
  501. Return: AL = standard shift key states (see AH=12h)
  502.     AH = Kana lock (00h off, 01h on)
  503. SeeAlso: AH=02h,AH=12h,AH=22h
  504. --------t-165453BX5242-----------------------
  505. INT 16 - TSRBONES - INSTALLATION CHECK
  506.     AX = 5453h ('TS')
  507.     BX = 5242h ('RB')
  508.     CX = 4F4Eh ('ON')
  509.     DX = 4553h ('ES')
  510. Return: AX = 4553h if installed
  511.     BX = 4F4Eh if installed
  512.     CX = 5242h if installed
  513.     DX = 5453h if installed
  514. Program: TSRBONES is a skeletal TSR framework by Robert Curtis Davis
  515. Note:    these values are the default as the TSRBONES package is distributed,
  516.       but will normally be changed when implementing an actual TSR with
  517.       the TSRBONES skeleton
  518. SeeAlso: INT 2D"AMIS"
  519. --------A-165500-----------------------------
  520. INT 16 C - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  521.     AX = 5500h
  522. Return: AX = 4D53h ('MS') if keyboard TSR present
  523. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  524.       that are present through this call.
  525.     if the return is not 4D53h, Word installs its own INT 09 and INT 16
  526.       handlers; otherwise it assumes that the TSR will handle the keyboard
  527. SeeAlso: INT 1A/AX=3601h
  528. --------A-1655FEDX0000-----------------------
  529. INT 16 CU - Microsoft QBASIC internal - MICROSOFT COOPERATION WITH TSR???
  530.     AX = 55FEh
  531.     DX = 0000h
  532.     ES:BX -> ??? function
  533.     ES:CX -> ??? structure
  534. Return: AX = result
  535.         4D4Bh only the INT 1B handler will be installed.
  536.         <> 4D4Bh handlers for INT 08, INT 09, INT 16, INT 1B, and
  537.           INT 1C are installed
  538. Notes:    The pointer in ES:CX seems to point at a structure defining a callback
  539.       function when new keyboard keys are pressed. If a TSR returns
  540.       AX=4D4Bh, QBASIC will stop (with IRQ's and interrupts enabled).
  541. SeeAlso: INT 16/AX=5500h,INT 1A/AX=3601h
  542. --------U-1655FF-----------------------------
  543. INT 16 - Swap Utilities - ???
  544.     AX = 55FFh
  545.     BX >= 0004h
  546.     CX = function
  547.         0000h set ??? flag
  548.         other clear ??? flag
  549. Note:    present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools v7, as
  550.       well as the Trusted Access SCRNBLNK.COM; this may be part of the
  551.       standard TesSeRact library
  552. SeeAlso: INT 2F/AX=5453h
  553. --------c-165758BX4858-----------------------
  554. INT 16 U - Netroom CACHECLK - INSTALLATION CHECK
  555.     AX = 5758h
  556.     BX = 4858h ('HX')
  557.     DX = 4443h ('DC')
  558.     CX <> 5758h
  559. Return: BX = 6878h if installed
  560.     CX = 6463h if installed
  561.         AX = code segment of TSR
  562.         CX = internal version??? (v3.00 returns 0100h)
  563. Program: CACHECLK is a "cloaked" disk cache included with Netroom
  564. Notes:    if CX=5758h on entry, CACHECLK returns with all registers unchanged
  565.     the cache statistics are located early in the segment pointed at by
  566.       AX on return
  567. ----------165758BX5754-----------------------
  568. INT 16 U - Netroom ??? - ???
  569.     AX = 5758h
  570.     BX = 5754h
  571.     ???
  572. Return: ???
  573. ----------165758BX5755-----------------------
  574. INT 16 U - Netroom ??? - ???
  575.     AX = 5758h
  576.     BX = 5755h
  577.     DS:SI -> ???
  578. Return: ???
  579. ----------165758BX5756-----------------------
  580. INT 16 U - Netroom ??? - INSTALLATION CHECK
  581.     AX = 5758h
  582.     BX = 5756h
  583. Return: BX <> 5756h if installed
  584. --------m-165758BX5858-----------------------
  585. INT 16 U - Netroom PRENET - GET OLD INTERRUPT VECTORS
  586.     AX = 5758h
  587.     BX = 5858h
  588. Return: CF clear
  589.     DX:BX -> saved copy of interrupt vector table
  590. Note:    the installation check consists of calling this function and comparing
  591.       BX against 5858h on return; if it has changed, PRENET is installed
  592. SeeAlso: AX=5758h/BX=5859h
  593. Index:    installation check;Netroom PRENET
  594. --------m-165758BX5859-----------------------
  595. INT 16 U - Netroom POSTNET - GET OLD INTERRUPT VECTORS
  596.     AX = 5758h
  597.     BX = 5859h
  598. Return: CF clear
  599.     DX:BX -> saved copy of interrupt vector table
  600. Note:    the installation check consists of calling this function and comparing
  601.       BX against 5859h on return; if it has changed, POSTNET is installed
  602. SeeAlso: AX=5758h/BX=5858h
  603. Index:    installation check;Netroom POSTNET
  604. --------U-166969BX6968-----------------------
  605. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  606.     AX = 6969h
  607.     BX = 6968h
  608. Return: resident code unhooked, but not removed from memory
  609. Index:    uninstall;BACKTALK
  610. --------U-166969BX6969-----------------------
  611. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  612.     AX = 6969h
  613.     BX = 6969h
  614.     DX = 0000h
  615. Return: DX nonzero if installed
  616.         BX = CS of resident code
  617.         DX = PSP segment of resident code
  618.         DS:SI -> ASCIZ identification string "CPoint Talk"
  619. --------i-166A6B-----------------------------
  620. INT 16 U - FastJuice - DISABLE/UNLOAD???
  621.     AX = 6A6Bh
  622. Return: ???
  623. Program: FastJuice is a resident battery-power monitor by SeaSide Software
  624. SeeAlso: AX=7463h
  625. Index:    uninstall;FastJuice
  626. --------G-166C63-----------------------------
  627. INT 16 U - TMED v1.6a - INSTALLATION CHECK
  628.     AX = 6C63h ('lc')
  629. Return: AX = 4C43h ('LC') if installed
  630. Program: TMED is a freeware resident memory editor by Liang Chen
  631. --------b-166F00BX0000-----------------------
  632. INT 16 - HP HIL Vectras - HP HIL Extended BIOS INSTALLATION CHECK
  633.     AX = 6F00h
  634.     BX = 0000h
  635. Return: BX = 4850h if present
  636. Notes:    called by recent MS Mouse drivers looking for an HP-HIL mouse
  637.     supported by ES, QS, and RS series HP Vectras
  638. SeeAlso: AX=6F0Dh
  639. --------b-166F0D-----------------------------
  640. INT 16 - HP HIL Vectras - GET HIL Extended BIOS INTERRUPT NUMBER
  641.     AX = 6F0Dh
  642. Return: AH = interrupt number (default 6Fh, 02h means 6Fh as well)
  643. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 to support the HP-HIL
  644.       input system
  645. SeeAlso: AX=6F0Eh,INT 6F"HP"
  646. --------b-166F0E-----------------------------
  647. INT 16 - HP HIL Vectras - SET HIL Extended BIOS INTERRUPT NUMBER
  648.     AX = 6F0Eh
  649.     BL = new interrupt number (60h-6Fh,78h-7Fh)
  650. Return: AH = status (00h = successful)
  651. Desc:    allows the HIL Extended BIOS software to use a non-default interrupt
  652.       number in case of an interrupt conflict with another application
  653. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 to support the HP-HIL
  654.       input system
  655. SeeAlso: AX=6F0Dh,INT 6F"HP"
  656. --------K-1670-------------------------------
  657. INT 16 - FAKEY.COM - INSTALLATION CHECK
  658.     AH = 70h
  659. Return: AX = 1954h if installed
  660. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  661. --------K-1671-------------------------------
  662. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  663.     AH = 71h
  664.     CX = number of keystrokes
  665.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  666. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  667. SeeAlso: AH=05h,AH=72h
  668. --------K-1672-------------------------------
  669. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  670.     AH = 72h
  671. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  672. SeeAlso: AH=71h
  673. --------K-1673-------------------------------
  674. INT 16 - FAKEY.COM - PLAY TONES
  675.     AH = 73h
  676.     CX = number of tones to play
  677.     DS:SI -> array of tones (see below)
  678. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  679. SeeAlso: INT 15/AX=1019h
  680.  
  681. Format of tone array entries:
  682. Offset    Size    Description
  683.  00h    WORD    divisor for timer channel 2
  684.  02h    WORD    duration in clock ticks
  685. --------i-167463-----------------------------
  686. INT 16 U - FastJuice - INSTALLATION CHECK
  687.     AX = 7463h ("tc")
  688. Return: AX = 5443h ("TC") if installed
  689. Program: FastJuice is a resident battery-power monitor by SeaSide Software
  690. SeeAlso: AX=6A6Bh
  691. --------R-1675-------------------------------
  692. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  693.     AH = 75h
  694.     AL = number of ticks between checks for new screen changes
  695. --------R-1676-------------------------------
  696. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  697.     AH = 76h
  698.     AL = error checking type
  699.         00h none
  700.         01h fast
  701.         02h slow
  702. --------R-1677-------------------------------
  703. INT 16 - pcANYWHERE III - LOG OFF
  704.     AH = 77h
  705.     AL = mode
  706.         00h wait for another call
  707.         01h leave in Memory Resident Mode
  708.         02h leave in Automatic Mode
  709.         FFh leave in current operating mode
  710. --------U-167761-----------------------------
  711. INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
  712.     AX = 7761h ('wa')
  713. Return: AX = 5741h ('WA') if installed
  714. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  715. SeeAlso: INT 21/AX=7761h
  716. --------U-167788BX7789-----------------------
  717. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  718.     AX = 7788h
  719.     BX = 7789h
  720.     DS:SI -> signature "PUSHDIR VERSION 1.0"
  721. Return: AX = 7789h if installed and signature correct
  722.     BX = 7788h
  723.     SI destroyed
  724. --------R-1679-------------------------------
  725. INT 16 - pcANYWHERE III - CHECK STATUS
  726.     AH = 79h
  727. Return: AX = status
  728.         FFFFh if resident and active
  729.         FFFEh if resident but not active
  730.         FFFDh if in Memory Resident mode
  731.         FFFCh if in Automatic mode
  732.         other value if not resident
  733. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  734. --------R-167A-------------------------------
  735. INT 16 - pcANYWHERE III - CANCEL SESSION
  736.     AH = 7Ah
  737. --------R-167B00-----------------------------
  738. INT 16 - pcANYWHERE III - SUSPEND
  739.     AX = 7B00h
  740. SeeAlso: AH=79h,AX=7B01h
  741. --------R-167B01-----------------------------
  742. INT 16 - pcANYWHERE III - RESUME
  743.     AX = 7B01h
  744. SeeAlso: AH=79h,AX=7B00h
  745. --------R-167C-------------------------------
  746. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  747.     AH = 7Ch
  748. Return: AH = port number
  749.     AL = baud rate
  750.         00h = 50 baud
  751.         01h = 75 baud
  752.         02h = 110 baud
  753.         03h = 134.5 baud
  754.         04h = 150 baud
  755.         05h = 300 baud
  756.         06h = 600 baud
  757.         07h = 1200 baud
  758.         08h = 1800 baud
  759.         09h = 2000 baud
  760.         0Ah = 2400 baud
  761.         0Bh = 4800 baud
  762.         0Ch = 7200 baud
  763.         0Dh = 9600 baud
  764.         0Eh = 19200 baud
  765. --------R-167D-------------------------------
  766. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  767.     AH = 7Dh
  768.     AL = subfunction
  769.         00h set terminal parameters
  770.         01h get terminal parameters
  771.         02h get configuration header and terminal parameters
  772.     DS:CX -> terminal parameter block
  773. --------R-167E-------------------------------
  774. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  775.     AH = 7Eh
  776.     AL = subfunction
  777.         01h port input status
  778.         Return AX = 0 if no characer ready,
  779.                AX = 1 if character ready
  780.         02h port input character
  781.         Return AL = received character
  782.         03h port output character in CX
  783.         11h hang up phone
  784. --------R-167F-------------------------------
  785. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  786.     AH = 7Fh
  787.     AL = subfunction
  788.         00h enable remote keyboard only
  789.         01h enable host keyboard only
  790.         02h enable both keyboards
  791.         08h display top 24 lines
  792.         09h display bottom 24 lines
  793.         10h Hayes modem
  794.         11h other modem
  795.         12h direct connect
  796. --------U-1680-------------------------------
  797. INT 16 - MAKEY.COM - INSTALLATION CHECK
  798.     AH = 80h
  799. Return: AX = 1954h if installed
  800. Program: MAKEY is a utility by System Enhancement Associates
  801. --------U-168765BX4321-----------------------
  802. INT 16 - AT.COM version 8/26/87 - API
  803.     AX = 8765h
  804.     BX = 4321h
  805.     CX = ??? or FFFFh
  806.     if CX = FFFFh
  807.         DX = number of event to remove or FFFFh
  808. Return: ES:BX -> event record array
  809. Program: AT.COM is a resident scheduler by Bill Frolik
  810.  
  811. Format of event record:
  812. Offset    Size    Description
  813.  00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
  814.  01h    BYTE    day of date on which to trigger
  815.  02h    BYTE    month of date on which to trigger
  816.  03h    BYTE    trigger time, minute
  817.  04h    BYTE    trigger time, hour
  818.  05h    WORD    offset of command to be executed
  819. ----------1692-------------------------------
  820. INT 16 - ???
  821.     AH = 92h
  822. Return: AH <= 80h if ???
  823. Note:    this function is called by the DOS 3.2 KEYBxx.COM and DOS 5+ KEYB.COM
  824. SeeAlso: AH=05h"PCjr",AH=A2h
  825. --------U-1699-------------------------------
  826. INT 16 - SCOUT v5.4 - GET ???
  827.     AH = 99h
  828. Return: AX = ABCDh
  829.     BX:CX -> ??? (appears to be start of PSP for resident portion)
  830. Program: Scout is a memory-resident file manager by New-Ware
  831. SeeAlso: AH=9Eh
  832. --------U-169E-------------------------------
  833. INT 16 - SCOUT v5.4 - INSTALLATION CHECK
  834.     AH = 9Eh
  835. Return: AX = ABCDh if installed
  836. Program: Scout is a memory-resident file manager by New-Ware
  837. SeeAlso: AH=99h
  838. ----------16A2-------------------------------
  839. INT 16 - ???
  840.     AH = A2h
  841. Return: AH <= 80h if ???
  842. Note:    this function is this function is called by the DOS 5+ KEYB.COM
  843. SeeAlso: AH=92h
  844. --------V-16AA-------------------------------
  845. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  846.     AH = AAh
  847.     Various registers set up by high level language.
  848. Return: Graphics performed
  849. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  850.       Modula 2 and others from DataBiten in Sweden. The library is
  851.       installed as a memory resident driver.
  852. --------U-16AABBBXEEFF-----------------------
  853. INT 16 U - JORJ v4.3 - INSTALLATION CHECK
  854.     AX = AABBh
  855.     BX = EEFFh
  856. Return: AX = EEFFh if installed
  857.     BX = AABBh if installed
  858.         CL = hotkey name (default 6Ah 'j' for Alt-J)
  859. Program: JORJ is a shareware dictionary with phonetic lookup by Jorj Software
  860.       Co.
  861. Index:    hotkeys;JORJ
  862. --------m-16B0B1-----------------------------
  863. INT 16 - VGARAM v1.00 - INSTALLATION CHECK
  864.     AX = B0B1h
  865.     ES:DI -> 6 byte signature "VGARAM"
  866. Return: AX = B1B0h if installed,
  867.     DS:BX -> VGARAM Status byte: 0 = OFF, 1 = ON
  868. Program: VGARAM is a utility by Brett Warthen which makes VGA memory which is
  869.       not used in text modes available for DOS
  870. --------K-16CA--BX736B-----------------------
  871. INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
  872.     AH = CAh
  873.     BX = 736Bh ("sk")
  874.     CX = 736Bh
  875.     AL = function
  876.         00h installation check
  877.         Return: DX = words available in keyboard buffer
  878.         01h place keystroke in buffer
  879.         DX = keystroke (DH = scan code, DL = ASCII character)
  880.         Return: DX = words available in keyboard buffer
  881.                 FFFFh on error
  882.         02h flush STACKEY and BIOS keyboard buffers
  883. Return: AX = CAFFh if installed
  884.         BX = segment of resident code
  885.         CX = STACKEY version (CH = major, CL = minor)
  886. Program: STACKEY is a shareware keyboard-input faking TSR
  887. Index:    installation check;STACKEY
  888. --------V-16CA00BX6570-----------------------
  889. INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
  890.     AX = CA00h
  891.     BX = 6570h ("ep")
  892.     CX = 6570h
  893. Return: AX = CAFFh if installed
  894.         BX = segment of resident code
  895.         CX = ??? (0090h)
  896. Program: EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
  897.       permanent across mode switches
  898. SeeAlso: AX=CA00h/BX=7670h
  899. --------V-16CA00BX7670-----------------------
  900. INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
  901.     AX = CA00h
  902.     BX = 7670h ("vp")
  903.     CX = 7670h
  904. Return: AX = CAFFh if installed
  905.         BX = segment of resident code
  906.         CX = ??? (0090h)
  907. Program: VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
  908.       permanent across mode switches
  909. SeeAlso: AX=CA00h/BX=6570h
  910. --------U-16D724CX00CB-----------------------
  911. INT 16 U - APCAL v3.20 - GET ???
  912.     AX = D724h
  913.     CX = 00CBh
  914. Return: AX = 0000h
  915.     BX = 0000h
  916.     DX:CX -> ??? or 0000h:0000h
  917. Program: APCAL is an optionally-resident shareware appointment calendar by
  918.       Gamma Software
  919. SeeAlso: AX=D724h/CX=00CCh,AX=D724h/CX=00CDh
  920. --------U-16D724CX00CC-----------------------
  921. INT 16 U - APCAL v3.20 - GET ???
  922.     AX = D724h
  923.     CX = 00CCh
  924. Return: AX = 0000h
  925.     BX = 0000h
  926.     DX:CX -> ??? (apparently an internal data area)
  927. SeeAlso: AX=D724h/CX=00CBh,AX=D724h/CX=00CDh
  928. --------U-16D724CX00CD-----------------------
  929. INT 16 U - APCAL v3.20 - GET ???
  930.     AX = D724h
  931.     CX = 00CDh
  932. Return: AX = ??? (5345h seen)
  933. SeeAlso: AX=D724h/CX=00CBh,AX=D724h/CX=00CCh
  934. --------t-16E0E0-----------------------------
  935. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  936.     AX = E0E0h
  937. Return: AX = 1F1Fh if installed
  938.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  939. Note:    the returned TSR list provides support for communication among TSRs
  940.       built with TurboPower's Turbo Professional and Object Professional
  941.       libraries for Turbo Pascal
  942. SeeAlso: AX=F0F0h
  943. --------U-16ED--BHED-------------------------
  944. INT 16 - BORLAND TURBO LIGHTNING - API
  945.     AH = EDh
  946.     BH = EDh
  947.     BL = function
  948.         00h installation check
  949.         Return: AX = 5205h
  950.             CH = major version
  951.             CL = minor version
  952.         01h identical to function 00h???
  953.         02h get resident data segment
  954.         Return: AX = data segment of resident portion
  955.         03h get resident ???
  956.         Return: AX = offset of some buffer in resident code seg
  957.         04h redefine auxiliary dictionary
  958.         DS:SI -> counted filename string
  959.         Return: AL = result code
  960.         05h select active environment
  961.         AL = environment (00h to 0Ch)
  962.         Return: AX = status
  963.                 0000h if OK
  964.                 0001h if out of range
  965.         06h toggle AutoProof???
  966.         AL = state (00h off, 01h on)
  967.         07h ???
  968.         08h ???
  969.         AL = char???
  970.         CX = ???
  971.         DX = ???
  972.         Return: AX = 0, 1 or 2
  973.         09h ???
  974.         0Ah ???
  975.         CX = ???
  976.         DX = ???
  977.         Return: AX = ???
  978.         0Bh check dictionary integrity???
  979.         DS:SI -> counted dictionary filename string
  980.         Return: AX = 0, 40h, 80h
  981.         0Ch spellcheck string (disk dictionary, possibly RAM dict as well)
  982.         DS:SI -> counted string to check
  983.         Return: AH = 0
  984.             AL = result code
  985.                00h string found in dictionary
  986.                20h string begins more than one word
  987.                40h string not found
  988.         0Dh set ???
  989.         (sets an internal flag)
  990.         0Eh spellcheck string (RAM dictionary only)
  991.         DS:SI -> counted string to check
  992.         Return: AH = 00h
  993.             AL = result code
  994.                 00h string found in dictionary
  995.                 01h string not found
  996.                 02h ???
  997.         0Fh ???
  998.         10h ???
  999. Notes:    AX in general returns an error code from most functions.
  1000. Index:    installation check;Turbo Lightning
  1001. --------U-16EF-------------------------------
  1002. INT 16 - CALCULATOR - INSTALLATION CHECK
  1003.     AH = EFh
  1004. Return: AX = 0088h if installed
  1005. Program: CALCULATOR is a shareware popup calculator by Andrzej Brzezinski and
  1006.       Marek Kosznik
  1007. --------b-16F0-------------------------------
  1008. INT 16 - Compaq 386 and newer - SET CPU SPEED
  1009.     AH = F0h
  1010.     AL = speed
  1011.         00h equivalent to 6 MHz 80286 (COMMON)
  1012.         01h equivalent to 8 MHz 80286 (FAST)
  1013.         02h full 16 MHz (HIGH)
  1014.         03h toggles between 8 MHz-equivalent and speed set by system board
  1015.         switch (AUTO or HIGH)
  1016.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  1017.         09h specify speed directly
  1018.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  1019. SeeAlso: AH=F1h,AH=F3h
  1020. --------t-16F0F0-----------------------------
  1021. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  1022.     AX = F0F0h
  1023. Return: AX = 0F0Fh if installed
  1024.         ES:DI -> last data block in TSR list
  1025. Note:    the returned TSR list provides support for communication among TSRs
  1026.       built with TurboPower's Turbo Professional and Object Professional
  1027.       libraries for Turbo Pascal
  1028. SeeAlso: AX=E0E0h
  1029.  
  1030. Format of data block:
  1031. Offset    Size    Description
  1032.  00h    DWORD    pointer to program tag (counted ASCII string)
  1033.  04h    WORD    interface version number (0400h)
  1034.  06h    DWORD    pointer to command entry point
  1035.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  1036.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  1037. ---swappable TSRs only---
  1038.  12h    DWORD    pointer to swapping data
  1039.  16h    DWORD    pointer to user data
  1040.     more???
  1041. --------b-16F1-------------------------------
  1042. INT 16 - Compaq 386 and newer - READ CURRENT CPU SPEED
  1043.     AH = F1h
  1044. Return: AL = speed code (see AH=F0h)
  1045.          if AL = 09h, CX = speed code
  1046. SeeAlso: AH=F0h,AH=F3h
  1047. --------b-16F2-------------------------------
  1048. INT 16 - Compaq 386 and newer - DETERMINE ATTACHED KEYBOARD TYPE
  1049.     AH = F2h
  1050. Return: AL = type
  1051.         00h if 11-bit AT keyboard is in use
  1052.         01h if 9-bit PC keyboard is in use
  1053.     AH = 00h (04/08/93 system ROM)
  1054. --------b-16F3-------------------------------
  1055. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  1056.     AH = F3h
  1057.     AL = new limit
  1058.         00h limit is 6 Mhz
  1059.         01h limit is 8 Mhz/6 Mhz
  1060. SeeAlso: AH=F0h,AH=F1h
  1061. --------U-16F398-----------------------------
  1062. INT 16 U - NORTON GUIDES - INSTALLATION CHECK
  1063.     AX = F398h
  1064. Return: AX = 6A73h ("js")
  1065.     BH = scan code of current hot key
  1066.     BL = ASCII code of current hot key
  1067. Note:    NG.EXE was written by John Socha
  1068. --------b-16F400-----------------------------
  1069. INT 16 - Compaq Systempro and higher - CACHE CONTROLLER STATUS
  1070.     AX = F400h
  1071. Return: AH = E2h
  1072.     AL = status
  1073.         00h not present
  1074.         01h enabled
  1075.         02h disabled
  1076. SeeAlso: AX=F401h,AX=F402h
  1077. --------b-16F401-----------------------------
  1078. INT 16 - Compaq Systempro and higher - ENABLE CACHE CONTROLLER
  1079.     AX = F401h
  1080. Return: AX = E201h
  1081. SeeAlso: AX=F400h,AX=F402h
  1082. --------b-16F402-----------------------------
  1083. INT 16 - Compaq Systempro and higher - DISABLE CACHE CONTROLLER
  1084.     AX = F402h
  1085. Return: AX = E202h
  1086. SeeAlso: AX=F400h,AX=F401h
  1087. --------v-16FA00DX5945-----------------------
  1088. INT 16 U - PC Tools v8+ VSAFE, VWATCH - INSTALLATION CHECK
  1089.     AX = FA00h
  1090.     DX = 5945h
  1091. Return: CF clear
  1092.     DI = 4559h
  1093.     BX = BIOS hotkey scancode (default 2F00h) (VSAFE only)
  1094.         FFFFh if disabled
  1095. Note:    MS-DOS 6.0 bundles VSAFE and VWATCH as part of its virus protection
  1096. SeeAlso: AX=FA05h,INT 13/AH=FAh,INT 21/AH=FAh"VDEFEND",INT 2F/AX=6282h
  1097. --------v-16FA01DX5945-----------------------
  1098. INT 16 U - PC Tools v8+ VSAFE, VWATCH - UNINSTALL
  1099.     AX = FA01h
  1100.     DX = 5945h
  1101. Return: CF clear if successful
  1102.     DI = 4559h
  1103. SeeAlso: AX=FA00h
  1104. --------v-16FA02DX5945-----------------------
  1105. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET/SET OPTIONS
  1106.     AX = FA02h
  1107.     DX = 5945h
  1108.     BL = new parameter flags (see below)
  1109. Return: CF clear
  1110.     DI = 4559h
  1111.     CL = old value of parameter flags
  1112.  
  1113. Bitfields for parameter flags:
  1114.  bit 7    Protect executable files
  1115.  bit 6    Protect FD boot sector
  1116.  bit 5    Protect HD boot sector
  1117.  bit 4    Boot sector viruses
  1118.  bit 3    Check executable files
  1119.  bit 2    General write protect
  1120.  bit 1    Resident
  1121.  bit 0    HD Low level format
  1122. --------v-16FA03DX5945-----------------------
  1123. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET ???
  1124.     AX = FA03h
  1125.     DX = 5945h
  1126. Return: CF clear
  1127.     DI = 4559h
  1128.     AX = 0002h
  1129. --------v-16FA04DX5945-----------------------
  1130. INT 16 U - PC Tools v8+ VSAFE - GET HOTKEY DISABLE FLAG
  1131.     AX = FA04h
  1132.     DX = 5945h
  1133. Return: CF clear
  1134.     DI = 4559h
  1135.     BL = hotkey disable flag (nonzero if hotkey disabled)
  1136. Note:    this function is a NOP under VWATCH, merely returning CF clear/DI=4559h
  1137. SeeAlso: AX=FA00h,AX=FA05h
  1138. --------v-16FA05DX5945-----------------------
  1139. INT 16 U - PC Tools v8+ VSAFE - SET HOTKEY DISABLE FLAG
  1140.     AX = FA05h
  1141.     DX = 5945h
  1142.     BL = new value of hotkey disable flag (nonzero to disable hotkey)
  1143. Return: CF clear
  1144.     DI = 4559h
  1145. Note:    this function is a NOP under VWATCH, merely returning CF clear/DI=4559h
  1146. SeeAlso: AX=FA00h,AX=FA04h
  1147. --------v-16FA06DX5945-----------------------
  1148. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET NETWORK DRIVES TEST FLAG
  1149.     AX = FA06h
  1150.     DX = 5945h
  1151. Return: CF clear
  1152.     DI = 4559h
  1153.     BL = test status
  1154.         00h don't monitor network drives (default for VWATCH v2.1)
  1155.         FFh monitor network drives (default for VSAFE v2.0)
  1156.     CL = ??? (only VSAFE 2.0)
  1157. SeeAlso: AX=FA07h
  1158. --------v-16FA07DX5945-----------------------
  1159. INT 16 U - PC Tools v8+ VSAFE, VWATCH - SET NETWORK DRIVES TEST FLAG
  1160.     AX = FA07h
  1161.     DX = 5945h
  1162.     BL = new state
  1163.         00h don't monitor
  1164.         01h monitor network drives
  1165. Return: CF clear
  1166.     DI = 4559h
  1167. Note:    VWATCH v2.1 (from PC Tools 9.0) returns CF set instead
  1168. SeeAlso: AX=FA00h,AX=FA06h
  1169. --------v-16FA08DX5945-----------------------
  1170. INT 16 U - PC Tools v9+ VWATCH v2.1 - ???
  1171.     AX = FA08h
  1172.     DX = 5945h
  1173. Return: CF clear
  1174.     DI = 4559h
  1175.     AX = ??? (0002h)
  1176.     BX = version (BH=major, BL=two-digit minor)
  1177. Note:    this function is not supported by the PC Tools 9.0 VSAFE v2.0
  1178. SeeAlso: AX=FA00h,AX=FA06h
  1179. --------U-16FE55-----------------------------
  1180. INT 16 U - PC Tools v8+ programs - GET ???
  1181.     AX = FE55h
  1182.     CX = segment of resident program or 0000h for last loaded
  1183.     DX = 0000h
  1184. Return: DX = resident code segment (unchanged if CX=0000h on entry)
  1185.     AX = ??? or 0000h
  1186. Note:    this call is supported by CPSCHED, CPTASK, DATAMON, DPROTECT, DRIVEMAP,
  1187.       and DSKLIGHT beginning in PC Tools v8.0; programs other than CPTASK
  1188.       seem to hook it merely to return the same AX as the CPTASK loaded
  1189.       prior to them returned
  1190. --------U-16FEA4-----------------------------
  1191. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - RESET ???
  1192.     AX = FEA4h
  1193. Return: nothing
  1194. Note:    this function is identical to AX=FFA4h, and is implemented by the same
  1195.       code in DESKTOP
  1196. SeeAlso: AX=FFA4h
  1197. --------U-16FEC6-----------------------------
  1198. INT 16 U - PC Tools v7+ CPSCHED - ENABLE/DISABLE CPSCHED API
  1199.     AX = FEC6h
  1200.     BL = new state (00h enabled, nonzero disabled)
  1201. Return: nothing
  1202. Desc:    specify whether CPSCHED API calls other than this one and AX=FE55h will
  1203.       be honored
  1204. --------U-16FED3-----------------------------
  1205. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  1206.     AX = FED3h
  1207.     DS:SI -> 92-byte data record for ???
  1208. Return: ???
  1209. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  1210.       code in DESKTOP
  1211. SeeAlso: AX=FFD3h
  1212. --------U-16FEDC-----------------------------
  1213. INT 16 U - PC Tools v7+ CPSCHED - UNHOOK INTERRUPTS
  1214.     AX = FEDCh
  1215. Return: AX,DX destroyed
  1216. Index:    uninstall;CPSCHED
  1217. --------U-16FEEFCX0000-----------------------
  1218. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - INSTALLATION CHECK
  1219.     AX = FEEFh
  1220.     CX = 0000h
  1221. Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
  1222.         BX = segment of resident portion
  1223.         DX = (CPSCHED v8.0) resident CS
  1224. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  1225.       code in DESKTOP
  1226. SeeAlso: AX=FFEFh
  1227. --------U-16FEF1-----------------------------
  1228. INT 16 U - PC Tools v7 only CPSCHED/DESKTOP - ALTERNATE INSTALLATION CHECK
  1229.     AX = FEF1h
  1230.     BX = ???
  1231. Return: CX = 5555h if PC Tools scheduler (CPSCHED or DESKTOP) installed
  1232.     DX = 5555h
  1233. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  1234.       code in DESKTOP
  1235. SeeAlso: AX=FFF1h
  1236. --------K-16FF-------------------------------
  1237. INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
  1238.     AH = FFh
  1239.     DX = scan code
  1240. Return: AL = status
  1241.         00h success
  1242.         01h failure
  1243. Program: KBUF is a keyboard buffer expander by Mark Adler
  1244. SeeAlso: AH=05h
  1245. --------V-16FF-------------------------------
  1246. INT 16 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - QUERY ZOOM INTERRUPT
  1247.     AH = FFh
  1248. Return: AL = interrupt number to which BIOS keyboard handler has been relocated
  1249.     AL+1 = Zoom interrupt number
  1250.     BX = hotkey
  1251. Notes:    the default interrupts are 60h for keyboard and 61h for Zoom interrupt;
  1252.       the default hot key is F10
  1253.     not all vendors include the Tseng TSR which supports these functions
  1254. SeeAlso: INT 60"OPTIMA"
  1255. Index:    hotkeys;OPTIMA 1024 VGA
  1256. --------d-16FF70BX0000-----------------------
  1257. INT 16 U - PC Tools v8+ DRIVEMAP - INSTALLATION CHECK
  1258.     AX = FF70h
  1259.     BX = 0000h
  1260.     CX = 4C69h ('Li')
  1261.     DX = 6E6Bh ('nk')
  1262. Return: AX = 0000h
  1263.     CX = 4350h ('CP')
  1264.     DH = major version
  1265.     DL = minor version
  1266. Program: DRIVEMAP is a redirector which allows drives on computers connected
  1267.       over the parallel or serial ports to appear as local drives
  1268. SeeAlso: AX=FF70h/BX=0001h,AX=FF70h/BX=0002h
  1269. --------d-16FF70BX0001-----------------------
  1270. INT 16 U - PC Tools v8+ DRIVEMAP - ???
  1271.     AX = FF70h
  1272.     BX = 0001h
  1273.     DL = ???
  1274. Return: AX = ???
  1275.     DH = ???
  1276. SeeAlso: AX=FF70h/BX=0000h,AX=FF70h/BX=0002h
  1277. --------d-16FF70BX0002-----------------------
  1278. INT 16 U - PC Tools v8+ DRIVEMAP - ???
  1279.     AX = FF70h
  1280.     BX = 0002h
  1281.     CX = ???
  1282.     DX = ???
  1283. Return: AX = ??? or FFFEh/FFFFh on error
  1284.     DL = ???
  1285. BUG:    DRIVEMAP will branch to random locations for BX values other than
  1286.       those listed above for v8.0-9.0 because a) the incorrect register is
  1287.       range-tested, resulting in BX=0003h-5CD6h being accepted as valid
  1288.       function numbers, and b) the conditional which branches on invalid
  1289.       function numbers jumps to the following instruction, becoming a NOP
  1290. SeeAlso: INT 2F/AX=9203h"DRIVEMAP"
  1291. Index:    installation check;DRIVEMAP
  1292. --------T-16FF80BX0000-----------------------
  1293. INT 16 U - PC Tools v8+ CPTASK - INSTALLATION CHECK
  1294.     AX = FF80h
  1295.     BX = 0000h
  1296.     CX = 0000h
  1297.     DX = 0000h
  1298. Return: CX = 5555h if installed
  1299. Program: CPTASK is a task switcher by Central Point Software
  1300. --------T-16FF80BX0001-----------------------
  1301. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1302.     AX = FF80h
  1303.     BX = 0001h
  1304.     ???
  1305. Return: DX:SI -> task list??? (ten entries of 70h bytes in v9.0)
  1306.     BX = ??? (PSP segment of resident code???)
  1307. --------T-16FF80BX0002-----------------------
  1308. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1309.     AX = FF80h
  1310.     BX = 0002h
  1311. Return: DX:SI -> ???
  1312. --------T-16FF80BX0003-----------------------
  1313. INT 16 U - PC Tools v8+ CPTASK - GET ??? FLAGS
  1314.     AX = FF80h
  1315.     BX = 0003h
  1316. Return: AX = flags
  1317.         bit 10: ???
  1318.         bit 13: ???
  1319.         bit 14: ???
  1320.         bit 15: ???
  1321. SeeAlso: AX=FF80h/BX=0004h,AX=FF80h/BX=0006h
  1322. --------T-16FF80BX0004-----------------------
  1323. INT 16 U - PC Tools v8+ CPTASK - SET ???
  1324.     AX = FF80h
  1325.     BX = 0004h
  1326.     CX = new value of ???
  1327. Return: ???
  1328. Note:    this function also sets bit 14 of the flags word returned by
  1329.       AX=FF80h/BX=0003h
  1330. --------T-16FF80BX0005-----------------------
  1331. INT 16 U - PC Tools v8+ CPTASK - GET NUMBER OF ACTIVE TASKS???
  1332.     AX = FF80h
  1333.     BX = 0005h
  1334. Return: AX = number of active tasks???
  1335. --------T-16FF80BX0006-----------------------
  1336. INT 16 U - PC Tools v8+ CPTASK - GET AND CLEAR ??? FLAG
  1337.     AX = FF80h
  1338.     BX = 0006h
  1339. Return: AX = old state (0000h clear, 0001h set)
  1340. Note:    the tested flag is bit 13 of the flags returned by AX=FF80h/BX=0003h
  1341. --------T-16FF80BX0007-----------------------
  1342. INT 16 U - PC Tools v8+ CPTASK - ???
  1343.     AX = FF80h
  1344.     BX = 0007h
  1345.     ES:DI -> ???
  1346.     ???
  1347. Return: ???
  1348. --------T-16FF80BX0008-----------------------
  1349. INT 16 U - PC Tools v8+ CPTASK - ???
  1350.     AX = FF80h
  1351.     BX = 0008h
  1352.     ???
  1353. Return: ???
  1354. --------T-16FF80BX0009-----------------------
  1355. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1356.     AX = FF80h
  1357.     BX = 0009h
  1358. Return: CL = ???
  1359.     CH = ??? (01h or 02h)
  1360. --------T-16FF80BX000A-----------------------
  1361. INT 16 U - PC Tools v9+ CPTASK - SET ???
  1362.     AX = FF80h
  1363.     BX = 000Ah
  1364.     DS:SI -> 128-byte buffer containing ???
  1365. --------T-16FF80BX000B-----------------------
  1366. INT 16 U - PC Tools v9+ CPTASK - SET ???
  1367.     AX = FF80h
  1368.     BX = 000Bh
  1369.     DX = index of ??? task (1-10)
  1370. --------T-16FF80BX000C-----------------------
  1371. INT 16 U - PC Tools v9+ CPTASK - SET IDLE??? DELAY
  1372.     AX = FF80h
  1373.     BX = 000Ch
  1374.     CX = new delay time in minutes
  1375. --------T-16FF80BX4350-----------------------
  1376. INT 16 U - PC Tools v8+ CPTASK - UNINSTALL
  1377.     AX = FF80h
  1378.     BX = 4350h ('CP')
  1379.     CX = 5354h ('ST')
  1380. Return: never returns; terminates all tasks and exits to program originally
  1381.       calling CPTASK
  1382. --------U-16FF90-----------------------------
  1383. INT 16 U - PC Tools v8+ DESKTOP - ???
  1384.     AX = FF90h
  1385.     ???
  1386. Return: ???
  1387. Note:    available only when popped up
  1388. --------U-16FF91-----------------------------
  1389. INT 16 U - PC Tools v7+ DESKTOP - ???
  1390.     AX = FF91h
  1391.     ???
  1392. Return: AX = 0000h
  1393. Note:    calls AX=FFFDh after ???
  1394. SeeAlso: AX=FF92h,AX=FFFDh
  1395. --------U-16FF92-----------------------------
  1396. INT 16 U - PC Tools v7+ DESKTOP - ???
  1397.     AX = FF92h
  1398.     ???
  1399. Return: AX = 0000h
  1400. Note:    like AX=FF91h, but temporarily sets ??? to 3
  1401. SeeAlso: AX=FF91h,AX=FFFDh
  1402. --------U-16FF93-----------------------------
  1403. INT 16 U - PC Tools v7+ DESKTOP - SET ??? FLAG
  1404.     AX = FF93h
  1405. --------U-16FF94-----------------------------
  1406. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  1407.     AX = FF94h
  1408.     CX = ??? (default 0017h)
  1409. --------U-16FF95-----------------------------
  1410. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  1411.     AX = FF95h
  1412.     BX = ???
  1413. --------U-16FF96-----------------------------
  1414. INT 16 U - PC Tools v7+ DESKTOP - ???
  1415.     AX = FF96h
  1416.     CL = ???
  1417. Return: AX = ???
  1418. --------U-16FF97-----------------------------
  1419. INT 16 U - PC Tools v7+ DESKTOP - ???
  1420.     AX = FF97h
  1421.     DS:DX -> buffer for ??? (see below)
  1422. Return: ???
  1423.  
  1424. Format of buffer:
  1425. Offset    Size    Description
  1426.  00h 48 BYTEs    ???
  1427.  30h 128 BYTEs    ???
  1428. --------U-16FF98-----------------------------
  1429. INT 16 U - PC Tools v7+ DESKTOP - OPEN \DESK.OVL FILE AND SEEK TO OVERLAY
  1430.     AX = FF98h
  1431.     DX = byte offset in file of overlay header
  1432. Return: BX = file handle for DESK.OVL file
  1433. Desc:    open the DESK.OVL file, seek to the specified offset, read in the
  1434.       overlay header, and seek to the offset specified by the header
  1435.  
  1436. Format of overlay header:
  1437. Offset    Size    Description
  1438.  00h 12 BYTEs    NUL-padded ASCII overlay filename
  1439.  0Ch    DWORD    offset within DESK.OVL file of actual overlay
  1440. --------U-16FF99-----------------------------
  1441. INT 16 U - PC Tools v7+ DESKTOP - ???
  1442.     AX = FF99h
  1443.     ???
  1444. Return: ???
  1445. --------U-16FF9A-----------------------------
  1446. INT 16 U - PC Tools v7+ DESKTOP - GET NAME OF COLOR SCHEME
  1447.     AX = FF9Ah
  1448. Return: ES:BX -> name of current color scheme
  1449. Note:    available even if not popped up
  1450. --------U-16FF9B-----------------------------
  1451. INT 16 U - PC Tools v7+ DESKTOP - UNUSED
  1452.     AX = FF9Bh
  1453. Return: ???
  1454. Note:    sounds triple-length beep
  1455. --------T-16FF9C-----------------------------
  1456. INT 16 U - PC Tools v8+ CPTASK - SET/CLEAR ??? POINTER
  1457.     AX = FF9Ch
  1458.     BL = function
  1459.         00h set ??? pointer
  1460.         DS:SI -> ???
  1461.         01h clear pointer to 0000h:0000h
  1462. ----------16FF9D-----------------------------
  1463. INT 16 U - PC Tools v8+ CPTASK, VSAFE - ???
  1464.     AX = FF9Dh
  1465.     ES:BX -> ??? word
  1466. Return: ???
  1467. Note:    if ES is non-zero, the word pointed at by ES:BX determines whether the
  1468.       ??? flag is cleared (word = 0000h) or set (word is nonzero).    The
  1469.       flag is always cleared if ES=0000h.
  1470. --------U-16FF9E-----------------------------
  1471. INT 16 U - PC Tools v7+ DESKTOP - ???
  1472.     AX = FF9Eh
  1473.     DL = ???
  1474.         bit 7: ???
  1475.         bits 6-0: function number??? (00h,01h,other)
  1476.     ???
  1477. Return: ???
  1478. --------U-16FFA1-----------------------------
  1479. INT 16 U - PC Tools v7+ DESKTOP - ???
  1480.     AX = FFA1h
  1481.     ???
  1482. Return: ???
  1483. Note:    same as AX=FFA2h, except ??? set to FFh
  1484. SeeAlso: AX=FFA2h
  1485. --------U-16FFA2-----------------------------
  1486. INT 16 U - PC Tools v7+ DESKTOP - ???
  1487.     AX = FFA2h
  1488.     ???
  1489. Return: ???
  1490. Note:    calls AX=FFC7h (remove window) and AX=FFFDh
  1491. SeeAlso: AX=FFA1h,AX=FFC7h,AX=FFFDh
  1492. --------y-16FFA3BX0000-----------------------
  1493. INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - INSTALLATION CHECK
  1494.     AX = FFA3h
  1495.     BX = 0000h
  1496.     CX = 0000h
  1497. Return: AX = segment of resident code
  1498.     BX = 5555h
  1499.     CX = 5555h
  1500. SeeAlso: INT 21/AH=3Fh"NB.SYS",INT 21/AX=4101h
  1501. --------y-16FFA3BX0001-----------------------
  1502. INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  1503.     AX = FFA3h
  1504.     BX = 0001h
  1505.     CX = 0001h
  1506. Return: AX:BX -> ???
  1507.     CX = BX
  1508. --------y-16FFA3BX0002-----------------------
  1509. INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  1510.     AX = FFA3h
  1511.     BX = 0002h
  1512.     CX = 0002h
  1513. Return: AX = ??? (0 or 1)
  1514.     CX = BX = AX
  1515. --------y-16FFA3BX0003-----------------------
  1516. INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  1517.     AX = FFA3h
  1518.     BX = 0003h
  1519.     CX = 0003h
  1520. Return: AX = ??? (0 or 1)
  1521.     CX = BX = AX
  1522. --------y-16FFA3BX0004-----------------------
  1523. INT 16 U - PC Tools v7+ DATAMON - SET ??? FLAG
  1524.     AX = FFA3h
  1525.     BX = 0004h
  1526.     CX = 0004h
  1527. SeeAlso: AX=FFA3h/BX=0005h
  1528. --------y-16FFA3BX0005-----------------------
  1529. INT 16 U - PC Tools v7+ DATAMON - CLEAR ??? FLAG
  1530.     AX = FFA3h
  1531.     BX = 0005h
  1532.     CX = 0005h
  1533. SeeAlso: AX=FFA3h/BX=0004h
  1534. --------y-16FFA3BX0006-----------------------
  1535. INT 16 U - PC Tools v7+ DATAMON - SET PSP SEGMENT ???
  1536.     AX = FFA3h
  1537.     BX = 0006h
  1538.     CX = 0006h
  1539.     DX = current PSP segment as known to DOS??? or 0000h
  1540. ----------16FFA3BXFFA3-----------------------
  1541. INT 16 U - PC Tools v9 DSKLIGHT - INSTALLATION CHECK
  1542.     AX = FFA3h
  1543.     BX = FFA3h
  1544.     CX = FFA3h
  1545. Return: BX = CX = 5555h if installed
  1546.         AX = resident code segment
  1547. Program: DSKLIGHT is a TSR included with PC Tools v9+ which displays a disk-
  1548.       access indicator on the screen; in v7 and v8, this function was
  1549.       provided by DATAMON
  1550. Note:    DSKLIGHT chains to the previous handler if BX or CX is not FFA3h
  1551. --------U-16FFA4-----------------------------
  1552. INT 16 U - PC Tools v7-8 DESKTOP - ???
  1553.     AX = FFA4h
  1554. Return: ???
  1555. Notes:    available even when not popped up
  1556.     sets unknown flag if ??? conditions met
  1557. SeeAlso: AX=FEA4h
  1558. --------c-16FFA5CX1111-----------------------
  1559. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  1560.     AX = FFA5h
  1561.     CX = 1111h
  1562. Return: CH = 00h if installed
  1563.         ES:DI -> internal data (see below)
  1564.         CL = cache state
  1565.         01h enabled
  1566.         02h disabled
  1567. SeeAlso: INT 13/AH=27h,INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  1568.  
  1569. Format of internal data:
  1570. Offset    Size    Description
  1571. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  1572.         each byte is either blank (20h) or drive letter (41h-54h)
  1573.  -8    BYTE    ???
  1574.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  1575.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  1576.  -3   3 BYTEs    ???
  1577. --------c-16FFA5CXAAAA-----------------------
  1578. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  1579.     AX = FFA5h
  1580.     CX = AAAAh
  1581. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  1582. SeeAlso: AX=FFA5h/CX=CCCCh
  1583. --------c-16FFA5CXCCCC-----------------------
  1584. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  1585.     AX = FFA5h
  1586.     CX = CCCCh
  1587. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  1588. Note:    delayed writes are automatically disabled on EXECing
  1589.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  1590.       however, delayed writes are not automatically reenabled upon the
  1591.       program's termination in v6.
  1592. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  1593. --------c-16FFA5CXDDDD-----------------------
  1594. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  1595.     AX = FFA5h
  1596.     CX = DDDDh
  1597. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  1598. --------c-16FFA5CXEEEE-----------------------
  1599. INT 16 - PC-Cache v6+ - ENABLE CACHE
  1600.     AX = FFA5h
  1601.     CX = EEEEh
  1602. SeeAlso: AX=FFA5h/CX=DDDDh
  1603. --------c-16FFA5CXFFFF-----------------------
  1604. INT 16 - PC-Cache v6+ - FLUSH CACHE
  1605.     AX = FFA5h
  1606.     CX = FFFFh
  1607. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  1608. --------U-16FFA6-----------------------------
  1609. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ???
  1610.     AX = FFA6h
  1611. Return: DS:SI -> ???
  1612. Note:    available only when popped up
  1613. --------U-16FFA7-----------------------------
  1614. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ??? PATH
  1615.     AX = FFA7h
  1616. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  1617. --------U-16FFA8-----------------------------
  1618. INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
  1619.     AX = FFA8h
  1620.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  1621.     ???
  1622. Return: ???
  1623. Notes:    available only when popped up
  1624.     strings copied into internal buffer, among other actions
  1625. --------U-16FFA9-----------------------------
  1626. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET VERSION STRING
  1627.     AX = FFA9h
  1628. Return: DS:SI -> version string
  1629. --------U-16FFAA-----------------------------
  1630. INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
  1631.     AX = FFAAh
  1632.     ???
  1633. Return: ???
  1634. Note:    available only when popped up
  1635. --------U-16FFAB-----------------------------
  1636. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET EDITOR SETTINGS???
  1637.     AX = FFABh
  1638. Return: DS:SI -> editor setting strings???
  1639. --------U-16FFAC-----------------------------
  1640. INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
  1641.     AX = FFACh
  1642.     DL = ???
  1643. Note:    available only when popped up
  1644. --------U-16FFAD-----------------------------
  1645. INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
  1646.     AX = FFADh
  1647.     DL = ???
  1648. --------U-16FFAE-----------------------------
  1649. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ???
  1650.     AX = FFAEh
  1651. Return: AL = ???
  1652. --------U-16FFAF-----------------------------
  1653. INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
  1654.     AX = FFAFh
  1655.     DL = ???
  1656. --------U-16FFB0-----------------------------
  1657. INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
  1658.     AX = FFB0h
  1659.     BL = ???
  1660. --------U-16FFB1-----------------------------
  1661. INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
  1662.     AX = FFB1h
  1663.     ???
  1664. Return: ???
  1665. --------U-16FFB2-----------------------------
  1666. INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET ???
  1667.     AX = FFB2h
  1668. Return: DS:SI -> ???
  1669. --------U-16FFB3-----------------------------
  1670. INT 16 U - PC Tools v5.5-8.0 DESKTOP - ???
  1671.     AX = FFB3h
  1672.     ???
  1673. Return: ???
  1674. Note:    available only when popped up
  1675. --------U-16FFB4-----------------------------
  1676. INT 16 U - PC Tools v5.5-8.0 DESKTOP - SET ??? FLAG
  1677.     AX = FFB4h
  1678. Note:    available only when popped up
  1679. SeeAlso: AX=FFBBh
  1680. --------U-16FFB5-----------------------------
  1681. INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET/SET WINDOW PARAMETERS
  1682.     AX = FFB5h
  1683.     BX = window specifier (000Fh to 0019h) (see below)
  1684.     DX = 0000h get, nonzero = set
  1685.     ES:DI -> window parameter buffer (see below)
  1686. SeeAlso: AX=FFCBh
  1687.  
  1688. Values for window specifier:
  1689.  000Fh    comm/FAX
  1690.  0014h    hotkey selection
  1691.  0015h    ASCII table
  1692.  0016h    system colors menu
  1693.  
  1694. Format of window parameters:
  1695. Offset    Size    Description
  1696.  00h    BYTE    rows in window, not counting frame
  1697.  01h    BYTE    columns in window, not counting frame
  1698.  02h    BYTE    row number of top of window
  1699.  03h    BYTE    2*column number of left of window
  1700.  04h    BYTE    character attribute for ???
  1701.  05h    BYTE    character attribute for background/border
  1702.  06h    BYTE    character attribute for ???
  1703.  07h    DWORD    pointer to ??? on screen
  1704.  0Bh  4 BYTEs    ???
  1705.  0Fh    BYTE    nonzero if window may be resized
  1706. Note:    if running in monochrome mode, character attributes at offsets 04h to
  1707.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  1708.       are changed to 07h on reading
  1709. --------U-16FFB6-----------------------------
  1710. INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET ???
  1711.     AX = FFB6h
  1712. Return: AH = ???
  1713.     AL = ???
  1714. --------U-16FFB7-----------------------------
  1715. INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET/SET ???
  1716.     AX = FFB7h
  1717.     BX = direction
  1718.         0000h copy to buffer
  1719.         else  copy from buffer
  1720.     DS:SI -> 70-byte buffer with ???
  1721. Return: data copied
  1722. Note:    available only when popped up under v6.0+
  1723. --------U-16FFB8-----------------------------
  1724. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET/SET???
  1725.     AX = FFB8h
  1726.     BH = subfunction
  1727.         00h get
  1728.         Return: BL = old value of ???
  1729.             CL = old value of ??? (v6.0+)
  1730.             CH = old value of ??? (v6.0+)
  1731.         nonzero set
  1732.         BL = new value for ???
  1733.         CL = new value for ??? (v6.0+)
  1734.         CH = new value for ??? (v6.0+)
  1735.         DH = ???
  1736.         Return: AL = old value replaced by CL (v6.0+)
  1737.             AH = old value replaced by CH (v6.0+)
  1738. --------U-16FFB9-----------------------------
  1739. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1740.     AX = FFB9h
  1741.     ???
  1742. Return: AX = ???
  1743.     CX = ???
  1744.     DS:SI -> ???
  1745.     ES:DI -> ???
  1746. --------U-16FFBA-----------------------------
  1747. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1748.     AX = FFBAh
  1749.     ???
  1750. Return: AX = ???
  1751. Note:    available only when popped up
  1752. --------U-16FFBB-----------------------------
  1753. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CLEAR ??? FLAG
  1754.     AX = FFBBh
  1755. Note:    available only when popped up
  1756. SeeAlso: AX=FFB4h
  1757. --------U-16FFBC-----------------------------
  1758. INT 16 U - PC Tools v5.1-8.0 DESKTOP - RESTORE ORIGINAL SCREEN???
  1759.     AX = FFBCh
  1760. --------U-16FFBD-----------------------------
  1761. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ??? DATABASE INDEXING MESSAGES
  1762.     AX = FFBDh
  1763.     ???
  1764. Return: ???
  1765. --------U-16FFBE-----------------------------
  1766. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1767.     AX = FFBEh
  1768.     ???
  1769. Return: ???
  1770. Note:    available only when popped up
  1771. --------U-16FFBF-----------------------------
  1772. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1773.     AX = FFBFh
  1774.     BX = DOS file handle to write on
  1775.     ???
  1776. Return: ???
  1777. Note:    available only when popped up
  1778. --------U-16FFC0-----------------------------
  1779. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1780.     AX = FFC0h
  1781.     ???
  1782. Return: AX = 0000h if successful
  1783.     AX = FFFFh on error
  1784. Note:    available only when popped up
  1785. --------U-16FFC1-----------------------------
  1786. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1787.     AX = FFC1h
  1788.     BL = ???
  1789.     ES:DI -> data structure (see below)
  1790.     ???
  1791. Return: AX = ???
  1792. Note:    available only when popped up
  1793. SeeAlso: AX=FFC2h,AX=FFC3h
  1794.  
  1795. Format of data structure:
  1796. Offset    Size    Description
  1797.  00h    WORD    ???
  1798.  02h    WORD    ???
  1799.  04h    WORD    ???
  1800.  06h    WORD    ???
  1801.  08h    WORD    ???
  1802.  0Ah    BYTE    ???
  1803.  0Bh    BYTE    ??? (zero/nonzero)
  1804. ---v7.1---
  1805.  0Ch    WORD    ???
  1806.  0Eh    BYTE    ???
  1807.  0Fh    WORD    ???
  1808.  11h    WORD    ???
  1809.     ???
  1810. --------U-16FFC2-----------------------------
  1811. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1812.     AX = FFC2h
  1813.     BL = ???
  1814.     ES:DI -> data structure (see AX=FFC1h)
  1815.     ???
  1816. Return: AH = ???
  1817.     CX = ???
  1818.     DH = ???
  1819.     DL = ???
  1820. Note:    available only when popped up
  1821. SeeAlso: AX=FFC1h,AX=FFC3h
  1822. --------U-16FFC3-----------------------------
  1823. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1824.     AX = FFC3h
  1825.     BL = ???
  1826.     ES:DI -> data structure (see AX=FFC1h)
  1827.     ???
  1828. Return: AH = ???
  1829.     CX = ???
  1830.     DH = ???
  1831.     DL = ???
  1832. Note:    available only when popped up
  1833. SeeAlso: AX=FFC1h,AX=FFC2h
  1834. --------U-16FFC4-----------------------------
  1835. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
  1836.     AX = FFC4h
  1837. Return: AL = ???
  1838.     BX = segment of scratch space???
  1839.     CX = segment of stored screen data (section covered by window???)
  1840.     DX = segment of window parameters for ???
  1841.     ES:BP -> ???
  1842. Note:    available only when popped up in versions prior to 6.0
  1843. --------U-16FFC5-----------------------------
  1844. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CHECK WHETHER DESKTOP LOADED RESIDENT
  1845.     AX = FFC5h
  1846. Return: BL = nonzero if loaded resident
  1847.        = 00h if nonresident
  1848. Note:    available only when popped up; should call AX=FFEFh first to ensure
  1849.       that DESKTOP is active
  1850. SeeAlso: AX=FFEFh,AX=FFF3h
  1851. --------U-16FFC6-----------------------------
  1852. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
  1853.     AX = FFC6h
  1854.     BL = new value for ???
  1855. --------U-16FFC7-----------------------------
  1856. INT 16 U - PC Tools v5.1-8.0 DESKTOP - REMOVE WINDOW
  1857.     AX = FFC7h
  1858.     ???
  1859. Return: ???
  1860. --------U-16FFC8-----------------------------
  1861. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
  1862.     AX = FFC8h
  1863. Return: DS:SI -> ???
  1864. Note:    valid only while popped up
  1865. --------U-16FFC9-----------------------------
  1866. INT 16 U - PC Tools v5.1-8.0 DESKTOP - COPY DATA TO CLIPBOARD
  1867.     AX = FFC9h
  1868.     DS:SI -> characters to store in clipboard
  1869.     CX = size in bytes
  1870. Return: CF set on error
  1871. Notes:    available only when popped up
  1872.     while copying, bytes of 00h and 0Ah are skipped
  1873. --------U-16FFCA-----------------------------
  1874. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
  1875.     AX = FFCAh
  1876.     DX = ???
  1877. Return: AX destroyed
  1878. Note:    available only when popped up
  1879. --------U-16FFCB-----------------------------
  1880. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SELECT WINDOW PARAMETERS???
  1881.     AX = FFCBh
  1882.     DX = window specifier???
  1883. Return: AX destroyed
  1884. Note:    available only when popped up
  1885. SeeAlso: AX=FFB5h
  1886. --------U-16FFCC-----------------------------
  1887. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  1888.     AX = FFCCh
  1889.     DS:SI -> ASCIZ string
  1890. Return: AX = ???
  1891.     CX = ???
  1892.     ES:DI -> address past last character displayed (v5.1/5.5)
  1893.           -> ??? on menu bar (v6.0)
  1894. --------U-16FFCD-----------------------------
  1895. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1896.     AX = FFCDh
  1897.     DS:DX -> ???
  1898. Return: ???
  1899. Note:    available only when popped up
  1900. --------U-16FFCE-----------------------------
  1901. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ??? DELAYS
  1902.     AX = FFCEh
  1903.     CX = ???
  1904. Return: nothing???
  1905. --------U-16FFCF-----------------------------
  1906. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CLOSE PRINTER/PRINT FILE
  1907.     AX = FFCFh
  1908. Note:    available only when popped up
  1909. --------U-16FFD0-----------------------------
  1910. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PREPARE TO PRINT???
  1911.     AX = FFD0h
  1912.     ???
  1913. Return: ???
  1914. Note:    available only when popped up
  1915. --------U-16FFD1-----------------------------
  1916. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY PRINT OPTIONS MENU
  1917.     AX = FFD1h
  1918. Return: BX = number of copies
  1919.     DX = destination
  1920.         00h cancel
  1921.         01h LPT1
  1922.         02h LPT2
  1923.         03h LPT3
  1924.         04h COM1
  1925.         05h COM2
  1926.         06h disk file
  1927. Note:    available only when popped up
  1928. --------U-16FFD2-----------------------------
  1929. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1930.     AX = FFD2h
  1931.     BX = ???
  1932. Return: BL = ???
  1933. Note:    available only when popped up
  1934. --------U-16FFD3-----------------------------
  1935. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1936.     AX = FFD3h
  1937.     DS:SI -> 92-byte data record for ???
  1938. Return: ???
  1939. SeeAlso: AX=FED3h
  1940. --------U-16FFD4BH3C-------------------------
  1941. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CREATE/OPEN/DELETE FILE
  1942.     AX = FFD4h
  1943.     BH = 3Ch create file (with no attributes)
  1944.          3Dh open file
  1945.          41h delete file
  1946.     BL = access mode
  1947.          00h read only
  1948.          01h write only
  1949.          02h read/write
  1950.     DS:SI -> ASCIZ filename
  1951. Return: BX = file handle
  1952.         0000h on error
  1953. Note:    operation is attempted in (in order) the directory from which the
  1954.       desktop was started/run???, the directory specified with the
  1955.       filename, X:\PCTOOLS\, and X:\
  1956. --------U-16FFD5-----------------------------
  1957. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1958.     AX = FFD5h
  1959.     ???
  1960. Return: ???
  1961. Note:    available only when popped up
  1962. --------U-16FFD6-----------------------------
  1963. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1964.     AX = FFD6h
  1965.     BX = ???
  1966.     CX = ???
  1967.     DX = offset in ???
  1968.     ???
  1969. Return: ???
  1970. Note:    available only when popped up
  1971. --------U-16FFD7-----------------------------
  1972. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1973.     AX = FFD7h
  1974.     ???
  1975. Return: BL = ???
  1976. Note:    available only when popped up
  1977. --------U-16FFD8-----------------------------
  1978. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SAFE CREATE FILE
  1979.     AX = FFD8h
  1980.     DS:BX -> ASCIZ filename
  1981. Return: BX = file handle
  1982.         0000h on error
  1983. Note:    pops up confirmation menu if file already exists
  1984.     only available when popped up???
  1985. --------U-16FFD9-----------------------------
  1986. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
  1987.     AX = FFD9h
  1988. Return: AX = ???
  1989. Note:    available only when popped up
  1990. --------U-16FFDA-----------------------------
  1991. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET NAME OF LAST FILE OPENED
  1992.     AX = FFDAh
  1993.     DS:SI -> ??? (v5.1/5.5 only)
  1994. Return: DS:SI -> filename
  1995. --------U-16FFDB-----------------------------
  1996. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
  1997.     AX = FFDBh
  1998.     BL = ???
  1999. Note:    available only when popped up
  2000. --------U-16FFDC-----------------------------
  2001. INT 16 U - PC Tools v5.1-8.0 DESKTOP - UNHOOK
  2002.     AX = FFDCh
  2003. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  2004.       original values
  2005. Index:    uninstall;PC Tools DESKTOP
  2006. --------U-16FFDDBX0000-----------------------
  2007. INT 16 U - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  2008.     AX = FFDDh
  2009.     BX = 0000h
  2010. Return: CX = 5555h
  2011.     DX = 5555h if PCShell installed in resident mode
  2012. --------U-16FFDDBX0001-----------------------
  2013. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  2014.     AX = FFDDh
  2015.     BX = 0001h
  2016. Return: CF clear if request successful (PCShell will pop up)
  2017.     CF set on error
  2018. SeeAlso: AX=FFDDh/BX=0003h
  2019. --------U-16FFDDBX0002-----------------------
  2020. INT 16 U - PC Tools v5.1-5.5 PCShell API - GET ???
  2021.     AX = FFDDh
  2022.     BX = 0002h
  2023. Return: AL =
  2024.         00h ???
  2025.         01h ???
  2026. Note:    PCShell v6.0+ displays the error message "Incorrect PCRUN version",
  2027.       awaits a keystroke, and aborts the current process
  2028. --------U-16FFDDBX0003-----------------------
  2029. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  2030.     AX = FFDDh
  2031.     BX = 0003h
  2032. SeeAlso: AX=FFDDh/BX=0001h
  2033. --------U-16FFDDBX0004-----------------------
  2034. INT 16 U - PC Tools v5.1+ PCShell API - GET ???
  2035.     AX = FFDDh
  2036.     BX = 0004h
  2037. Return: CF clear if successful
  2038.         DS:SI -> ???
  2039. --------U-16FFDDBX0005-----------------------
  2040. INT 16 U - PC Tools v5.1+ PCShell API - ???
  2041.     AX = FFDDh
  2042.     BX = 0005h
  2043.     ???
  2044. Return: ???
  2045. Note:    resets various variables if certain conditions are met
  2046. --------U-16FFDDBX0006-----------------------
  2047. INT 16 U - PC Tools v5.1+ PCShell API - ???
  2048.     AX = FFDDh
  2049.     BX = 0006h
  2050.     ???
  2051. Return: ???
  2052. Note:    resets various variables if certain conditions are met
  2053. --------U-16FFDDBX0007-----------------------
  2054. INT 16 U - PC Tools v5.1+ PCShell API - SET ??? FLAG
  2055.     AX = FFDDh
  2056.     BX = 0007h
  2057. Return: CF clear if successful
  2058. SeeAlso: AX=FFDDh/BX=0008h
  2059. --------U-16FFDDBX0008-----------------------
  2060. INT 16 U - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  2061.     AX = FFDDh
  2062.     BX = 0008h
  2063. Return: CF undefined
  2064. SeeAlso: AX=FFDDh/BX=0007h
  2065. --------U-16FFDDBX0009-----------------------
  2066. INT 16 U - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
  2067.     AX = FFDDh
  2068.     BX = 0009h
  2069. Return: CF clear if successful
  2070.         DS:SI -> list of pointers (see below)
  2071.  
  2072. Format of returned pointer list:
  2073. Offset    Size    Description
  2074.  00h    WORD    offset of WORD containing ???
  2075.  02h    WORD    offset of name of program to execute
  2076.  04h    WORD    offset of 80-byte buffer for ???
  2077.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  2078.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  2079. --------U-16FFDDBX000A-----------------------
  2080. INT 16 U - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
  2081.     AX = FFDDh
  2082.     BX = 000Ah
  2083. Return: CX = 5555h if running
  2084.     DX = 5555h
  2085. Note:    also sets a flag
  2086. --------U-16FFDDBX000B-----------------------
  2087. INT 16 U - PC Tools v6.0+ PCRUN API - ???
  2088.     AX = FFDDh
  2089.     BX = 000Bh
  2090.     ???
  2091. Return: CX = 5555h if PCRUN active
  2092.     DX = 5555h
  2093. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  2094. --------U-16FFDE-----------------------------
  2095. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY POPUP MENU
  2096.     AX = FFDEh
  2097.     DS:DX -> menu description (must be on a paragraph boundary)
  2098. Return: AX = ???
  2099.         AL seems to be the number of the selected button
  2100. Note:    available only when popped up
  2101. SeeAlso: AX=FFEEh
  2102. --------U-16FFDF-----------------------------
  2103. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2104.     AX = FFDFh
  2105.     ???
  2106. Return: ???
  2107. --------U-16FFE0-----------------------------
  2108. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2109.     AX = FFE0h
  2110.     CX = ???
  2111.     DX = ???
  2112. Note:    available only when popped up
  2113. --------U-16FFE1-----------------------------
  2114. INT 16 U - PC Tools v5.1-8.0 DESKTOP - BEEP
  2115.     AX = FFE1h
  2116. --------U-16FFE2-----------------------------
  2117. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2118.     AX = FFE2h
  2119.     DX = ???
  2120. Return: ???
  2121. Note:    available only when popped up
  2122. --------U-16FFE3-----------------------------
  2123. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PRINT CHARACTER
  2124.     AX = FFE3h
  2125.     BL = character to print to currently open printer or print file
  2126. Return: CF set on error
  2127. Note:    available only when popped up
  2128. SeeAlso: INT 17/AH=00h
  2129. --------U-16FFE4-----------------------------
  2130. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2131.     AX = FFE4h
  2132.     DX = segment of ???
  2133. Return: ???
  2134. Note:    available only when popped up
  2135. --------U-16FFE5-----------------------------
  2136. INT 16 U - PC Tools v5.1-8.0 DESKTOP - POP UP FILE SELECTION MENU
  2137.     AX = FFE5h
  2138.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  2139.     DX = segment of window parameters???
  2140. Return: AX = DOS file handle for file
  2141.         DS:DX -> filename???
  2142.        = FFFFh if cancelled by user
  2143. Note:    available only when popped up
  2144. SeeAlso: AX=FFDAh
  2145. --------U-16FFE6-----------------------------
  2146. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CHECK FOR AND GET KEYSTROKE
  2147.     AX = FFE6h
  2148. Return: AX = 0000h if no key available
  2149.          else  BIOS keycode
  2150. Notes:    available only when popped up
  2151.     invokes INT 28 idle interrupt before checking for key
  2152. --------U-16FFE7-----------------------------
  2153. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2154.     AX = FFE7h
  2155.     BX = segment of ???
  2156. Return: ???
  2157. Note:    available only when popped up
  2158. --------U-16FFE8-----------------------------
  2159. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY NUMBER
  2160.     AX = FFE8h
  2161.     CX = number
  2162.     DH = attribute
  2163.     DS:SI -> destination for ASCII number
  2164. Return: DS:SI buffer filled in with alternating characters and attributes
  2165. --------U-16FFE9-----------------------------
  2166. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET FILE LIST???
  2167.     AX = FFE9h
  2168. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  2169. Note:    available only when popped up
  2170. --------U-16FFEA-----------------------------
  2171. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY COUNTED STRING
  2172.     AX = FFEAh
  2173.     DS:SI -> counted string (count byte followed by string)
  2174. Return: ???
  2175. Note:    available only when popped up
  2176. --------U-16FFEB-----------------------------
  2177. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2178.     AX = FFEBh
  2179.     ???
  2180. Return: ???
  2181. --------U-16FFEC-----------------------------
  2182. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET KEY
  2183.     AX = FFECh
  2184.     DS:SI -> FAR routine to ???
  2185.     BX = ???
  2186.     ???
  2187. Return: AX = keystroke
  2188.         FFFFh if F10 pressed to go to menu
  2189. Notes:    available only when popped up
  2190.     invokes INT 28 while waiting for keystroke
  2191.     F10 is hotkey to Desktop menu
  2192. Index:    hotkeys;PC Tools DESKTOP
  2193. --------U-16FFED-----------------------------
  2194. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
  2195.     AX = FFEDh
  2196. Return: AX = ???
  2197. Note:    available only when popped up
  2198. --------U-16FFEE-----------------------------
  2199. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE PULLDOWN MENUS
  2200.     AX = FFEEh
  2201.     DS:SI -> pulldown menu system description (see below)
  2202. Return: AX destroyed
  2203. Notes:    available only when popped up
  2204.     if the accessory does not need any menu items of its own, it should
  2205.       call AX=FFFAh instead
  2206. SeeAlso: AX=FFF7h,AX=FFFAh
  2207.  
  2208. Format of pulldown menu system description:
  2209. Offset    Size    Description
  2210.  00h    WORD    offset of menu bar contents (counted string)
  2211.  02h    WORD    number of items on menu bar
  2212.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  2213.  0Eh 10 BYTEs    which character to highlight in each menu item (01h=first)
  2214.  18h    WORD    offset of first menu definition (see below)
  2215.  1Ah    WORD    offset of second menu definition
  2216.     ...
  2217.  
  2218. Format of menu definition:
  2219. Offset    Size    Description
  2220.  00h    WORD    offset of menu contents (see below)
  2221.  02h    WORD    number of entries in menu
  2222.  04h    for each entry:
  2223.         Offset    Size    Description
  2224.          00h    BYTE    scancode of Alt-key to invoke entry
  2225.          01h    BYTE    character to highlight (01h=first, etc)
  2226.          02h    WORD    offset of FAR routine to handle selection
  2227.  
  2228. Format of menu contents:
  2229. Offset    Size    Description
  2230.  00h    BYTE    number of lines in menu
  2231.  01h    BYTE    width of menu
  2232.  02h  N BYTEs    counted strings, one for each line in menu
  2233. --------U-16FFEFCX0000-----------------------
  2234. INT 16 U - PC Tools v5.1-8.0 DESKTOP - INSTALLATION CHECK
  2235.     AX = FFEFh
  2236.     CX = 0000h
  2237. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  2238.         BX = segment of resident portion
  2239.         AX = ??? (v5.1/5.5 only)
  2240. SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
  2241. --------U-16FFF0-----------------------------
  2242. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
  2243.     AX = FFF0h
  2244.     DX = ???
  2245. Return: AX destroyed
  2246. Note:    available only when popped up
  2247. --------U-16FFF1BX0000-----------------------
  2248. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ALTERNATE INSTALLATION CHECK
  2249.     AX = FFF1h
  2250.     BX = 0000h  leave ??? flag as is
  2251.         nonzero set ??? flag
  2252. Return: CX = 5555h if installed
  2253.     DX = 5555h
  2254. --------U-16FFF2-----------------------------
  2255. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY HELP LINE
  2256.     AX = FFF2h
  2257.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  2258.         or help text
  2259. Return: AX destroyed
  2260. Notes:    available only when popped up
  2261.     if the specified string does not start with '[', it is displayed
  2262.       centered on the bottom line, else the function key labels are shown
  2263. --------U-16FFF3-----------------------------
  2264. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PREPARE TO UNLOAD RESIDENT DESKTOP
  2265.     AX = FFF3h
  2266. Note:    releases any EMS being used; restores video mode, page, and cursor
  2267.       shape; and restores interrupt vectors
  2268. SeeAlso: AX=FFC5h,AX=FFEFh
  2269. Index:    uninstall;PC Tools DESKTOP
  2270. --------U-16FFF4-----------------------------
  2271. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2272.     AX = FFF4h
  2273.     ???
  2274. Return: ???
  2275. Note:    available only when popped up
  2276. SeeAlso: AX=FFF6h
  2277. --------U-16FFF5-----------------------------
  2278. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET SCREEN ATTRIBUTE ARRAY
  2279.     AX = FFF5h
  2280. Return: ES:BX -> screen attributes data structure (see below)
  2281.     AL = ??? (v6.0+)
  2282.  
  2283. Format of attribute data structure:
  2284. Offset    Size    Description
  2285.  -1    BYTE    attribute for desktop background
  2286.  00h    BYTE    attribute for normal characters on desktop menu
  2287.  01h    BYTE    attribute for highlighted characters on desktop menu
  2288.  02h  5 BYTEs    ???
  2289.  07h    BYTE    attribute for dialog boxes
  2290.  08h 15 BYTEs    ???
  2291.  17h    BYTE    attribute for message boxes
  2292. --------U-16FFF6-----------------------------
  2293. INT 16 U - PC Tools v5.1-8.0 DESKTOP - INVOKE NOTEPAD EDITOR
  2294.     AX = FFF6h
  2295.     DS = segment of editor buffer structure (see below)
  2296.     BX = ???
  2297.     DX = segment of window parameters structure (see AX=FFB5h)
  2298. Return: ???
  2299. Note:    available only when popped up
  2300. SeeAlso: AX=FFF4h
  2301.  
  2302. Format of editor buffer structure:
  2303. Offset    Size    Description
  2304.  00h    WORD    offset of current cursor position in buffer segment
  2305.  02h  2 BYTEs    ???
  2306.  04h    WORD    offset of beginning of file data in buffer segment
  2307.  06h 10 BYTEs    ???
  2308.  10h  N BYTEs    ASCIZ name of file being edited
  2309. --------U-16FFF7-----------------------------
  2310. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PROCESS MENU BAR ENTRY???
  2311.     AX = FFF7h
  2312.     DS:SI -> ???
  2313.     ???
  2314. Return: ???
  2315. Notes:    available only when popped up
  2316.     performs input processing on the menu bar set up with AX=FFEEh
  2317. SeeAlso: AX=FFEEh,AX=FFFBh
  2318. --------U-16FFF8-----------------------------
  2319. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DRAW EMPTY WINDOW
  2320.     AX = FFF8h
  2321.     DS:0000h -> window parameters structure (see AX=FFB5h)
  2322.     DS:BX -> DWORD to store address of ??? on screen
  2323. Return: ???
  2324. --------U-16FFF9-----------------------------
  2325. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE SCREEN REFRESH ROUTINE
  2326.     AX = FFF9h
  2327.     ES:BX -> FAR routine to redisplay the utility's window
  2328. Note:    available only when popped up
  2329. --------U-16FFFA-----------------------------
  2330. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE STANDARD PULLDOWN MENUS
  2331.     AX = FFFAh
  2332. Notes:    available only when popped up
  2333.     adds the "Window" option to the "Desktop" option which is the only one
  2334.       available when no accessories are active.  Unlike AX=FFEEh, no
  2335.       additional menu items are added between "Desktop" and "Window"
  2336. SeeAlso: AX=FFEEh,AX=FFFBh
  2337. --------U-16FFFB-----------------------------
  2338. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PROCESS STANDARD MENU BAR
  2339.     AX = FFFBh
  2340. Return: ???
  2341. Notes:    available only when popped up
  2342.     performs input processing on the standard menu bar set up with AX=FFFAh
  2343. SeeAlso: AX=FFF7h
  2344. --------U-16FFFC-----------------------------
  2345. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET HOTKEYS AND KEYBOARD VECTOR
  2346.     AX = FFFCh
  2347. Return: ES:BX -> hotkey table (see below)
  2348.     DS:DX = original INT 09 vector
  2349.  
  2350. Format of hotkey table:
  2351. Offset    Size    Description
  2352.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  2353.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  2354.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  2355.  06h  2 BYTEs    scancode/shift state for screen autodial key
  2356. --------U-16FFFD-----------------------------
  2357. INT 16 U - PC Tools v5.1-8.0 DESKTOP - COPY ???
  2358.     AX = FFFDh
  2359. Return: AX destroyed
  2360. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  2361. SeeAlso: AX=FF91h,AX=FF92h
  2362. --------M-16FFFE-----------------------------
  2363. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SHOW MOUSE CURSOR
  2364.     AX = FFFEh
  2365. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  2366. --------M-16FFFF-----------------------------
  2367. INT 16 U - PC Tools v5.1-8.0 DESKTOP - HIDE MOUSE CURSOR
  2368.     AX = FFFFh
  2369. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  2370. --------P-17----DX0ABC-----------------------
  2371. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  2372.     DX = 0ABCh
  2373. Return: AX = AAAAh
  2374.     DX = BAAAh
  2375.     ES = code segment of resident portion
  2376. --------P-17----DX0B90-----------------------
  2377. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  2378.     DX = 0B90h
  2379. Return: DX = ABBBh
  2380.     ES = code segment of resident portion
  2381. --------P-17----DX0B91-----------------------
  2382. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  2383.     DX = 0B91h
  2384. Return: DX = ABCBh
  2385.     ES = code segment of resident portion
  2386. --------P-17----DX0F5F-----------------------
  2387. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  2388.     DX = 0F5Fh
  2389. Return: AX = AAAAh
  2390.     DX = F555h
  2391.     ES = code segment of resident portion
  2392. --------B-1700-------------------------------
  2393. INT 17 - PRINTER - WRITE CHARACTER
  2394.     AH = 00h
  2395.     AL = character to write
  2396.     DX = printer number (00h-02h)
  2397. Return: AH = printer status (see below)
  2398. SeeAlso: AH=02h,AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
  2399.  
  2400. Bitfields for printer status:
  2401.  bit 7    not busy
  2402.  bit 6    acknowledge
  2403.  bit 5    out of paper
  2404.  bit 4    selected
  2405.  bit 3    I/O error
  2406.  bits 2,1 unused
  2407.  bit 0    timeout
  2408. --------B-1701-------------------------------
  2409. INT 17 - PRINTER - INITIALIZE PORT
  2410.     AH = 01h
  2411.     DX = printer number (00h-02h)
  2412. Return: AH = printer status (see AH=00h)
  2413. Note:    some printers report that they are ready immediately after
  2414.       initialization when they actually are not; a more reliable result may
  2415.       be obtained by calling AH=02h after a brief delay
  2416. SeeAlso: AH=02h,AH=FFh"PC-MOS",INT 1A/AH=10h"NEC"
  2417. --------B-1702-------------------------------
  2418. INT 17 - PRINTER - GET STATUS
  2419.     AH = 02h
  2420.     DX = printer number (00h-02h)
  2421. Return: AH = printer status (see AH=00h)
  2422. Note:    PRINTFIX from MS-DOS 5.0 hooks this function and always returns AH=90h
  2423. SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
  2424. --------P-1702--DX0000-----------------------
  2425. INT 17 - INSET - INSTALLATION CHECK
  2426.     AH = 02h
  2427.     DX = 0000h
  2428.     CX = 07C3h (1987d)
  2429. Return: CX = 07C2h (1986d) if installed
  2430. Program: INSET is a text/graphics integration program
  2431. --------b-170200BX5050-----------------------
  2432. INT 17 - Advanced Parallel Port BIOS - INSTALLATION CHECK
  2433.     AX = 0200h
  2434.     BX = 5050h ('PP')
  2435.     CH = 45h   ('E')
  2436.     DX = printer port number (00h-02h)
  2437. Return: AH = 00h      \
  2438.     AL = 45h       If Advanced BIOS Installed
  2439.     CX = 5050h    /
  2440.     DX:BX -> far entry point to Advanced BIOS
  2441. Program: The Advanced Parallel Port BIOS provides support for parallel
  2442.       port peripherals using the enhanced modes of the IEEE 1284.
  2443. --------P-1703-------------------------------
  2444. INT 17 U - Emulaser ELTSR - INSTALL INTERRUPT HANDLERS
  2445.     AH = 03h
  2446. Return: BX = ???
  2447.     CX = ???
  2448. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2449.       Vertisoft Systems, Inc.
  2450. SeeAlso: AH=04h"Emulaser",AH=0Eh,INT 1A/AH=E5h
  2451. --------c-1703-------------------------------
  2452. INT 17 - PC-MOS/386 v5.01 - PRINT SPOOLER - PRINT STRING
  2453.     AH = 03h
  2454.     DX = printer port number
  2455.     CX = number of characters to print
  2456.     DS:SI -> string
  2457. Return: AH = printer status (see AH=00h)
  2458.     CX = number of characters actually printed
  2459. Desc:    send an entire string of chars to the print spooler with a single call
  2460. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  2461.       operating system by The Software Link, Inc.
  2462. SeeAlso: AH=00h,AH=01h,AH=02h,AH=FFh"PC-MOS"
  2463. --------P-1704-------------------------------
  2464. INT 17 U - Emulaser ELTSR - BEGIN CAPTURING OUTPUT
  2465.     AH = 04h
  2466. Note:    has no effect unless ELTSR is deactivated (see AX=0503h)
  2467. SeeAlso: AH=03h"Emulaser",AX=0503h,INT 1A/AH=E5h
  2468. --------P-170500-----------------------------
  2469. INT 17 U - Emulaser ELTSR - ???
  2470.     AX = 0500h
  2471.     ???
  2472. Return: AX = unload status (0001h safe to unload, 0002h not safe)
  2473.     BX = ???
  2474.     CX = PSP segment of ELTSR
  2475.     DX = activity flag (0000h disabled, 0001h capturing, 0002h ???printing)
  2476.     SI = ???
  2477.     DI = ???
  2478. SeeAlso: AH=04h,INT 1A/AH=E5h
  2479. --------P-170501-----------------------------
  2480. INT 17 U - Emulaser ELTSR - UNHOOK INTERRUPTS
  2481.     AX = 0501h
  2482. Return: (see AX=0500h)
  2483. Note:    restores interrupt vectors without checking whether they have been
  2484.       hooked by later programs; should only be called if ELTSR reports
  2485.       that it is safe to unload
  2486. SeeAlso: AH=04h,AX=0500h,AX=0503h,INT 1A/AH=E5h
  2487. Index:    uninstall;Emulaser ELTSR
  2488. --------P-170502-----------------------------
  2489. INT 17 U - Emulaser ELTSR - SET ???
  2490.     AX = 0502h
  2491.     BL = Emulaser port (31h = LPT1, 32h = LPT2, 33h = LPT3)
  2492.     CL = ???
  2493.     DL = ???
  2494. Return: (see AX=0500h)
  2495. SeeAlso: AH=04h,AX=0500h,INT 1A/AH=E5h
  2496. --------P-170503-----------------------------
  2497. INT 17 U - Emulaser ELTSR - DEACTIVATE???
  2498.     AX = 0503h
  2499. Return: (see AX=0500h)
  2500. SeeAlso: AH=04h,AX=0500h,AX=0501h,INT 1A/AH=E5h
  2501. --------P-1706-------------------------------
  2502. INT 17 U - Emulaser ELTSR - ???
  2503.     AH = 06h
  2504.     ???
  2505. Return: ???
  2506. SeeAlso: AH=05h,INT 1A/AH=E5h
  2507. --------P-1707-------------------------------
  2508. INT 17 U - Emulaser ELTSR - OPEN CAPTURE FILE
  2509.     AH = 07h
  2510.     ES:DX -> ASCIZ filename to be opened
  2511. Return: ???
  2512. Note:    new output will be appended to the specified file
  2513. SeeAlso: AH=08h,INT 1A/AH=E5h
  2514. --------P-1708-------------------------------
  2515. INT 17 U - Emulaser ELTSR - CLOSE CAPTURE FILE
  2516.     AH = 08h
  2517.     ???
  2518. Return: ???
  2519. Desc:    close the file previously opened by function 07h
  2520. SeeAlso: AH=07h,INT 1A/AH=E5h
  2521. --------P-1709-------------------------------
  2522. INT 17 U - Emulaser ELTSR - PRINT CAPTURE FILE???
  2523.     AH = 09h
  2524.     BX = ???
  2525.     CX = ???
  2526.     DX = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  2527. Return: AX = status
  2528.         00h successful
  2529.         FFh failed
  2530. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2531.       Vertisoft Systems, Inc.
  2532. Note:    this function calls through to INT 1A/AX=E401h, and thus requires
  2533.       that either ELSPL or Disk Spool II be installed
  2534. SeeAlso: AH=0Ah,INT 1A/AX=E401h,INT 1A/AH=E5h
  2535. --------P-170A-------------------------------
  2536. INT 17 U - Emulaser ELTSR - SET ??? FILENAME
  2537.     AH = 0Ah
  2538.     ES:BX -> ??? buffer
  2539.     CX = length of ??? buffer
  2540. Return: ???
  2541. Note:    copies the specified name into the buffer passed to ELSPL as the
  2542.       filename by AH=09h
  2543. SeeAlso: AH=09h,INT 1A/AH=E5h
  2544. --------P-170B-------------------------------
  2545. INT 17 U - Emulaser ELTSR - GET ???
  2546.     AH = 0Bh
  2547. Return: AX:BX -> ???
  2548. SeeAlso: AH=0Ah,INT 1A/AH=E5h
  2549. --------P-170C-------------------------------
  2550. INT 17 U - Emulaser ELTSR - SET ??? FLAG
  2551.     AH = 0Ch
  2552.     ???
  2553. Return: ???
  2554. SeeAlso: AH=0Bh,INT 1A/AH=E5h
  2555. --------P-170D-------------------------------
  2556. INT 17 U - Emulaser ELTSR - GET TRUE ScrlLk STATE
  2557.     AH = 0Dh
  2558. Return: AX = state (0000h off, 0010h on)
  2559. Desc:    determine the actual state of ScrlLk even when Emulaser is controlling
  2560.       the ScrlLk light as its activity indicator
  2561. SeeAlso: AH=0Ch,INT 16/AH=02h,INT 1A/AH=E5h
  2562. --------P-170E-------------------------------
  2563. INT 17 U - Emulaser ELTSR - BACKGROUND PROCESSING
  2564.     AH = 0Eh
  2565. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2566.       Vertisoft Systems, Inc.
  2567. Note:    this function is called by ELTSR on every INT 08 to allow data to be
  2568.       processed in the background, but may also be called by applications
  2569.       to give Emulaser additional CPU time
  2570. SeeAlso: AH=0Dh,INT 1A/AH=E5h
  2571. --------P-172000-----------------------------
  2572. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - INSTALLATION CHECK
  2573.     AX = 2000h
  2574.     BL = printer number???
  2575. Return:    AX = status (see below)
  2576.     BX = driver version number (BH=major,BL=minor)
  2577.     CH = ??? (00h)
  2578.     CL = ???
  2579.     DX = ??? (0100h)
  2580. Note:    also enables the remaining printer driver functions (2001h-2007h)
  2581. SeeAlso: AX=2001h,AX=2002h,AX=2003h,AX=2004h,AX=2005h,AX=2006h,AX=2007h
  2582.  
  2583. Values for status:
  2584.  0000h    successful
  2585.  0001h    invalid printer???
  2586.  0002h    ???
  2587.  0003h    invalid subfunction
  2588.  0005h    driver disabled, must call function 00h first
  2589.  0009h    unknown printer error
  2590.  000Bh    printer not selected
  2591.  000Ch    printer out of paper
  2592.  000Eh    error while writing to serial printer
  2593.  000Fh    ???
  2594.  0010h    invalid function number
  2595.  0011h    value out of range
  2596. --------P-172001-----------------------------
  2597. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - SET ??? FLAG
  2598.     AX = 2001h
  2599.     BL = printer number???
  2600. Return: AX = status (see AX=2000h)
  2601. --------P-172002-----------------------------
  2602. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - GET INFORMATION
  2603.     AX = 2002h
  2604.     BL = printer number???
  2605.     CL = desired information
  2606.         00h printer type
  2607.         Return: ES:DI -> ASCIZ printer name
  2608.         01h paper size
  2609.         DX = size index
  2610.         Return: ES:DI -> ASCIZ paper size description
  2611.         02h ???
  2612.         Return: BX = ???
  2613.         03h printer information???
  2614.         DX = ???
  2615.         ES:BX -> buffer for ??? (min 134 bytes)
  2616. Return: AX = status (see AX=2000h)
  2617. SeeAlso: AX=2000h,AX=2004h
  2618. --------P-172003-----------------------------
  2619. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ???
  2620.     AX = 2003h
  2621.     ES:BX -> ???
  2622. Return: AX = status (see AX=2000h)
  2623. SeeAlso: AX=2000h,AX=2004h
  2624. --------P-172004-----------------------------
  2625. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - GET ???
  2626.     AX = 2004h
  2627.     BL = printer number???
  2628. Return: AX = status (see AX=2000h)
  2629.     ES:DI -> ???
  2630. SeeAlso: AX=2000h,AX=2003h
  2631. --------P-172005-----------------------------
  2632. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ADVANCE PRINTER TO NEXT PAGE
  2633.     AX = 2005h
  2634.     BL = printer number???
  2635. Return: AX = status (see AX=2000h)
  2636. Note:    this function also clears the flag set by AX=2001h
  2637. SeeAlso: AX=2000h,AX=2001h,AX=2006h
  2638. --------P-172006-----------------------------
  2639. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ADVANCE TO NEXT PAGE & SHUT DOWN
  2640.     AX = 2006h
  2641.     BL = printer number???
  2642. Return: AX = status (see AX=2000h)
  2643. Note:    this function also clears the flag set by AX=2001h and disables
  2644.       functions other than AX=2000h
  2645. SeeAlso: AX=2000h,AX=2001h,AX=2005h
  2646. --------P-172007-----------------------------
  2647. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - UNIMPLEMENTED
  2648.     AX = 2007h
  2649. Return: AX unchanged
  2650. SeeAlso: AX=2000h
  2651. --------N-172400-----------------------------
  2652. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  2653.     AX = 2400h
  2654.     DL = new state
  2655.         00h disabled
  2656.         01h enabled
  2657. Return: DL = 24h if installed
  2658.     DH = minor version number
  2659.     CX = network address of this machine
  2660.     AL = status
  2661.         00h successful
  2662.         01h timeout
  2663.         02h header error
  2664.         03h data error
  2665.         04h busy
  2666.         05h invalid parameters
  2667. SeeAlso: AX=2403h,INT 16/AX=4500h
  2668. --------N-172401-----------------------------
  2669. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  2670.     AX = 2401h
  2671.     BL = timeout in clock ticks
  2672. Return: AL = status (see AX=2400h)
  2673.     DX:BX -> receive buffer
  2674. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  2675. --------N-172402-----------------------------
  2676. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  2677.     AX = 2402h
  2678.     transmit buffer filled (see AX=2403h)
  2679. Return: AL = status (see AX=2400h)
  2680. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  2681. --------N-172403-----------------------------
  2682. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  2683.     AX = 2403h
  2684. Return: AL = status (see AX=2400h)
  2685.     CX = number of characters in receive ring buffer
  2686.     DX:BX -> transmit buffer
  2687. SeeAlso: AX=2400h,AX=2402h
  2688. --------N-172404-----------------------------
  2689. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  2690.     AX = 2404h
  2691.     BX = target address
  2692. Return: AL = status (see AX=2400h)
  2693. SeeAlso: AX=2402h,AX=2405h
  2694. --------N-172405-----------------------------
  2695. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  2696.     AX = 2405h
  2697.     BX = target address
  2698. Return: AL = status (see AX=2400h)
  2699. SeeAlso: AX=2402h,AX=2404h
  2700. --------N-172406-----------------------------
  2701. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  2702.     AX = 2406h
  2703. Return: AL = status (see AX=2400h)
  2704. SeeAlso: AX=2407h,AX=240Ah
  2705. --------N-172407-----------------------------
  2706. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  2707.     AX = 2407h
  2708. Return: AL = status (see also AX=2400h)
  2709.         06h end of data
  2710.     DL = received character
  2711. SeeAlso: AX=2406h
  2712. --------N-172408-----------------------------
  2713. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  2714.     AX = 2408h
  2715. Return: AL = status (see also AX=2400h)
  2716.         06h end of data
  2717.     CX = number of bytes in receive buffer
  2718.     DX:SI -> receive buffer
  2719. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  2720. --------N-172409-----------------------------
  2721. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  2722.     AX = 2409h
  2723.     BX = target address
  2724.     CX = number of data bytes
  2725.     DL = command code to send
  2726.     DS:SI -> data bytes for command
  2727. Return: AL = status (see also AX=2400h)
  2728.         03h no response
  2729.         06h remote currently unable to perform command
  2730. SeeAlso: AX=2405h,AX=2408h
  2731. --------N-17240A-----------------------------
  2732. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  2733.     AX = 240Ah
  2734. Return: AL = status (see AX=2400h)
  2735. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  2736. --------N-17240B-----------------------------
  2737. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  2738.     AX = 240Bh
  2739.     DL = character to send
  2740. Return: AL = status (see also AX=2400h)
  2741.         03h transmission error
  2742.         06h write error
  2743. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  2744. --------N-17240C-----------------------------
  2745. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  2746.     AX = 240Ch
  2747. Return: AL = status (see also AX=2400h)
  2748.         03h transmission error
  2749.         06h remote breaks connection
  2750. SeeAlso: AX=240Ah,AX=240Bh
  2751. --------J-175000-----------------------------
  2752. INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
  2753.     AX = 5000h
  2754.     BX = country code
  2755.         0001h USA (English), 0051h Japan
  2756. Return: AL = status
  2757.         00h successful
  2758.         01h bad country code
  2759.         02h other error
  2760. SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
  2761. --------J-175001-----------------------------
  2762. INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
  2763.     AX = 5001h
  2764. Return: AL = status
  2765.         00h successful
  2766.         BX = country code
  2767.         02h error
  2768. SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
  2769. --------J-1751-------------------------------
  2770. INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
  2771.     AH = 51h
  2772.     DX = 2-byte JIS code
  2773. Return: DX = shift-JIS value or 0000h on error
  2774. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  2775.       characters to Shift-JIS characters, and the other performs the
  2776.       opposite conversion
  2777. SeeAlso: AX=5000h,AH=52h
  2778. --------J-1752-------------------------------
  2779. INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
  2780.     AH = 52h
  2781.     DX = 2-byte shift-JIS code
  2782. Return: DX = JIS code or 0000h on error
  2783. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  2784.       characters to Shift-JIS characters, and the other performs the
  2785.       opposite conversion
  2786. SeeAlso: AH=51h
  2787. --------V-1760-------------------------------
  2788. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  2789.     AH = 60h
  2790. Return: AL = 60h
  2791.     DX = CS of resident code
  2792. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  2793.     FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
  2794.       consisting of an 80h followed by the actual command
  2795. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  2796. --------V-1761-------------------------------
  2797. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  2798.     AH = 61h
  2799. Return: AL = 61h
  2800.     DX = CS of resident code
  2801. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  2802. --------P-1762-------------------------------
  2803. INT 17 U - T2PS v1.0 - UNINSTALL
  2804.     AH = 62h
  2805. Return: nothing
  2806. SeeAlso: AH=63h,AH=64h,INT 05/AX=554Eh
  2807. --------P-1763-------------------------------
  2808. INT 17 U - T2PS v1.0 - SET PARAMETERS
  2809.     AH = 63h
  2810.     ES:SI -> settings (see below)
  2811. Program: T2PS is a shareware ASCII-to-PostScript converter by A.N.D.
  2812.       Technologies
  2813. SeeAlso: AH=62h,AH=64h,INT 05/AX=4E57h
  2814.  
  2815. Format of settings:
  2816. Offset    Size    Description
  2817.  00h    WORD    LPT port number (0=LPT1, etc.)
  2818.  02h    WORD    page heigh in points
  2819.  04h    WORD    page width in points
  2820.  06h    WORD    top margin in points
  2821.  08h    WORD    bottom margin in points
  2822.  0Ah    WORD    left margin in points
  2823.  0Ch    WORD    right margin in points
  2824.  0Eh    WORD    font size in points
  2825.  10h    WORD    tab size
  2826.  12h    WORD    timeout in clock ticks
  2827. --------P-1764-------------------------------
  2828. INT 17 U - T2PS v1.0 - GET PARAMETERS
  2829.     AH = 64h
  2830.     ES:SI -> buffer for settings (see AH=63h)
  2831. Return: ES:SI buffer filled
  2832. SeeAlso: AH=62h,AH=63h,INT 05/AX=5053h
  2833. --------N-1781-------------------------------
  2834. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  2835.     AH = 81h
  2836.     AL = 00h (NTNX compatibility mode)
  2837.     CL = number of jobs to cancel
  2838. Return: AL = status
  2839.         00h success
  2840.         01h..7Fh warning
  2841.         80h general failure
  2842.         81h host overloaded (NTNX only)
  2843.         82h module busy (NTNX only)
  2844.         83h host busy (NTNX only)
  2845.         84h re-entry flag set
  2846.         85h invalid request
  2847.         86h invalid printer
  2848.         87h invalid process ID
  2849.         89h access denied
  2850.         8Ah option not available for given port type
  2851.         8Bh option not available for given task type
  2852.         91h printer busy
  2853.         C2h file not found
  2854.         C3h path not found
  2855.         C4h file access failure
  2856. Note:    cancels the last CL printouts for the current task
  2857. SeeAlso: AH=82h
  2858. --------N-1782-------------------------------
  2859. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  2860.     AH = 82h
  2861.     AL = 00h (NTNX compatibility mode)
  2862. Return: AL = status (see AH=81h)
  2863. SeeAlso: AH=81h
  2864. --------N-1783-------------------------------
  2865. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  2866.     AH = 83h
  2867.     AL = mode
  2868.         00h NTNX compatibility
  2869.         CL = number of copies (max 99, default 1)
  2870.         02h MW386 v2+
  2871.         BX = logical device number
  2872.             00h-03h = LPT1-LPT4
  2873.             04h-07h = COM1-COM4
  2874.         CX = number of copies
  2875. Return: AL = status (see AH=81h)
  2876. Note:    in NTNX compatibility mode, this function only affects LPT1
  2877. --------N-1784-------------------------------
  2878. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  2879.     AH = 84h
  2880.     AL = mode
  2881.         00h NTNX compatibility
  2882.         02h MW386 v2+
  2883.         BX = logical device number
  2884.             00h-03h = LPT1-LPT4
  2885.             04h-07h = COM1-COM4
  2886. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  2887.       under MW386 in NTNX compatibility mode)
  2888. --------J-1784-------------------------------
  2889. INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
  2890.     AH = 84h
  2891.     AL = character
  2892.     DX = printer number
  2893. Return: AH = printer status (see AH=00h)
  2894. SeeAlso: AH=00h,AH=85h
  2895. --------J-1785-------------------------------
  2896. INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
  2897.     AH = 85h
  2898.     AL = new state (00h enabled, 01h disabled)
  2899. SeeAlso: AH=84h"AX"
  2900. --------N-1787-------------------------------
  2901. INT 17 - Alloy NTNX - SET INDOS POINTER
  2902.     AH = 87h
  2903.     AL = 00h
  2904.     CX:BX -> buffer for user-written printer drivers
  2905. Return: BX,CX destroyed
  2906. Note:    must be executed before the printer is enabled
  2907. SeeAlso: AH=8Ah
  2908. --------N-1788-------------------------------
  2909. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  2910.     AH = 88h
  2911.     AL = mode
  2912.         00h NTNX compatibility
  2913.         DX = NTNX printer number (see below)
  2914.         01h MW386
  2915.         DX = MW386 printer number
  2916. Return: AH = status (see AH=81h)
  2917. Note:    removes specified printer from the spooler's list of printers
  2918. SeeAlso: AH=89h,AH=8Bh
  2919.  
  2920. Values for NTNX printer number:
  2921.  00h    host LPT1
  2922.  01h    host LPT2
  2923.  02h    host LPT3
  2924.  03h    host LPT4
  2925.  04h    host COM1
  2926.  05h    host COM2
  2927.  06h    user's logical COM2
  2928.  07h    user's terminal AUX port
  2929.  08h    user's logical COM1 (MW386 only)
  2930. --------N-1789-------------------------------
  2931. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  2932.     AH = 89h
  2933.     AL = mode
  2934.         00h NTNX compatibility
  2935.         DX = NTNX printer number (see AH=88h)
  2936.         01h MW386
  2937.         DX = MW386 printer number
  2938. Return: AL = status (see AH=81h)
  2939. Note:    the specified printer is added to the spooler's list of available
  2940.       printers
  2941. SeeAlso: AH=88h,AH=8Bh
  2942. --------N-178A-------------------------------
  2943. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  2944.     AH = 8Ah
  2945.     ???
  2946. SeeAlso: AH=92h
  2947. --------N-178B-------------------------------
  2948. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  2949.     AH = 8Bh
  2950.     DS:DX -> ASCIZ printer name
  2951. Return: AL = status (see also AH=81h)
  2952.         00h successful
  2953.         DX = physical device number
  2954. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  2955. --------N-178C-------------------------------
  2956. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  2957.     AH = 8Ch
  2958.     DX = physical device number
  2959.     ES:DI -> 17-byte buffer for ASCIZ device name
  2960. Return: AL = status (see also AH=81h)
  2961.         00h successful
  2962.         ES:DI buffer filled
  2963. SeeAlso: AH=88h,AH=8Bh
  2964. --------N-178D-------------------------------
  2965. INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
  2966.     AH = 8Dh
  2967.     AL = 00h
  2968. Return: AL = status (see AH=81h)
  2969. Notes:    clears all buffers and resets spooler to boot-up values
  2970.     MW386 supports this function for compatibility only; it is a NOP
  2971. --------N-178E-------------------------------
  2972. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  2973.     AH = 8Eh
  2974.     AL = 00h
  2975. Return: CX:BX -> INT 28 entry point
  2976. SeeAlso: AH=8Fh
  2977. --------N-178F-------------------------------
  2978. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  2979.     AH = 8Fh
  2980.     AL = 00h
  2981. Return: CX:BX -> DOS intercept routine
  2982. SeeAlso: AH=8Eh
  2983. --------N-1790-------------------------------
  2984. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  2985.     AH = 90h
  2986.     AL = mode
  2987.         00h NTNX compatibility
  2988.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  2989.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  2990.         02h MW386 v2+
  2991.         BX = logical device number
  2992.             00h-03h = LPT1-LPT4
  2993.             04h-07h = COM1-COM4
  2994.     CX:SI -> ASCIZ pathname
  2995. Return: AL = status (see AH=81h)
  2996. Note:    in mode 00h, the file is always sent to logical LPT1
  2997. SeeAlso: AH=A0h
  2998. --------N-1791-------------------------------
  2999. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  3000.     AH = 91h
  3001.     AL = mode
  3002.         00h NTNX compatibility
  3003.         Return: CX = user number (00h = host)
  3004.             DX = currently selected printer number (00h-08h)
  3005.         01h MW386
  3006.         Return: CX = user number
  3007.             DX = physical dev number of currently selected printer
  3008.         02h MW386 v2+
  3009.         BX = logical device number
  3010.             00h-03h = LPT1-LPT4
  3011.             04h-07h = COM1-COM4
  3012.         Return: CX = user number
  3013.             DX = physical device number
  3014. Return: AL = status (see AH=81h)
  3015. SeeAlso: AH=8Ch
  3016. --------N-1792-------------------------------
  3017. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  3018.     AH = 92h
  3019.     AL = 00h
  3020.     CL = 00h
  3021. Return: CL = driver state
  3022.         01h initialized
  3023.         80h not initialized
  3024.     AX = status (see AH=81h)
  3025. SeeAlso: AH=8Ah
  3026. --------N-1794-------------------------------
  3027. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  3028.     AH = 94h
  3029.     AL = mode
  3030.         00h NTNX compatibility
  3031.         DX = NTNX printer number (see AH=88h)
  3032.         01h MW386
  3033.         DX = MW386 printer number
  3034.         02h MW386 v2+
  3035.         BX = logical printer number
  3036.         DX = MW386 printer number
  3037. Return: AL = status (see AH=81h)
  3038. Note:    modes 00h and 01h affect only logical LPT1
  3039. SeeAlso: AH=8Bh,AH=95h
  3040. --------N-1795-------------------------------
  3041. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  3042.     AH = 95h
  3043.     AL = mode
  3044.         00h NTNX compatibility
  3045.         Return: DX = NTNX printer number (see AH=88h)
  3046.                 (FFFFh if current printer not compatible with NTNX)
  3047.         01h MW386
  3048.         Return: DX = MW386 printer number
  3049.         02h MW386 v2+
  3050.         BX = logical device number
  3051.             00h-03h = LPT1-LPT4
  3052.             04h-07h = COM1-COM4
  3053.         Return: DX = MW386 printer number (FFFFh = none)
  3054. Return: AL = status (see AH=81h)
  3055. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  3056. SeeAlso: AH=94h
  3057. --------N-1796-------------------------------
  3058. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  3059.     AH = 96h
  3060.     AL = 00h
  3061. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  3062.       returning
  3063. SeeAlso: INT 14/AH=24h
  3064. --------N-1797-------------------------------
  3065. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  3066.     AH = 97h
  3067.     AL = mode
  3068.         00h NTNX compatibility
  3069.         02h MW386 v2+
  3070.         BX = logical device number
  3071.             00h-03h = LPT1-LPT4
  3072.             04h-07h = COM1-COM4
  3073.     CH,CL,DH = three character break sequence
  3074.     DL = subfunction
  3075.         00h set break string
  3076.         else reset break
  3077. Return: AL = status (see AH=81h)
  3078. Notes:    mode 00h affects only logical LPT1
  3079.     when the break string is encountered, the spool file will be closed and
  3080.       queued for printing automatically
  3081.     the break string is not permanently saved, and will be reset each time
  3082.       MW386 or the user is rebooted
  3083. SeeAlso: AH=9Bh
  3084. --------N-1798-------------------------------
  3085. INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
  3086.     AH = 98h
  3087.     AL = 00h
  3088.     DL = printer number (FFh=current)
  3089. Return: AL = status
  3090.         00h successful
  3091.         01h incorrect printer
  3092.         02h task not found
  3093. Note:    MW386 supports this function for compatibility only; it is a NOP
  3094. --------N-1799-------------------------------
  3095. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  3096.     AH = 99h
  3097.     AL = mode
  3098.         00h NTNX compatibility
  3099.         DL = NTNX printer number (see AH=88h)
  3100.             (FFh = task's current logical LPT1)
  3101.         DH = mode
  3102.             bit 0: get mode if 1, set mode if 0
  3103.             bit 1: private ("attached")
  3104.             bit 2: direct instead of spooled
  3105.             bits 3-7 reserved (0)
  3106.         01h MW386
  3107.         DX = MW386 printer number
  3108.         CL = mode (as for DH above)
  3109. Return: AL = status (see AH=81h)
  3110.     DH = mode (bits 1 and 2 set as above)
  3111.     DL = printer owner's user number if not spooled
  3112. --------N-179A-------------------------------
  3113. INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
  3114.     AH = 9Ah
  3115.     AL = mode
  3116.         00h NTNX compatibility
  3117.         DX = NTNX printer number (see AH=88h)
  3118.             (FFFFh = current logical LPT1)
  3119.         01h MW386
  3120.         DX = MW386 printer number
  3121.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  3122. Return: AL = status (see AH=81h)
  3123. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  3124.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  3125. SeeAlso: AH=A4h
  3126. --------N-179B-------------------------------
  3127. INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
  3128.     AH = 9Bh
  3129.     AL = mode
  3130.         00h NTNX compatibility
  3131.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  3132.         01h MW386
  3133.         CX = timeout value in seconds (00h = never)
  3134.         02h MW386 v2+
  3135.         BX = logical device number
  3136.             00h-03h = LPT1-LPT4
  3137.             04h-07h = COM1-COM4
  3138.         CX = timeout value in seconds (00h = never)
  3139. Return: AL = status (see AH=81h)
  3140. Notes:    modes 00h and 01h affect only the current logical LPT1
  3141.     if no data is sent to a printer for the specified amount of time, the
  3142.       spool file will be closed and queued for printing automatically
  3143. SeeAlso: AH=97h
  3144. --------N-17A0-------------------------------
  3145. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  3146.     AH = A0h
  3147.     AL = mode
  3148.         00h NTNX compatibility
  3149.         DX = ??? (NTNX, MW386 v1.x only)
  3150.         02h MW386 v2+
  3151.         BX = logical device number
  3152.             00h-03h = LPT1-LPT4
  3153.             04h-07h = COM1-COM4
  3154.     CX:SI -> ASCIZ pathname
  3155. Return: AL = status (see AH=81h)
  3156. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  3157.       the original file to be modified or deleted while the copy is printed
  3158.     in mode 00h, the file is printed on logical LPT1
  3159. SeeAlso: AH=90h
  3160. --------N-17A4-------------------------------
  3161. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  3162.     AH = A4h
  3163.     AL = new state
  3164.         00h form feed after end of print job disabled
  3165.         01h form feed enabled
  3166. Return: AL = status (see AH=81h)
  3167. Note:    only affects the current logical LPT1
  3168. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  3169. --------N-17A6-------------------------------
  3170. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  3171.     AH = A6h
  3172.     AL = new state
  3173.         00h banner page before print job disabled
  3174.         01h banner page enabled
  3175. Return: AL = status (see AH=81h)
  3176. Note:    only affects the current logical LPT1
  3177. SeeAlso: AH=A4h
  3178. --------N-17A7-------------------------------
  3179. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  3180.     AH = A7h
  3181.     AL = spool flags
  3182.         bit 0: banner page enabled (see AH=A4h)
  3183.         bit 1: form feed enabled (see AH=A6h)
  3184.         bits 2-6: reserved (0)
  3185.         bit 7: set flags if 1, get flags if 0
  3186.     BX = logical device number
  3187.         00h-03h = LPT1-LPT4
  3188.         04h-07h = COM1-COM4
  3189. Return: AL = status (see AH=81h)
  3190. Note:    the documentation does not state which register contains the result of
  3191.       a GET
  3192. SeeAlso: AH=A4h,AH=A6h
  3193. --------N-17A8-------------------------------
  3194. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  3195.     AH = A8h
  3196.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  3197. Return: AL = status (see AH=81h)
  3198. Note:    allows application to specify banner page filename for spool files
  3199.       collected from the application's printer output
  3200. SeeAlso: AH=A9h
  3201. --------N-17A9-------------------------------
  3202. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  3203.     AH = A9h
  3204.     AL = new spool drive (2=C:,3=D:,etc)
  3205. Return: AL = status (see AH=81h)
  3206. Note:    does not remove previous spooling directory since jobs may be pending
  3207. SeeAlso: AH=A8h
  3208. --------N-17AA-------------------------------
  3209. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  3210.     AH = AAh
  3211.     AL = mode
  3212.         00h NTNX
  3213.         DX = NTNX printer number (see AH=88h)
  3214.         01h MW386
  3215.         DX = MW386 printer number
  3216. Return: AH = instantaneous printer status
  3217.         00h printer ready
  3218.         01h not ready
  3219.         12h off line
  3220.         13h out of paper
  3221.         14h general device failure
  3222.         15h device timeout
  3223.         16h bad device number
  3224. --------N-17AF-------------------------------
  3225. INT 17 - Alloy MW386 - CHECK SPOOLER
  3226.     AH = AFh
  3227. Return: AX = 55AAh if spooler available
  3228. --------c-17C0-------------------------------
  3229. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  3230.     AH = C0h
  3231.     DX = printer port (0-3)
  3232. Return: ES:BX -> control block (see below)
  3233. SeeAlso: AH=C1h
  3234.  
  3235. Format of control block:
  3236. Offset    Size    Description
  3237.  00h    WORD    printer number
  3238.  02h    WORD    address of printer status port
  3239.  04h    WORD    number of first record in queue
  3240.  06h    WORD    number of last record in queue
  3241.  08h    DWORD    characters already printed
  3242.  0Ch    DWORD    number of characters remaining
  3243.  10h    DWORD    pointer to dequeue buffer
  3244.  14h    DWORD    previous count of characters printed
  3245.  18h    DWORD    number of clock ticks taken to print them
  3246.  1Ch    WORD    offset of next character to output
  3247.  1Eh    WORD    offset of next character to print
  3248.  20h    WORD    pointer to spooling queue record
  3249.  22h    BYTE    current spooling status
  3250.  23h    BYTE    current printer status:
  3251.         00h OK
  3252.         01h not ready
  3253.         02h paused with message
  3254.         03h paused
  3255.         04h initializing
  3256.         FEh non-existent port
  3257.         FFh not spooled
  3258.  24h    BYTE    current control record type
  3259.  25h    WORD    observed printer speed
  3260.  27h    WORD    characters to print per service
  3261.  29h    BYTE    01h if disk write needed
  3262.  2Ah    BYTE    01h if queued data should be flushed
  3263.  2Bh    BYTE    01h to update cps status
  3264. --------c-17C1--------------------------------
  3265. INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
  3266.     AH = C1h
  3267.     DX = printer port (0-3)
  3268.     DS:SI -> ASCIZ string to save for display
  3269. Note:    flushes pending writes
  3270. SeeAlso: AH=C0h,AH=C2h
  3271. --------c-17C2-------------------------------
  3272. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  3273.     AH = C2h
  3274.     DX = printer port (0-3)
  3275. SeeAlso: AH=C3h
  3276. --------c-17C3-------------------------------
  3277. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  3278.     AH = C3h
  3279.     DX = printer port (0-3)
  3280. SeeAlso: AH=C2h,AH=C7h
  3281. --------c-17C4-------------------------------
  3282. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  3283.     AH = C4h
  3284. Return: DI = B0BFh
  3285.     SI = segment
  3286. --------c-17C5-------------------------------
  3287. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  3288.     AH = C5h
  3289.     DX = printer port (0-3)
  3290. Note:    cancels up to the pause record
  3291. --------c-17C6-------------------------------
  3292. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  3293.     AH = C6h
  3294.     DX = printer port (0-3)
  3295. Return: AX = 0 printer not active or at pause
  3296.        = 1 printer busy
  3297. --------c-17C7-------------------------------
  3298. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  3299.     AH = C7h
  3300.     DX = printer port (0-3)
  3301. SeeAlso: AH=C3h
  3302. --------P-17CD00-----------------------------
  3303. INT 17 - INSET - EXECUTE COMMAND STRING
  3304.     AX = CD00h
  3305.     DS:DX -> ASCIZ command string (max 80 bytes)
  3306. Return: CX = 07C2h (1986d)
  3307. Note:    user interface menus pop up after last command, unless that command
  3308.     exits INSET
  3309. --------P-17CD01-----------------------------
  3310. INT 17 - INSET - GET IMAGE SIZE
  3311.     AX = CD01h
  3312.     DS:DX -> ASCIZ name of image file
  3313. Return: AX = height in 1/720th inch
  3314.     BX = width in 1/720th inch
  3315.     CX = 07C2h (1986d)
  3316. --------P-17CD02-----------------------------
  3317. INT 17 - INSET - INITIALIZE
  3318.     AX = CD02h
  3319. Return: CX = 07C2h (1986d)
  3320. Note:    all open files are closed and the printer is reset
  3321. SeeAlso: AX=CD04h
  3322. --------P-17CD03-----------------------------
  3323. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  3324.     AX = CD03h
  3325. Return: CX = 07C2h (1986d)
  3326. --------P-17CD04-----------------------------
  3327. INT 17 - INSET - INITIALIZE LINKED MODE
  3328.     AX = CD04h
  3329.     ES:SI -> FAR routine for linked mode
  3330. Return: CX = 07C2h
  3331. Note:    calling sequence for linked-mode routine
  3332.     AL = 00h send character in BL to printer
  3333.        = 01h send CX bytes from DS:DX to printer
  3334.        = 02h move print head to horizontal starting position of image
  3335.     return code for linked-mode routine:
  3336.     AX = 0000h success
  3337.        = 0001h failure
  3338. SeeAlso: AX=CD02h,AX=CD08h
  3339. --------P-17CD05-----------------------------
  3340. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  3341.     AX = CD05h
  3342.     DS:DX -> ASCIZ name of PIX file
  3343.     CX = left margin of text in 1/720th inch
  3344. Return: AH = printer type
  3345.         00h page-oriented (multiple images may be placed side-by-side)
  3346.         01h line-oriented (use AX=CD06h for vertical paper movement)
  3347.     CX = 07C2h (1986d)
  3348. SeeAlso: AX=CD07h
  3349. --------P-17CD06-----------------------------
  3350. INT 17 - INSET - GRAPHICS LINE FEED
  3351.     AX = CD06h
  3352. Return: AH = completion status
  3353.         00h image complete
  3354.         01h image incomplete
  3355.     CX = 07C2h (1986d)
  3356. SeeAlso: AX=CD09h
  3357. --------P-17CD07-----------------------------
  3358. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  3359.     AX = CD07h
  3360. Return: CX = 07C2h
  3361. SeeAlso: AX=CD05h
  3362. --------P-17CD08-----------------------------
  3363. INT 17 - INSET - CANCEL LINK MODE
  3364.     AX = CD08h
  3365. Return: CX = 07C2h
  3366. SeeAlso: AX=CD04h
  3367. --------P-17CD09-----------------------------
  3368. INT 17 - INSET - ALTER TEXT LINE SPACING
  3369.     AX = CD09h
  3370.     CX = line spacing in 1/720th inch
  3371. Return: CX = 07C2h
  3372. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  3373. SeeAlso: AX=CD06h
  3374. --------P-17CD0A-----------------------------
  3375. INT 17 - INSET - GET SETUP
  3376.     AX = CD0Ah
  3377.     DS:DX -> buffer for IN.SET data
  3378. Return: CX = 07C2h
  3379. --------P-17CD0B-----------------------------
  3380. INT 17 - INSET - START GETTING SCALED IMAGE
  3381.     AX = CD0Bh
  3382.     DS:SI -> ASCIZ pathname of .PIX file
  3383.     BX = number of bitplanes
  3384.     CX = number of rows in output bitmap
  3385.     DX = number of columns in output bitmap
  3386. Return: AX = status
  3387.         0000h OK
  3388.         FFFFh error
  3389. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  3390. --------P-17CD0C-----------------------------
  3391. INT 17 - INSET - GET NEXT IMAGE STRIP
  3392.     AX = CD0Ch
  3393. Return: AX = status
  3394.         0000h OK but not complete
  3395.         0001h OK and image complete
  3396.         FFFFh error
  3397.     DS:SI -> buffer (max 4K) for bit map strip
  3398.     CX = start row
  3399.     DX = number of rows
  3400.     BX = offset in bytes between bit planes
  3401. Note:    buffer may be overwritten by subsequent calls
  3402. SeeAlso: AX=CD0Bh
  3403. --------P-17F0-------------------------------
  3404. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  3405.     AH = F0h
  3406.     DX = printer port (0-3)
  3407. Return: AX = 0001h Jetstream present
  3408.          else  non-Jetstream port
  3409. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  3410.       to drive printers at up to 80000 characters per second
  3411. --------P-17F1-------------------------------
  3412. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  3413.     AH = F1h
  3414.     CX = data buffer length
  3415.     DX = printer port (0-3)
  3416.     DS:SI -> data buffer
  3417. Return: AX = status
  3418.         0000h printer not ready (see also AH=02h)
  3419.         other printing started
  3420. SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
  3421. --------P-17F2-------------------------------
  3422. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  3423.     AH = F2h
  3424.     DX = printer port (0-3)
  3425. Return: AX = status
  3426.         0000h prior print request finished
  3427.         other number of characters left to print
  3428. SeeAlso: AH=02h,AH=F1h,AH=F3h
  3429. --------P-17F3-------------------------------
  3430. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  3431.     AH = F3h
  3432.     DX = printer port (0-3)
  3433. Return: AX = number of unprinted characters due to abort
  3434. SeeAlso: AH=F1h,AH=F4h
  3435. --------P-17F4-------------------------------
  3436. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  3437.     AH = F4h
  3438.     DX = printer port (0-3)
  3439.     DS:DS -> FAR post address (called with interrupts on)
  3440. SeeAlso: AH=F1h,AH=F3h
  3441. --------P-17F5-------------------------------
  3442. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  3443.     AH = F5h
  3444.     CX = data buffer length
  3445.     DX = printer port (0-3)
  3446.     DS:SI -> data buffer (32-bit physical address)
  3447. Return: AX = status
  3448.         0000h printer not ready (see also AH=02h)
  3449.         other printing started
  3450. SeeAlso: AH=F1h
  3451. --------c-17FF--BX0000-----------------------
  3452. INT 17 U - PC-MOS/386 v5.01 - PRINT SPOOLER - CLOSE SPOOL FILE
  3453.     AH = FFh
  3454.     BX = 0000h
  3455.     CX = 0000h
  3456.     DX = printer port number
  3457. Return: AH = printer status (see AH=00h)
  3458. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  3459.       operating system by The Software Link, Inc.
  3460. Desc:    close the spool file immediately instead of waiting for the close time
  3461.       to elapse
  3462. SeeAlso: AH=01h,AH=03h"PC-MOS"
  3463. --------B-18---------------------------------
  3464. INT 18 - DISKLESS BOOT HOOK (START CASSETTE BASIC)
  3465. Desc:    called when there is no bootable disk available to the system
  3466. Notes:    only PCs produced by IBM contain BASIC in ROM, so the action is
  3467.       unpredictable on compatibles; this interrupt often reboots the
  3468.       system, and often has no effect at all
  3469.     network cards with their own BIOS can hook this interrupt to allow
  3470.       a diskless boot off the network (even when a hard disk is present
  3471.       if none of the partitions is marked as the boot partition)
  3472. SeeAlso: INT 86"NetBIOS"
  3473. --------J-1800-------------------------------
  3474. INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
  3475.     AH = 00h
  3476. Return: AX = keystroke
  3477. SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
  3478. --------J-1801-------------------------------
  3479. INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
  3480.     AH = 01h
  3481. Return: ZF set if no keystroke available
  3482.     ZF clear if keystroke available
  3483.         AX = keystroke
  3484. SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
  3485. --------J-1802-------------------------------
  3486. INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
  3487.     AH = 02h
  3488. Return: AL = shift flags
  3489. SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
  3490. --------J-1803-------------------------------
  3491. INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
  3492.     AH = 03h
  3493.     ???
  3494. Return: ???
  3495. SeeAlso: AH=00h,AH=04h
  3496. --------J-1804-------------------------------
  3497. INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
  3498.     AH = 04h
  3499.     ???
  3500. Return: ???
  3501. Note:    details are not available at this time
  3502. SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
  3503. --------J-18---------------------------------
  3504. INT 18 - NEC PC-9800 series - VIDEO
  3505.     AH = function
  3506.         0Ah set video mode
  3507.         0Bh get video mode
  3508.         0Ch start text screen display
  3509.         0Dh end text screen display
  3510.         0Eh set single display area
  3511.         0Fh set multiple display area
  3512.         10h set cursor shape
  3513.         11h display cursor
  3514.         12h terminate cursor
  3515.         13h set cursor position
  3516.         14h read font patter
  3517.         16h initialize text video RAM
  3518.         1Ah define user character
  3519.     ???
  3520. Return: ???
  3521. Notes:    details are not available at this time
  3522.     text video RAM is located at segments A000h (characters) and A200h
  3523.       (attributes)
  3524. ----------185350BX4849-----------------------
  3525. INT 18 - SPHINX C-- - WB.COM - API
  3526.     AX = 5350h ('SP')
  3527.     BX = 4849h ('HI')
  3528.     CX = 4E58h ('NX')
  3529.     DH = function
  3530.         01h set ???
  3531.         DL = ???
  3532.         02h get ???
  3533.         Return: DL = ???
  3534.         03h get ???
  3535.         Return: ES:DI -> ??? data buffer
  3536.         06h ???
  3537. Return: AX = 7370h ('sp') if installed
  3538.     BX = 6869h ('hi') if installed
  3539.     CX = 6E78h ('nx') if installed
  3540. Program: SPHINX C-- is a shareware compiler by Peter Cellik for a language
  3541.       which is a cross between C and assembler; WB.COM is the driver which
  3542.       launches the WorkBench
  3543. --------s-186900-----------------------------
  3544. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - GET STATUS
  3545.     AX = 6900h
  3546. Return: AX = amount of DRAM on card or 0000h if GUS not available
  3547. Program: YEA_GUS is a driver for the Graphics Ultra Sound which hooks INT 18h
  3548.       and then shells out the the program requiring its services
  3549. SeeAlso: AX=6901h,AX=690Ah,AX=690Bh
  3550. --------s-186901-----------------------------
  3551. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - RESET
  3552.     AX = 6901h
  3553.     BX = number of active voices (14-32)
  3554. Return: nothing
  3555. SeeAlso: AX=6900h
  3556. --------s-186902-----------------------------
  3557. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SET VOLUME FOR SPECIFIC VOICE
  3558.     AX = 6902h
  3559.     BX = voice number (00h-1Fh)
  3560.     CX = linear volume (0000h-01FFh)
  3561. Return: nothing
  3562. SeeAlso: AX=6900h,AX=6903h,AX=6904h,AX=6909h,AX=690Ah
  3563. --------s-186903-----------------------------
  3564. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SET FREQUENCY FOR VOICE
  3565.     AX = 6903h
  3566.     BX = voice number (00h-1Fh)
  3567.     CX = frequency in Hz (0-44100)
  3568. Return: nothing
  3569. SeeAlso: AX=6902h,AX=6904h
  3570. --------s-186904-----------------------------
  3571. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SET LEFT/RIGHT BALANCE
  3572.     AX = 6904h
  3573.     BX = voice number (00h-1Fh)
  3574.     CX = balance (0 = left, 7 = even, 15 = right)
  3575. Return: nothing
  3576. SeeAlso: AX=6902h,AX=6903h
  3577. --------s-186905-----------------------------
  3578. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - PLAY MUSIC
  3579.     AX = 6905h
  3580.     BL = voice number
  3581.     BH = sample type (0 = 8-bit, 1 = 16-bit)
  3582.     CL = looping type (0 = none, 1 = forward, 2 = back and forth)
  3583.     CH:DI = 20-bit starting address for voice data
  3584.     DL:SI = 20-bit address for loop start
  3585.     DH:BP = 20-bit address for loop end
  3586. SeeAlso: AX=6903h,AX=6906h,AX=690Bh
  3587. --------s-186906-----------------------------
  3588. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - LOAD SOUND DATA
  3589.     AX = 6906h
  3590.     BL = data format (1 = twos-complement, 0 = not)
  3591.     BH = sample type (0 = 8-bit, 1 = 16-bit)
  3592.     CX = number of bytes to send
  3593.     ES:SI -> buffer containing data
  3594.     DL:DI = 20-bit address of GUS DRAM at which to load sound data
  3595. SeeAlso: AX=6900h,AX=6905h,AX=690Ch
  3596. --------s-186907-----------------------------
  3597. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - STOP VOICE
  3598.     AX = 6907h
  3599.     BX = voice number (00h-1Fh)
  3600. Return: nothing
  3601. SeeAlso: AX=6908h,AX=690Dh
  3602. --------s-186908-----------------------------
  3603. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SET VOICE END
  3604.     AX = 6908h
  3605.     BX = voice number (00h-1Fh)
  3606.     CL:DX = 20-bit ending address
  3607. Return: nothing
  3608. SeeAlso: AX=690Bh
  3609. --------s-186909-----------------------------
  3610. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - RAMP VOLUME
  3611.     AX = 6909h
  3612.     BL = voice number (00h-1Fh)
  3613.     BH = looping type (0 = none, 1 = forward, 2 = back and forth)
  3614.     CX = starting volume
  3615.     DX = ending volume
  3616.     DI:SI = time
  3617. Return: nothing
  3618. SeeAlso: AX=6902h,AX=690Ah
  3619. --------s-18690A-----------------------------
  3620. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - GET VOLUME
  3621.     AX = 690Ah
  3622.     BX = voice number (00h-1Fh)
  3623. Return: AX = current non-linear volume for voice
  3624. SeeAlso: AX=6902h,AX=6909h
  3625. --------s-18690B-----------------------------
  3626. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - GET POSITION
  3627.     AX = 690Bh
  3628.     BX = voice number
  3629. Return: BX:AX = 20-bit address at which voice is playing
  3630. SeeAlso: AX=6900h,AX=6905h,AX=6908h
  3631. --------s-18690C-----------------------------
  3632. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - SAVE SOUND DATA
  3633.     AX = 690Ch
  3634.     BL = data format (1 = twos-complement, 0 = not)
  3635.     BH = sample type (0 = 8-bit, 1 = 16-bit)
  3636.     CX = number of bytes to get
  3637.     ES:SI -> buffer for retrieved data
  3638.     DL:DI = 20-bit address in GUS DRAM from which to read voice data
  3639. Return: nothing
  3640. SeeAlso: AX=6906h
  3641. --------s-18690D-----------------------------
  3642. INT 18 - Gravis Ultra Sound YEA_GUS.EXE - RESTART VOICE
  3643.     AX = 690Dh
  3644.     BX = voice
  3645.     CX = sample type (0 = 8-bit, 1 = 16-bit)
  3646.     DX = looping type (0 = none, 1 = forward, 2 = back and forth)
  3647. Return: CX = balance value
  3648. SeeAlso: AX=6907h,AX=6908h
  3649. --------s-188000-----------------------------
  3650. INT 18 - Gravis Ultra Sound EURO_MOD.EXE - INITIALIZE
  3651.     AX = 8000h
  3652. Program: EURO_MOD is a .MOD file player for the Gravis Ultra Sound which hooks
  3653.       INT 18h and then shells out to the program requiring its services
  3654. SeeAlso: AX=8001h,AX=8004h
  3655. --------s-188001-----------------------------
  3656. INT 18 - Gravis Ultra Sound EURO_MOD.EXE - LOAD .MOD FILE
  3657.     AX = 8001h
  3658.     BX:CX -> ASCIZ filename
  3659. SeeAlso: AX=8000h,AX=8002h
  3660. --------s-188002-----------------------------
  3661. INT 18 - Gravis Ultra Sound EURO_MOD.EXE - PLAY .MOD FILE
  3662.     AX = 8002h
  3663. SeeAlso: AX=8002h,AX=8003h
  3664. --------s-188003-----------------------------
  3665. INT 18 - Gravis Ultra Sound EURO_MOD.EXE - STOP PLAYING
  3666.     AX = 8003h
  3667. --------s-188004-----------------------------
  3668. INT 18 - Gravis Ultra Sound EURO_MOD.EXE - SHUTDOWN
  3669.     AX = 8004h
  3670. SeeAlso: AX=8000h,AX=8003h
  3671. --------B-19---------------------------------
  3672. INT 19 - SYSTEM - BOOTSTRAP LOADER
  3673. Desc:    This interrupt reboots the system without clearing memory or restoring
  3674.       interrupt vectors.  Because interrupt vectors are preserved, this
  3675.       interrupt usually causes a system hang if any TSRs have hooked
  3676.       vectors from 00h through 1Ch, particularly INT 08.
  3677. Notes:    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive
  3678.       A: to 0000h:7C00h.  If this fails, and a hard disk is installed, the
  3679.       BIOS will read sector 1, head 0, track 0 of the first hard disk.
  3680.       This sector should contain a master bootstrap loader and a partition
  3681.       table.  After loading the master boot sector at 0000h:7C00h, the
  3682.       master bootstrap loader is given control.  It will scan the partition
  3683.       table for an active partition, and will then load the operating
  3684.       system's bootstrap loader (contained in the first sector of the
  3685.       active partition) and give it control.
  3686.     true IBM PCs and most clones issue an INT 18 if neither floppy nor hard
  3687.       disk have a valid boot sector
  3688.     to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  3689.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  3690.       a reset, store 0000h at 0040h:0072h before jumping.
  3691.     VDISK.SYS hooks this interrupt to allow applications to find out how
  3692.       much extended memory has been used by VDISKs (see below).  DOS 3.3+
  3693.       PRINT hooks INT 19 but does not set up a correct VDISK header block
  3694.       at the beginning of its INT 19 handler segment, thus causing some
  3695.       programs to overwrite extended memory which is already in use.
  3696.     the default handler is at F000h:E6F2h for 100% compatible BIOSes
  3697.     MS-DOS 3.2+ hangs on booting (even from floppy) if the hard disk
  3698.       contains extended partitions which point at each other in a loop,
  3699.       since it will never find the end of the linked list of extended
  3700.       partitions
  3701. SeeAlso: INT 14/AH=17h,INT 18
  3702.  
  3703. Format of VDISK header block (at beginning of INT 19 handler's segment):
  3704. Offset    Size    Description
  3705.  00h 18 BYTEs    n/a (for VDISK.SYS, the device driver header)
  3706.  12h 11 BYTEs    signature string "VDISK     Vn.m" for VDISK.SYS version n.m
  3707.  1Dh 15 BYTEs    n/a
  3708.  2Ch  3 BYTEs    linear address of first byte of available extended memory
  3709.  
  3710. Format of hard disk master boot sector:
  3711. Offset    Size    Description
  3712.  00h 446 BYTEs    Master bootstrap loader code
  3713. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  3714. 1CEh 16 BYTEs    partition record for partition 2
  3715. 1DEh 16 BYTEs    partition record for partition 3
  3716. 1EEh 16 BYTEs    partition record for partition 4
  3717. 1FEh    WORD    signature, AA55h indicates valid boot block
  3718.  
  3719. Format of partition record:
  3720. Offset    Size    Description
  3721.  00h    BYTE    boot indicator (80h = active partition)
  3722.  01h    BYTE    partition start head
  3723.  02h    BYTE    partition start sector (bits 0-5)
  3724.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  3725.  04h    BYTE    operating system indicator (see below)
  3726.  05h    BYTE    partition end head
  3727.  06h    BYTE    partition end sector (bits 0-5)
  3728.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  3729.  08h    DWORD    sectors preceding partition
  3730.  0Ch    DWORD    length of partition in sectors
  3731.  
  3732. Values for operating system indicator:
  3733.  00h    empty
  3734.  01h    DOS 12-bit FAT
  3735.  02h    XENIX root file system
  3736.  03h    XENIX /usr file system (obsolete)
  3737.  04h    DOS 16-bit FAT
  3738.  05h    DOS 3.3+ extended partition
  3739.  06h    DOS 3.31+ Large File System
  3740.  07h    QNX
  3741.  07h    OS/2 HPFS
  3742.  07h    Advanced Unix
  3743.  08h    AIX bootable partition, SplitDrive
  3744.  09h    AIX data partition
  3745.  09h    Coherent filesystem
  3746.  0Ah    OS/2 Boot Manager
  3747.  0Ah    OPUS
  3748.  0Ah    Coherent swap partition
  3749.  10h    OPUS
  3750.  18h    AST special Windows swap file
  3751.  24h    NEC MS-DOS 3.x
  3752.  40h    VENIX 80286
  3753.  50h    Disk Manager, read-only partition
  3754.  51h    Disk Manager, read/write partition
  3755.  51h    Novell???
  3756.  52h    CP/M
  3757.  52h    Microport System V/386
  3758.  56h    GoldenBow VFeature
  3759.  61h    SpeedStor
  3760.  63h    Unix SysV/386, 386/ix
  3761.  63h    Mach, MtXinu BSD 4.3 on Mach
  3762.  63h    GNU HURD
  3763.  64h    Novell NetWare
  3764.  65h    Novell NetWare (3.11)
  3765.  70h    DiskSecure Multi-Boot
  3766.  75h    PC/IX
  3767.  80h    Minix v1.1 - 1.4a
  3768.  81h    Minix v1.4b+
  3769.  81h    Linux
  3770.  81h    Mitac Advanced Disk Manager
  3771.  82h    Linux Swap partition (planned)
  3772.  84h    OS/2-renumbered type 04h partition (related to hiding DOS C: drive)
  3773.  93h    Amoeba file system
  3774.  94h    Amoeba bad block table
  3775.  B7h    BSDI file system (secondarily swap)
  3776.  B8h    BSDI swap partition (secondarily file system)
  3777.  C1h    DR-DOS 6.0 LOGIN.EXE-secured 12-bit FAT partition
  3778.  C4h    DR-DOS 6.0 LOGIN.EXE-secured 16-bit FAT partition
  3779.  C6h    DR-DOS 6.0 LOGIN.EXE-secured Huge partition
  3780.  DBh    CP/M, Concurrent CP/M, Concurrent DOS
  3781.  DBh    CTOS (Convergent Technologies OS)
  3782.  E1h    SpeedStor 12-bit FAT extended partition
  3783.  E4h    SpeedStor 16-bit FAT extended partition
  3784.  F2h    DOS 3.3+ secondary
  3785.  FEh    LANstep
  3786.  FFh    Xenix bad block table
  3787. --------B-1A00-------------------------------
  3788. INT 1A - TIME - GET SYSTEM TIME
  3789.     AH = 00h
  3790. Return: CX:DX = number of clock ticks since midnight
  3791.     AL = midnight flag, nonzero if midnight passed since time last read
  3792. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  3793.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  3794.       it, leading to loss of a day if two consecutive midnights pass
  3795.       without a request for the time (e.g. if the system is on but idle)
  3796. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch,INT 62/AX=0099h
  3797. --------B-1A01-------------------------------
  3798. INT 1A - TIME - SET SYSTEM TIME
  3799.     AH = 01h
  3800.     CX:DX = number of clock ticks since midnight
  3801. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  3802. --------B-1A02-------------------------------
  3803. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  3804.     AH = 02h
  3805. Return: CF clear if successful
  3806.         CH = hour (BCD)
  3807.         CL = minutes (BCD)
  3808.         DH = seconds (BCD)
  3809.         DL = daylight savings flag (00h standard time, 01h daylight time)
  3810.     CF set on error (i.e. clock not running or in middle of update)
  3811. SeeAlso: AH=00h
  3812. --------B-1A03-------------------------------
  3813. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  3814.     AH = 03h
  3815.     CH = hour (BCD)
  3816.     CL = minutes (BCD)
  3817.     DH = seconds (BCD)
  3818.     DL = daylight savings flag (00h standard time, 01h daylight time)
  3819. SeeAlso: AH=01h
  3820. --------B-1A04-------------------------------
  3821. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  3822.     AH = 04h
  3823. Return: CF clear if successful
  3824.         CH = century (BCD)
  3825.         CL = year (BCD)
  3826.         DH = month (BCD)
  3827.         DL = day (BCD)
  3828.     CF set on error
  3829. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  3830. --------B-1A05-------------------------------
  3831. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  3832.     AH = 05h
  3833.     CH = century (BCD)
  3834.     CL = year (BCD)
  3835.     DH = month (BCD)
  3836.     DL = day (BCD)
  3837. SeeAlso: AH=04h,INT 21/AH=2Bh
  3838. --------B-1A06-------------------------------
  3839. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  3840.     AH = 06h
  3841.     CH = hour (BCD)
  3842.     CL = minutes (BCD)
  3843.     DH = seconds (BCD)
  3844. Return: CF set on error (alarm already set or clock stopped for update)
  3845.     CF clear if successful
  3846. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  3847.       time
  3848. SeeAlso: AH=07h,INT 4A
  3849. --------B-1A07-------------------------------
  3850. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  3851.     AH = 07h
  3852. Return: alarm disabled
  3853. Note:    does not disable the real-time clock's IRQ
  3854. SeeAlso: AH=06h,INT 70
  3855. --------B-1A08-------------------------------
  3856. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  3857.     AH = 08h
  3858.     CH = hours in BCD
  3859.     CL = minutes in BCD
  3860.     DH = seconds in BCD
  3861. SeeAlso: AH=09h
  3862. --------B-1A09-------------------------------
  3863. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  3864.     AH = 09h
  3865. Return: CH = hours in BCD
  3866.     CL = minutes in BCD
  3867.     DH = seconds in BCD
  3868.     DL = alarm status
  3869.         00h alarm not enabled
  3870.         01h alarm enabled but will not power up system
  3871.         02h alarm will power up system
  3872. SeeAlso: AH=08h
  3873. --------B-1A0A-------------------------------
  3874. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  3875.     AH = 0Ah
  3876. Return: CF set on error
  3877.     CF clear if successful
  3878.         CX = count of days since Jan 1,1980
  3879. SeeAlso: AH=04h,AH=0Bh
  3880. --------B-1A0B-------------------------------
  3881. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  3882.     AH = 0Bh
  3883.     CX = count of days since Jan 1,1980
  3884. Return: CF set on error
  3885.     CF clear if successful
  3886. SeeAlso: AH=05h,AH=0Ah
  3887. --------J-1A10-------------------------------
  3888. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  3889.     AH = 10h
  3890.     ???
  3891. Return: ???
  3892. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  3893. --------J-1A11-------------------------------
  3894. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  3895.     AH = 11h
  3896.     ???
  3897. Return: ???
  3898. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  3899. --------J-1A12-------------------------------
  3900. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  3901.     AH = 12h
  3902.     ???
  3903. Return: ???
  3904. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  3905. --------A-1A3601-----------------------------
  3906. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  3907.     AX = 3601h
  3908. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  3909.         ASCIZ string "WPCORP\0"
  3910. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  3911.       third party product wants to interface with it.  The third party
  3912.       product must intercept this interrupt and return the address of a
  3913.       keyboard monitor routine.
  3914.     Before checking for keyboard input, and after every key entered by the
  3915.       user, Word Perfect will call the routine whose address was provided
  3916.       in DS:SI with the following parameters:
  3917.         Entry:    AX = key code or 0
  3918.             BX = WordPerfect state flag
  3919.         Exit:    AX = 0 or key code
  3920.             BX = 0 or segment address of buffer with key codes
  3921.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  3922. SeeAlso: INT 16/AX=5500h
  3923. --------N-1A6108-----------------------------
  3924. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  3925.     AX = 6108h
  3926.     STACK:    WORD    conversation ID (0000h-0009h)
  3927.         DWORD    pointer to message buffer
  3928.         WORD    length of message
  3929.         DWORD    pointer to reply buffer
  3930.         WORD    length of reply buffer
  3931.         WORD    0000h (use default "Cparams" structure)
  3932. Return: AX = status (see below)
  3933.     STACK unchanged
  3934. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3935.       which implements the Simple Network Application Protocol
  3936. SeeAlso: AX=6205h
  3937.  
  3938. Values for status:
  3939.  0000h    successful
  3940.  F830h    "SNAP_ABORTED"
  3941.  FC04h    "SNAP_SERVERDIED"
  3942.  FC05h    "SNAP_RESEND"
  3943.  FC06h    "SNAP_SELECTFAILED"
  3944.  FC07h    "SNAP_WRONGVERSION"
  3945.  FC08h    "SNAP_INVALIDACK"
  3946.  FC09h    "SNAP_TIMEOUT"
  3947.  FC0Ah    "SNAP_SERVERREJECT"
  3948.  FC0Bh    "SNAP_NOREPLYDUE"
  3949.  FC0Ch    "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  3950.  FC0Dh    "SNAP_NOINIT"
  3951.  FC0Eh    "SNAP_SOCKETERROR"
  3952.  FC0Fh    "SNAP_BUFFERLIMIT"
  3953.  FC10h    "SNAP_INVALIDCID"
  3954.  FC11h    "SNAP_INVALIDOP"
  3955.  FC12h    "SNAP_XMITFAIL"
  3956.  FC13h    "SNAP_NOMORERETRIES"
  3957.  FC14h    "SNAP_BADPARMS"
  3958.  FC15h    "SNAP_NOMEMORY"
  3959.  FC16h    "SNAP_NOMORECONVS"
  3960.  FFFFh    failed (invalid function/parameter)
  3961. --------N-1A6205-----------------------------
  3962. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  3963.     AX = 6205h
  3964.     STACK:    WORD    conversation ID (0000h-0009h)
  3965.         DWORD    pointer to message
  3966.         WORD    length of message
  3967.         WORD    0000h (use default "Cparms" structure)
  3968. Return: AX = status (see AX=6108h)
  3969.     STACK unchanged
  3970. SeeAlso: AX=6108h
  3971. --------N-1A6308-----------------------------
  3972. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  3973.     AX = 6308h
  3974.     STACK:    WORD    offset of ASCIZ "guardian"
  3975.         WORD    offset of ASCIZ hostname
  3976.         WORD    offset of ASCIZ server name
  3977.         WORD    offset of ASCIZ userid
  3978.         WORD    offset of ASCIZ password
  3979.         WORD    offset of password length
  3980.         WORD    offset of password type
  3981.         WORD    offset of "Cparms" structure (see below)
  3982. Return: ???
  3983.     STACK unchanged
  3984. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  3985.       to allocate a buffer)
  3986. SeeAlso: AX=6405h,AX=7202h
  3987.  
  3988. Format of Cparms structure:
  3989. Offset    Size    Description
  3990.  00h    WORD    retry delay in seconds
  3991.  02h    WORD    timeout delay in seconds
  3992.  04h    WORD    maximum buffer size
  3993.  06h    WORD    encryption level
  3994. --------N-1A6405-----------------------------
  3995. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  3996.     AX = 6405h
  3997.     STACK:    WORD    conversation ID (0000h-0009h)
  3998.         DWORD    pointer to message buffer
  3999.         WORD    length of message
  4000.         WORD    0000h (use default "Cparms" structure)
  4001. Return: AX = status (see AX=6108h)
  4002.     STACK unchanged
  4003. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  4004.       which implements the Simple Network Application Protocol
  4005. SeeAlso: AX=6308h
  4006. --------N-1A6900-----------------------------
  4007. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  4008.     AX = 6900h
  4009. Return: AX = value used for DS by resident code
  4010. SeeAlso: AX=6A01h,AX=6F01h
  4011. --------N-1A6A01-----------------------------
  4012. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  4013.     AX = 6A01h
  4014.     STACK:    WORD    number of bytes to allocate
  4015. Return: AX = offset of allocated buffer or 0000h if out of memory
  4016.     STACK unchanged
  4017. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  4018.       which implements the Simple Network Application Protocol
  4019. SeeAlso: AX=6B01h
  4020. --------N-1A6B01-----------------------------
  4021. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  4022.     AX = 6B01h
  4023.     STACK:    WORD    offset within SNAP data segment of previously allocated
  4024.             buffer
  4025. Return: STACK unchanged
  4026. Note:    this call is a NOP if the specified offset is 0000h
  4027. SeeAlso: AX=6A01h
  4028. --------N-1A6C04-----------------------------
  4029. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  4030.     AX = 6C04h
  4031.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  4032.         WORD    segment of source buffer
  4033.         WORD    offset of source buffer
  4034.         WORD    number of bytes to copy
  4035. Return: AX = offset of byte after last one copied to destination
  4036.     STACK unchanged
  4037. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  4038.       which implements the Simple Network Application Protocol
  4039. SeeAlso: AX=6D04h
  4040. --------N-1A6D04-----------------------------
  4041. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  4042.     AX = 6D04h
  4043.     STACK:    WORD    offset within SNAP data segment of source buffer
  4044.         WORD    segment of destination buffer
  4045.         WORD    offset of destination buffer
  4046.         WORD    number of bytes to copy
  4047. Return: AX = offset of byte after last one copied from source
  4048.     buffer filled
  4049.     STACK unchanged
  4050. SeeAlso: AX=6C04h
  4051. --------N-1A6E01-----------------------------
  4052. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  4053.     AX = 6E01h
  4054.     STACK:    WORD    new value for ???
  4055. Return: AX = old value of ???
  4056.     STACK unchanged
  4057. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  4058.       which implements the Simple Network Application Protocol
  4059. --------N-1A6F01-----------------------------
  4060. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  4061.     AX = 6F01h
  4062.     STACK: WORD 0000h
  4063. Return: AX = status
  4064.         0000h SNAP is resident
  4065.         other SNAP not present
  4066.     STACK unchanged
  4067. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  4068.       which implements the Simple Network Application Protocol, and is
  4069.       required by PCVENUS (a network shell).  The combination of SNAP and
  4070.       PCVENUS allows the use of the Andrew File System as one or more
  4071.       networked drives.
  4072. SeeAlso: AX=6900h,AX=7400h
  4073. --------N-1A7002-----------------------------
  4074. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  4075.     AX = 7002h
  4076.     STACK:    WORD    anchor number (0000h-0009h)
  4077.         WORD    new value for the anchor
  4078. Return: AX = status
  4079.         0000h successful
  4080.         FFFFh failed (top word on stack not in range 00h-09h)
  4081.     STACK unchanged
  4082. SeeAlso: AX=7101h
  4083. --------N-1A7101-----------------------------
  4084. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  4085.     AX = 7101h
  4086.     STACK:    WORD    anchor number (0000h-0009h)
  4087. Return: AX = anchor's value
  4088.     STACK unchanged
  4089. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  4090.       which implements the Simple Network Application Protocol
  4091. SeeAlso: AX=7002h
  4092. --------N-1A7202-----------------------------
  4093. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  4094.     AX = 7202h
  4095.     STACK:    WORD    conversation ID (0000h-0009h)
  4096.         WORD    offset within resident data segment of "Cparms"
  4097.             structure (see AX=6308h)
  4098. Return: AX = status???
  4099.     STACK unchanged
  4100. SeeAlso: AX=6308h
  4101. --------N-1A7302-----------------------------
  4102. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  4103.     AX = 7302h
  4104.     STACK:    WORD    conversation ID (0000h-0009h)
  4105.         WORD    offset within resident data segment of ???
  4106. Return: AX = ???
  4107.     ???
  4108.     STACK unchanged
  4109. SeeAlso: AX=7400h
  4110. --------N-1A7400-----------------------------
  4111. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  4112.     AX = 7400h
  4113. Return: AX = version (AH=major, AL=minor)
  4114. Note:    this call is only valid if SNAP is installed
  4115. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  4116. --------N-1A75-------------------------------
  4117. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  4118.     AH = 75h
  4119.     AL = ???
  4120. Return: AX = ??? (0000h)
  4121. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  4122.       which implements the Simple Network Application Protocol
  4123. --------N-1A76-------------------------------
  4124. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  4125.     AH = 76h
  4126.     AL = ???
  4127. Return: AX = ???
  4128. --------N-1A77-------------------------------
  4129. INT 1A - SNAP.EXE 3.4 - ???
  4130.     AH = 77h
  4131.     AL = ??? (at least 01h)
  4132.     STACK:    WORD    ???
  4133.         ???
  4134. Return: ???
  4135.     STACK unchanged
  4136. --------N-1A7802-----------------------------
  4137. INT 1A - SNAP.EXE 3.4 - ???
  4138.     AX = 7802h
  4139.     STACK:    WORD    ???
  4140.         WORD    ???
  4141. Return: ???
  4142.     STACK unchanged
  4143. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  4144.       which implements the Simple Network Application Protocol
  4145. --------s-1A7F-------------------------------
  4146. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  4147.     AH = 7Fh
  4148.     ???
  4149. Return: ???
  4150. Note:    this function is not supported by the Tandy 1000SL/TL BIOS
  4151. SeeAlso: AH=80h,AH=83h,AH=85h
  4152. --------s-1A80-------------------------------
  4153. INT 1A - PCjr, Tandy 2500???, Tandy 1000SL/TL - SET UP SOUND MULTIPLEXOR
  4154.     AH = 80h
  4155.     AL = 00h source is 8253 channel 2
  4156.          01h source is cassette input
  4157.          02h source is I/O channel "Audio IN"
  4158.          03h source is sound generator chip
  4159. Note:    although documented in the 1000TL Technical Reference, the 1000TL
  4160.       BIOS has just an IRET for this call
  4161. SeeAlso: AH=7Fh,AH=83h
  4162. --------X-1A80-------------------------------
  4163. INT 1A - PCMCIA Socket Services - GET NUMBER OF ADAPTERS
  4164.     AH = 80h
  4165. Return: CF clear if successful
  4166.         CX = 5353h ('SS') if Socket Services installed
  4167.         AL = number of adapters present (0-16)
  4168.         AH destroyed
  4169.     CF set on error
  4170.         AH = error code (see below)
  4171. SeeAlso: AH=83h"PCMCIA"
  4172.  
  4173. Values for PCMCIA error codes:
  4174.  01h    "BAD_ADAPTER" nonexistent adapter
  4175.  02h    "BAD_ATTRIBUTE" invalid attribute specified
  4176.  03h    "BAD_BASE" invalid system memory base address
  4177.  04h    "BAD_EDC" invalid EDC generator specified
  4178.  05h    "BAD_INDICATOR" invalid indicator specified
  4179.  06h    "BAD_IRQ" invalid IRQ channel specified
  4180.  07h    "BAD_OFFSET" invalid PCMCIA card offset specified
  4181.  08h    "BAD_PAGE" invalid page specified
  4182.  09h    "BAD_READ" unable to complete request
  4183.  0Ah    "BAD_SIZE" invalid window size specified
  4184.  0Bh    "BAD_SOCKET" nonexistent socket specified
  4185.  0Ch    "BAD_TECHNOLOGY" unsupported Card Technology for writes
  4186.  0Dh    "BAD_TYPE" unavailable window type specified
  4187.  0Eh    "BAD_VCC" invalid Vcc power level index specified
  4188.  0Fh    "BAD_VPP" invalid Vpp1 or Vpp2 power level index specified
  4189.  10h    "BAD_WAIT" invalid number of wait states specified
  4190.  11h    "BAD_WINDOW" nonexistent window specified
  4191.  12h    "BAD_WRITE" unable to complete request
  4192.  13h    "NO_ADAPTERS" no adapters installed, but Socket Services is present
  4193.  14h    "NO_CARD" no card in socket
  4194. --------X-1A81-------------------------------
  4195. INT 1A - PCMCIA Socket Services - REGISTER STATUS CHANGE CALLBACK
  4196.     AH = 81h
  4197.     DS:DX -> callback routine (see below) or 0000h:0000h to disable
  4198. Return: CF clear if successful
  4199.         AH destroyed
  4200.     CF set on error
  4201.         AH = error code (see AH=80h"PCMCIA")
  4202. Note:    the callback will be invoked on any socket changes whose notification
  4203.       has not been disabled with the status change enable mask; it may be
  4204.       invoked either while processing a hardware interrupt from the adapter
  4205.       or while processing the following Socket Services request
  4206. SeeAlso: AH=80h"PCMCIA",AH=82h"PCMCIA"
  4207.  
  4208. Callback routine invoked with:
  4209.     AL = adapter number
  4210.     BH = status change interrupt enable mask (see below)
  4211.     BL = socket number
  4212.     DH = current socket status (see below)
  4213.     DL = current card status (see below)
  4214. Return: all registers preserved
  4215. Notes:    the callback may be invoked during a hardware interrupt, and may not
  4216.       call on Socket Services
  4217.     the callback will be invoked once for each socket with a status change
  4218.  
  4219. Bitfields for status change enable mask:
  4220.  bits 0,1 reserved (0)
  4221.  bit 2    ejection request
  4222.  bit 3    insertion request
  4223.  bit 4    battery dead change
  4224.  bit 5    battery warning change
  4225.  bit 6    ready change
  4226.  bit 7    card detect change
  4227.  
  4228. Bitfields for current socket status:
  4229.  bit 0    reserved (0)
  4230.  bit 1    card locked
  4231.  bit 2    card ejection request pending
  4232.  bit 3    card insertion request pending
  4233.  bit 4    card ejection complete
  4234.  bit 5    card insertion complete
  4235.  bit 6    reserved (0)
  4236.  bit 7    card changed
  4237.  
  4238. Bitfields for current card status:
  4239.  bit 0    write protected
  4240.  bits 1-3 reserved (0)
  4241.  bit 4    battery voltage detect 1 (battery dead)
  4242.  bit 5    battery voltage detect 2 (battery warning)
  4243.  bit 6    ready
  4244.  bit 7    card detect
  4245. --------s-1A8100-----------------------------
  4246. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  4247.     AX = 8100h
  4248. Return: AL > 80h if supported
  4249.     AX = 00C4h if supported (1000SL/TL)
  4250.         CF set if sound chip is busy
  4251.         CF clear  if sound chip is free
  4252. Note:    the value of CF is not definitive; call this function until CF is
  4253.       clear on return, then call AH=84h"Tandy"
  4254. --------s-1A82-------------------------------
  4255. INT 1A - Tandy 2500???, Tandy 1000SL/TL - DIGITAL SOUND - RECORD SOUND
  4256.     AH = 82h
  4257.     ES:BX -> buffer for sound samples
  4258.     CX = length of buffer
  4259.     DX = transfer rate (1-4095, 1 is fastest)
  4260. Return: AH = 00h
  4261.     CF set if sound busy
  4262.     CF clear if sound chip free
  4263. Note:    the value in DX should be 1/10 the corresponding value for
  4264.       INT 1A/AH=83h on the 1000TL, 1/11.5 on the 1000SL.  Call
  4265.       INT 1A/AX=8100h and INT 1A/AH=84h before invoking this function.
  4266.     The BIOS issues an INT 15/AX=91FBh when the input is complete
  4267.     DMA across a 64K boundary is masked by the BIOS
  4268. --------X-1A82-------------------------------
  4269. INT 1A - PCMCIA Socket Services - REGISTER CARD TECHNOLOGY CALLBACK
  4270.     AH = 82h
  4271.     DS:DX -> callback routine (see below) or 0000h:0000h
  4272. Return: CF clear if successful
  4273.         AH destroyed
  4274.     CF set on error
  4275.         AH = error code (see AH=80h"PCMCIA")
  4276. Note:    the callback is invoked on a Write Multiple request with an unsupported
  4277.       card technology type
  4278. SeeAlso: AH=81h"PCMCIA",AH=94h
  4279.  
  4280. Callback routine invoked with:
  4281.     ES:AX -> Low-Level Socket Services Routines (see below)
  4282.     BH = socket attributes (see below)
  4283.     CX = number of bytes or words to write
  4284.     DS:SI -> data buffer to be written
  4285.     DX:DI -> 26-bit linear card address
  4286.     BP = card technology type
  4287. Return: CF clear if successful
  4288.     CF set on error
  4289.         AH = error code (07h,0Ch,12h,14h) (see AH=80h"PCMCIA")
  4290.  
  4291. Bitfields for socket attributes:
  4292.  bit 0    memory type (clear = common, set = attribute)
  4293.  bit 1    data width (clear = byte, set = word)
  4294.  bit 2    even bytes only (only valid if bit 1 set)
  4295.  bit 3    packed buffer
  4296.  bits 4-7 reserved (0)
  4297.  
  4298. Format of Low-Level Socket Services Routines:
  4299. Offset    Size    Description
  4300.  00h    WORD    offset of Write Many routine (see below)
  4301.  02h    WORD    offset of Write One routine (see below)
  4302.  04h    WORD    offset of Read One routine (see below)
  4303.  06h    WORD    offset of Increment Offset routine (see below)
  4304.  08h    WORD    offset of Set Offset routine (see below)
  4305.  0Ah    WORD    offset of Get Status routine (see below)
  4306.  
  4307. Call Write Many routine with:
  4308.     BH = socket attributes (see above)
  4309.     CX = number of bytes or words to write
  4310.     DS:SI -> data to be written
  4311. Return: CF clear if successful
  4312.     CF set on error
  4313.  
  4314. Call Write One routine with:
  4315.     AL/AX = data to be written
  4316.     BH = socket attributes (see above)
  4317. Return: CF clear if successful
  4318.     CF set on error
  4319.  
  4320. Call Read One routine with:
  4321.     BH = socket attributes (see above)
  4322. Return: CF clear if successful
  4323.         AL/AX = data read
  4324.     CF set on error
  4325.  
  4326. Call Increment Offset routine with:
  4327.     BH = socket attributes (see above)
  4328. Return: CF clear if successful
  4329.     CF set on error
  4330.  
  4331. Call Set Offset routine with:
  4332.     DX:DI = new offset address
  4333. Return: CF clear if successful
  4334.     CF set on error
  4335.  
  4336. Call Get Status routine with:
  4337.     nothing
  4338. Return: AL = current card status (see AH=81h"PCMCIA")
  4339. --------s-1A83-------------------------------
  4340. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  4341.     AH = 83h
  4342.     AL = volume (0=silence, 7=highest)
  4343.     CX = number of bytes to play
  4344.     DX = time between sound samples (multiples of 273 nanoseconds)
  4345.         only bits 11-0 used
  4346.     ES:BX -> sound data (array of 8-bit unsigned PCM samples)
  4347. Return: AH = 00h
  4348.     CF set if sound is busy
  4349.     CF clear if sound chip is free
  4350. Notes:    this call returns immediately while the sound plays in the
  4351.       background; the sound chip is clocked at 3.57 MHz, with the low 12
  4352.       bits of DX specifying the clock divisor
  4353.     The BIOS appears to call INT 15/AX=91FBh when the sound device
  4354.       underflows to allow another INT 1A/AH=83h for seamless playing of
  4355.       long sounds.
  4356. SeeAlso: AH=84h"Tandy",INT 15/AH=91h
  4357. --------X-1A83-------------------------------
  4358. INT 1A - PCMCIA Socket Services - GET SOCKET SERVICES VERSION NUMBER
  4359.     AH = 83h
  4360.     AL = adapter number
  4361. Return: CF clear if successful
  4362.         AX = Socket Services version (BCD)
  4363.         BX = implementation version (BCD)
  4364.         CX = 5353h ("SS")
  4365.         DS:SI -> ASCIZ implementor description
  4366.     CF set on error
  4367.         AH = error code (01h) (see AH=80h"PCMCIA")
  4368. Note:    the current version (from the Revision A.00 documentation) of Socket
  4369.       Services is 1.00 (AX=0100h)
  4370. SeeAlso: AH=80h"PCMCIA"
  4371. --------s-1A84-------------------------------
  4372. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  4373.     AH = 84h
  4374. Return: ???
  4375. Note:    the BIOS will call INT 15/AX=91FBh when the sound has stopped playing
  4376. SeeAlso: AH=83h"Tandy",AH=85h"Tandy"
  4377. --------X-1A84-------------------------------
  4378. INT 1A - PCMCIA Socket Services - INQUIRE ADAPTER
  4379.     AH = 84h
  4380.     AL = adapter number
  4381. Return: CF clear if successful
  4382.         AH destroyed
  4383.         BH = number of windows
  4384.         BL = number of sockets (1-16)
  4385.         CX = number of EDCs
  4386.         DH = capabilities (see below)
  4387.         DL = status change interrupt used (only if DH bit 3 set)(see below)
  4388.     CF set on error
  4389.         AH = error code (01h) (see AH=80h"PCMCIA")
  4390. SeeAlso: AH=80h"PCMCIA",AH=85h"PCMCIA",AH=87h
  4391.  
  4392. Bitfields for capabilities:
  4393.  bit 0    indicators are per-adapter rather than per-socket
  4394.  bit 1    power management is per-adapter rather than per-socket
  4395.  bit 2    data bus width is per-socket rather than per-window
  4396.  bit 3    status change interrupt
  4397.  bit 4    status change interrupt is software shareable
  4398.  bit 5    status change interrupt is hardware shareable
  4399.  bits 6-7 reserved (0)
  4400.  
  4401. Values for status change interrupt usage:
  4402.  00h-0Fh IRQ level
  4403.  10h    NMI
  4404.  11h    I/O check
  4405.  12h    bus error
  4406.  13h    vendor specific
  4407.  14h-FFh reserved
  4408. --------s-1A85-------------------------------
  4409. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  4410.     AH = 85h
  4411.     ???
  4412. Return: ???
  4413. Note:    this function is not supported by the Tandy 1000SL/TL BIOS
  4414. SeeAlso: AH=7Fh,AH=83h"Tandy"
  4415. --------X-1A85-------------------------------
  4416. INT 1A - PCMCIA Socket Services - GET ADAPTER
  4417.     AH = 85h
  4418.     AL = adapter number
  4419. Return: CF clear if successful
  4420.         AH destroyed
  4421.         DH = adapter attributes (see below)
  4422.     CF set on error
  4423.         AH = error code (01h) (see AH=80h"PCMCIA")
  4424. SeeAlso: AH=84h"PCMCIA",AH=86h
  4425.  
  4426. Bitfields for adapter attributes:
  4427.  bit 0    attempting to reduce power consumption
  4428.  bit 1    adapter preserves state information during reduced power consumption
  4429.  bit 2    enable status change interrupts
  4430.  bit 3    software share status change
  4431.  bit 4    hardware share status change
  4432.  bits 5-7 reserved (0)
  4433. --------X-1A86-------------------------------
  4434. INT 1A - PCMCIA Socket Services - SET ADAPTER
  4435.     AH = 86h
  4436.     AL = adapter number
  4437.     DH = new adapter attributes (see AH=85h"PCMCIA")
  4438. Return: CF clear if successful
  4439.         AH destroyed
  4440.     CF set on error
  4441.         AH = error code (01h) (see AH=80h"PCMCIA")
  4442. SeeAlso: AH=84h"PCMCIA",AH=85h"PCMCIA"
  4443. --------X-1A87-------------------------------
  4444. INT 1A - PCMCIA Socket Services - INQUIRE WINDOW
  4445.     AH = 87h
  4446.     AL = adapter number
  4447.     BH = window number
  4448. Return: CF clear if successful
  4449.         AH destroyed
  4450.         BL = capabilities (see below)
  4451.         CX = bitmap of assignable sockets
  4452.         DH = EISA A15-A12 address lines (in bits 7-4, bits 3-0 = 0)
  4453.         DL = supported access speeds (see below)
  4454.         DS:SI -> Memory Window Characteristics table (see below)
  4455.         DS:DI -> I/O Window Characteristics table (see below)
  4456.     CF set on error
  4457.         AH = error code (01h,11h) (see AH=80h"PCMCIA")
  4458. SeeAlso: AH=84h"PCMCIA",AH=88h,AH=89h,AH=8Ch
  4459.  
  4460. Bitfields for window capabilities:
  4461.  bit 0    common memory
  4462.  bit 1    attribute memory
  4463.  bit 2    I/O space
  4464.  bit 3    EISA I/O mappable
  4465.  bit 4    separate enable for EISA comon space
  4466.  bits 5-7 reserved (0)
  4467.  
  4468. Values for supported access speeds:
  4469.  bit 0    WAIT line monitoring
  4470.  bit 1    100 ns
  4471.  bit 2    150 ns
  4472.  bit 3    200 ns
  4473.  bit 4    250 ns
  4474.  bit 5    300 ns
  4475.  bit 6    600 ns
  4476.  bit 7    reserved (0)
  4477.  
  4478. Format of Memory Window Characteristics table:
  4479. Offset    Size    Description
  4480.  00h    WORD    window capabilities (see below)
  4481.  02h    WORD    minimum base address in 4K pages
  4482.  04h    WORD    maximum base address in 4K pages
  4483.  06h    WORD    minimum window size in 4K pages
  4484.  08h    WORD    maximum window size in 4K pages
  4485.  0Ah    WORD    window size granularity (4K units)
  4486.  0Ch    WORD    required base address alignment (4K units)
  4487.  0Eh    WORD    required card offset alignment (4K units)
  4488.  
  4489. Format of I/O Window Characteristics table:
  4490. Offset    Size    Description
  4491.  00h    WORD    window capabilities (see below)
  4492.  02h    WORD    minimum base address in bytes
  4493.  04h    WORD    maximum base address in bytes
  4494.  06h    WORD    minimum window size in bytes
  4495.  08h    WORD    maximum window size in bytes
  4496.  0Ah    WORD    window size granularity (bytes)
  4497.  
  4498. Bitfields for window capabilities:
  4499.  bit 0    programmable base address
  4500.  bit 1    programmable window size
  4501.  bit 2    window disable/enable supported
  4502.  bit 3    8-bit data bus
  4503.  bit 4    16-bit data bus
  4504.  bit 5    base address alignment on size boundary required
  4505.  bit 6    power-of-two size granularity
  4506. ---memory windows---
  4507.  bit 7    card offset must be aligned on size boundary
  4508.  bit 8    paging hardware available
  4509.  bit 9    paging hardware shared
  4510.  bit 10    page disable/enable supported
  4511.  bits 11-15 reserved (0)
  4512. ---I/O windows---
  4513.  bits 7-15 reserved (0)
  4514. --------X-1A88-------------------------------
  4515. INT 1A - PCMCIA Socket Services - GET WINDOW
  4516.     AH = 88h
  4517.     AL = adapter number
  4518.     BH = window number
  4519. Return: CF clear if successful
  4520.         AH destroyed
  4521.         BL = socket number (0-16) (0 = not assigned)
  4522.         CX = window size (bytes for I/O window, 4K units for memory window)
  4523.         DH = window attributes (see below)
  4524.         DL = access speed (only one bit set) (see AH=87h)
  4525.         SI = window base address (bytes if I/O, 4K units if memory)
  4526.         DI = card offset address (memory only, 4K units)
  4527.     CF set on error
  4528.         AH = error code (01h,11h) (see AH=80h"PCMCIA")
  4529. SeeAlso: AH=87h,AH=89h,AH=8Ah
  4530.  
  4531. Bitfields for window attributes:
  4532.  bit 0    memory-mapped rather than I/O-mapped
  4533.  bit 1    attribute memory rather than common (memory-mapped)
  4534.     EISA mapped (I/O)
  4535.  bit 2    enabled
  4536.  bit 3    16-bit data path
  4537.  bit 4    subdivided into pages (memory-mapped only)
  4538.  bit 5    non-specific access slot enable (EISA-mapped only)
  4539.  bits 6-7 reserved (0)
  4540. --------X-1A89-------------------------------
  4541. INT 1A - PCMCIA Socket Services - SET WINDOW
  4542.     AH = 89h
  4543.     AL = adapter number
  4544.     BH = window number
  4545.     BL = socket number
  4546.     CX = window size (bytes if I/O window, 4K units if memory window)
  4547.     DH = window attributes (see AH=88h)
  4548.     DL = access speed (only one bit set) (see AH=87h)
  4549.     SI = window base address (bytes if I/O, 4K units if memory window)
  4550.     DI = card offset addrress (memory only, 4K units)
  4551. Return: CF clear if successful
  4552.         AH destroyed
  4553.     CF set on error
  4554.         AH = error code (01h,03h,07h,08h,0Ah,0Bh,0Dh,10h,11h)
  4555.         (see AH=80h"PCMCIA")
  4556. SeeAlso: AH=87h,AH=88h,AH=8Bh
  4557. --------X-1A8A-------------------------------
  4558. INT 1A - PCMCIA Socket Services - GET PAGE
  4559.     AH = 8Ah
  4560.     AL = adapter number
  4561.     BH = window number
  4562.     BL = page number
  4563. Return: CF clear if successful
  4564.         AH destroyed
  4565.         DX = page attributes
  4566.         bit 0: page enabled
  4567.         bits 15-1 reserved (0)
  4568.         DI = memory card offset (4K units)
  4569.     CF set on error
  4570.         AH = error code (01h,08h,11h) (see AH=80h"PCMCIA")
  4571. Notes:    this function is only valid for memory-mapped windows
  4572.     the socket being operated on is implied by the previous AH=89h call
  4573. SeeAlso: AH=88h,AH=8Bh
  4574. --------X-1A8B-------------------------------
  4575. INT 1A - PCMCIA Socket Services - SET PAGE
  4576.     AH = 8Bh
  4577.     AL = adapter number
  4578.     BH = window number
  4579.     BL = page number
  4580.     DX = page attributes
  4581.         bit 0: page enabled
  4582.         bits 15-1 reserved (0)
  4583.     DI = memory card offset (4K units)
  4584. Return: CF clear if successful
  4585.         AH destroyed
  4586.     CF set on error
  4587.         AH = error code (01h,02h,07h,08h,11h) (see AH=80h"PCMCIA")
  4588. Notes:    this function is only valid for memory-mapped windows
  4589.     the socket being operated on is implied by the previous AH=89h call
  4590. SeeAlso: AH=89h,AH=8Ah
  4591. --------X-1A8C-------------------------------
  4592. INT 1A - PCMCIA Socket Services - INQUIRE SOCKET
  4593.     AH = 8Ch
  4594.     AL = adapter number
  4595.     BL = socket number (01h to maximum supported by adapter)
  4596. Return: CF clear if successful
  4597.         AH destroyed
  4598.         DH = capabilities (see below)
  4599.         DL = hardware indicators (see below)
  4600.         DS:SI -> Socket Characteristics table (see below)
  4601.         DS:DI -> Power Management table (see below)
  4602.     CF set on error
  4603.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4604. SeeAlso: AH=87h,AH=8Dh,AH=8Eh
  4605.  
  4606. Bitfields for socket capabilities:
  4607.  bit 0    card change
  4608.  bit 1    card lock
  4609.  bit 2    insert card (motor control)
  4610.  bit 3    eject card (motor control)
  4611.  bits 4-7 reserved (0)
  4612.  
  4613. Bitfields for socket hardware indicators:
  4614.  bit 0    busy status
  4615.  bit 1    write-protected
  4616.  bit 2    battery status
  4617.  bit 3    card lock status
  4618.  bit 4    XIP status (eXecute-In-Place)
  4619.  bits 5-7 reserved (0)
  4620.  
  4621. Format of Socket Characteristics table:
  4622. Offset    Size    Description
  4623.  00h    WORD    supported card types
  4624.         bit 0: memory card
  4625.         bit 1: I/O card
  4626.         bits 2-7 reserved (0)
  4627.  02h    WORD    steerable IRQ levels (bit 0 = IRQ0 to bit 15 = IRQ15)
  4628.  04h    WORD    additional steerable IRQ levels
  4629.         bit 0: NMI
  4630.         bit 1: I/O check
  4631.         bit 2: bus error
  4632.         bit 3: vendor-unique
  4633.         bits 4-7 reserved (0)
  4634.  
  4635. Format of Power Management table:
  4636. Offset    Size    Description
  4637.  00h    WORD    number of entries in table (0 if power management not avail)
  4638.  02h 2N BYTEs    power levels
  4639.         byte 0: voltage in 0.1V units
  4640.         byte 1: power supply
  4641.             bit 7: Vcc
  4642.             bit 6: Vpp1
  4643.             bit 5: Vpp2
  4644. --------X-1A8D-------------------------------
  4645. INT 1A - PCMCIA Socket Services - GET SOCKET
  4646.     AH = 8Dh
  4647.     AL = adapter number
  4648.     BL = socket number (01h to maximum supported by adapter)
  4649. Return: CF clear if successful
  4650.         AH destroyed
  4651.         BH = status change interrupt enable mask (see AH=81h"PCMCIA")
  4652.         CH = Vcc level (lower nybble)
  4653.         CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  4654.         DH = current socket status (see AH=81h"PCMCIA")
  4655.         DL = indicators (see AH=8Ch)
  4656.         SI = card type (see below)
  4657.         DI = IRQ level steering (I/O only) (see below)
  4658.     CF set on error
  4659.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4660. SeeAlso: AH=8Ch,AH=8Eh
  4661.  
  4662. Bitfields for card type:
  4663.  bit 0    memory
  4664.  bit 1    I/O
  4665.  bits 2-15 reserved (0)
  4666.  
  4667. Bitfields for I/O level steering:
  4668.  bits 0-4    IRQ level (0-15=IRQ,16=NMI,17=I/O check,18=bus error,19=vendor)
  4669.  bits 5-14    reserved (0)
  4670.  bit 15        interrupt steering enabled
  4671. --------X-1A8E-------------------------------
  4672. INT 1A - PCMCIA Socket Services - SET SOCKET
  4673.     AH = 8Eh
  4674.     AL = adapter number
  4675.     BL = socket number (01h to maximum supported by adapter)
  4676.     BH = status change interrupt enable mask (see AH=81h"PCMCIA")
  4677.     CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  4678.     DH = current socket status (see AH=81h"PCMCIA")
  4679.     DL = indicators (see AH=8Ch)
  4680.     SI = card type (see AH=8Dh)
  4681.     DI = IRQ level steering (I/O only) (see AH=8Dh)
  4682. Return: CF clear if successful
  4683.         AH destroyed
  4684.     CF set on error
  4685.         AH = error code (01h,02h,05h,06h,0Bh,0Eh,0Fh) (see AH=80h"PCMCIA")
  4686. SeeAlso: AH=8Ch,AH=8Dh
  4687. --------X-1A8F-------------------------------
  4688. INT 1A - PCMCIA Socket Services - GET CARD
  4689.     AH = 8Fh
  4690.     AL = adapter number
  4691.     BL = socket number (01h to maximum supported by adapter)
  4692. Return: CF clear if successful
  4693.         AH destroyed
  4694.         DL = current card status (see AH=81h"PCMCIA")
  4695.     CF set on error
  4696.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4697. SeeAlso: AH=8Dh,AH=90h
  4698. --------X-1A90-------------------------------
  4699. INT 1A - PCMCIA Socket Services - RESET CARD
  4700.     AH = 90h
  4701.     AL = adapter number
  4702.     BL = socket number (01h to maximum supported by adapter)
  4703. Return: CF clear if successful
  4704.         AH destroyed
  4705.     CF set on error
  4706.         AH = error code (01h,0Bh,14h) (see AH=80h"PCMCIA")
  4707. Note:    toggles RESET pin of the specified card, but does not wait after
  4708.       toggling the pin; it is the caller's responsibility to avoid
  4709.       accessing the card before it is ready again
  4710. --------X-1A91-------------------------------
  4711. INT 1A - PCMCIA Socket Services - READ ONE
  4712.     AH = 91h
  4713.     AL = adapter number
  4714.     BL = socket number (01h to maximum supported by adapter)
  4715.     BH = attributes (see below)
  4716.     DX:SI = card address
  4717. Return: CF clear if successful
  4718.         AH destroyed
  4719.         CL/CX = value read
  4720.     CF set on error
  4721.         AH = error code (01h,07h,09h,0Bh,14h) (see AH=80h"PCMCIA")
  4722.         CX may be destroyed
  4723. Note:    this function is only valid for I/O-mapped sockets
  4724. SeeAlso: AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  4725.  
  4726. Bitfields for attributes:
  4727.  bit 0    attribute memory instead of common memory
  4728.  bit 1    word rather than byte
  4729.  bit 2    even bytes only
  4730. --------X-1A92-------------------------------
  4731. INT 1A - PCMCIA Socket Services - WRITE ONE
  4732.     AH = 92h
  4733.     AL = adapter number
  4734.     BL = socket number (01h to maximum supported by adapter)
  4735.     BH = attributes (see AH=91h)
  4736.     CL/CX = value to write
  4737.     DX:SI = card address
  4738. Return: CF clear if successful
  4739.         AH destroyed
  4740.     CF set on error
  4741.         AH = error code (01h,07h,0Bh,12h,14h) (see AH=80h"PCMCIA")
  4742. Note:    this function is only valid for I/O-mapped sockets; it also does not
  4743.       implement Card Technology handling--use AH=94h when writing to
  4744.       non-RAM technologies
  4745. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  4746. --------X-1A93-------------------------------
  4747. INT 1A - PCMCIA Socket Services - READ MULTIPLE
  4748.     AH = 93h
  4749.     AL = adapter number
  4750.     BL = socket number (01h to maximum supported by adapter)
  4751.     BH = attributes (see AH=91h)
  4752.     CX = number of bytes or words to read
  4753.     DX:SI = card address
  4754.     DS:DI -> data buffer to be filled
  4755. Return: CF clear if successful
  4756.         AH destroyed
  4757.     CF set on error
  4758.         AH = error code (01h,07h,09h,0Bh,14h) (see AH=80h"PCMCIA")
  4759. Note:    this function is only available on I/O-mapped sockets
  4760. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  4761. --------X-1A94-------------------------------
  4762. INT 1A - PCMCIA Socket Services - WRITE MULTIPLE
  4763.     AH = 94h
  4764.     AL = adapter number
  4765.     BL = socket number (01h to maximum supported by adapter)
  4766.     BH = attributes (see AH=91h)
  4767.     CX = number of bytes or words to read
  4768.     DX:DI = card address
  4769.     DS:SI -> buffer containing data
  4770.     BP = Card Technology type (0000h = RAM)
  4771. Return: CF clear if successful
  4772.         AH destroyed
  4773.     CF set on error
  4774.         AH = error code (01h,07h,0Bh,0Ch,12h,14h) (see AH=80h"PCMCIA")
  4775. Notes:    this function is only available on I/O-mapped sockets
  4776.     Socket Services calls the Card Technology callback (see AH=82h"PCMCIA")
  4777.       for any card technology it does not directly support
  4778. SeeAlso: AH=82h"PCMCIA",AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  4779. --------X-1A95-------------------------------
  4780. INT 1A - PCMCIA Socket Services - INQUIRE ERROR DETECTION CODE
  4781.     AH = 95h
  4782.     AL = adapter number
  4783.     BH = EDC generator number
  4784. Return: CF clear if successful
  4785.         AH destroyed
  4786.         CX = bitmap of assignable sockets
  4787.         DH = EDC capabilities (see below)
  4788.         DL = supported EDC types (see below)
  4789.     CF set on error
  4790.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4791. SeeAlso: AH=96h,AH=9Ch
  4792.  
  4793. Bitfields for EDC capabilities:
  4794.  bit 0    unidirectional only generation
  4795.  bit 1    bidirectional only generation
  4796.  bit 2    register-based (I/O-mapped) support
  4797.  bit 3    memory-mapped support
  4798.  bit 4    pausable
  4799.  bits 5-7 reserved (0)
  4800.  
  4801. Bitfields for supported EDC types:
  4802.  bit 0    8-bit checksum
  4803.  bit 1    16-bit CRC-SDLC
  4804.  bits 2-7 reserved (0)
  4805. --------X-1A96-------------------------------
  4806. INT 1A - PCMCIA Socket Services - GET ERROR DETECTION CODE
  4807.     AH = 96h
  4808.     AL = adapter number
  4809.     BH = EDC generator number
  4810. Return: CF clear if successful
  4811.         AH destroyed
  4812.         BL = socket number
  4813.         DH = EDC attributes (see below)
  4814.         DL = EDC type (see AH=95h) (only one bit set)
  4815.     CF set on error
  4816.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4817. SeeAlso: AH=95h,AH=97h,AH=9Ch
  4818.  
  4819. Bitfields for EDC attributes:
  4820.  bit 0    unidirectional only
  4821.  bit 1    (if bit 0 set) clear=read, set=write
  4822.  bits 2-7 reserved (0)
  4823. --------X-1A97-------------------------------
  4824. INT 1A - PCMCIA Socket Services - SET ERROR DETECTION CODE
  4825.     AH = 97h
  4826.     AL = adapter number
  4827.     BH = EDC generator
  4828.     BL = socket number
  4829.     DH = EDC attributes (see AH=96h)
  4830.     DL = EDC type (see AH=95h) (only one bit may be set)
  4831. Return: CF clear if successful
  4832.         AH destroyed
  4833.     CF set on error
  4834.         AH = error code (01h,02h,04h,0Bh) (see AH=80h"PCMCIA")
  4835. SeeAlso: AH=96h,AH=9Ch
  4836. --------X-1A98-------------------------------
  4837. INT 1A - PCMCIA Socket Services - START ERROR DETECTION CODE
  4838.     AH = 98h
  4839.     AL = adapter number
  4840.     BH = EDC generator
  4841. Return: CF clear if successful
  4842.         AH destroyed
  4843.     CF set on error
  4844.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4845. SeeAlso: AH=96h,AH=99h,AH=9Bh,AH=9Ch
  4846. --------X-1A99-------------------------------
  4847. INT 1A - PCMCIA Socket Services - PAUSE ERROR DETECTION CODE
  4848.     AH = 99h
  4849.     AL = adapter number
  4850.     BH = EDC generator
  4851. Return: CF clear if successful
  4852.         AH destroyed
  4853.     CF set on error
  4854.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4855. SeeAlso: AH=9Ah
  4856. --------X-1A9A-------------------------------
  4857. INT 1A - PCMCIA Socket Services - RESUME ERROR DETECTION CODE
  4858.     AH = 9Ah
  4859.     AL = adapter number
  4860.     BH = EDC generator
  4861. Return: CF clear if successful
  4862.         AH destroyed
  4863.     CF set on error
  4864.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4865. SeeAlso: AH=99h,AH=98h
  4866. --------X-1A9B-------------------------------
  4867. INT 1A - PCMCIA Socket Services - STOP ERROR DETECTION CODE
  4868.     AH = 9Bh
  4869.     AL = adapter number
  4870.     BH = EDC generator
  4871. Return: CF clear if successful
  4872.         AH destroyed
  4873.     CF set on error
  4874.         AH = error code (see AH=80h"PCMCIA")
  4875. SeeAlso: AH=98h,AH=99h,AH=9Ch
  4876. --------X-1A9C-------------------------------
  4877. INT 1A - PCMCIA Socket Services - READ ERROR DETECTION CODE
  4878.     AH = 9Ch
  4879.     AL = adapter number
  4880.     BH = EDC generator
  4881. Return: CF clear if successful
  4882.         AH destroyed
  4883.         DL/DX = computed checksum or CRC
  4884.     CF set on error
  4885.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4886. SeeAlso: AH=95h,AH=96h,AH=98h,AH=99h,AH=9Bh
  4887. --------c-1AA0-------------------------------
  4888. INT 1A U - Disk Spool II v2.07+ - INSTALLATION CHECK
  4889.     AH = A0h
  4890. Return: AH = B0h if installed
  4891.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  4892.         ES = code segment
  4893.         ES:BX -> name of current spool file
  4894.         ES:SI -> current despool file
  4895.         CL = despooler state (00h disabled, 41h enabled)
  4896.         CH = spooler state (00h disabled, 41h enabled)
  4897.         DL = 00h despooler is currently active printing a file
  4898.            = 41h despooler is standing by
  4899.         DH = 00h ???
  4900.            = 41h ???
  4901.         DI = 0000h ???
  4902.          0001h ???
  4903. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  4904.       Software Company
  4905. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4906.       as that is a licensed version of Disk Spool II
  4907. SeeAlso: AH=ABh,AH=C0h,AH=D0h,AH=E1h
  4908. --------c-1AAB-------------------------------
  4909. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  4910.     AH = ABh
  4911. Return: AH = BAh if installed
  4912.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  4913.         ES = code segment
  4914.         ES:BX -> name of current spool file
  4915.         ES:SI -> current despool file
  4916.         CL = 00h despooler is disabled
  4917.            = 41h despooler is enabled
  4918.         CH = 00h spooler is disabled
  4919.            = 41h spooler is enabled
  4920.         DL = 00h despooler is currently active printing a file
  4921.            = 41h despooler is standing by
  4922.         DH = 00h ???
  4923.            = 41h ???
  4924.         DI = 0000h ???
  4925.          0001h ???
  4926. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  4927.       Software Company
  4928. SeeAlso: AH=A0h,AH=ACh,AH=ADh,AH=E1h
  4929. --------c-1AAC-------------------------------
  4930. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  4931.     AH = ACh
  4932. Return: (see AH=ABh)
  4933. Note:    this function is identical to AH=ABh
  4934. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  4935. --------c-1AAD-------------------------------
  4936. INT 1A U - Disk Spool II v1.83 - FUNCTION CALLS
  4937.     AH = ADh
  4938.     AL = function code
  4939.         02h enable spooler only
  4940.         03h enable the despooler
  4941.         04h disable the despooler
  4942.         08h inhibit popup menu
  4943.         09h enable popup menu
  4944.         0Ah ???
  4945.         0Bh disable the spooler
  4946.         0Ch start despooler after last successfully printed document???
  4947.         0Dh start despooler at the exact point where it last left off???
  4948.         0Eh pop up the menu
  4949.         0Fh ???
  4950.         11h ???
  4951.         14h ???
  4952.         15h ???
  4953.         16h ???
  4954.         17h ???
  4955.         18h ???
  4956.         19h ???
  4957.         20h clear file pointed to by the despooler???
  4958.         21h ???
  4959.         22h ???
  4960.         23h ???
  4961.         30h ???
  4962. Return: AH = 00h if successful
  4963. SeeAlso: AH=ABh
  4964. --------d-1AB001CX4D52-----------------------
  4965. INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
  4966.     AX = B001h
  4967.     CX = 4D52h ("MR")
  4968.     DX = 4349h ("CI")
  4969. Return: CX = 4943h ("IC") if installed
  4970.     DX = 524Dh ("RM") if installed
  4971.         ES:DI -> MRCINFO structure (see below)
  4972. Note:    this call is functionally identical to INT 2F/AX=4A12h, which should
  4973.       be called first, as this call is used for the first, ROM-based
  4974.       MRCI server, while the other call is used for RAM-based servers
  4975.       which may be partially or entirely replacing a prior server
  4976. SeeAlso: INT 2F/AX=4A12h
  4977.  
  4978. Format of MRCINFO structure:
  4979. Offset    Size    Description
  4980.  00h  4 BYTEs    vendor signature
  4981.         "MSFT" Microsoft
  4982.  04h    WORD    server version (high=major)
  4983.  06h    WORD    MRCI specification version
  4984.  08h    DWORD    address of server entry point
  4985.  0Ch    WORD    bit flags: server capabilities (see below)
  4986.  0Eh    WORD    bit flags: hardware assisted capabilities (see below)
  4987.  10h    WORD    maximum block size supported by server (at least 8192 bytes)
  4988.  
  4989. Bitfields for capabilities:
  4990.  bit 0    standard compress
  4991.  bit 1    standard decompress
  4992.  bit 2    update compress
  4993.  bit 3    MaxCompress
  4994.  bit 4    reserved
  4995.  bit 5    incremental decompress
  4996.  bits 6-14 reserved
  4997.  bit 15 this structure is in ROM and can't be modified
  4998.     (server capabilities only)
  4999.  
  5000. Call MRCI entry point with:
  5001.     DS:SI -> MRCREQUEST structure (see below)
  5002.     CX = type of client (0000h application, 0001h file system)
  5003.     AX = operation
  5004.         0001h perform standard compression
  5005.         0002h perform standard decompression
  5006.         0004h perform update compression
  5007.         0008h perform MaxCompress
  5008.         0020h perform incremental decompression
  5009.     AX = FFFFh clear flags
  5010.         BX = bitmask of flags to clear (set bits in BX are flags to clear)
  5011. Return: AX = status
  5012.         0000h successful
  5013.         0001h invalid function
  5014.         0002h server busy, try again
  5015.         0003h destination buffer too small
  5016.         0004h incompressible data
  5017.         0005h bad compressed data format
  5018.     BP destroyed (MS-DOS 6.2)
  5019. Note:    MRCI driver may chain to a previous driver
  5020.  
  5021. Format of MRCREQUEST structure:
  5022. Offset    Size    Description
  5023.  00h    DWORD    pointer to source buffer
  5024.  04h    WORD    size of source buffer (0000h = 64K)
  5025.  06h    WORD    (UpdateCompress only)
  5026.         (call) offset in source buffer of beginning of changed data
  5027.         (return) offset in destination buffer of beginning of changed
  5028.             compressed data
  5029.  08h    DWORD    pointer to destination buffer
  5030.         must contain original compressed data for UpdateCompress
  5031.  0Ch    WORD    size of destination buffer (0000h = 64K)
  5032.         any compression: size of buffer for compressed data
  5033.         standard decompression: number of bytes to be decompressed
  5034.         incremental decompression: number of byte to decompress now
  5035.         (return) actual size of resulting data
  5036.  0Eh    WORD    client compressed data storage allocation size
  5037.  10h    DWORD    incremental decompression state data
  5038.         set to 00000000h before first incremental decompression call
  5039. Notes:    the source and destination buffers may not overlap
  5040.     the source and destination buffer sizes should normally be the same
  5041.     application should not update the contents of the MRCREQUEST structure
  5042.       between incremental decompression calls
  5043. --------X-1AB101-----------------------------
  5044. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK
  5045.     AX = B101h
  5046. Return: AH = 00h if installed
  5047.         CF clear
  5048.         EDX = 20494350h (' ICP')
  5049.         EDI = physical address of protected-mode entry point (see below)
  5050.         AL = PCI hardware characteristics
  5051.         bit 0: configuration space access mechanism 1 supported
  5052.         bit 1: configuration space access mechanism 2 supported
  5053.         bits 2-3 reserved
  5054.         bit 4: Special Cycle generation mechanism 1 supported
  5055.         bit 5: Special Cycle generation mechanism 2 supported
  5056.         bits 6-7 reserved
  5057.         BH = PCI interface level major version (BCD)
  5058.         BL = PCI interface level minor version (BCD)
  5059.         CL = number of last PCI bus in system
  5060.     EAX, EBX, ECX, and EDX may be modified
  5061.     all other flags (except IF) may be modified
  5062. Note:    this function may require up to 1024 byte of stack; it will not enable
  5063.       interrupts if they were disabled before making the call
  5064. SeeAlso: AX=B181h
  5065.  
  5066. Call protected-mode entry point with:
  5067.     registers as for real/V86-mode INT call
  5068.     CS = ring 0 descriptor with access to full address space
  5069. Return: as for real/V86-mode call
  5070. --------X-1AB102-----------------------------
  5071. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE
  5072.     AX = B102h
  5073.     CX = device ID
  5074.     DX = vendor ID
  5075.     SI = device index (0-n)
  5076. Return: CF clear if successful
  5077.     CF set on error
  5078.     AH = status
  5079.         00h successful
  5080.         BL = bus number
  5081.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  5082.         83h bad vendor ID
  5083.         86h device not found
  5084.     EAX, EBX, ECX, and EDX may be modified
  5085.     all other flags (except IF) may be modified
  5086. Notes:    this function may require up to 1024 byte of stack; it will not enable
  5087.       interrupts if they were disabled before making the call
  5088.     device ID FFFFh may be reserved as a wildcard in future implementations
  5089.     the meanings of BL and BH on return may be exchanged in future
  5090.       implementations
  5091.     all devices sharing a single vendor ID and device ID may be enumerated
  5092.       by incrementing SI from 0 until error 86h is returned
  5093. SeeAlso: AX=B182h
  5094. --------X-1AB103-----------------------------
  5095. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE
  5096.     AX = B103h
  5097.     ECX = class code (bits 23-0)
  5098.     SI = device index (0-n)
  5099. Return: CF clear if successful
  5100.     CF set on error
  5101.     AH = status
  5102.         00h successful
  5103.         BL = bus number
  5104.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  5105.         86h device not found
  5106.     EAX, EBX, ECX, and EDX may be modified
  5107.     all other flags (except IF) may be modified
  5108. Notes:    this function may require up to 1024 byte of stack; it will not enable
  5109.       interrupts if they were disabled before making the call
  5110.     the meanings of BL and BH on return may be exchanged in future
  5111.       implementations
  5112.     all devices sharing the same Class Code may be enumerated by
  5113.       incrementing SI from 0 until error 86h is returned
  5114. SeeAlso: AX=B183h
  5115. --------X-1AB106-----------------------------
  5116. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS
  5117.     AX = B106h
  5118.     BL = bus number
  5119.     EDX = Special Cycle data
  5120. Return: CF clear if successful
  5121.     CF set on error
  5122.     AH = status
  5123.         00h successful
  5124.         81h unsupported function
  5125.     EAX, EBX, ECX, and EDX may be modified
  5126.     all other flags (except IF) may be modified
  5127. Note:    this function may require up to 1024 byte of stack; it will not enable
  5128.       interrupts if they were disabled before making the call
  5129. SeeAlso: AX=B186h
  5130. --------X-1AB108-----------------------------
  5131. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE
  5132.     AX = B108h
  5133.     BL = bus number
  5134.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5135.     DI = register number (0000h-00FFh)
  5136. Return: CF clear if successful
  5137.         CL = byte read
  5138.     CF set on error
  5139.     AH = status
  5140.         00h successful
  5141.         87h bad register number
  5142.     EAX, EBX, ECX, and EDX may be modified
  5143.     all other flags (except IF) may be modified
  5144. Notes:    this function may require up to 1024 byte of stack; it will not enable
  5145.       interrupts if they were disabled before making the call
  5146.     the meanings of BL and BH on entry may be exchanged in future
  5147.       implementations
  5148. SeeAlso: AX=B188h
  5149. --------X-1AB109-----------------------------
  5150. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD
  5151.     AX = B109h
  5152.     BL = bus number
  5153.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5154.     DI = register number (0000h-00FFh)
  5155. Return: CF clear if successful
  5156.         CX = word read
  5157.     CF set on error
  5158.     AH = status
  5159.         00h successful
  5160.         87h bad register number
  5161.     EAX, EBX, ECX, and EDX may be modified
  5162.     all other flags (except IF) may be modified
  5163. Notes:    this function may require up to 1024 byte of stack; it will not enable
  5164.       interrupts if they were disabled before making the call
  5165.     the meanings of BL and BH on entry may be exchanged in future
  5166.       implementations
  5167. SeeAlso: AX=B189h
  5168. --------X-1AB10A-----------------------------
  5169. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD
  5170.     AX = B10Ah
  5171.     BL = bus number
  5172.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5173.     DI = register number (0000h-00FFh)
  5174. Return: CF clear if successful
  5175.         ECX = dword read
  5176.     CF set on error
  5177.     AH = status
  5178.         00h successful
  5179.         87h bad register number
  5180.     EAX, EBX, ECX, and EDX may be modified
  5181.     all other flags (except IF) may be modified
  5182. Notes:    this function may require up to 1024 byte of stack; it will not enable
  5183.       interrupts if they were disabled before making the call
  5184.     the meanings of BL and BH on entry may be exchanged in future
  5185.       implementations
  5186. SeeAlso: AX=B18Ah
  5187. --------X-1AB10B-----------------------------
  5188. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE
  5189.     AX = B10Bh
  5190.     BL = bus number
  5191.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5192.     DI = register number (0000h-00FFh)
  5193.     CL = byte to write
  5194. Return: CF clear if successful
  5195.     CF set on error
  5196.     AH = status
  5197.         00h successful
  5198.         87h bad register number
  5199.     EAX, EBX, ECX, and EDX may be modified
  5200.     all other flags (except IF) may be modified
  5201. Notes:    this function may require up to 1024 byte of stack; it will not enable
  5202.       interrupts if they were disabled before making the call
  5203.     the meanings of BL and BH on entry may be exchanged in future
  5204.       implementations
  5205. SeeAlso: AX=B18Bh
  5206. --------X-1AB10C-----------------------------
  5207. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD
  5208.     AX = B10Ch
  5209.     BL = bus number
  5210.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5211.     DI = register number (multiple of 2 less than 0100h)
  5212.     CX = word to write
  5213. Return: CF clear if successful
  5214.     CF set on error
  5215.     AH = status
  5216.         00h successful
  5217.         87h bad register number
  5218.     EAX, EBX, ECX, and EDX may be modified
  5219.     all other flags (except IF) may be modified
  5220. Notes:    this function may require up to 1024 byte of stack; it will not enable
  5221.       interrupts if they were disabled before making the call
  5222.     the meanings of BL and BH on entry may be exchanged in future
  5223.       implementations
  5224. SeeAlso: AX=B18Ch
  5225. --------X-1AB10D-----------------------------
  5226. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD
  5227.     AX = B10Dh
  5228.     BL = bus number
  5229.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5230.     DI = register number (multiple of 4 less than 0100h)
  5231.     ECX = dword to write
  5232. Return: CF clear if successful
  5233.     CF set on error
  5234.     AH = status
  5235.         00h successful
  5236.         87h bad register number
  5237.     EAX, EBX, ECX, and EDX may be modified
  5238.     all other flags (except IF) may be modified
  5239. Notes:    this function may require up to 1024 byte of stack; it will not enable
  5240.       interrupts if they were disabled before making the call
  5241.     the meanings of BL and BH on entry may be exchanged in future
  5242.       implementations
  5243. SeeAlso: AX=B18Dh
  5244. --------X-1AB181-----------------------------
  5245. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK (32-bit)
  5246.     AX = B181h
  5247. Return: as for AX=B101h
  5248. SeeAlso: AX=B101h
  5249. --------X-1AB182-----------------------------
  5250. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE (32-bit)
  5251.     AX = B182h
  5252.     CX = device ID
  5253.     DX = vendor ID
  5254.     SI = device index (0-n)
  5255. Return: as for AX=B102h
  5256. SeeAlso: AX=B102h
  5257. --------X-1AB183-----------------------------
  5258. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE (32-bit)
  5259.     AX = B183h
  5260.     ECX = class code (bits 23-0)
  5261.     SI = device index (0-n)
  5262. Return: as for AX=B103h
  5263. SeeAlso: AX=B103h
  5264. --------X-1AB186-----------------------------
  5265. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS (32-bit)
  5266.     AX = B186h
  5267.     BL = bus number
  5268.     EDX = Special Cycle data
  5269. Return: as for AX=B106h
  5270. SeeAlso: AX=B106h
  5271. --------X-1AB188-----------------------------
  5272. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE (32-bit)
  5273.     AX = B188h
  5274.     BL = bus number
  5275.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5276.     DI = register number (0000h-00FFh)
  5277. Return: as for AX=B108h
  5278. SeeAlso: AX=B108h
  5279. --------X-1AB189-----------------------------
  5280. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD (32-bit)
  5281.     AX = B189h
  5282.     BL = bus number
  5283.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5284.     DI = register number (0000h-00FFh)
  5285. Return: as for AX=B109h
  5286. SeeAlso: AX=B109h
  5287. --------X-1AB18A-----------------------------
  5288. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD (32-bit)
  5289.     AX = B18Ah
  5290.     BL = bus number
  5291.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5292.     DI = register number (0000h-00FFh)
  5293. Return: as for AX=B10Ah
  5294. SeeAlso: AX=B10Ah
  5295. --------X-1AB18B-----------------------------
  5296. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE (32-bit)
  5297.     AX = B18Bh
  5298.     BL = bus number
  5299.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5300.     DI = register number (0000h-00FFh)
  5301.     CL = byte to write
  5302. Return: as for AX=B10Bh
  5303. SeeAlso: AX=B10Bh
  5304. --------X-1AB18C-----------------------------
  5305. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD (32-bit)
  5306.     AX = B18Ch
  5307.     BL = bus number
  5308.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5309.     DI = register number (multiple of 2 less than 0100h)
  5310.     CX = word to write
  5311. Return: as for AX=B10Ch
  5312. SeeAlso: AX=B10Ch
  5313. --------X-1AB18D-----------------------------
  5314. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD (32-bit)
  5315.     AX = B18Dh
  5316.     BL = bus number
  5317.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  5318.     DI = register number (multiple of 4 less than 0100h)
  5319.     ECX = dword to write
  5320. Return: as for AX=B10Dh
  5321. SeeAlso: AX=B10Dh
  5322. --------c-1AC0-------------------------------
  5323. INT 1A U - Disk Spool II v2.07+ - ALTERNATE INSTALLATION CHECK
  5324.     AH = C0h
  5325. Return: (see AH=A0h)
  5326. Notes:    this call is identical to AH=A0h
  5327.     this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5328.       as that is a licensed version of Disk Spool II
  5329. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  5330. --------U-1ACCCCBXCCCC-----------------------
  5331. INT 1A U - DATEFIX - INSTALLATION CHECK
  5332.     AX = CCCCh
  5333.     BX = CCCCh
  5334.     CX = 0000h
  5335. Return: CX = CCCCh if installed
  5336.         ES:BX -> original interrupt handler
  5337. Program: DATEFIX is a public-domain TSR to correct the date on AT&T 6300
  5338.       machines, where the realtime clock's calendar wraps after 1991
  5339. SeeAlso: AH=FEh,AH=FFh"AT&T"
  5340. --------c-1AD0-------------------------------
  5341. INT 1A U - Disk Spool II v2.07+ - FUNCTION CALLS
  5342.     AH = D0h
  5343.     AL = function code
  5344.         01h enable spooler and despooler
  5345.         02h enable spooler only
  5346.         03h enable despooler at beginning of file
  5347.         04h disable the despooler
  5348.         05h disable the despooler and spooler
  5349.         06h clear the spool file
  5350.         08h inhibit the popup menu
  5351.         09h enable the popup menu
  5352.         0Ah ??? (called by Disk Spool's INT 21 handler)
  5353.         0Bh disable the spooler
  5354.         0Ch start despooler after last successfully printed document
  5355.         0Dh start despooler at the exact point where it last left off
  5356.         0Eh pop up the menu
  5357.         0Fh ???
  5358.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  5359.             when a program terminates)
  5360.         14h ???
  5361.         15h delete despool file and reset ???
  5362.         16h ??? (writes something to unknown file)
  5363.         17h ??? (writes something to despool file, then reads something
  5364.             else and ???)
  5365.         18h ??? (reads something from despool file, and then ???)
  5366.         19h ??? (creates/truncates spool file)
  5367.         20h clear file pointed to by the despooler
  5368.         21h ??? (writes something to unknown file)
  5369.         22h ??? (writes something to spool file if spooler/despooler using
  5370.             same file)
  5371.         23h ??? (opens/creates unknown file, then ???)
  5372.         30h ???
  5373.         31h ???
  5374.         32h beep
  5375.         33h append CRLF to spool file???
  5376.         34h ???
  5377.         35h ???
  5378.         36h ???
  5379.         37h append CRLF to spool file and start a new spool file???
  5380.         38h ???
  5381.         40h ??? (v4.05)
  5382.         41h ??? (v4.05)
  5383.         51h ??? (called by Disk Spool's INT 21 handler)
  5384.         52h ??? (called by Disk Spool's INT 21 handler)
  5385.         57h ???
  5386.         5Ah ??? (v4.05)
  5387.         5Bh ??? (v4.05)
  5388.         5Ch ??? (v4.05)
  5389. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5390.       as that is a licensed version of Disk Spool II
  5391. SeeAlso: AH=A0h,AH=ADh
  5392. --------c-1AE0-------------------------------
  5393. INT 1A - Disk Spool II v4.0x - ENABLE/DISABLE
  5394.     AH = E0h
  5395.     AL = subfunction
  5396.         01h enable spooler
  5397.         02h disable spooler
  5398.         03h enable despooler
  5399.         04h disable despooler
  5400.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5401. Return: AH = status
  5402.         00h successful
  5403.         F0h printer port not managed by Disk Spool II
  5404.         FFH failed
  5405. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5406.       as that is a licensed version of Disk Spool II
  5407. SeeAlso: AH=A0h,AH=E1h,AX=E301h,AX=E401h
  5408. --------c-1AE1-------------------------------
  5409. INT 1A - Disk Spool II v4.0x - GET STATUS
  5410.     AH = E1h
  5411.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5412. Return: AH = status
  5413.         00h successful
  5414.         CL = despooler state (00h disabled, 41h enabled)
  5415.         CH = spooler state (00h disabled, 41h enabled)
  5416.         DL = despooler activity (00h standing by, 41h printing)
  5417.         ES:BX -> ASCIZ name of current spool file (or next if AutoSpool
  5418.             or AutoDespool enabled)
  5419.         ES:SI -> ASCIZ name of current despool file
  5420.         ES:DI -> 3-byte file extension used by Disk Spool II
  5421.         F0h printer port not managed by Disk Spool II
  5422. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5423.       as that is a licensed version of Disk Spool II
  5424. SeeAlso: AH=A0h,AH=E0h,AH=E2h
  5425. --------c-1AE2-------------------------------
  5426. INT 1A - Disk Spool II v4.0x - GET SPOOL FILES
  5427.     AH = E2h
  5428.     AL = which
  5429.         01h first
  5430.         02h next (can only call after "first")
  5431.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5432. Return: AH = status
  5433.         00h successful
  5434.         ES:BX -> ASCIZ filename
  5435.         F0h no (more) spool files
  5436.         FFh failed
  5437. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5438.       as that is a licensed version of Disk Spool II
  5439. SeeAlso: AH=E0h,AH=E1h
  5440. --------c-1AE301-----------------------------
  5441. INT 1A - Disk Spool II v4.0x - GET SPOOL FILE STATUS
  5442.     AX = E301h
  5443.     ES:BX -> ASCIZ filename (max 32 chars)
  5444. Return: AH = status
  5445.         00h successful
  5446.         ES:SI -> spool file status record (see below)
  5447.         F0h not a spool file
  5448.         FFh failed
  5449. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5450.       as that is a licensed version of Disk Spool II
  5451. SeeAlso: AH=E0h,AX=E302h,AX=E401h
  5452.  
  5453. Format of spool file status record:
  5454. Offset    Size    Description
  5455.  00h    BYTE    hour of creation or last update
  5456.  01h    BYTE    minute of creation or last update
  5457.  02h    BYTE    year-1980 of creation or last update
  5458.  03h    BYTE    month of creation or last update
  5459.  04h    BYTE    day of creation or last update
  5460.  05h    BYTE    total number of copies to print
  5461.  06h    BYTE    number of copies already printed
  5462.  07h    BYTE    printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5463.  08h    BYTE    save status (00h delete after printing, 01h save)
  5464.  09h    BYTE    file status
  5465.         01h done printing, but being saved
  5466.         02h on hold
  5467.         03h queued for printing
  5468.         04h being spooled
  5469.         05h being despooled (i.e. printed)
  5470.  0Ah 16 BYTEs    ASCIZ description
  5471.  1Ah  2 WORDs    file size in bytes (high,low)
  5472.  1Eh  2 WORDs    bytes left to print (high,low)
  5473. --------c-1AE302-----------------------------
  5474. INT 1A - Disk Spool II v4.0x - UPDATE SPOOL FILE
  5475.     AX = E302h
  5476.     ES:BX -> ASCIZ filename (max 32 chars)
  5477.     ES:SI -> spool file status record (see AX=E301h)
  5478. Return: AH = status
  5479.         00h successful
  5480.         F0h not a spool file
  5481.         FFh failed
  5482. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5483.       as that is a licensed version of Disk Spool II
  5484. SeeAlso: AH=E0h,AX=E301h,AX=E401h
  5485. --------c-1AE401-----------------------------
  5486. INT 1A - Disk Spool II v4.0x - SPOOL EXISTING FILE
  5487.     AX = E401h
  5488.     ES:BX -> ASCIZ filename (max 32 chars)
  5489.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5490. Return: AH = status
  5491.         00h successful
  5492.         FFh failed
  5493. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5494.       as that is a licensed version of Disk Spool II
  5495. SeeAlso: AH=E1h,AX=E302h,AX=E402h
  5496. --------c-1AE402-----------------------------
  5497. INT 1A U - Disk Spool II v4.0x - SPOOL EXISTING FILE???
  5498.     AX = E402h
  5499.     ES:BX -> ASCIZ filename (max 32 chars)
  5500.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5501. Return: AH = status
  5502.         00h successful
  5503.         FFh failed
  5504. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5505.       as that is a licensed version of Disk Spool II
  5506. SeeAlso: AH=E1h,AX=E302h,AX=E401h
  5507. --------c-1AE5-------------------------------
  5508. INT 1A U - Emulaser ELSPL.COM - ???
  5509.     AH = E5h
  5510.     ???
  5511. Return: ???
  5512. Program: ELSPL.COM is a licensed version of Disk Spool II which is distributed
  5513.       as part of Vertisoft's Emulaser PostScript emulator
  5514. SeeAlso: AH=A0h,INT 17/AH=03h
  5515. --------c-1AEE-------------------------------
  5516. INT 1A U - Disk Spool II v4.05 - ???
  5517.     AH = EEh
  5518.     AL = printer port???
  5519.     ???
  5520. Return: ???
  5521. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5522.       as that is a licensed version of Disk Spool II
  5523. SeeAlso: AH=E1h
  5524. --------U-1AF7-------------------------------
  5525. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  5526.     AH = F7h
  5527. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5528.       time to correct for clock drift
  5529. Note:    any AH value from F0h-F7h or F9h-FEh will perform this function in
  5530.       version 1.1, but F7h is the function called by transient portion
  5531. SeeAlso: AH=F8h,AH=FFh"RighTime"
  5532. --------U-1AF8-------------------------------
  5533. INT 1A - RighTime v1.1 - ENABLE
  5534.     AH = F8h
  5535. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5536.       time to correct for clock drift
  5537. Note:    RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  5538.       TeSseRact program identifier based on its current state: "RighTime"
  5539.       when enabled, "RighTim"F7h when disabled.
  5540. SeeAlso: AH=F7h,AH=FFh"RighTime"
  5541. --------b-1AFE-------------------------------
  5542. INT 1A - AT&T 6300 - READ TIME AND DATE
  5543.     AH = FEh
  5544. Return: BX = day count (0 = Jan 1, 1984)
  5545.     CH = hour
  5546.     CL = minute
  5547.     DH = second
  5548.     DL = hundredths
  5549. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  5550. --------b-1AFF-------------------------------
  5551. INT 1A - AT&T 6300 - SET TIME AND DATE
  5552.     AH = FFh
  5553.     BX = day count (0 = Jan 1, 1984)
  5554.     CH = hour
  5555.     CL = minute
  5556.     DH = second
  5557.     DL = hundredths
  5558. Return: ???
  5559. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  5560. --------U-1AFF-------------------------------
  5561. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  5562.     AH = FFh
  5563. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5564.       time to correct for clock drift
  5565. Note:    upon being permanently disabled, RighTime closes the file handle
  5566.       referencing its executable (which is updated with time correction
  5567.       information every two minutes while RighTime is enabled).
  5568. --------s-1AFF00-----------------------------
  5569. INT 1A - SND - INSTALLATION CHECK???
  5570.     AX = FF00h
  5571. Return: AL = version??? (02h)
  5572.     AH = busy flag (00h if not in a SND call, 01h if SND currently active)
  5573. Note:    the SND API is also supported by IC (Internal Commands) v2.0, a
  5574.       shareware TSR by Geoff Friesen which extends COMMAND.COM's internal
  5575.       command set
  5576. SeeAlso: AX=FF01h,AX=FF02h,AX=FF04h,AX=FF05h
  5577. --------s-1AFF01-----------------------------
  5578. INT 1A - SND - PAUSE
  5579.     AX = FF01h
  5580.     DX = number of clock ticks to delay
  5581. Return: AH = status
  5582.         00h successful
  5583.         01h SND busy
  5584. Notes:    if successful, execution returns to the caller after the delay expires;
  5585.       if SND is busy, execution returns immediately
  5586.     the IC v2.0 implementation of this API makes no special allowance for
  5587.       time rollover at midnight, which can cause the delay to be over one
  5588.       hour if this function is called just before the BIOS time count
  5589.       rolls over and the delay extends into the next day
  5590. SeeAlso: AX=FF00h,INT 15/AH=86h,INT 62/AX=0096h,INT 7F/AH=E8h,INT 80/BX=0009h
  5591. SeeAlso: INT E0/CL=BDh
  5592. --------s-1AFF02-----------------------------
  5593. INT 1A - SND - START SOUND
  5594.     AX = FF02h
  5595.     DX = frequency in Hertz (14h-FFFFh)
  5596. Return: AH = status
  5597.         00h successful
  5598.         01h SND busy
  5599. SeeAlso: AX=FF00h,AX=FF01h,AX=FF03h
  5600. --------s-1AFF03-----------------------------
  5601. INT 1A - SND - STOP SOUND
  5602.     AX = FF03h
  5603. Return: AH = status
  5604.         00h successful
  5605.         01h busy
  5606. Note:    turns off any sound currently being emitted by the PC's speaker unless
  5607.       SND is currently busy processing an API call (this includes
  5608.       background music).  Use AX=FF05h to stop the sound even if an API
  5609.       call is in progress.
  5610. SeeAlso: AX=FF00h,AX=FF02h,AX=FF05h
  5611. --------s-1AFF04-----------------------------
  5612. INT 1A - SND - PLAY MUSIC STRING IN BACKGROUND
  5613.     AX = FF04h
  5614.     DS:DX -> ASCIZ music string
  5615. Return: AH = status
  5616.         00h successful (music begins playing in background)
  5617.         01h busy
  5618. Note:    the music string accepted by SND is not the same as that accepted by
  5619.       BASIC and other programs which process music strings
  5620. SeeAlso: AX=FF00h,AX=FF05h,INT 80/BX=0006h
  5621. --------s-1AFF05-----------------------------
  5622. INT 1A - SND - UNCONDITIONALLY STOP SOUND
  5623.     AX = FF05h
  5624. Return: AH = 00h (successful)
  5625. Note:    this function is the same as AX=FF03h, but will stop the sound even if
  5626.       SND is currently busy, such as playing background music
  5627. SeeAlso: AX=FF00h,AX=FF03h,INT 80/BX=0007h
  5628. --------B-1B---------------------------------
  5629. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  5630. Desc:    this interrupt is automatically called when INT 09 determines that
  5631.       Control-Break has been pressed
  5632. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  5633.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  5634. SeeAlso: INT 23
  5635. --------B-1C---------------------------------
  5636. INT 1C - TIME - SYSTEM TIMER TICK
  5637. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  5638.       handler
  5639. Notes:    this is the preferred interrupt to chain when a program needs to be
  5640.       invoked regularly
  5641.     not available on NEC 9800-series PCs
  5642. SeeAlso: INT 08
  5643. --------B-1D---------------------------------
  5644. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  5645. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  5646. SeeAlso: INT 10/AH=00h
  5647.  
  5648. Format of video parameters:
  5649. Offset    Size    Description
  5650.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  5651.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  5652.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  5653.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  5654.  40h    WORD    bytes in video buffer for modes 00h and 01h
  5655.  42h    WORD    bytes in video buffer for modes 02h and 03h
  5656.  44h    WORD    bytes in video buffer for modes 04h and 05h
  5657.  46h    WORD    bytes in video buffer for modes 06h and 07h
  5658.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  5659.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  5660. --------B-1E---------------------------------
  5661. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  5662. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  5663. SeeAlso: INT 13/AH=0Fh,INT 41
  5664.  
  5665. Format of diskette parameter table:
  5666. Offset    Size    Description
  5667.  00h    BYTE    first specify byte
  5668.         bits 7-4: step rate
  5669.         bits 3-0: head unload time (0Fh = 240 ms)
  5670.  01h    BYTE    second specify byte
  5671.         bits 7-1: head load time (01h = 4 ms)
  5672.         bit    0: non-DMA mode (always 0)
  5673.  02h    BYTE    delay until motor turned off (in clock ticks)
  5674.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  5675.  04h    BYTE    sectors per track
  5676.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  5677.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  5678.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  5679.  08h    BYTE    format filler byte (default F6h)
  5680.  09h    BYTE    head settle time in milliseconds
  5681.  0Ah    BYTE    motor start time in 1/8 seconds
  5682. --------B-1F---------------------------------
  5683. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  5684. Desc:    this vector points at 1024 bytes of graphics data, 8 bytes for each
  5685.       character 80h-FFh
  5686. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  5687.       compatible BIOSes
  5688. SeeAlso: INT 10/AX=5000h,INT 43
  5689. --------O-20---------------------------------
  5690. INT 20 - Minix - SEND/RECEIVE MESSAGE
  5691.     AX = process ID of other process
  5692.     BX -> message
  5693.     CX = operation (1 send, 2 receive, 3 send&receive)
  5694. Program: Minix is a Version 7 Unix-compatible operating system by Andrew
  5695.       Tanenbaum
  5696. Note:    the message contains the system call number (numbered as in V7
  5697.       Unix(tm)) and the call parameters
  5698. --------D-20---------------------------------
  5699. INT 20 - DOS 1+ - TERMINATE PROGRAM
  5700.     CS = PSP segment
  5701. Return: never
  5702. Note:    (see INT 21/AH=00h)
  5703. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  5704. --------G-20---------------------------------
  5705. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  5706.     ???
  5707. Return: ???
  5708. SeeAlso: INT 21"COMTROL"
  5709. --------G-21---------------------------------
  5710. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  5711.     ???
  5712. Return: AX = first segment available for control program use
  5713. SeeAlso: INT 20"COMTROL",INT 22"COMTROL"
  5714. --------D-2100-------------------------------
  5715. INT 21 - DOS 1+ - TERMINATE PROGRAM
  5716.     AH = 00h
  5717.     CS = PSP segment
  5718. Notes:    Microsoft recommends using INT 21/AH=4Ch for DOS 2+
  5719.     execution continues at the address stored in INT 22 after DOS performs
  5720.       whatever cleanup it needs to do
  5721.     if the PSP is its own parent, the process's memory is not freed; if
  5722.       INT 22 additionally points into the terminating program, the
  5723.       process is effectively NOT terminated
  5724.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5725. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  5726. --------D-2101-------------------------------
  5727. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  5728.     AH = 01h
  5729. Return: AL = character read
  5730. Notes:    ^C/^Break are checked, and INT 23 executed if read
  5731.     character is echoed to standard output
  5732.     standard input is always the keyboard and standard output the screen
  5733.       under DOS 1.x, but they may be redirected under DOS 2+
  5734. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  5735. --------D-2102-------------------------------
  5736. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  5737.     AH = 02h
  5738.     DL = character to write
  5739. Return: AL = last character output (despite the official docs which state
  5740.         nothing is returned) (at least DOS 3.3-5.0)
  5741. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  5742.     standard output is always the screen under DOS 1.x, but may be
  5743.       redirected under DOS 2+
  5744.     the last character output will be the character in DL unless DL=09h
  5745.       on entry, in which case AL=20h as tabs are expanded to blanks
  5746. SeeAlso: AH=06h,AH=09h
  5747. --------D-2103-------------------------------
  5748. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  5749.     AH = 03h
  5750. Return: AL = character read
  5751. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5752.     STDAUX is usually the first serial port
  5753. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  5754. --------D-2104-------------------------------
  5755. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  5756.     AH = 04h
  5757.     DL = character to write
  5758. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5759.     STDAUX is usually the first serial port
  5760.     if STDAUX is busy, this function will wait until it becomes free
  5761. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  5762. --------D-2105-------------------------------
  5763. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  5764.     AH = 05h
  5765.     DL = character to print
  5766. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5767.     STDPRN is usually the first parallel port, but may be redirected under
  5768.       DOS 2+
  5769.     if the printer is busy, this function will wait
  5770. SeeAlso: INT 17/AH=00h
  5771. --------D-2106-------------------------------
  5772. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  5773.     AH = 06h
  5774.     DL = character (except FFh)
  5775. Return: AL = character output (despite official docs which state nothing is
  5776.         returned) (at least DOS 3.3-5.0)
  5777. Notes:    does not check ^C/^Break
  5778.     writes to standard output, which is always the screen under DOS 1.x,
  5779.       but may be redirected under DOS 2+
  5780. SeeAlso: AH=02h,AH=09h
  5781. --------D-2106--DLFF-------------------------
  5782. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  5783.     AH = 06h
  5784.     DL = FFh
  5785. Return: ZF set if no character available
  5786.         AL = 00h
  5787.     ZF clear if character available
  5788.         AL = character read
  5789. Notes:    ^C/^Break are NOT checked
  5790.     if the returned character is 00h, the user pressed a key with an
  5791.       extended keycode, which will be returned by the next call of this
  5792.       function
  5793.     this function reads from standard input, which is always the keyboard
  5794.       under DOS 1.x, but may be redirected under DOS 2+
  5795.     although the return of AL=00h when no characters are available is not
  5796.       documented, some programs rely on this behavior
  5797. SeeAlso: AH=0Bh
  5798. --------D-2107-------------------------------
  5799. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  5800.     AH = 07h
  5801. Return: AL = character read from standard input
  5802. Notes:    does not check ^C/^Break
  5803.     standard input is always the keyboard under DOS 1.x, but may be
  5804.       redirected under DOS 2+
  5805.     if the interim console flag is set (see AX=6301h), partially-formed
  5806.       double-byte characters may be returned
  5807. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  5808. --------D-2108-------------------------------
  5809. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  5810.     AH = 08h
  5811. Return: AL = character read from standard input
  5812. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  5813.     standard input is always the keyboard under DOS 1.x, but may be
  5814.       redirected under DOS 2+
  5815.     if the interim console flag is set (see AX=6301h), partially-formed
  5816.       double-byte characters may be returned
  5817. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  5818. --------D-2109-------------------------------
  5819. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  5820.     AH = 09h
  5821.     DS:DX -> '$'-terminated string
  5822. Return: AL = 24h (the '$' terminating the string, despite official docs which
  5823.         state that nothing is returned) (at least DOS 3.3-5.0)
  5824. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  5825.     standard output is always the screen under DOS 1.x, but may be
  5826.       redirected under DOS 2+
  5827.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5828. SeeAlso: AH=02h,AH=06h"OUTPUT"
  5829. --------D-210A-------------------------------
  5830. INT 21 - DOS 1+ - BUFFERED INPUT
  5831.     AH = 0Ah
  5832.     DS:DX -> buffer (see below)
  5833. Return: buffer filled with user input
  5834. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  5835.     reads from standard input, which may be redirected under DOS 2+
  5836.     if the maximum buffer size (see below) is set to 00h, this call returns
  5837.       immediately without reading any input
  5838. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  5839.  
  5840. Format of input buffer:
  5841. Offset    Size    Description
  5842.  00h    BYTE    maximum characters buffer can hold
  5843.  01h    BYTE    (input) number of chars from last input which may be recalled
  5844.         (return) number of characters actually read, excluding CR
  5845.  02h  N BYTEs    actual characters read, including the final carriage return
  5846. --------K-210A00-----------------------------
  5847. INT 21 - WCED v1.6+ - INSTALLATION CHECK
  5848.     AX = 0A00h
  5849.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  5850. Return: buffer offset 02h-05h filled with "Wced" if installed
  5851. Program: WCED is a free command-line editor and history utility by Stuart
  5852.       Russell
  5853. SeeAlso: AH=FFh"CED"
  5854. --------D-210B-------------------------------
  5855. INT 21 - DOS 1+ - GET STDIN STATUS
  5856.     AH = 0Bh
  5857. Return: AL = 00h if no character available
  5858.        = FFh if character is available
  5859. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  5860.     standard input is always the keyboard under DOS 1.x, but may be
  5861.       redirected under DOS 2+
  5862.     if the interim console flag is set (see AX=6301h), this function
  5863.       returns AL=FFh if a partially-formed double-byte character is
  5864.       available
  5865. SeeAlso: AH=06h"INPUT",AX=4406h
  5866. --------v-210B56-----------------------------
  5867. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  5868.     AX = 0B56h
  5869. Return: AX = 4952h if resident
  5870. SeeAlso: AX=0D20h
  5871. --------D-210C-------------------------------
  5872. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  5873.     AH = 0Ch
  5874.     AL = STDIN input function to execute after flushing buffer
  5875.     other registers as appropriate for the input function
  5876. Return: as appropriate for the specified input function
  5877. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  5878.       no input is attempted
  5879. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  5880. --------D-210D-------------------------------
  5881. INT 21 - DOS 1+ - DISK RESET
  5882.     AH = 0Dh
  5883. Return: (DOS 6 only) CF clear (earlier versions preserve CF)
  5884. Notes:    This function writes all modified disk buffers to disk, but does not
  5885.       update the directory information (that is only done when files are
  5886.       closed or a SYNC call is issued)
  5887. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  5888. --------v-210D20-----------------------------
  5889. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  5890.     AX = 0D20h
  5891. Return: AX = 1971h if resident
  5892. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  5893. --------D-210E-------------------------------
  5894. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  5895.     AH = 0Eh
  5896.     DL = new default drive (00h = A:, 01h = B:, etc)
  5897. Return: AL = number of potentially valid drive letters
  5898. Notes:    under Novell NetWare, the return value is always 32, the number of
  5899.       drives that NetWare supports
  5900.     under DOS 3+, the return value is the greatest of 5, the value of
  5901.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  5902.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  5903.       may be accessed as either A: or B:
  5904.     otherwise, the return value is the highest drive actually present
  5905.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  5906.       and 3+ a maximum of 26 drives
  5907. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  5908. --------D-210F-------------------------------
  5909. INT 21 - DOS 1+ - OPEN FILE USING FCB
  5910.     AH = 0Fh
  5911.     DS:DX -> unopened File Control Block (see below)
  5912. Return: AL = status
  5913.         00h successful
  5914.         FFh file not found or access denied
  5915. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  5916.     an unopened FCB has the drive, filename, and extension fields filled
  5917.       in and all other bytes cleared
  5918.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5919.     DR-DOS checks password attached with AX=4303h
  5920. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  5921. SeeAlso: AH=10h,AH=16h,AH=3Dh,4303h
  5922.  
  5923. Format of File Control Block:
  5924. Offset    Size    Description
  5925.  -7    BYTE    extended FCB if FFh
  5926.  -6   5 BYTEs    reserved
  5927.  -1    BYTE    file attribute if extended FCB
  5928.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  5929.  01h  8 BYTEs    blank-padded file name
  5930.  09h  3 BYTEs    blank-padded file extension
  5931.  0Ch    WORD    current block number
  5932.  0Eh    WORD    logical record size
  5933.  10h    DWORD    file size
  5934.  14h    WORD    date of last write (see AX=5700h)
  5935.  16h    WORD    time of last write (see AX=5700h) (DOS 1.1+)
  5936.  18h  8 BYTEs    reserved (see below)
  5937.  20h    BYTE    record within current block
  5938.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  5939.         byte is omitted)
  5940. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  5941.       offset -7, rather than the address of the drive number field
  5942.  
  5943. Format of reserved field for DOS 1.0:
  5944. Offset    Size    Description
  5945.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  5946.         ID)
  5947.  18h    WORD    number of first cluster in file
  5948.  1Ah    WORD    current absolute cluster number on disk
  5949.  1Ch    WORD    current relative cluster number within file
  5950.         (0 = first cluster of file, 1 = second cluster, etc.)
  5951.  1Eh    BYTE    dirty flag (00h = not dirty)
  5952.  1Fh    BYTE    unused
  5953.  
  5954. Format of reserved field for DOS 1.10-1.25:
  5955. Offset    Size    Description
  5956.  18h    BYTE    bit 7: set if logical device
  5957.         bit 6: not dirty
  5958.         bits 5-0: disk number or logical device ID
  5959.  19h    WORD    starting cluster number on disk
  5960.  1Bh    WORD    current absolute cluster number on disk
  5961.  1Dh    WORD    current relative cluster number within file
  5962.  1Fh    BYTE    unused
  5963.  
  5964. Format of reserved field for DOS 2.x:
  5965. Offset    Size    Description
  5966.  18h    BYTE    bit 7: set if logical device
  5967.         bit 6: set if open???
  5968.         bits 5-0: ???
  5969.  19h    WORD    starting cluster number on disk
  5970.  1Bh    WORD    ???
  5971.  1Dh    BYTE    ???
  5972.  1Eh    BYTE    ???
  5973.  1Fh    BYTE    ???
  5974.  
  5975. Format of reserved field for DOS 3.x:
  5976. Offset    Size    Description
  5977.  18h    BYTE    number of system file table entry for file
  5978.  19h    BYTE    attributes
  5979.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  5980.               01 = SHARE.EXE not loaded, character device
  5981.               10 = SHARE.EXE loaded, remote file
  5982.               11 = SHARE.EXE loaded, local file or device
  5983.         bits 5-0: low six bits of device attribute word
  5984. ---SHARE.EXE loaded, local file---
  5985.  1Ah    WORD    starting cluster of file on disk
  5986.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record (see AH=52h)
  5987.  1Eh    BYTE    file attribute
  5988.  1Fh    BYTE    ???
  5989. ---SHARE.EXE loaded, remote file---
  5990.  1Ah    WORD    number of sector containing directory entry
  5991.  1Ch    WORD    relative cluster within file of last cluster accessed
  5992.  1Eh    BYTE    absolute cluster number of last cluster accessed
  5993.  1Fh    BYTE    ???
  5994. ---SHARE.EXE not loaded---
  5995.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  5996.  1Bh    WORD    starting cluster of file
  5997.  1Dh    WORD    number of sector containing directory entry
  5998.  1Fh    BYTE    number of directory entry within sector
  5999. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  6000.       of the device driver header, then the BYTE at 1Ah is overwritten.
  6001.  
  6002. Format of reserved field for DOS 5.0:
  6003. Offset    Size    Description
  6004.  18h    BYTE    number of system file table entry for file
  6005.  19h    BYTE    attributes
  6006.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  6007.               01 = SHARE.EXE not loaded, character device
  6008.               10 = SHARE.EXE loaded, remote file
  6009.               11 = SHARE.EXE loaded, local file or device
  6010.         bits 5-0: low six bits of device attribute word
  6011. ---SHARE.EXE loaded, local file---
  6012.  1Ah    WORD    starting cluster of file on disk
  6013.  1Ch    WORD    unique sequence number of sharing record
  6014.  1Eh    BYTE    file attributes
  6015.  1Fh    BYTE    unused???
  6016. ---SHARE.EXE loaded, remote file---
  6017.  1Ah    WORD    network handle
  6018.  1Ch    DWORD    network ID
  6019. ---SHARE not loaded, local device---
  6020.  1Ah    DWORD    pointer to device driver header
  6021.  1Eh  2 BYTEs    unused???
  6022. ---SHARE not loaded, local file---
  6023.  1Ah    BYTE    extra info
  6024.         bit 7: read-only attribute from SFT
  6025.         bit 6: archive attribute from SFT
  6026.         bits 5-0: high bits of sector number
  6027.  1Bh    WORD    starting cluster of file
  6028.  1Dh    WORD    low word of sector number containing directory entry
  6029.  1Fh    BYTE    number of directory entry within sector
  6030. --------D-2110-------------------------------
  6031. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  6032.     AH = 10h
  6033.     DS:DX -> File Control Block (see AH=0Fh)
  6034. Return: AL = status
  6035.         00h successful
  6036.         FFh failed
  6037. Notes:    a successful close forces all disk buffers used by the file to be
  6038.       written and the directory entry to be updated
  6039.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6040. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  6041. --------D-2111-------------------------------
  6042. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  6043.     AH = 11h
  6044.     DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
  6045. Return: AL = status
  6046.         00h successful
  6047.         [DTA] unopened FCB for first matching file
  6048.         FFh no matching filename, or bad FCB
  6049. Notes:    the type of the returned FCB depends on whether the input FCB was a
  6050.       normal or an extended FCB
  6051.     the data returned in the DTA is actually the drive number (or extended
  6052.       FCB header and drive number) followed by the file's directory entry
  6053.       (see below); this format happens to be compatible with an unopened
  6054.       FCB
  6055.     for extended FCBs with search attribute 08h, the volume label (if any)
  6056.       will be returned even if the current directory is not the root dir.
  6057.     DOS 3+ also allows the '*' wildcard
  6058.     the search FCB must not be modified if AH=12h will be used to continue
  6059.       searching; DOS 3.3 has set the following parts of the FCB:
  6060.          0Ch    BYTE    ???
  6061.          0Dh    WORD    directory entry number of matching file
  6062.          0Fh    WORD    cluster number of current directory
  6063.          11h  4 BYTEs    ???
  6064.          15h    BYTE    drive number (1=A:)
  6065.     this function is used by many copy protection schemes to obtain the
  6066.       starting cluster of a file
  6067. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  6068.  
  6069. Format of directory entry:
  6070. Offset    Size    Description
  6071.  00h  8 BYTEs    blank-padded filename
  6072.  08h  3 BYTEs    blank-padded file extension
  6073.  0Bh    BYTE    attributes
  6074.  0Ch 10 BYTEs    reserved
  6075.         used by DR-DOS to store file password
  6076.  16h    WORD    time of creation or last update (see AX=5700h)
  6077.  18h    WORD    date of creation or last update (see AX=5700h)
  6078.  1Ah    WORD    starting cluster number
  6079.  1Ch    DWORD    file size
  6080. --------D-2112-------------------------------
  6081. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  6082.     AH = 12h
  6083.     DS:DX -> unopened FCB (see AH=0Fh)
  6084. Return: AL = status
  6085.         00h successful
  6086.         [DTA] = unopened FCB
  6087.         FFh no more matching filenames
  6088. Note:    (see AH=11h)
  6089.     assumes that successful FindFirst executed on search FCB before call
  6090. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  6091. --------D-2113-------------------------------
  6092. INT 21 - DOS 1+ - DELETE FILE USING FCB
  6093.     AH = 13h
  6094.     DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for
  6095.         deletion ('?' wildcards allowed)
  6096. Return: AL = status
  6097.         00h one or more files successfully deleted
  6098.         FFh no matching files or all were read-only or locked
  6099. Notes:    DOS 1.25+ deletes everything in the current directory (including
  6100.       subdirectories) and sets the first byte of the name to 00h (entry
  6101.       never used) instead of E5h if called on an extended FCB with
  6102.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  6103.       2 for DOS 1.x).  This may have originally been an optimization to
  6104.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  6105.       the directory search upon encountering a never-used entry), but can
  6106.       corrupt the filesystem under DOS 2+ because subdirectories are
  6107.       removed without deleting the files they contain.
  6108.     currently-open files should not be deleted
  6109.     MS-DOS allows deletion of read-only files with an extended FCB, whereas
  6110.       Novell NetWare does not
  6111. SeeAlso: AH=41h,INT 2F/AX=1113h
  6112. --------D-2114-------------------------------
  6113. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  6114.     AH = 14h
  6115.     DS:DX -> opened FCB (see AH=0Fh)
  6116. Return: AL = status
  6117.         00h successful
  6118.         01h end of file (no data)
  6119.         02h segment wrap in DTA
  6120.         03h end of file, partial record read
  6121.     [DTA] = record read from file
  6122. Notes:    reads a record of the size specified in the FCB beginning at the
  6123.       current file position, then updates the current block and current
  6124.       record fields in the FCB
  6125.     if a partial record was read, it is zero-padded to the full size
  6126.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6127. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  6128. --------D-2115-------------------------------
  6129. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  6130.     AH = 15h
  6131.     DS:DX -> opened FCB (see AH=0Fh)
  6132.     [DTA] = record to write
  6133. Return: AL = status
  6134.         00h successful
  6135.         01h disk full
  6136.         02h segment wrap in DTA
  6137. Notes:    writes a record of the size specified in the FCB beginning at the
  6138.       current file position, then updates the current block and current
  6139.       record fields in the FCB
  6140.     if less than a full sector is written, the data is placed in a DOS
  6141.       buffer to be written out at a later time
  6142.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6143. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  6144. --------D-2116-------------------------------
  6145. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  6146.     AH = 16h
  6147.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  6148. Return: AL = status
  6149.         00h successful
  6150.         FFh directory full or file exists and is read-only or locked
  6151. Notes:    if file already exists, it is truncated to zero length
  6152.     if an extended FCB is used, the file is given the attribute in the
  6153.       FCB; this is how to create a volume label in the disk's root dir
  6154.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6155. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  6156. --------D-2117-------------------------------
  6157. INT 21 - DOS 1+ - RENAME FILE USING FCB
  6158.     AH = 17h
  6159.     DS:DX -> modified FCB (see also AH=0Fh)
  6160.         the old filename ('?' wildcards OK) is in the standard location
  6161.         while the new filename ('?' wildcards OK) is stored in the 11
  6162.         bytes beginning at offset 11h
  6163. Return: AL = status
  6164.         00h successfully renamed
  6165.         FFh no matching files,file is read-only, or new name already exists
  6166. Notes:    subdirectories may be renamed using an extended FCB with the
  6167.       appropriate attribute, as may volume labels
  6168.     DR-DOS checks password attached with AX=4303h before permitting rename
  6169. SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h
  6170. --------D-2118-------------------------------
  6171. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  6172.     AH = 18h
  6173. Return: AL = 00h
  6174. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  6175.       which is meaningless under MS-DOS
  6176. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
  6177. --------D-2119-------------------------------
  6178. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  6179.     AH = 19h
  6180. Return: AL = drive (00h = A:, 01h = B:, etc)
  6181. Note:    Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
  6182.       from a particular location every time it starts a command to
  6183.       determine when to issue an automatic EOJ
  6184. SeeAlso: AH=0Eh,AH=47h,AH=BBh
  6185. --------D-211A-------------------------------
  6186. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  6187.     AH = 1Ah
  6188.     DS:DX -> Disk Transfer Area (DTA)
  6189. Notes:    the DTA is set to PSP:0080h when a program is started
  6190.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6191. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  6192. --------D-211B-------------------------------
  6193. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  6194.     AH = 1Bh
  6195. Return: AL = sectors per cluster (allocation unit)
  6196.     CX = bytes per sector
  6197.     DX = total number of clusters
  6198.     DS:BX -> media ID byte (see below)
  6199. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  6200.       versions return a pointer to a copy of the FAT's ID byte
  6201. SeeAlso: AH=1Ch,AH=36h
  6202.  
  6203. Values for media ID byte:
  6204.  FFh    floppy, double-sided, 8 sectors per track (320K)
  6205.  FEh    floppy, single-sided, 8 sectors per track (160K)
  6206.  FDh    floppy, double-sided, 9 sectors per track (360K)
  6207.  FCh    floppy, single-sided, 9 sectors per track (180K)
  6208.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  6209.  F8h    hard disk
  6210.  F0h    other
  6211. --------D-211C-------------------------------
  6212. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  6213.     AH = 1Ch
  6214.     DL = drive (00h = default, 01h = A:, etc)
  6215. Return: AL = sectors per cluster (allocation unit), or FFh if invalid drive
  6216.     CX = bytes per sector
  6217.     DX = total number of clusters
  6218.     DS:BX -> media ID byte (see AH=1Bh)
  6219. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  6220.       versions return a pointer to a copy of the FAT's ID byte
  6221.     on a DBLSPACE drive, the total number of clusters is based on the
  6222.       estimated compression ratio
  6223. SeeAlso: AH=1Bh,AH=36h
  6224. --------D-211D-------------------------------
  6225. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  6226.     AH = 1Dh
  6227. Return: AL = 00h
  6228. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  6229.       drives", which is meaningless under MS-DOS
  6230. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  6231. --------D-211E-------------------------------
  6232. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  6233.     AH = 1Eh
  6234. Return: AL = 00h
  6235. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  6236.      meaningless under MS-DOS 1.x
  6237. SeeAlso: AH=18h,AH=1Dh,AH=20h
  6238. --------D-211F-------------------------------
  6239. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  6240.     AH = 1Fh
  6241. Return: AL = status
  6242.         00h successful
  6243.         DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x,
  6244.             AH=32h for DOS 2+)
  6245.         FFh invalid drive
  6246. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  6247.       only the DOS 4+ version of the DPB has been documented
  6248. SeeAlso: AH=32h
  6249.  
  6250. Format of DOS 1.1 and MS-DOS 1.25 drive parameter block:
  6251. Offset    Size    Description
  6252.  00h    BYTE    sequential device ID
  6253.  01h    BYTE    logical drive number (0=A:)
  6254.  02h    WORD    bytes per sector
  6255.  04h    BYTE    highest sector number within a cluster
  6256.  05h    BYTE    shift count to convert clusters into sectors
  6257.  06h    WORD    starting sector number of first FAT
  6258.  08h    BYTE    number of copies of FAT
  6259.  09h    WORD    number of directory entries
  6260.  0Bh    WORD    number of first data sector
  6261.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  6262.  0Fh    BYTE    sectors per FAT
  6263.  10h    WORD    starting sector of directory
  6264.  12h    WORD    address of allocation table
  6265. Note:    the DOS 1.0 table is the same except that the first and last fields
  6266.       are missing; see INT 21/AH=32h for the DOS 2+ version
  6267. --------D-2120-------------------------------
  6268. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  6269.     AH = 20h
  6270. Return: AL = 00h
  6271. Note:    corresponds to the CP/M BDOS function "get/set default user
  6272.       (sublibrary) number", which is meaningless under MS-DOS
  6273. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  6274. --------D-2121-------------------------------
  6275. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  6276.     AH = 21h
  6277.     DS:DX -> opened FCB (see AH=0Fh)
  6278. Return: AL = status
  6279.         00h successful
  6280.         01h end of file, no data read
  6281.         02h segment wrap in DTA, no data read
  6282.         03h end of file, partial record read
  6283.     [DTA] = record read from file
  6284. Notes:    the record is read from the current file position as specified by the
  6285.       random record and record size fields of the FCB
  6286.     the file position is not updated after reading the record
  6287.     if a partial record is read, it is zero-padded to the full size
  6288.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6289. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  6290. --------D-2122-------------------------------
  6291. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  6292.     AH = 22h
  6293.     DS:DX -> opened FCB (see AH=0Fh)
  6294.     [DTA] = record to write
  6295. Return: AL = status
  6296.         00h successful
  6297.         01h disk full
  6298.         02h segment wrap in DTA
  6299. Notes:    the record is written to the current file position as specified by the
  6300.       random record and record size fields of the FCB
  6301.     the file position is not updated after writing the record
  6302.     if the record is located beyond the end of the file, the file is
  6303.       extended but the intervening data remains uninitialized
  6304.     if the record only partially fills a disk sector, it is copied to a
  6305.       DOS disk buffer to be written out to disk at a later time
  6306.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6307. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  6308. --------D-2123-------------------------------
  6309. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  6310.     AH = 23h
  6311.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  6312. Return: AL = status
  6313.         00h successful (matching file found)
  6314.         FCB random record field filled with size in records, rounded up
  6315.         to next full record
  6316.         FFh failed (no matching file found)
  6317. Notes:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6318.     MS-DOS returns nonsense if the FCB record number field is set to a very
  6319.       large positive number, and status FFh if negative; DR-DOS returns the
  6320.       correct file size in both cases
  6321. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  6322. SeeAlso: AH=42h
  6323. --------D-2124-------------------------------
  6324. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  6325.     AH = 24h
  6326.     DS:DX -> opened FCB (see AH=0Fh)
  6327. Notes:    computes the random record number corresponding to the current record
  6328.       number and record size, then stores the result in the FCB
  6329.     normally used when switching from sequential to random access
  6330.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6331. SeeAlso: AH=21h,AH=27h,AH=42h
  6332. --------D-2125-------------------------------
  6333. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  6334.     AH = 25h
  6335.     AL = interrupt number
  6336.     DS:DX -> new interrupt handler
  6337. Notes:    this function is preferred over direct modification of the interrupt
  6338.       vector table
  6339.     some DOS extenders place an API on this function, as it is not
  6340.       directly meaningful in protected mode
  6341.     under DR-DOS 5.0+, this function does not use any of the DOS-internal
  6342.       stacks and may thus be called at any time
  6343.     Novell NetWare (except the new DOS Requester) monitors the offset of
  6344.       any INT 24 set, and if equal to the value at startup, substitutes
  6345.       its own handler to allow handling of network errors; this introduces
  6346.       the potential bug that any program whose INT 24 handler offset
  6347.       happens to be the same as COMMAND.COM's will not have its INT 24
  6348.       handler installed
  6349. SeeAlso: AX=2501h,AH=35h
  6350. --------E-212501-----------------------------
  6351. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
  6352.     AX = 2501h
  6353.     SS = application's original SS or DS (FlashTek X-32VM)
  6354. Return: CF clear if successful
  6355.     CF set on error
  6356.         caller is operating on X-32 stack (FlashTek X-32VM)
  6357. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  6358.       system calls.     Only available when directly using 386/DOS-Extender or
  6359.       a compatible DOS extender, or when using a product that was created
  6360.       using 386-DOS/Extender or a compatible
  6361.     this function is also supported by FlashTek X-32VM
  6362. SeeAlso: AH=30h"Phar Lap"
  6363. --------E-212502-----------------------------
  6364. INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  6365.     AX = 2502h
  6366.     CL = interrupt number
  6367. Return: CF clear
  6368.     ES:EBX = CS:EIP of protected-mode interrupt handler
  6369. Note:    this function is also supported by FlashTek X-32VM
  6370. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  6371. --------E-212503-----------------------------
  6372. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  6373.     AX = 2503h
  6374.     CL = interrupt number
  6375. Return: CF clear
  6376.     EBX = CS:IP of real-mode interrupt handler
  6377. Note:    this function is also supported by FlashTek X-32VM
  6378. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  6379. --------E-212504-----------------------------
  6380. INT 21 P - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  6381.     AX = 2504h
  6382.     CL = interrupt number
  6383.     DS:EDX = CS:EIP of protected-mode interrupt handler
  6384. Return: CF clear
  6385. Note:    this function is also supported by FlashTek X-32VM
  6386. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  6387. --------E-212505-----------------------------
  6388. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  6389.     AX = 2505h
  6390.     CL = interrupt number
  6391.     EBX = CS:IP of real-mode interrupt handler
  6392. Return: CF clear
  6393. Note:    this function is also supported by FlashTek X-32VM
  6394. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  6395. --------E-212506-----------------------------
  6396. INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. MODE
  6397.     AX = 2506h
  6398.     CL = interrupt number
  6399.     DS:EDX = CS:EIP of protected-mode interrupt handler
  6400. Return: CF clear
  6401. Notes:    this function modifies both the real-mode low-memory interrupt
  6402.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  6403.     interrupts occurring in real mode are resignaled in protected mode
  6404.     this function is also supported by FlashTek X-32VM
  6405. --------E-212507-----------------------------
  6406. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  6407.     AX = 2507h
  6408.     CL = interrupt number
  6409.     DS:EDX = CS:EIP of protected-mode interrupt handler
  6410.     EBX = CS:IP of real-mode interrupt handler
  6411. Return: CF clear
  6412. Notes:    interrupts are disabled until both vectors have been modified
  6413.     this function is also supported by FlashTek X-32VM
  6414. SeeAlso: AX=2504h,AX=2505h
  6415. --------E-212508-----------------------------
  6416. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  6417.     AX = 2508h
  6418.     BX = segment selector
  6419. Return: CF clear if successful
  6420.         ECX = linear base address of segment
  6421.     CF set if invalid segment selector
  6422. Note:    this function is also supported by FlashTek X-32VM
  6423. SeeAlso: AX=2509h
  6424. --------E-212509-----------------------------
  6425. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  6426.     AX = 2509h
  6427.     EBX = linear address to convert
  6428. Return: CF clear if successful
  6429.         ECX = physical address (carry flag clear)
  6430.     CF set if linear address not mapped in page tables
  6431. SeeAlso: AX=2508h
  6432. --------E-212509-----------------------------
  6433. INT 21 P - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  6434.     AX = 2509h
  6435. Return: CF clear
  6436.     EAX high word = default DS
  6437.     AX = alias for 16-bit data segment
  6438.     BX = real mode code segment
  6439.     EDX high word = selector covering full 4GB address space
  6440.     DX = default SS
  6441.     ESI high word = PSP selector
  6442.     SI = environment selector
  6443. --------E-21250A-----------------------------
  6444. INT 21 P - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  6445.     AX = 250Ah
  6446.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  6447.          to modify
  6448.     EBX = physical base address of memory to map (multiple of 4K)
  6449.     ECX = number of physical 4K pages to map
  6450. Return: CF clear if successful
  6451.         EAX = 32-bit offset in segment of mapped memory
  6452.     CF set on error
  6453.         EAX = error code
  6454.         08h insufficient memory to create page tables
  6455.         09h invalid segment selector
  6456. SeeAlso: INT 31/AX=0800h
  6457. --------E-21250C-----------------------------
  6458. INT 21 P - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  6459.     AX = 250Ch
  6460. Return: CF clear
  6461.     AL = base interrupt vector for IRQ0-IRQ7
  6462.     AH = base interrupt vector for IRQ8-IRQ15
  6463.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  6464. Note:    this function is also supported by FlashTek X-32VM
  6465. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  6466. --------E-21250D-----------------------------
  6467. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  6468.     AX = 250Dh
  6469. Return: CF clear
  6470.     EAX = CS:IP of real-mode callback procedure that will call through
  6471.         from real mode to a protected-mode routine
  6472.     EBX = 32-bit real-mode address of intermode call data buffer
  6473.     ECX = size in bytes of intermode call data buffer
  6474.     ES:EDX = protected-mode address of intermode call data buffer
  6475. Notes:    this function is also supported by FlashTek X-32VM
  6476.     X-32VM guarantees the intermode buffer to be at least 4 KB
  6477. SeeAlso: AX=250Eh
  6478.  
  6479. Call real-mode callback with:
  6480.     STACK:    DWORD    offset to protected-mode code
  6481.         WORD    placeholder for protected-mode CS
  6482.         DWORD    pointer to selector structure (see below)
  6483.             or 0000h:0000h for defaults
  6484.         var    parameters for protected-mode procedure
  6485. Return: via FAR return
  6486.  
  6487. Format of selector structure:
  6488. Offset    Size    Description
  6489.  00h    WORD    protected-mode GS selector
  6490.  02h    WORD    protected-mode FS selector
  6491.  04h    WORD    protected-mode ES selector
  6492.  06h    WORD    protected-mode DS selector
  6493. --------E-21250E-----------------------------
  6494. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  6495.     AX = 250Eh
  6496.     EBX = CS:IP of real-mode procedure to call
  6497.     ECX = number of two-byte words to copy from protected-mode stack
  6498.           to real-mode stack
  6499. Return: CF clear if successful
  6500.         all segment registers unchanged
  6501.         all general registers contain values set by real-mode procedure
  6502.         all other flags set as they were left by real-mode procedure
  6503.         stack unchanged
  6504.     CF set on error
  6505.         EAX = error code
  6506.         01h not enough real-mode stack space
  6507. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  6508.       call will fail if ECX > 0000003Fh
  6509. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  6510. --------E-21250F-----------------------------
  6511. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  6512.     AX = 250Fh
  6513.     ES:EBX = 48-bit protected-mode address to convert
  6514.     ECX = 00000000h or length of data in bytes
  6515. Return: CF clear if successful (address < 1MB and contiguous)
  6516.         ECX = 32-bit real-mode MS-DOS address
  6517.     CF set on error (address >= 1MB or not contiguous)
  6518.         ECX = linear address
  6519. Note:    this function is also supported by FlashTek X-32VM
  6520. SeeAlso: AX=2510h
  6521. --------E-212510-----------------------------
  6522. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  6523.     AX = 2510h
  6524.     EBX = CS:IP of real-mode procedure to call
  6525.     ECX = number of two-byte words to copy to protected-mode stack to
  6526.           real-mode stack
  6527.     DS:EDX -> pointer to parameter block (see below)
  6528. Return: CF clear if successful
  6529.         all segment registers unchanged,
  6530.         EDX unchanged
  6531.         all other general registers contain values set by real-mode proc
  6532.         all other flags are set as they were left by real-mode procedure
  6533.         real-mode register values are returned in the parameter block
  6534.     CF set on error
  6535.         EAX = error code
  6536.         01h not enough real-mode stack space
  6537. Note:    unlike most of the preceding 25xxh functions, this one is not
  6538.       supported by FlashTek X-32VM
  6539. SeeAlso: AX=250Eh,AX=250Fh
  6540.  
  6541. Format of parameter block:
  6542. Offset    Size    Description
  6543.  00h    WORD    real-mode DS value
  6544.  02h    WORD    real-mode ES value
  6545.  04h    WORD    real-mode FS value
  6546.  06h    WORD    real-mode GS value
  6547.  08h    DWORD    real-mode EAX value
  6548.  0Ch    DWORD    real-mode EBX value
  6549.  10h    DWORD    real-mode ECX value
  6550.  14h    DWORD    real-mode EDX value
  6551. --------E-212511-----------------------------
  6552. INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  6553.     AX = 2511h
  6554.     DS:EDX -> parameter block (see below)
  6555. Return: all segment registers unchanged
  6556.     EDX unchanged
  6557.     all other registers contain values set by the real-mode int handler
  6558.     the flags are set as they were left by the real-mode interrupt handler
  6559.     real-mode register values are returned in the parameter block
  6560. Note:    this function is also supported by FlashTek X-32VM
  6561. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  6562.  
  6563. Format of parameter block:
  6564. Offset    Size    Description
  6565.  00h    WORD    interrupt number
  6566.  02h    WORD    real-mode DS value
  6567.  04h    WORD    real-mode ES value
  6568.  06h    WORD    real-mode FS value
  6569.  08h    WORD    real-mode GS value
  6570.  0Ah    DWORD    real-mode EAX value
  6571.  0Eh    DWORD    real-mode EDX value
  6572. Note: all other real-mode values set from protected-mode registers
  6573. --------E-212512-----------------------------
  6574. INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  6575.     AX = 2512h
  6576.     DS:EDX -> pointer to ASCIZ program name
  6577.     ES:EBX -> pointer to parameter block (see below)
  6578.     ECX = size in bytes of LDT buffer
  6579. Return: CF clear if successful
  6580.         EAX = number of segment descriptors in LDT
  6581.     CF set on error
  6582.         EAX = error code
  6583.         02h file not found or path invalid
  6584.         05h access denied
  6585.         08h insufficient memory
  6586.         0Ah environment invalid
  6587.         0Bh invalid file format
  6588.         80h LDT too small
  6589. SeeAlso: AX=2517h
  6590.  
  6591. Format of parameter block:
  6592. Offset    Size    Description
  6593. Input:
  6594.  00h    DWORD    32-bit offset of environment string
  6595.  04h    WORD    segment of environment string
  6596.  06h    DWORD    32-bit offset of command-tail string
  6597.  0Ah    WORD    segment of command-tail string
  6598.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  6599.  10h    WORD    segment of LDT buffer
  6600. Output:
  6601.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  6602.  14h    WORD    real/protected mode flag
  6603.         0000h  real mode
  6604.         0001h  protected mode
  6605.  16h    DWORD    initial EIP value
  6606.  1Ah    WORD    initial CS value
  6607.  1Ch    DWORD    initial ESP value
  6608.  20h    WORD    initial SS value
  6609.  22h    WORD    initial DS value
  6610.  24h    WORD    initial ES value
  6611.  26h    WORD    initial FS value
  6612.  28h    WORD    initial GS value
  6613. --------E-212513-----------------------------
  6614. INT 21 P - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  6615.     AX = 2513h
  6616.     BX = segment selector of descriptor in GDT or LDT
  6617.     CL = access-rights byte for alias descriptor
  6618.     CH = use-type bit (USE16 or USE32) for alias descriptor
  6619. Return: CF clear if successful
  6620.         AX = segment selector for created alias
  6621.     CF set on error
  6622.         EAX = error code
  6623.         08h insufficient memory (can't grow LDT)
  6624.         09h invalid segment selector in BX
  6625. --------E-212514-----------------------------
  6626. INT 21 P - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  6627.     AX = 2514h
  6628.     BX = segment selector of descriptor in GDT or LDT
  6629.     CL = new access-rights byte
  6630.     CH = new use-type bit (USE16 or USE32)
  6631. Return: CF clear if successful
  6632.     CF set on error
  6633.         EAX = error code
  6634.         09h invalid selector in BX
  6635. SeeAlso: AX=2515h,INT 31/AX=0009h
  6636. --------E-212515-----------------------------
  6637. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  6638.     AX = 2515h
  6639.     BX = segment selector of descriptor in GDT or LDT
  6640. Return: CF clear if successful
  6641.         CL = access-rights byte for segment
  6642.         CH = use-type bit (USE16 or USE32)
  6643.     ECX<16-31> destroyed
  6644.     CF set on error
  6645.         EAX = error code
  6646.         09h invalid segment selector in BX
  6647. SeeAlso: AX=2514h
  6648. --------E-212516-----------------------------
  6649. INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT
  6650.     AX = 2516h
  6651. Return: CF clear
  6652. Note:    this function must be called from Ring 0 or the CS descriptor is freed
  6653. --------E-212517-----------------------------
  6654. INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER
  6655.     AX = 2517h
  6656. Return: CF clear
  6657.     ES:EBX -> data buffer (protected mode address)
  6658.     ECX -> data buffer (real mode address)
  6659.     EDX = size of data buffer in bytes
  6660. Note:    the data buffer's address changes after calls to AX=2512h and AX=252Ah
  6661. SeeAlso: AX=2512h,AX=252Ah,AX=2530h
  6662. --------E-212518-----------------------------
  6663. INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS
  6664.     AX = 2518h
  6665.     ES:EBX -> function to call when a segment is moved
  6666. Return: CF clear
  6667.     ES:EBX -> previous handler
  6668. --------E-212519-----------------------------
  6669. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  6670.     AX = 2519h
  6671. Return: CF clear
  6672.     EAX = error code
  6673.         0000h  no error
  6674.         0001h  out of physical memory
  6675.         0002h  out of swap space (unable to grow swap file)
  6676.         0003h  out of LDT entries and unable to grow LDT
  6677.         0004h  unable to change extended memory allocation mark
  6678.         FFFFFFFFh    paging disabled
  6679. Note:    VMM is the Virtual Memory Manager option
  6680. --------E-21251A-----------------------------
  6681. INT 21 P - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  6682.     AX = 251Ah
  6683.     EDX = number of 4k pages to lock
  6684.     if BL = 00h
  6685.         ECX = linear address of first page to lock
  6686.     if BL = 01h
  6687.         ES:ECX -> pointer to first page to lock
  6688. Return: CF clear if successful
  6689.     CF set on error
  6690.         EAX = error code
  6691.         08h insufficient memory
  6692.         09h invalid address range
  6693. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  6694. --------E-21251B-----------------------------
  6695. INT 21 P - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  6696.     AX = 251Bh
  6697.     EDX = number of pages to unlock
  6698.     if BL = 00h
  6699.         ECX = linear address of first page to unlock
  6700.     if BL = 01h
  6701.         ES:ECX -> pointer to first page to unlock
  6702. Return: CF clear if successful
  6703.     CF set on error
  6704.         EAX = error code
  6705.         09h invalid address range
  6706. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  6707. --------E-21251C-----------------------------
  6708. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES
  6709.     AX = 251Ch
  6710.     BH = preservation flag (00h preserve contents, 01h discard contents)
  6711.     EDX = number of pages to free
  6712.     BL = address type
  6713.         00h linear address
  6714.         ECX = linear address of first page to be freed
  6715.         01h pointer
  6716.         ES:ECX -> first page to be freed
  6717. Return: CF clear if successful
  6718.     CF set on error
  6719.         EAX = error code
  6720.         08h memory error, swap space full, no VMM or DPMI
  6721.         09h invalid address
  6722. --------E-21251D-----------------------------
  6723. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY
  6724.     AX = 251Dh
  6725.     BL = address type
  6726.         00h linear address
  6727.         ECX = linear address of page table entry to read
  6728.         01h pointer
  6729.         ES:ECX -> page table entry to read
  6730. Return: CF clear if successful
  6731.         EAX = contents of page table entry
  6732.     CF set on error
  6733.         EAX = error code
  6734.         09h invalid address or NOPAGE option set
  6735.         78h invalid under DPMI
  6736. Note:    this function is obsolete; use AX=252Bh/BH=09h instead
  6737. SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h
  6738. --------E-21251E-----------------------------
  6739. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY
  6740.     AX = 251Eh
  6741.     BL = address type
  6742.         00h linear address
  6743.         ECX = linear address of page table entry to read
  6744.         01h pointer
  6745.         ES:ECX -> page table entry to read
  6746.     EDX = new value for page table entry
  6747. Return: CF clear if successful
  6748.     CF set on error
  6749.         EAX = error code
  6750.         09h invalid address or NOPAGE option set
  6751.         82h not compatible with DPMI
  6752. Note:    this call is obsolete; use AX=252Bh/BH=0Ah instead
  6753. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h
  6754. --------E-21251F-----------------------------
  6755. INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  6756.     AX = 251Fh
  6757.     BL = address type
  6758.         00h linear address
  6759.         ECX = linear address of first page table entry
  6760.         EDX = linear address of second page table entry
  6761.         01h pointer
  6762.         ES:ECX -> first page table entry
  6763.         ES:EDX -> second page table entry
  6764. Return: CF clear if successful
  6765.     CF set on error
  6766.         EAX = error code
  6767.         09h invalid address or NOPAGE option set
  6768.         82h not compatible with DPMI
  6769. SeeAlso: AX=251Dh,AX=251Eh
  6770. --------E-212520-----------------------------
  6771. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  6772.     AX = 2520h
  6773.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  6774.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  6775. Return: carry flag clear
  6776.  
  6777. Format of VM stats buffer:
  6778. Offset    Size    Description
  6779.  00h    DWORD    VM status
  6780.         0001h VM subsystem is present
  6781.         0000h VM not present
  6782.  04h    DWORD    "nconvpg" number of conventional memory pages available
  6783.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  6784.  0Ch    DWORD    "nextpg" total number of extended memory pages
  6785.  10h    DWORD    "extlim" extender memory pages limit
  6786.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  6787.  18h    DWORD    "alockpg" number of locked pages owned by application
  6788.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  6789.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  6790.  24h    DWORD    linear address of beginning of application address space
  6791.  28h    DWORD    linear address of end of application address space
  6792.  2Ch    DWORD    number of seconds since last time VM stats were reset
  6793.  30h    DWORD    number of page faults since last time
  6794.  34h    DWORD    number of pages written to swap file since last time
  6795.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  6796.  3Ch    DWORD    number of virtual pages allocated to the application
  6797.  40h    DWORD    size in pages of swap file
  6798.  44h    DWORD    number of system pages allocated with EMS calls
  6799.  48h    DWORD    minimum number of conventional memory pages
  6800.  4Ch    DWORD    maximum size in pages to which swap file can be increased
  6801.  50h    DWORD    "vmflags"
  6802.         bit 0 = 1 if page fault in progress
  6803. ---v4.0+ ---
  6804.  54h    DWORD    number of physical pages guaranteed to be free
  6805.  58h    DWORD    number of free physical pages currently available
  6806.  5Ch    DWORD    size in pages of largest free block of memory (including disk
  6807.           swap space)
  6808.  60h    DWORD    reserved
  6809. --------E-212521-----------------------------
  6810. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM USAGE
  6811.     AX = 2521h
  6812.     EBX = max 4k pages of physical extended memory which program may use
  6813. Return: CF clear if successful
  6814.        EBX = maximum limit in pages
  6815.        ECX = minimum limit in pages
  6816.     CF set on error
  6817.         EAX = error code
  6818.         08h insufficient memory or -nopage switch used
  6819. SeeAlso: AX=2522h
  6820. --------E-212522-----------------------------
  6821. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
  6822.     AX = 2522h
  6823.     ES:EBX -> alternate handler for page faults
  6824. Return: CF clear
  6825.     ES:EBX -> previous page-fault handler
  6826. SeeAlso: AX=2523h
  6827. --------E-212523-----------------------------
  6828. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  6829.     AX = 2523h
  6830.     ???
  6831. Return: ???
  6832. Note:    this function takes a DWORD pointer and a DWORD pointer to a DWORD
  6833.       pointer as arguments
  6834. SeeAlso: AX=2522h
  6835. --------E-212524-----------------------------
  6836. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS
  6837.     AX = 2524h
  6838.     ???
  6839. Return: ???
  6840. Note:    this function takes three DWORD pointers and three DWORD pointers to
  6841.       DWORD pointers as arguments
  6842. --------E-212525-----------------------------
  6843. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L MEM USAGE
  6844.     AX = 2525h
  6845.     EBX = limit in 4k pages of physical conventional memory which program
  6846.           may use
  6847. Return: CF clear if successful
  6848.         EBX = maximum limit in pages
  6849.         ECX = minimum limit in pages
  6850.     CF set on error
  6851.         EAX = error code
  6852.         08h insufficient memory or -nopage switch used
  6853. SeeAlso: AX=2521h
  6854. --------E-212526-----------------------------
  6855. INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  6856.     AX = 2526h
  6857.     ???
  6858. Return: ???
  6859. Notes:    details are not yet available
  6860.     this function takes a pointer to the configuration buffer (see below)
  6861.       and a poitner to a BYTE as arguments
  6862.  
  6863. Format of configuration buffer:
  6864. Offset    Size    Description
  6865.  00h    DWORD    flags 1 (see below)
  6866.  04h    DWORD    flags 2 (unused through v5.0)
  6867.  08h    DWORD    flags 3 (unused through v5.0)
  6868.  0Ch    DWORD    386|DOS-Extender major version
  6869.  10h    DWORD    386|DOS-Extender minor version
  6870.  14h    DWORD    first letter of text after minor version number in version str
  6871.  18h    DWORD    beta flag (00h normal release, 01h beta release)
  6872.  1Ch    DWORD    processor (3 = 386, 4 = 486)
  6873.  20h    DWORD    coprocessor (4 = none, 6 = 287, 7 = 387/486)
  6874.  24h    DWORD    Weitek coprocessor flag (0 = none, 1 = present)
  6875.  28h    DWORD    machine type (0 = IBM PC compatible, 1 = NEC 9800 series)
  6876.  2Ch    DWORD    machine class
  6877.         IBM: bus type (0=ISA, 1=MCA, 2=XT, 3=EISA)
  6878.         NEC: 0=normal mode, 1=high-res mode
  6879.  30h    DWORD    VCPI flag (0 = none, 1 = present)
  6880.  34h    DWORD    -WEITEK/-1167 switch (0 = AUTO, 1 = ON, 2 = OFF)
  6881.  38h    DWORD    -MINREAL setting
  6882.  3Ch    DWORD    -MAXREAL setting
  6883.  40h    DWORD    -MINIBUF setting
  6884.  44h    DWORD    -MAXIBUF setting
  6885.  48h    DWORD    size in bytes of DOS call data buffer
  6886.  4Ch    DWORD    number of interrupt stacks (-NISTACK)
  6887.  50h    DWORD    interrupt stack size (-ISTKSIZE)
  6888.  54h    DWORD    -REALBREAK setting
  6889.  58h    DWORD    -CALLBUFS
  6890.  5Ch    DWORD    -HWIVEC
  6891.  60h    DWORD    -PRIVEC
  6892.  64h    DWORD    -INTMAP
  6893.  68h    DWORD    -PRIMAP
  6894.  6Ch    DWORD    VCPI: master 8259 interrupt vector base (IRQ0 mapping)
  6895.  70h    DWORD    VCPI: slave 8259 interrupt vector base (IRQ8 mapping)
  6896.  74h    DWORD    BIOS print screen interrupt vector (0 if NEC)
  6897.  78h    DWORD    -EXTLOW setting
  6898.  7Ch    DWORD    -EXTHIGH setting
  6899.  80h    DWORD    lowest physical extended-memory address allocatable
  6900.  84h    DWORD    highest physical extended-memory address allocatable + 1
  6901.  88h    DWORD    special memory's physical base address (00000000h if none)
  6902.  8Ch    DWORD    special memory size in bytes (00000000h if none)
  6903.  90h    DWORD    -MAXVCPIMEM setting
  6904.  94h    DWORD    -VSCAN
  6905.  98h    DWORD    -SWAPCHK (0 = OFF, 1 = ON, 2 = FORCE, 3 = MAX)
  6906.  9Ch    DWORD    -CODESIZE setting
  6907.  A0h    DWORD    minimum swap file size (-MINSWFSIZE)
  6908.  A4h    DWORD    maximum swap fiel size (-MAXSWFSIZE)
  6909.  A8h    DWORD    page replacement policy (0 = LFU, 1 = NUR)
  6910.  ACh    DWORD    number of GDT entries (-NGDTENT)
  6911.  B0h    DWORD    number of LDT entries (-NLDTENT)
  6912.  B4h    DWORD    program's privilege level (0-3)
  6913. ---386|DOS-Extender v3.0+ ---
  6914.  B8h    DWORD    -LOCKSTACK setting
  6915.  BCh    DWORD    -MAXEXTMEM
  6916.  C0h    DWORD    -MAXXMSMEM
  6917.  C4h    DWORD    -MAXPGMMEM
  6918.  C8h    DWORD    -DATATHRESHOLD
  6919.  CCh    DWORD    virtual memory manager flag (0 = not present, 1 = present)
  6920.  D0h    DWORD    Cyrix coprocessor flag (0 = no Cyrix EMC387, 1 = present)
  6921.  D4h    DWORD    -CYRIX setting (0 = AUTO, 1 = ON, 2 = OFF)
  6922.  D8h    DWORD    DPMI flag (0 = not present, 1 = present)
  6923.  DCh    DWORD    DPMI major version
  6924.  E0h    DWORD    DPMI minor version
  6925.  E4h    DWORD    DPMI capabilities flags
  6926.         bit 0: paging supported
  6927.         bit 1: physical device mapping
  6928.         bit 2: conventional memory mapping
  6929.         bit 3: exceptions restartable
  6930.  E8h    DWORD    VCPI major version
  6931.  ECh    DWORD    VCPI minor version
  6932.  F0h    WORD    VCPI: IRQ0-7 physical base interrupt vector
  6933.  F2h    WORD    VCPI: IRQ8-15 physical base interrupt vector
  6934.  F4h    DWORD    XMS flag (0 = none, 1 = present)
  6935.  F8h    DWORD    XMS major version
  6936.  FCh    DWORD    XMS minor version
  6937. 100h    WORD    application's CS selector
  6938. 102h    WORD    application's DS selector
  6939. 104h    WORD    application's PSP selector
  6940. 106h    WORD    application's environment selector
  6941. 108h    WORD    selector mapping entire first megabyte
  6942. 10Ah    WORD    selector mapping text video memory
  6943. 10Ch    WORD    selector mapping video memory (text for IBM, graphics for NEC)
  6944. 10Eh    WORD    selector mapping Weitek address space, 0000h if not present
  6945. 110h    WORD    selector mapping Cyrix EMC387 address space, 0000h if none
  6946. 112h    WORD    reserved (0)
  6947. 114h    DWORD    real-mode FAR entry point to call to switch to protected mode
  6948.           with no saved context
  6949. 118h    DWORD    size of LDT in bytes
  6950. ---386|DOS-Extender v5.0+ ---
  6951. 11Ch    DWORD    Windows flag (0 = not present, 1 = Windows present)
  6952. 120h    DWORD    Windows major version
  6953. 124h    DWORD    Windows minor version
  6954. 128h    DWORD    Windows mode (0 = real/standard, 1 = enhanced)
  6955. 12Ch    DWORD    OS/2 flag (0 = not present, 1 = OS/2 present)
  6956. 130h    DWORD    OS/2 major version
  6957. 134h    DWORD    OS/2 minor version
  6958. 138h 50 DWORDs    reserved (0)
  6959.  
  6960. Bitfields for flags 1:
  6961.  bit 0    -NOPAGE specified
  6962.  bit 1    -A20 specified
  6963.  bit 2    -VDISK specified
  6964.  bit 3    -XT specified
  6965.  bit 4    -AT specified
  6966.  bit 5    -MCA specified
  6967.  bit 6    -EISA specified
  6968.  bit 7    -NORMRES specified (NEC only)
  6969.  bit 8    -HIGHRES specified (NEC only)
  6970.  bit 9    set if -SWFGROW1ST, clear if -NOSWFGROW1ST
  6971.  bit 10    -NOVM specified
  6972.  bit 11    -SAVEREGS specified
  6973.  bit 12    unused (clear)
  6974.  bit 13    -NOVCPI specified
  6975.  bit 14    -NOMUL specified
  6976.  bit 15    -NOBMCHK specified
  6977.  bit 16    -NOSPCLMEM or -NOBIM
  6978.  bit 17    -NOPGEXP specified
  6979.  bit 18    -SWAPDEFDISK specified
  6980. ---v3.0+ ---
  6981.  bit 19    -SAVEINTS specified
  6982.  bit 20    -NOLOAD specified
  6983.  bit 21    -PAGELOG specified
  6984.  bit 22    -OPENDENY specified
  6985.  bit 23    -ERRATA17 specified
  6986. ---v4.1+ ---
  6987.  bit 24    -NESTDPMI specified
  6988.  bit 25    -NONESTDPMI specified
  6989.  bit 26    -NODPMI specified
  6990.  bit 27    -NOPCDWEITEK specified
  6991. ---v4.2+ ---
  6992.  bit 28    -WININT21 specified
  6993. --------E-212527-----------------------------
  6994. INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS
  6995.     AX = 2527h
  6996.     EBX = new status (00h disabled, 01h enabled)
  6997. Return: CF clear
  6998.     EBX = previous state save flag
  6999. SeeAlso: AX=2528h
  7000. --------E-212528-----------------------------
  7001. INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT
  7002.     AX = 2528h
  7003.     DS:EBX -> buffer for registers (see below)
  7004. Return: CF clear if successful
  7005.         DS:EBX buffer filled
  7006.     CF set on error
  7007.         EAX = error code
  7008.         83h interrupt state save not enabled
  7009.         84h no active interrupt
  7010. SeeAlso: AX=2527h
  7011.  
  7012. Format of buffer for registers:
  7013. Offset    Size    Description
  7014.  00h  8 BYTEs    unused
  7015.  08h  4    DWORDs    EAX,EBX,ECX,EDX
  7016.  18h  4 DWORDs    ESI,EDI,EBP,ESP
  7017.  28h  6 WORDs    CS,DS,SS,ES,FS,GS
  7018.  34h    DWORD    EIP
  7019.  38h    DWORD    EFLAGS
  7020. --------E-212529-----------------------------
  7021. INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE
  7022.     AX = 2529h
  7023.     ???
  7024. Return: ES:EBX -> parameter block
  7025.     ???
  7026. Note:    details not available at this time
  7027. SeeAlso: AX=252Ah
  7028.  
  7029. Format of parameter block:
  7030. Offset    Size    Description
  7031.  00h    DWORD    initial EIP
  7032.  04h    WORD    initial CS
  7033.  06h    DWORD    initial ESP
  7034.  0Ah    WORD    initial SS
  7035.  0Ch  4 WORDs    initial DS, ES, FS, GS
  7036.  14h    DWORD    minimum size in bytes of program segment
  7037.  18h    DWORD    bytes of additional memory allocated
  7038.  1Ch    DWORD    flags
  7039.         bit 0: child linked with -UNPRIVILEGED
  7040.         ---v6.0+ ---
  7041.         bit 1: child is PE file instead of .EXP
  7042.         bit 2: loaded file is a DLL
  7043.         bits 3-31 reserved
  7044. ---v6.0+ ---
  7045.  20h    DWORD    module handles (PE files only)
  7046.  24h  7 DWORDs    reserved (0)
  7047. --------E-21252A-----------------------------
  7048. INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG
  7049.     AX = 252Ah
  7050.     DS:EDX -> ASCIZ program name
  7051.     ES:EBX -> parameter block (see AX=2512h)
  7052.     ECX = size of LDT buffer in bytes
  7053.     ESI = bit flags
  7054.         bit 0: allow demand paging rather than loading entire program
  7055.         bit 1: demand page from swap file rather than from .EXP
  7056. Return: CF clear if successful
  7057.         EAX = VMM handle or FFFFFFFFh if none
  7058.         ECX = number of descriptors in LDT buffer
  7059.     CF set on error
  7060.         EAX = error code
  7061.         02h file error
  7062.             EBX = file error code (see below)
  7063.             ECX = DOS error code if EBX=1,2,3, or 8
  7064.         08h insufficient memory
  7065.             EBX = memory error code (see below)
  7066.         80h LDT buffer too small
  7067.         87h called twice without intervening call to AX=2531h
  7068. SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h
  7069.  
  7070. Values for file error code:
  7071.  01h    DOS open error
  7072.  02h    DOS seek error
  7073.  03h    DOS read error
  7074.  04h    not an .EXP or .REX file
  7075.  05h    invalid file format
  7076.  06h    -OFFSET is not a multiple of 64K
  7077.  07h    -NOPAGE incompatible with -REALBREAK/-OFFSET
  7078.  08h    DOS error loading .EXE file
  7079.  
  7080. Values for memory error code:
  7081.  01h    out of physical memory
  7082.  02h    out of swap space
  7083.  04h    unable to change extended memory allocation
  7084.  05h    -MAXPGMMEM exceeded
  7085.  06h    insufficient low memory to REALBREAK value
  7086.  07h    insufficient low memory for PSP and environment
  7087. --------E-21252BBL00-------------------------
  7088. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE UNMAPPED PAGES
  7089.     AX = 252Bh
  7090.     BL = 00h
  7091.     ???
  7092. Return: ???
  7093. --------E-21252BBL01-------------------------
  7094. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE ALLOCATED PAGES
  7095.     AX = 252Bh
  7096.     BL = 01h
  7097.     ???
  7098. Return: ???
  7099. --------E-21252BBL02-------------------------
  7100. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE PHYSICAL DEVICE PAGES
  7101.     AX = 252Bh
  7102.     BL = 02h
  7103.     ???
  7104. Return: ???
  7105. --------E-21252BBL03-------------------------
  7106. INT 21 Pu - Phar Lap 386/DOS-Extender - MAP DATA FILE
  7107.     AX = 252Bh
  7108.     BL = 03h
  7109.     ???
  7110. Return: ???
  7111. SeeAlso: AX=252Bh/BL=0Bh
  7112. --------E-21252BBL04-------------------------
  7113. INT 21 Pu - Phar Lap 386/DOS-Extender - GET PAGE TYPES
  7114.     AX = 252Bh
  7115.     BL = 04h
  7116.     ???
  7117. Return: ???
  7118. Note:    returns one word per page
  7119.  
  7120. Bitfields for page information:
  7121.  bits 3-0    page type
  7122.     0 unmapped
  7123.     1 allocated
  7124.     2 physical device page
  7125.  bit 4    locked
  7126.  bit 5    swapped to disk
  7127.  bit 6    mapped to read-only data file
  7128.  bit 7    mapped to read/write data file
  7129. --------E-21252B-----------------------------
  7130. INT 21 P - Phar Lap 386/DOS-Extender - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  7131.     AX = 252Bh
  7132.     BH = function
  7133.         05h lock pages
  7134.         06h unlock pages
  7135.     BL = address type
  7136.         00h linear address
  7137.         ECX = linear start address of memory region
  7138.         01h segmented address
  7139.         ES:ECX -> start of memory region
  7140.     EDX = size of memory region in bytes
  7141. Return: CF clear if successful
  7142.     CF set on error
  7143. Note:    this function is also supported by FlashTek X-32VM; if X-32 is not
  7144.       using virtual memory, this function always succeeds
  7145. --------E-21252B-----------------------------
  7146. INT 21 Pu - Phar Lap 386/DOS-Extender - FREE PHYSICAL PAGES
  7147.     AX = 252Bh
  7148.     BL = function (07h,08h)
  7149.     ???
  7150. Return: ???
  7151. --------E-21252BBH09-------------------------
  7152. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO
  7153.     AX = 252Bh
  7154.     BH = 09h
  7155.     BL = subfunction
  7156.         00h get page table entry by linear address
  7157.         ECX = linear address for which to get page table entry
  7158.         01h get page table entry by logical address
  7159.         ES:ECX = address for which to get page table entry
  7160. Return: CF clear if successful
  7161.         EAX = page table entry
  7162.         EBX = additional page table information
  7163.     CF set on error
  7164.         EAX = error code
  7165.         0009h invalid address
  7166.         0082h running under DPMI
  7167. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah
  7168. --------E-21252BBH0A-------------------------
  7169. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO
  7170.     AX = 252Bh
  7171.     BH = 0Ah
  7172.     BL = subfunction
  7173.         00h set page table entry for linear address
  7174.         ECX = linear address for which to get page table entry
  7175.         01h set page table entry for logical address
  7176.         ES:ECX = address for which to get page table entry
  7177.     ESI = page table entry
  7178.     EDI = additional page table information
  7179. Return: CF clear if successful
  7180.     CF set on error
  7181.         EAX = error code
  7182.         0009h invalid address
  7183.         0082h running under DPMI
  7184. SeeAlso: AX=252Bh/BH=09h
  7185. --------E-21252BBH0B-------------------------
  7186. INT 21 P - Phar Lap 386/DOS-Extender v4.1+ - MAP DATA FILE AT FILE OFFSET
  7187.     AX = 252Bh
  7188.     BH = 0Bh
  7189.     BL = subfunction
  7190.         00h by linear address
  7191.         ECX = linear address at which to map data file
  7192.         01h by logical address
  7193.         ES:ECX = logical address at which to map data file
  7194.     EDX = number of bytes to map
  7195.     DS:ESI -> mapping structure (see below)
  7196.     DS:EDI -> ASCIZ filename
  7197. Return: CF clear if successful
  7198.     CF set on error
  7199.         EAX = error code
  7200.         0002h file error
  7201.             ECX = phase (01h opening file, 02h seeking, 03h reading)
  7202.             EDX = error code returned by DOS
  7203.         0009h invalid address
  7204.         0081h invalid parameters or 386|VMM not present
  7205.         0086h all 386|VMM file handles already in use
  7206. SeeAlso: AX=252Bh/BH=03h,AX=252Bh/BH=09h
  7207.  
  7208. Format of mapping structure:
  7209. Offset    Size    Description
  7210.  00h    DWORD    starting file offset to be mapped
  7211.  04h    DWORD    DOS file access and sharing modes (see INT 21/AH=3Dh)
  7212. --------E-21252C-----------------------------
  7213. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT
  7214.     AX = 252Ch
  7215.     BX = segment selector
  7216.     ECX = number of 4K pages to add
  7217. Return: CF clear if successful
  7218.         EAX = offset in segment of beginning of unmapped pages
  7219.     CF set on error
  7220.         EAX = error code
  7221.         08h insufficent memory
  7222.         09h invalid selector
  7223.         82h not supported by current DPMI
  7224. --------E-21252D-----------------------------
  7225. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE
  7226.     AX = 252Dh
  7227.     EBX = VMM file handle
  7228. Return: CF clear if successful
  7229.     CF set on error
  7230.         EAX = error code (81h invalid VMM handle)
  7231. --------E-21252E-----------------------------
  7232. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS
  7233.     AX = 252Eh
  7234.     CL = direction (00h get parameters, 01h set parameters)
  7235.     DS:EBX -> parameter buffer (see below)
  7236. Return: CF clear if successful
  7237.     CF set on error
  7238.         EAX = error code (81h bad parameter value)
  7239.  
  7240. Format of VMM parameter buffer:
  7241. Offset    Size    Description
  7242.  00h    DWORD    flags
  7243.         bit 0: page fault logging enabled
  7244.         ---v5.0+ ---
  7245.         bit 1: swap extender to disk during DOS EXEC call
  7246.         bit 2: don't zero allocated memory
  7247.  04h    DWORD    scan period for page aging, in milliseconds
  7248.  08h    DWORD    maximum size (in bytes) to check on each page scan
  7249.  0Ch 52 BYTEs    unused
  7250. --------E-21252F-----------------------------
  7251. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE
  7252.     AX = 252Fh
  7253.     DS:EBX -> data to be written
  7254.     CX = size of data in bytes
  7255. Return: CF clear if successful
  7256.     CF set on error
  7257.         EAX = error code (85h no page log file or not 386/VMM)
  7258. --------E-212530-----------------------------
  7259. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS
  7260.     AX = 2530h
  7261.     ECX = size of data buffer in bytes (1024 to 65536)
  7262. Return: CF clear if successful
  7263.     CF set on error
  7264.         EAX = error code
  7265.         08h insufficient low memory
  7266.         81h invalid size
  7267. SeeAlso: AX=2517h
  7268. --------E-212531-----------------------------
  7269. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR
  7270.     AX = 2531h
  7271.     BX = segment selector
  7272.     ECX = direction (00h read, 01h write)
  7273.     DS:EDX -> 8-byte buffer for descriptor contents
  7274. Return: CF clear if successful
  7275.     CF set on error
  7276.         EAX = error code
  7277.         81h invalid selector
  7278.         82h DPMI running, or not a code or data segment
  7279. --------E-212532-----------------------------
  7280. INT 21 P - Phar Lap 386/DOS-Extender - GET EXCEPTION HANDLER VECTOR
  7281.     AX = 2532h
  7282.     CL = exception number (00h-0Fh)
  7283. Return: CF clear if successful
  7284.         ES:EBX = CS:EIP of current exception handler
  7285.     CF set on error (CL > 0Fh)
  7286. Notes:    this call is also supported by the FlashTek X-32VM extender
  7287.     this function is incompatible with 386|VMM; use AX=2522h instead
  7288. SeeAlso: AX=2522h,AX=2533h
  7289. --------E-212533-----------------------------
  7290. INT 21 P - Phar Lap 386/DOS-Extender - SET EXCEPTION HANDLER VECTOR
  7291.     AX = 2533h
  7292.     CL = exception number (00h-0Fh)
  7293.     DS:EDX = CS:EIP of new exception handler
  7294. Return: CF clear if successful
  7295.     CF set on error (CL > 0Fh)
  7296. Notes:    this call is also supported by the FlashTek X-32VM extender
  7297.     this function is incompatible with 386|VMM; use AX=2522h instead
  7298. SeeAlso: AX=2522h,AX=2532h
  7299. --------E-212534-----------------------------
  7300. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG
  7301.     AX = 2534h
  7302. Return: CF clear
  7303.     EAX = interrupt state (00h disabled, 01h enabled)
  7304. --------E-212535-----------------------------
  7305. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS
  7306.     AX = 2535h
  7307.     EBX = direction (00h read registers, 01h write)
  7308.     DS:EDX -> system register record (see below)
  7309. Return: CF clear
  7310. Note:    this call is only available under MS Windows if PHARLAP.386 VDD is
  7311.       installed
  7312.  
  7313. Format of system register record:
  7314. Offset    Size    Description
  7315.  00h    DWORD    CR0
  7316.  04h  4 DWORDs    DR0,DR1,DR2,DR3
  7317.  14h  2 DWORDs    reserved
  7318.  1Ch  2 DWORDs    DR6,DR7
  7319.  24h  3 DWORDs    reserved
  7320. --------E-212536----------------------------
  7321. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE
  7322.     AX = 2536h
  7323.     EBX = bit flags
  7324.         bit 0: modifying conventional memory rather than extended memory
  7325.         bit 1: setting maximum memory usage rather than minimum
  7326.     ECX = new limit in 4K pages
  7327. Return: CF clear if successful
  7328.         EAX = new limit
  7329.     CF set on error
  7330.         EAX = error code (08h memory error or -NOPAGE set)
  7331.         EBX = maximum limit in pages
  7332.         ECX = minimum limit in pages
  7333. --------E-212537----------------------------
  7334. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER
  7335.     AX = 2537h
  7336.     BX = number of paragraphs to allocate
  7337. Return: CF clear if successful
  7338.         AX = real-mode segment of allocated block
  7339.     CF set on error
  7340.         AX = error code
  7341.         07h MS-DOS memory chain corrupted
  7342.         08h insufficient low memory
  7343.         BX = size in paragraphs of largest free block
  7344. SeeAlso: AH=48h
  7345. --------E-212538----------------------------
  7346. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT
  7347.     AX = 2538h
  7348.     DS:EBX -> buffer for registers (see AX=2528h)
  7349.     ECX = register record to retrieve
  7350.         00h first interrupt state
  7351.         01h next interrupt state
  7352.         EDX = handle for current interrupt state
  7353. Return: CF clear if successful
  7354.         DS:EBX buffer filled
  7355.         EDX = handle of current interrupt state
  7356.         ESI = number of interrupt which occurred
  7357.     CF set on error
  7358.         EAX = error code
  7359.         81h invalid handle in EDX
  7360.         83h register saving not enabled
  7361.         84h no more interrupt states
  7362. SeeAlso: AX=2527h,AX=2528h
  7363. --------E-212539----------------------------
  7364. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER
  7365.     AX = 2539h
  7366.     BX = MS-DOS file handle for open file
  7367. Return: CF clear if successful
  7368.         EAX = offset of .EXP header in file
  7369.     CF set on error
  7370.         EAX = error code (02h file error)
  7371.         EBX = file error code
  7372.         02h DOS error seeking
  7373.         03h DOS error reading
  7374.         04h invalid file type    
  7375.         05h invalid file format
  7376.         ECX = DOS error code if EBX=02h or 03h
  7377.     current file position in file modified
  7378. --------E-21253A----------------------------
  7379. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER
  7380.     AX = 253Ah
  7381.     ES:EBX -> function to be called when INT 21/AH=4Ah is about to return
  7382.         an error
  7383. Return: CF clear
  7384.     ES:EBX -> previous handler
  7385. SeeAlso: AH=4Ah
  7386. --------E-21253B----------------------------
  7387. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT
  7388.     AX = 253Bh
  7389.     DS:EBX -> buffer containing register contents (see AX=2528h)
  7390. Return: never returns
  7391. SeeAlso: AX=2528h
  7392. --------E-21253C-----------------------------
  7393. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE
  7394.     AX = 253Ch
  7395. Return: CF clear
  7396.     EAX = old size of swap file in bytes
  7397.     EBX = new size of swap file in bytes
  7398. --------E-21253D-----------------------------
  7399. INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR
  7400.     AX = 253Dh
  7401.     BL = interrupt number
  7402.     ECX = direction (0 = read, 1 = write)
  7403.     DS:EDX -> 8-byte buffer for descriptor
  7404. Return: CF clear if successful
  7405.         DS:EDX filled if reading
  7406.     CF set on error
  7407.         EAX = error code (0082h if running under DPMI)
  7408. Desc:    access hardware-level IDT rather than the internal 386/DOS-Extender
  7409.       shadow IDT
  7410. Notes:    this call will always fail under DPMI because it is not possible to
  7411.       access the IDT
  7412.     the descriptor is not checked when writing
  7413.     this call can normally be used only by programs running in ring 0
  7414.       because the processor does not allow an interrupt to be vectored to
  7415.       a less privileged ring
  7416. --------E-21253F-----------------------------
  7417. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - ALLOCATE LDT DESCRIPTOR
  7418.     AX = 253Fh
  7419.     BX = LDT descriptor to allocate (0000h for any)
  7420.     ???
  7421. Return: ???
  7422. --------E-212540-----------------------------
  7423. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - FORCE ALIAS OF SEGMENT
  7424.     AX = 2540h
  7425.     ???
  7426. Return: ???
  7427. --------E-212544-----------------------------
  7428. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - FREE DLL
  7429.     AX = 2544h
  7430.     ???
  7431. Return: ???
  7432. --------E-212545-----------------------------
  7433. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - GET/SET PROCEDURE ADDRESS
  7434.     AX = 2545h
  7435.     ECX = direction (00h get, 01h set)
  7436.     ???
  7437. Return: ???
  7438. --------E-212546-----------------------------
  7439. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - GET MODULE HANDLE
  7440.     AX = 2546h
  7441.     ???
  7442. Return: ???
  7443. --------E-2125C0-----------------------------
  7444. INT 21 P - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  7445.     AX = 25C0h
  7446.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  7447. Return: CF clear if successful
  7448.         AX = real-mode paragraph address of memory
  7449.     CF set on error
  7450.         AX = error code
  7451.         07h MS-DOS memory control blocks destroyed
  7452.         08h insufficient memory
  7453.         BX = size in paragraphs of largest available memory block
  7454. SeeAlso: AX=25C1h,AX=25C2h
  7455. --------E-2125C1-----------------------------
  7456. INT 21 P - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  7457.     AX = 25C1h
  7458.     CX = real-mode paragraph address of memory block to free
  7459. Return: CF clear if successful
  7460.         EAX destroyed
  7461.     CF set on error
  7462.         AX = error code
  7463.         07h MS-DOS memory control blocks destroyed
  7464.         09h invalid memory block address in CX
  7465. SeeAlso: AX=25C0h,AX=25C2h
  7466. --------E-2125C2-----------------------------
  7467. INT 21 P - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  7468.     AX = 25C2h
  7469.     BX = new requested block size in paragraphs
  7470.     CX = real-mode paragraph address of memory block to modify
  7471. Return: CF clear if successful
  7472.         EAX destroyed
  7473.     CF set on error
  7474.         AX = error code
  7475.         07h MS-DOS memory control blocks destroyed
  7476.         08h insufficient memory
  7477.         09h invalid memory block address in CX
  7478.         BX = size in paragraphs of largest available memory block
  7479. SeeAlso: AX=25C0h,AX=25C1h
  7480. --------E-2125C3-----------------------------
  7481. INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  7482.     AX = 25C3h
  7483.     ES:EBX -> pointer to parameter block (see below)
  7484.     DS:EDX -> pointer to ASCIZ program filename
  7485. Return: CF clear if successful
  7486.         all registers unchanged
  7487.     CF set on error
  7488.         EAX = error code (see below)
  7489.  
  7490. Values for error code:
  7491.  01h function code in AL is invalid ???
  7492.  02h file not found or path invalid
  7493.  05h access denied
  7494.  08h insufficient memory to load program
  7495.  0Ah environment invalid
  7496.  0Bh invalid file format
  7497.  
  7498. Format of parameter block:
  7499. Offset    Size    Description
  7500.  00h    DWORD    32-bit offset of environment string
  7501.  04h    WORD    segment selector of environment string
  7502.  06h    DWORD    32-bit offset of command-tail string
  7503.  0Ah    WORD    segment selector of command-tail string
  7504. --------D-2126-------------------------------
  7505. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  7506.     AH = 26h
  7507.     DX = segment at which to create PSP (see below)
  7508. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  7509.       taken from interrupt vector table; the parent PSP field is set to 0
  7510.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  7511.       copy
  7512. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  7513.  
  7514. Format of PSP:
  7515. Offset    Size    Description
  7516.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  7517.         the CDh 20h here is often used as a signature for a valid PSP
  7518.  02h    WORD    segment of first byte beyond memory allocated to program
  7519.  04h    BYTE    unused filler
  7520.  05h    BYTE    CP/M CALL 5 service request (FAR JMP to 000C0h)
  7521.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  7522.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  7523.  08h  2 BYTEs    remainder of FAR JMP at 05h
  7524.  0Ah    DWORD    stored INT 22 termination address
  7525.  0Eh    DWORD    stored INT 23 control-Break handler address
  7526.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  7527.  16h    WORD    segment of parent PSP
  7528.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  7529.  2Ch    WORD    DOS 2+ segment of environment for process
  7530.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  7531.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  7532.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  7533.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  7534.         used by SHARE in DOS 3.3
  7535.  3Ch    BYTE    apparently unused by DOS versions <= 6.00
  7536.  3Dh    BYTE    (APPEND) TrueName flag (see INT 2F/AX=B711h)
  7537.  3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh
  7538.  3Fh    BYTE    (Novell NetWare) Novell task number if previous byte is CEh
  7539.  40h  2 BYTEs    DOS 5+ version to return on INT 21/AH=30h
  7540.  42h    WORD    (MSWindows3) selector of next PSP (PDB) in linked list
  7541.         Windows keeps a linked list of Windows programs only
  7542.  44h  4 BYTEs    unused by DOS versions <= 6.00
  7543.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  7544.  49h  7 BYTEs    unused by DOS versions <= 6.00
  7545.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  7546.  53h  2 BYTEs    unused in DOS versions <= 6.00
  7547.  55h  7 BYTEs    unused in DOS versions <= 6.00; can be used to make first FCB
  7548.           into an extended FCB
  7549.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  7550.         overwrites second FCB if opened
  7551.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  7552.           overwrites beginning of commandline if opened
  7553.  7Ch  4 BYTEs    unused
  7554.  80h 128 BYTEs    commandline / default DTA
  7555.         command tail is BYTE for length of tail, N BYTEs for the tail,
  7556.           followed by a BYTE containing 0Dh
  7557. Notes:    in DOS v3+, the limit on simultaneously open files may be increased by
  7558.       allocating memory for a new open file table, filling it with FFh,
  7559.       copying the first 20 bytes from the default table, and adjusting the
  7560.       pointer and count at 34h and 32h.  However, DOS will only copy the
  7561.       first 20 file handles into a child PSP (including the one created on
  7562.       EXEC).
  7563.     network redirectors based on the original MS-Net implementation use
  7564.       values of 80h-FEh in the open file table to indicate remote files;
  7565.       Novell NetWare also uses values from FEh down to 80h or one more than
  7566.       FILES= (whichever is greater) to indicate remote files
  7567.     MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  7568.       high; the first FCB is empty and the second contains the first
  7569.       parameter
  7570.     some DOS extenders place protected-mode values in various PSP fields
  7571.       such as the "parent" field, which can confuse PSP walkers.  Always
  7572.       check either for the CDh 20h signature or that the suspected PSP is
  7573.       at the beginning of a memory block which owns itself (the preceding
  7574.       paragraph should be a valid MCB with "owner" the same as the
  7575.       suspected PSP).
  7576.     Novell NetWare updates the fields at offsets 3Eh and 3Fh without
  7577.       checking that a legal PSP segment is current; see AH=50h for further
  7578.       discussion
  7579.  
  7580. Format of environment block:
  7581. Offset    Size    Description
  7582.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  7583.       N BYTEs    second environment variable, ASCIZ string
  7584.     ...
  7585.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  7586.     BYTE    00h
  7587. ---DOS 3+---
  7588.     WORD    number of strings following environment (normally 1)
  7589.       N BYTEs    ASCIZ full pathname of program owning this environment
  7590.         other strings may follow
  7591. --------D-2127-------------------------------
  7592. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  7593.     AH = 27h
  7594.     CX = number of records to read
  7595.     DS:DX -> opened FCB (see AH=0Fh)
  7596. Return: AL = status
  7597.         00h successful, all records read
  7598.         01h end of file, no data read
  7599.         02h segment wrap in DTA, no data read
  7600.         03h end of file, partial read
  7601.     [DTA] = records read from file
  7602.     CX = number of records read (return AL = 00h or 03h)
  7603. Notes:    read begins at current file position as specified in FCB; the file
  7604.       position is updated after reading
  7605.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  7606. SeeAlso: AH=21h,AH=28h,AH=3Fh
  7607. --------D-2128-------------------------------
  7608. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  7609.     AH = 28h
  7610.     CX = number of records to write
  7611.     DS:DX -> opened FCB (see AH=0Fh)
  7612.     [DTA] = records to write
  7613. Return: AL = status
  7614.         00h successful
  7615.         01h disk full or file read-only
  7616.         02h segment wrap in DTA
  7617.     CX = number of records written
  7618. Notes:    write begins at current file position as specified in FCB; the file
  7619.       position is updated after writing
  7620.     if CX = 0000h on entry, no data is written; instead the file size is
  7621.       adjusted to be the same as the file position specified by the random
  7622.       record and record size fields of the FCB
  7623.     if the data to be written is less than a disk sector, it is copied into
  7624.       a DOS disk buffer, to be written out to disk at a later time
  7625.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  7626. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  7627. --------D-2129-------------------------------
  7628. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  7629.     AH = 29h
  7630.     AL = parsing options (see below)
  7631.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  7632.     ES:DI -> buffer for unopened FCB
  7633. Return: AL = result code
  7634.         00h successful parse, no wildcards encountered
  7635.         01h successful parse, wildcards present
  7636.         FFh failed (invalid drive specifier)
  7637.     DS:SI -> first unparsed character
  7638.     ES:DI buffer filled with unopened FCB (see AH=0Fh)
  7639. Notes:    asterisks expanded to question marks in the FCB
  7640.     all processing stops when a filename terminator is encountered
  7641.     cannot be used with filespecs which include a path (DOS 2+)
  7642.     Novell NetWare monitors the result code since an 'invalid drive' may
  7643.       signal an attempt to reconnect a network drive; if there are no
  7644.       connections to the specified drive, NetWare attempts to build a
  7645.       connection and map the drive to the SYS:LOGIN directory
  7646. SeeAlso: AH=0Fh,AH=16h,AH=26h
  7647.  
  7648. Bitfields for parsing options:
  7649.  bit 0    skip leading separators
  7650.  bit 1    use existing drive number in FCB if no drive is specified, instead of
  7651.         setting field to zero
  7652.  bit 2    use existing filename in FCB if no base name is specified, instead of
  7653.         filling field with blanks
  7654.  bit 3    use existing extension in FCB if no extension is specified, instead of
  7655.         filling field with blanks
  7656.  bits 4-7 reserved (0)
  7657. --------D-212A-------------------------------
  7658. INT 21 - DOS 1+ - GET SYSTEM DATE
  7659.     AH = 2Ah
  7660. Return: CX = year (1980-2099)
  7661.     DH = month
  7662.     DL = day
  7663. ---DOS 1.10+---
  7664.     AL = day of week (00h=Sunday)
  7665. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
  7666. --------D-212B-------------------------------
  7667. INT 21 - DOS 1+ - SET SYSTEM DATE
  7668.     AH = 2Bh
  7669.     CX = year (1980-2099)
  7670.     DH = month
  7671.     DL = day
  7672. Return: AL = status
  7673.         00h successful
  7674.         FFh invalid date, system date unchanged
  7675. Note:    DOS 3.3+ also sets CMOS clock
  7676. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  7677. --------E-212B--CX4149-----------------------
  7678. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  7679.     AH = 2Bh
  7680.     CX = 4149h ('AI')
  7681.     DX = 413Fh ('A?')
  7682. Return: AL <> FFh if installed
  7683. Note:    Borland's TKERNEL makes this call
  7684. --------c-212B--CX4358-----------------------
  7685. INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK
  7686.     AH = 2Bh
  7687.     CX = 4358h ('CX')
  7688. Return: AL = FFh if PC-Kwik/PC-Cache not installed
  7689.     AL = 00h if installed
  7690.         CF clear
  7691.         CX = 6378h ('cx')
  7692.         BX = ???
  7693.         DX = version (DH = major version, DL = binary minor version)
  7694. Note:    PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of
  7695.       Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds
  7696.       to PC-Kwik v3.20)
  7697. SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h
  7698. Index:    PC-Cache;installation check|Qualitas Qcache;installation check
  7699. Index:    installation check;PC-Cache 5.x|installation check;Qualitas Qcache
  7700. --------Q-212B--CX4445-----------------------
  7701. INT 21 - DESQview - INSTALLATION CHECK
  7702.     AH = 2Bh
  7703.     CX = 4445h ('DE')
  7704.     DX = 5351h ('SQ')
  7705.     AL = subfunction (DV v2.00+)
  7706.         01h get version
  7707.         Return: BX = version (BH = major, BL = minor)
  7708.         Note: early copies of v2.00 return 0002h
  7709.         02h get shadow buffer info, and start shadowing
  7710.         Return: BH = rows in shadow buffer
  7711.             BL = columns in shadow buffer
  7712.             DX = segment of shadow buffer
  7713.         04h get shadow buffer info
  7714.         Return: BH = rows in shadow buffer
  7715.             BL = columns in shadow buffer
  7716.             DX = segment of shadow buffer
  7717.         05h stop shadowing
  7718. Return: AL = FFh if DESQview not installed
  7719. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  7720.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  7721.       01h for all subfunction requests 0Ch and higher and appears to ignore
  7722.       all lower-numbered functions not listed here.
  7723.     DESQview versions 2.5x are part of DESQview/X v1.0x.
  7724. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  7725. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  7726. --------U-212B--CX454C-----------------------
  7727. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  7728.     AH = 2Bh
  7729.     CX = 454Ch ('EL')
  7730.     DX = 5253h ('RS')
  7731. Return: ES:BX -> ELRES history structure (see below)
  7732.     DX = DABEh (signature, DAve BEnnett)
  7733. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  7734.       Bennett which stores recent errorlevel values, allows them to be
  7735.       retrieved for use in batch files, and can place them in an
  7736.       environment variable
  7737. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  7738.  
  7739. Format of ELRES history structure:
  7740. Offset    Size    Description
  7741.  00h    WORD    number of return codes which can be stored by following buffer
  7742.  02h    WORD    current position in buffer (treated as a ring)
  7743.  04h  N BYTEs    ELRES buffer
  7744. --------m-212B01CX444D-----------------------
  7745. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  7746.     AX = 2B01h
  7747.     CX = 444Dh ('DM')
  7748.     DX = 4158h ('AX')
  7749. Return: AX = 0000h if installed
  7750.         BX = version??? (0002h)
  7751.         CX = 4845h ('HE')
  7752.         DX = 5245h ('RE')
  7753.         ES = DOS-UP driver segment
  7754. --------T-212B01CX5441-----------------------
  7755. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  7756.     AX = 2B01h
  7757.     CX = 5441h ('TA')
  7758.     DX = 4D45h ('ME')
  7759. ---v2.60---
  7760.     BH = ???
  7761.         00h skip ???, else do
  7762. Return: AL = 02h if installed
  7763.     ES:DX -> data area in TAME-RES (see below)
  7764. Program: TAME is a shareware program by David G. Thomas which gives up CPU time
  7765.       to other partitions under a multitasker when the current partition's
  7766.       program incessantly polls the keyboard or system time
  7767.  
  7768. Format of TAME 2.10-2.20 data area:
  7769. Offset    Size    Description
  7770.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  7771.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  7772.  02h    DWORD    number of task switches
  7773.  06h    DWORD    number of keyboard polls
  7774.  0Ah    DWORD    number of time polls
  7775.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7776.  12h    DWORD    original INT 10h
  7777.  16h    DWORD    original INT 14h
  7778.  1Ah    DWORD    original INT 15h
  7779.  1Eh    DWORD    original INT 16h
  7780.  22h    DWORD    original INT 17h
  7781.  26h    DWORD    original INT 21h
  7782.  2Ah    DWORD    original INT 28h
  7783.  2Eh    WORD    offset of TAME INT 10h handler
  7784.  30h    WORD    offset of TAME INT 14h handler
  7785.  32h    WORD    offset of TAME INT 15h handler
  7786.  34h    WORD    offset of TAME INT 16h handler
  7787.  36h    WORD    offset of TAME INT 17h handler
  7788.  38h    WORD    offset of TAME INT 21h handler
  7789.  3Ah    WORD    offset of TAME INT 28h handler
  7790.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  7791.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  7792.  40h    WORD    number of polls remaining before next task switch
  7793.  42h    WORD    /KEYIDLE value
  7794.  44h    BYTE    interrupts already grabbed by TAME (see below)
  7795.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  7796.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  7797.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  7798.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  7799.  49h    BYTE    window or task number for this task
  7800.  4Ah    BYTE    multitasker type (see below)
  7801.  4Bh    BYTE    type of task switching selected
  7802.         bit 0: DESQview???
  7803.         bit 1: DoubleDOS???
  7804.         bit 2: TopView???
  7805.         bit 3: KeySwitch
  7806.         bit 4: HLT instruction
  7807.  4Ch    BYTE    ???
  7808.  4Dh    BYTE    flags
  7809.         bit 1: /FREQ instead of /MAX
  7810.  4Eh    BYTE    /FG: value
  7811.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  7812.  50h    BYTE    ???
  7813.  
  7814. Bitfields for interrupts already grabbed by TAME:
  7815.  bit 0    INT 10h
  7816.  bit 1    INT 14h
  7817.  bit 2    INT 15h
  7818.  bit 3    INT 16h
  7819.  bit 4    INT 17h
  7820.  bit 5    INT 21h
  7821.  bit 6    INT 28h
  7822.  
  7823. Values for multitasker type:
  7824.  01h    DESQview
  7825.  02h    DoubleDOS
  7826.  03h    TopView
  7827.  04h    OmniView
  7828.  05h    VM/386
  7829.  
  7830. Bitfields for type of task switching selected:
  7831.  bit 0    DESQview
  7832.  bit 1    DoubleDOS
  7833.  bit 2    TopView
  7834.  bit 3    OmniView
  7835.  bit 4    KeySwitch
  7836.  bit 5    HLT instruction
  7837.  
  7838. Format of TAME 2.30 data area:
  7839. Offset    Size    Description
  7840.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  7841.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  7842.  02h    DWORD    number of task switches
  7843.  06h    DWORD    number of keyboard polls
  7844.  0Ah    DWORD    number of time polls
  7845.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7846.  12h    DWORD    time of last /CLEAR or TAME-RES load
  7847.  16h    DWORD    time yielded
  7848.  1Ah    DWORD    time spent polling
  7849.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  7850.  22h    DWORD    original INT 10h
  7851.  26h    DWORD    original INT 14h
  7852.  2Ah    DWORD    original INT 15h
  7853.  2Eh    DWORD    original INT 16h
  7854.  32h    DWORD    original INT 17h
  7855.  36h    DWORD    original INT 21h
  7856.  3Ah    DWORD    original INT 28h
  7857.  3Eh    WORD    offset of TAME INT 10h handler
  7858.  40h    WORD    offset of TAME INT 14h handler
  7859.  42h    WORD    offset of TAME INT 15h handler
  7860.  44h    WORD    offset of TAME INT 16h handler
  7861.  46h    WORD    offset of TAME INT 17h handler
  7862.  48h    WORD    offset of TAME INT 21h handler
  7863.  4Ah    WORD    offset of TAME INT 28h handler
  7864.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  7865.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  7866.  50h    WORD    number of polls remaining before next task switch
  7867.  52h    WORD    /KEYIDLE value
  7868.  54h    WORD    /FG: value
  7869.  56h    WORD    task switches left until next FGONLY DESQview API call
  7870.  58h    WORD    multitasker version
  7871.  5Ah    WORD    virtual screen segment
  7872.  5Ch    BYTE    interrupts already grabbed by TAME (see above)
  7873.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  7874.  5Eh    BYTE    window or task number for this task
  7875.  5Fh    BYTE    multitasker type (see above)
  7876.  60h    BYTE    type of task switching selected (bit flags) (see above)
  7877.  61h    BYTE    watch_DOS
  7878.  62h    BYTE    bit flags
  7879.         bit 0: TAME enabled
  7880.         bit 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  7881.         bit 2: /TIMEPOLL
  7882.         bit 3: /KEYPOLL
  7883.         bit 4: inhibit timer
  7884.         bit 5: enable status monitoring
  7885.  63h    BYTE    old status
  7886.  64h    WORD    signature DA34h
  7887.  
  7888. Format of TAME 2.60 data area:
  7889. Offset    Size    Description
  7890.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  7891.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  7892.  02h    DWORD    number of task switches
  7893.  06h    DWORD    number of keyboard polls
  7894.  0Ah    DWORD    number of time polls
  7895.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7896.  12h    DWORD    time of last /CLEAR or TAME-RES load
  7897.  16h    DWORD    time yielded
  7898.  1Ah    DWORD    time spent polling
  7899.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  7900.  22h  4 BYTEs    ???
  7901.  26h    DWORD    original INT 10h
  7902.  2Ah    DWORD    original INT 14h
  7903.  2Eh    DWORD    original INT 15h
  7904.  32h    DWORD    original INT 16h
  7905.  36h    DWORD    original INT 17h
  7906.  3Ah    DWORD    original INT 21h
  7907.  3Eh    DWORD    original INT 28h
  7908.  42h    WORD    offset of TAME INT 10h handler
  7909.  44h    WORD    offset of TAME INT 14h handler
  7910.  46h    WORD    offset of TAME INT 15h handler
  7911.  48h    WORD    offset of TAME INT 16h handler
  7912.  4Ah    WORD    offset of TAME INT 17h handler
  7913.  4Ch    WORD    offset of TAME INT 21h handler
  7914.  4Eh    WORD    offset of TAME INT 28h handler
  7915.  50h    WORD    X in /max:X,Y or /freq:X,Y
  7916.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  7917.  54h    WORD    number of polls remaining before next task switch
  7918.  56h    WORD    /KEYIDLE value
  7919.  58h  4 BYTEs    ???
  7920.  5Ch    WORD    X in /boost:X,Y
  7921.  5Eh    WORD    Y in /boost:X,Y
  7922.  60h    WORD    /FG: value
  7923.  62h    WORD    task switches remaining until next FGONLY DESQview API call
  7924.  64h    WORD    multitasker version ???
  7925.  66h    WORD    virtual screen segment
  7926.  68h    BYTE    interrupts already grabbed by TAME (see above)
  7927.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  7928.  6Ah    BYTE    window or task number for this task
  7929.  6Bh    BYTE    multitasker type (see above)
  7930.  6Ch    BYTE    type of task switching selected (bit flags) (see above)
  7931.  6Dh    BYTE    watch_DOS
  7932.  6Eh    BYTE    bit flags
  7933.         bit 0: TAME enabled
  7934.         bit 1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  7935.         bit 2: /TIMEPOLL
  7936.         bit 3: /KEYPOLL
  7937.         bit 4: inhibit timer
  7938.         bit 5: enable status monitoring
  7939.  6Fh    BYTE    old status
  7940.  70h    WORD    signature DA34h
  7941. --------R-212B44BX4D41-----------------------
  7942. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  7943.     AX = 2B44h ('D')
  7944.     BX = 4D41h ('MA')
  7945.     CX = 7063h ('pc')
  7946.     DX = 4157h ('AW')
  7947. Return: AX = 4F4Bh ('OK') if large host resident
  7948.        = 6F6Bh ('ok') if small host resident
  7949.     CX:DX -> API entry point
  7950. SeeAlso: INT 16/AH=79h
  7951.  
  7952. Call API entry point with:
  7953.     AX = 0000h get pcANYWHERE IV version
  7954.         DS:SI -> BYTE buffer for host type code
  7955.         Return: AH = version number
  7956.             AL = revision number
  7957.             DS:DI buffer byte filled with
  7958.             00h full-featured host
  7959.             01h limited-feature LAN host
  7960.             other API may not be supported
  7961.     AX = 0001h initialize operation
  7962.         DS:SI -> initialization request structure (see below)
  7963.         Return: AX = function status (see below)
  7964.     AX = 0002h get status
  7965.         Return: AH = current operating mode (see init req structure below)
  7966.             AL = current connection status
  7967.             bit 0: a physical connection is active
  7968.             bit 1: remove screen updating is active
  7969.             bit 2: connection checking is active
  7970.             bit 3: hot key detection is active
  7971.             bit 4: background file transfer is active
  7972.     AX = 0003h suspend remote screen updates
  7973.         Return: AX = function status (see below)
  7974.     AX = 0004h resume screen updates
  7975.         Return: AX = function status (see below)
  7976.     AX = 0005h end current remote access session
  7977.         DS:SI -> termination request structure (see below)
  7978.         Return: AX = function status (see below)
  7979.     AX = 0006h remove pcANYWHERE IV from memory
  7980.         Return: AX = status
  7981.             0000h successful
  7982.             FFD2h unable to release allocated memory
  7983.             FFD1h unable to release interrupt vectors
  7984.     AX = 8000h read data from communications channel
  7985.         DS:BX -> buffer
  7986.         CX = buffer size
  7987.         Return: AX >= number of characters read/available
  7988.             AX < 0 on error
  7989.     AX = 8001h write data to communications channel
  7990.         DS:BX -> buffer
  7991.         CX = buffer size
  7992.         Return: AX >= number of characters written
  7993.             AX < 0 on error
  7994.     AX = 8002h get connection status
  7995.         Return: AX = status
  7996.             > 0000h if connection active
  7997.             = 0000h if connection lost
  7998.             < 0000h on error
  7999.  
  8000. Format of initialization request structure:
  8001. Offset    Size    Description
  8002.  00h    BYTE    operating mode
  8003.         00h wait for a call
  8004.         01h hot key activates
  8005.         02h incoming call activates
  8006.         03h initiate a call
  8007.  01h  3 BYTEs    user ID to append to config file names
  8008.  04h    WORD    DS-relative pointer to path for config files
  8009.  06h    WORD    DS-relative pointer to path for program files
  8010.  
  8011. Format of termination request structure:
  8012. Offset    Size    Description
  8013.  00h    BYTE    operating mode after termination
  8014.         00h wait for a call
  8015.         01h hot key activates
  8016.         02h incoming call activates
  8017.         80h use current mode
  8018.         FFh remove from memory
  8019.  
  8020. Values for function status:
  8021.  0000h    function completed successfully
  8022.  FFF2h    unable to establish a connection when operating mode is
  8023.     "Initiate a call"
  8024.  FFF3h    modem configuration is invalid (corrupt config)
  8025.  FFF4h    modem initialization failed (no modem response)
  8026.  FFF5h    the communications device could not be initialized
  8027.  FFF6h    the host operator aborted the function
  8028.  FFF7h    the communications driver type specified in the configuration file is
  8029.     different than the one loaded when pcANYWHERE IV was initially started
  8030.  FFF9h    the configuration file is invalid
  8031.  FFFAh    the configuration file could not be found
  8032.  FFFBh    no session is active
  8033.  FFFCh    a remote access session is active
  8034.  FFFDh    the specified operating mode is invalid
  8035. --------D-212C-------------------------------
  8036. INT 21 - DOS 1+ - GET SYSTEM TIME
  8037.     AH = 2Ch
  8038. Return: CH = hour
  8039.     CL = minute
  8040.     DH = second
  8041.     DL = 1/100 seconds
  8042. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  8043.       so returned times generally do not increment by 1
  8044.     on some systems, DL may always return 00h
  8045. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  8046. SeeAlso: INT 2F/AX=120Dh
  8047. --------D-212D-------------------------------
  8048. INT 21 - DOS 1+ - SET SYSTEM TIME
  8049.     AH = 2Dh
  8050.     CH = hour
  8051.     CL = minute
  8052.     DH = second
  8053.     DL = 1/100 seconds
  8054. Return: AL = result
  8055.         00h successful
  8056.         FFh invalid time, system time unchanged
  8057. Note:    DOS 3.3+ also sets CMOS clock
  8058. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  8059. --------T-212D01CX7820-----------------------
  8060. INT 21 - PC-Mix - INSTALLATION CHECK
  8061.     AX = 2D01h
  8062.     CX = 7820h ('X ')
  8063.     DX = 6D69h ('MI')
  8064. Return: AL = 00h if installed
  8065. --------D-212E--DL00-------------------------
  8066. INT 21 - DOS 1+ - SET VERIFY FLAG
  8067.     AH = 2Eh
  8068.     DL = 00h (DOS 1.x/2.x only)
  8069.     AL = new state of verify flag
  8070.         00h off
  8071.         01h on
  8072. Notes:    default state at system boot is OFF
  8073.     when ON, all disk writes are verified provided the device driver
  8074.       supports read-after-write verification
  8075. SeeAlso: AH=54h
  8076. --------D-212F-------------------------------
  8077. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  8078.     AH = 2Fh
  8079. Return: ES:BX -> current DTA
  8080. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  8081. SeeAlso: AH=1Ah
  8082. --------D-2130-------------------------------
  8083. INT 21 - DOS 2+ - GET DOS VERSION
  8084.     AH = 30h
  8085. ---DOS 5+ ---
  8086.     AL = what to return in BH
  8087.         00h OEM number (as for DOS 2.0-4.0x)
  8088.         01h version flag
  8089. Return: AL = major version number (00h if DOS 1.x)
  8090.     AH = minor version number
  8091.     BL:CX = 24-bit user serial number (most versions do not use this)
  8092. ---if DOS <5 or AL=00h---
  8093.     BH = MS-DOS OEM number (see below)
  8094. ---if DOS 5+ and AL=01h---
  8095.     BH = version flag
  8096.         bit 3: DOS is in ROM
  8097.         other: reserved (0)
  8098. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  8099.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  8100.     the Windows/NT DOS box returns version 5.00, subject to SETVER
  8101.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  8102.       INT 21/AH=87h to distinguish between the original European MS-DOS 4.0
  8103.       and the later PC-DOS 4.0x and MS-DOS 4.0x
  8104.     IBM DOS 6.1 reports its version as 6.00; use the OEM number to
  8105.       distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an
  8106.       IBM DOS 6.0)
  8107.     generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves
  8108.       as PC-DOS by returning OEM number 00h
  8109.     the version returned under DOS 4.0x may be modified by entries in
  8110.       the special program list (see AH=52h); the version returned under
  8111.       DOS 5+ may be modified by SETVER--use AX=3306h to get the true
  8112.       version number
  8113. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  8114. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=E002h
  8115.  
  8116. Values for DOS OEM number:
  8117.  00h    IBM
  8118.  01h    Compaq
  8119.  02h    MS Packaged Product
  8120.  04h    AT&T
  8121.  05h    Zenith
  8122.  06h    Hewlett-Packard
  8123.  0Dh    Packard-Bell
  8124.  16h    DEC
  8125.  23h    Olivetti
  8126.  29h    Toshiba
  8127.  33h    Novell (Windows/386 device IDs only)
  8128.  34h    MS Multimedia Systems (Windows/386 device IDs only)
  8129.  35h    MS Multimedia Systems (Windows/386 device IDs only)
  8130.  4Dh    Hewlett-Packard
  8131.  66h    PhysTechSoft (PTS-DOS)
  8132.  99h    General Software's Embedded DOS
  8133.  EEh    DR-DOS
  8134.  EFh    Novell DOS
  8135.  FFh    Microsoft, Phoenix
  8136. --------E-2130-------------------------------
  8137. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  8138.     AH = 30h
  8139.     EAX = 00003000h
  8140.     EBX = 50484152h ("PHAR")
  8141. Return: AL = major DOS version
  8142.     AH = minor DOS version
  8143.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  8144.         BL = ASCII major version number
  8145.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  8146.         EDX = address of GDA
  8147. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  8148. --------v-2130--DXABCD-----------------------
  8149. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  8150.     AH = 30h
  8151.     DX = ABCDh
  8152. Return: DX = DCBAh if installed
  8153. SeeAlso: AX=0D20h,AX=30F1h
  8154. --------T-213000BX1234-----------------------
  8155. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  8156.     AX = 3000h
  8157.     BX = 1234h
  8158.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  8159. Return: AL = DOS major version
  8160.     AH = DOS minor version
  8161.     CX:BX -> Ctask global data block
  8162. Program: CTask is a multitasking kernel for C written by Thomas Wagner
  8163. Note:    if first eight bytes of returned data block equal eight bytes passed
  8164.       in, CTask is resident
  8165. --------O-213000BX3000-----------------------
  8166. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  8167.     AX = 3000h
  8168.     BX = 3000h
  8169.     CX = DX = 3000h
  8170. Return: AX = PC-MOS version
  8171. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  8172.       system by The Software Link, Inc.
  8173. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
  8174. --------G-213022-----------------------------
  8175. INT 21 - StopPrg v2.0 - INSTALLATION CHECK
  8176.     AX = 3022h
  8177. Return: AX = DOS version (see AH=30h)
  8178.     CX = 1112h if StopPrg installed
  8179.         BX = segment of resident code
  8180. Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet
  8181. Note:    StopPrg may be temporarily disabled by storing 9090h in the word at
  8182.       0000h:04FEh
  8183. --------v-2130F1-----------------------------
  8184. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  8185.     AX = 30F1h
  8186. Return: AL = 00h if resident
  8187. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  8188. ----------2130FFCX4445-----------------------
  8189. INT 21 - DESQ??? - INSTALLATION CHECK
  8190.     AX = 30FFh
  8191.     CX = 4445h ("DE")
  8192.     DX = 5351h ("SQ")
  8193. Return: BH = 05h if installed
  8194.     ???
  8195. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  8196.       DESQview, so it may be for DESQview's precursor DESQ.
  8197. SeeAlso: AX=4404h"DUBLDISK"
  8198. --------D-2131-------------------------------
  8199. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  8200.     AH = 31h
  8201.     AL = return code
  8202.     DX = number of paragraphs to keep resident
  8203. Return: never
  8204. Notes:    the value in DX only affects the memory block containing the PSP;
  8205.       additional memory allocated via AH=48h is not affected
  8206.     the minimum number of paragraphs which will remain resident is 11h
  8207.       for DOS 2.x and 06h for DOS 3+
  8208.     most TSRs can save some memory by releasing their environment block
  8209.       before terminating (see AH=26h,AH=49h)
  8210. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  8211. --------D-2132-------------------------------
  8212. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  8213.     AH = 32h
  8214.     DL = drive number (00h = default, 01h = A:, etc)
  8215. Return: AL = status
  8216.         00h successful
  8217.         DS:BX -> Drive Parameter Block (DPB) for specified drive
  8218.         FFh invalid or network drive
  8219. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  8220.       except for the DWORD at offset 12h
  8221.     this call updates the DPB by reading the disk; the DPB may be accessed
  8222.       via the DOS list of lists (see AH=52h) if disk access is not
  8223.       desirable.
  8224.     undocumented prior to the release of DOS 5.0; only the DOS 4+ version
  8225.       of the DPB has been documented, however
  8226.     supported by DR-DOS 3.41+; DR-DOS 3.41-6.0 return the same data as
  8227.       MS-DOS 3.31
  8228. SeeAlso: AH=1Fh,AH=52h
  8229.  
  8230. Format of DOS Drive Parameter Block:
  8231. Offset    Size    Description
  8232.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  8233.  01h    BYTE    unit number within device driver
  8234.  02h    WORD    bytes per sector
  8235.  04h    BYTE    highest sector number within a cluster
  8236.  05h    BYTE    shift count to convert clusters into sectors
  8237.  06h    WORD    number of reserved sectors at beginning of drive
  8238.  08h    BYTE    number of FATs
  8239.  09h    WORD    number of root directory entries
  8240.  0Bh    WORD    number of first sector containing user data
  8241.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  8242.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  8243.  0Fh    BYTE    number of sectors per FAT
  8244.  10h    WORD    sector number of first directory sector
  8245.  12h    DWORD    address of device driver header
  8246.  16h    BYTE    media ID byte
  8247.  17h    BYTE    00h if disk accessed, FFh if not
  8248.  18h    DWORD    pointer to next DPB
  8249. ---DOS 2.x---
  8250.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  8251.         FFFFh = unknown
  8252.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  8253. ---DOS 3.x---
  8254.  1Ch    WORD    cluster at which to start search for free space when writing
  8255.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  8256. ---DOS 4.0-6.0---
  8257.  0Fh    WORD    number of sectors per FAT
  8258.  11h    WORD    sector number of first directory sector
  8259.  13h    DWORD    address of device driver header
  8260.  17h    BYTE    media ID byte
  8261.  18h    BYTE    00h if disk accessed, FFh if not
  8262.  19h    DWORD    pointer to next DPB
  8263.  1Dh    WORD    cluster at which to start search for free space when writing,
  8264.         usually the last cluster allocated
  8265.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  8266. --------D-2133-------------------------------
  8267. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  8268.     AH = 33h
  8269.     AL = subfunction
  8270.         00h get current extended break state
  8271.         Return: DL = current state, 00h = off, 01h = on
  8272.         01h set state of extended ^C/^Break checking
  8273.         DL = 00h off, check only on character I/O functions
  8274.              01h on, check on all DOS functions
  8275. Note:    under DOS 3.1+ and DR-DOS, this function does not use any of the
  8276.       DOS-internal stacks and may thus be called at any time
  8277. SeeAlso: AX=3302h
  8278. --------D-213302-----------------------------
  8279. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  8280.     AX = 3302h
  8281.     DL = new state
  8282.          00h for OFF or 01h for ON
  8283. Return: DL = old state of extended BREAK checking
  8284. Notes:    this function does not use any of the DOS-internal stacks and may thus
  8285.       be called at any time; one possible use is modifying Control-Break
  8286.       checking from within an interrupt handler or TSR
  8287.     not supported by DR-DOS through at least version 6.0
  8288. SeeAlso: AH=33h
  8289. --------D-213305-----------------------------
  8290. INT 21 - DOS 4+ - GET BOOT DRIVE
  8291.     AX = 3305h
  8292. Return: DL = boot drive (1=A:,...)
  8293. Notes:    fully reentrant
  8294.     NEC 9800-series PCs always call the boot drive A: and assign the other
  8295.       drive letters sequentially to the other drives in the system
  8296. --------D-213306-----------------------------
  8297. INT 21 - DOS 5+ - GET TRUE VERSION NUMBER
  8298.     AX = 3306h
  8299. Return: BL = major version
  8300.     BH = minor version
  8301.     DL = revision (bits 2-0, all others 0)
  8302.     DH = version flags
  8303.         bit 3: DOS is in ROM
  8304.         bit 4: DOS is in HMA
  8305.     AL = FFh if true DOS version < 5.0
  8306. Notes:    this function always returns the true version number, unlike AH=30h,
  8307.       whose return value may be changed with SETVER
  8308.     because of the conflict from the CBIS PowerLAN redirector (see next
  8309.       entry), programs should check whether BH is less than 100 (64h)
  8310.       and BL is at least 5 before accepting the returned BX as the true
  8311.       version number; however, even this is not entirely reliable when
  8312.       that redirector is loaded
  8313.     fully reentrant
  8314.     OS/2 v2.1 will return BX=0A14h (version 20.10)
  8315.     the Windows NT DOS box returns BX=3205h (version 5.50)
  8316. BUG:    DR-DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  8317.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  8318.       for invalid subfunctions
  8319. SeeAlso: AH=30h,INT 2F/AX=122Fh
  8320. --------N-213306-----------------------------
  8321. INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
  8322.     AX = 3306h
  8323. Return: AX = 3306h
  8324.     BL = ??? (usually 00h)
  8325.     BH = ??? (usually 00h or FFh)
  8326. Note:    unknown function, is in conflict with DOS 5+ version call
  8327. SeeAlso: AX=3306h"DOS"
  8328. --------v-21330F-----------------------------
  8329. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  8330.     AX = 330Fh
  8331. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  8332. SeeAlso: AX=30F1h,AX=33E0h
  8333. --------k-213341-----------------------------
  8334. INT 21 - Diet Disk v1.0 - INSTALLATION CHECK
  8335.     AX = 3341h
  8336. Return: DX = 1234h if installed
  8337.         CX = resident code segment
  8338. Program: Diet Disk is a public domain transparent data file compressor by
  8339.       Barry Nance
  8340. --------v-2133E0-----------------------------
  8341. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  8342.     AX = 33E0h
  8343. Return: AL = E0h if resident (DOS returns AL=FFh)
  8344. SeeAlso: AX=330Fh,AX=357Fh
  8345. --------D-2134-------------------------------
  8346. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  8347.     AH = 34h
  8348. Return: ES:BX -> one-byte InDOS flag
  8349. Notes:    the value of InDOS is incremented whenever an INT 21 function begins
  8350.       and decremented whenever one completes
  8351.     during an INT 28 call, it is safe to call some INT 21 functions even
  8352.       though InDOS may be 01h instead of zero
  8353.     InDOS alone is not sufficient for determining when it is safe to
  8354.       enter DOS, as the critical error handling decrements InDOS and
  8355.       increments the critical error flag for the duration of the critical
  8356.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  8357.       busy.
  8358.     SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk,
  8359.       then zeros it on completion
  8360.     the critical error flag is the byte immediately following InDOS in
  8361.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ and
  8362.       DR-DOS 3.41+ (except COMPAQ DOS 3.0, where the critical error flag
  8363.       is located 1AAh bytes BEFORE the critical section flag)
  8364.     for DOS 3.1+, an undocumented call exists to get the address of the
  8365.       critical error flag (see AX=5D06h)
  8366.     this function was undocumented prior to the release of DOS 5.0.
  8367. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  8368. --------D-2135-------------------------------
  8369. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  8370.     AH = 35h
  8371.     AL = interrupt number
  8372. Return: ES:BX -> current interrupt handler
  8373. Note:    under DR-DOS 5.0+, this function does not use any of the DOS-internal
  8374.       stacks and may thus be called at any time
  8375. SeeAlso: AH=25h,AX=2503h
  8376. --------E-213501-----------------------------
  8377. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  8378.     AX = 3501h
  8379. Return: CF clear if successful
  8380.         BX = new selector
  8381.     CF set on error (no more selectors available)
  8382. Note:    the new selector will be an expand-up read/write data selector with
  8383.       undefined base and limit
  8384. SeeAlso: AX=3502h,INT 31/AX=0000h
  8385. --------E-213502-----------------------------
  8386. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  8387.     AX = 3502h
  8388.     BX = selector
  8389. Return: CF clear if successful
  8390.     CF set on error (invalid selector)
  8391. Note:    only selectors allocated via AX=3501h should be deallocated
  8392. SeeAlso: AX=3501h,INT 31/AX=0001h
  8393. --------E-213503-----------------------------
  8394. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  8395.     AX = 3503h
  8396.     BX = selector
  8397.     ECX = base address
  8398. Return: CF clear if successful
  8399.     CF set on error (invalid selector)
  8400. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  8401. --------E-213504-----------------------------
  8402. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  8403.     AX = 3504h
  8404.     BX = selector
  8405. Return: CF clear if successful
  8406.         ECX = absolute base address of selector
  8407.     CF set on error (invalid selector)
  8408. SeeAlso: AX=3503h,INT 31/AX=0006h
  8409. --------E-213505-----------------------------
  8410. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  8411.     AX = 3505h
  8412.     BX = selector
  8413.     ECX = desired limit
  8414. Return: CF clear if successful
  8415.         ECX = actual limit set
  8416.     CF set on error (no more selectors available)
  8417. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  8418.       limit is greater than 1MB
  8419. SeeAlso: AX=3503h,INT 31/AX=0008h
  8420. --------E-21350A-----------------------------
  8421. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  8422.     AX = 350Ah
  8423.     EBX = absolute physical address
  8424.     ECX = size in bytes of area to map
  8425. Return: CF clear if successful
  8426.     CF set on error (insufficient memory or service refused by DPMI host)
  8427. Notes:    should not make repeated calls for the same physical address
  8428.     there is no provision for unmapping memory
  8429. --------E-21350B-----------------------------
  8430. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  8431.     AX = 350Bh
  8432.     DS = default selector for DS
  8433. Return: CF clear
  8434.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  8435. SeeAlso: AX=350Ch
  8436. --------E-21350C-----------------------------
  8437. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  8438.     AX = 350Ch
  8439.     ECX = size of block in bytes
  8440.     DS = default DS
  8441. Return: CF clear if successful
  8442.         EAX = near pointer to new block
  8443.         EDX = new lowest legal value for stack
  8444.     CF set on error (requested size not multiple of 4K)
  8445. SeeAlso: AX=350Bh,AX=350Dh
  8446. --------E-21350D-----------------------------
  8447. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  8448.     AX = 350Dh
  8449.     EBX = current ESP value
  8450.     ECX = size of block in bytes
  8451.     DS = default DS
  8452. Return: CF clear if successful
  8453.         EBX = new value for ESP
  8454.         EDX = suggested new limit for SS
  8455.     CF set on error
  8456. Note:    this function should only be called once during initialization
  8457. SeeAlso: AX=350Bh,AX=350Ch
  8458. --------v-21357F-----------------------------
  8459. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  8460.     AX = 357Fh
  8461. Return: DX = FFFFh if installed
  8462. SeeAlso: AX=33E0h,AX=3DFFh
  8463. --------D-2136-------------------------------
  8464. INT 21 - DOS 2+ - GET FREE DISK SPACE
  8465.     AH = 36h
  8466.     DL = drive number (00h = default, 01h = A:, etc)
  8467. Return: AX = FFFFh if invalid drive
  8468.     else
  8469.         AX = sectors per cluster
  8470.         BX = number of free clusters
  8471.         CX = bytes per sector
  8472.         DX = total clusters on drive
  8473. Notes:    free space on drive in bytes is AX * BX * CX
  8474.     total space on drive in bytes is AX * CX * DX
  8475.     "lost clusters" are considered to be in use
  8476.     according to Dave Williams' MS-DOS reference, the value in DX is
  8477.       incorrect for non-default drives after ASSIGN is run
  8478. SeeAlso: AH=1Bh,AH=1Ch
  8479. --------D-213700-----------------------------
  8480. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  8481.     AX = 3700h
  8482. Return: AL = status
  8483.         00h successful
  8484.         DL = current switch character
  8485.         FFh unsupported subfunction
  8486. Desc:    Determine the character which is used to introduce command switches.
  8487.       This setting is ignored by DOS commands in version 4.0 and higher,
  8488.       but is honored by many third-party programs.
  8489. Notes:    documented in some OEM versions of some releases of DOS
  8490.     supported by OS/2 compatibility box
  8491.     always returns AL=00h/DL=2Fh for MS-DOS 5+ and DR-DOS 3.41+
  8492. SeeAlso: AX=3701h
  8493. --------D-213701-----------------------------
  8494. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  8495.     AX = 3701h
  8496.     DL = new switch character
  8497. Return: AL = status
  8498.         00h successful
  8499.         FFh unsupported subfunction
  8500. Notes:    documented in some OEM versions of some releases of DOS
  8501.     supported by OS/2 compatibility box
  8502.     ignored by MS-DOS 5+ and DR-DOS 3.41+; DR-DOS 6.0 leaves AX unchanged
  8503. SeeAlso: AX=3700h
  8504. --------D-2137-------------------------------
  8505. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  8506.     AH = 37h
  8507.     AL = subfunction
  8508.         02h get availdev flag
  8509.         Return: DL = 00h \DEV\ must precede character device names
  8510.                = nonzero \DEV\ is optional
  8511.         03h set availdev flag
  8512.         DL = 00h    \DEV\ is mandatory
  8513.            = nonzero    \DEV\ is optional
  8514. Return: AL = status
  8515.         00h successful
  8516.         FFh unsupported subfunction
  8517. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  8518.       names without generating an error even if the directory \DEV does
  8519.       not actually exist (other paths generate an error if they do not
  8520.       exist).
  8521.     although MS-DOS 3.3+ and DR-DOS 3.41+ accept these calls, they have no
  8522.       effect, and AL=02h always returns DL=FFh
  8523. --------k-2137D0BX899D-----------------------
  8524. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  8525.     AX = 37D0h
  8526.     BX = 899Dh ('DI' + 'ET')
  8527. Return: AL = FFh if not present as TSR (default return value from DOS)
  8528.     AX = 0000h if installed as a TSR
  8529.         CX = 899Dh
  8530.         DX = version ID
  8531. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  8532. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  8533. --------k-2137D1BX899D-----------------------
  8534. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  8535.     AX = 37D1h
  8536.     BX = 899Dh ('DI' + 'ET')
  8537. Return: AX = 0000h
  8538.     CX = code segment of TSR part of DIET.EXE
  8539.     DX = memory block segment of TSR DIET.EXE
  8540.         (0000h if installed as device driver)
  8541. SeeAlso: AX=37D0h,AX=37DFh
  8542. --------k-2137D2BX899D-----------------------
  8543. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  8544.     AX = 37D2h
  8545.     BX = 899Dh ('DI' + 'ET')
  8546. Return: AX = 0000h
  8547.     DL = control flag (00h active, else disabled)
  8548.     DH = skip flag (nonzero while TSR active)
  8549. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  8550. --------k-2137D3BX899D-----------------------
  8551. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  8552.     AX = 37D3h
  8553.     BX = 899Dh ('DI' + 'ET')
  8554.     DL = control flag (00h active, else disabled)
  8555.     DH = skip flag (00h)
  8556. Return: AX = 0000h
  8557. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  8558. --------k-2137D4BX899D-----------------------
  8559. INT 21 - DIET v1.43e - GET TSR OPTIONS
  8560.     AX = 37D4h
  8561.     BX = 899Dh ('DI' + 'ET')
  8562. Return: AX = 0000h
  8563.     DX = TSR options (see below)
  8564. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  8565.  
  8566. Bitfields for TSR options:
  8567.  bit 0    automated compression of DIETed file
  8568.  bit 1    automated compression of newly-created file
  8569.  bit 2    suppress DIET message
  8570.  bit 3    display original file size
  8571.  bits 4-15 reserved (0)
  8572. --------k-2137D5BX899D-----------------------
  8573. INT 21 - DIET v1.43e - SET TSR OPTIONS
  8574.     AX = 37D5h
  8575.     BX = 899Dh ('DI' + 'ET')
  8576.     DX = TSR options (see AX=37D4h)
  8577. Return: AX = 0000h
  8578. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  8579. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  8580. --------k-2137D6BX899D-----------------------
  8581. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  8582.     AX = 37D6h
  8583.     BX = 899Dh ('DI' + 'ET')
  8584. Return: AX = 0000h
  8585.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  8586. SeeAlso: AX=37D0h,AX=37D7h
  8587. --------k-2137D7BX899D-----------------------
  8588. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  8589.     AX = 37D7h
  8590.     BX = 899Dh ('DI' + 'ET')
  8591.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  8592.         0000h:0000h for current directory
  8593. Return: AX = 0000h
  8594. Note:    the specified directory name must include a drive letter and end with
  8595.       a backslash
  8596. SeeAlso: AX=37D0h,AX=37D6h
  8597. --------k-2137DCBX899D-----------------------
  8598. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  8599.     AX = 37DCh
  8600.     BX = 899Dh ('DI' + 'ET')
  8601.     DS:DX -> external procedure
  8602. Return: AX = 0000h
  8603. Note:    the resident code will call the specified external procedure at the
  8604.       beginning of decompression and when compression is exited on failure
  8605. SeeAlso: AX=37DDh
  8606.  
  8607. External procedure called with:
  8608.     STACK:    WORD    class
  8609.             FFFDh creation failed for unknown reasons
  8610.             FFFEh creation failed due to lack of space
  8611.             FFFFh file creation error
  8612.             else file handle of DIETed file to be decompressed
  8613.         DWORD    -> compressed filename
  8614.         DWORD    -> decompressed or temporary filename
  8615. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  8616. --------k-2137DDBX899D-----------------------
  8617. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  8618.     AX = 37DDh
  8619.     BX = 899Dh ('DI' + 'ET')
  8620. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  8621. Note:    unlinks the external procedure specified by AX=37DCh
  8622. SeeAlso: AX=37DCh
  8623. --------k-2137DEBX899D-----------------------
  8624. INT 21 - DIET v1.43e - READ EMS STATUS
  8625.     AX = 37DEh
  8626.     BX = 899Dh ('DI' + 'ET')
  8627. Return: AX = 0000h
  8628.     CX = EMS status
  8629.         0000h not used
  8630.         0001h used as work area
  8631.         0002h used for code and as work area
  8632.     DX = EMM handle when EMS is in use
  8633. --------k-2137DFBX899D-----------------------
  8634. INT 21 - DIET v1.43e - UNLOAD TSR
  8635.     AX = 37DFh
  8636.     BX = 899Dh ('DI' + 'ET')
  8637. Return: AX = status
  8638.         0000h successful
  8639.         00FFh failed
  8640. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  8641. SeeAlso: AX=37D0h
  8642. Index:    uninstall;DIET
  8643. --------D-2138-------------------------------
  8644. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  8645.     AH = 38h
  8646. --DOS 2.x--
  8647.     AL = 00h get current-country info
  8648.     DS:DX -> buffer for returned info (see below)
  8649. Return: CF set on error
  8650.         AX = error code (02h)
  8651.     CF clear if successful
  8652.         AX = country code (MS-DOS 2.11 only)
  8653.         buffer at DS:DX filled
  8654. --DOS 3+--
  8655.     AL = 00h for current country
  8656.     AL = 01h thru 0FEh for specific country with code <255
  8657.     AL = 0FFh for specific country with code >= 255
  8658.        BX = 16-bit country code
  8659.     DS:DX -> buffer for returned info (see below)
  8660. Return: CF set on error
  8661.         AX = error code (02h)
  8662.     CF clear if successful
  8663.         BX = country code
  8664.         DS:DX buffer filled
  8665. Note:    this function is not supported by the Borland DPMI host, but no error
  8666.       is returned; as a workaround, one should allocate a buffer in
  8667.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  8668.       INT 31/AX=0300h
  8669. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  8670.  
  8671. Format of DOS 2.00-2.10 country info:
  8672. Offset    Size    Description
  8673.  00h    WORD    date format  0 = USA    mm dd yy
  8674.                  1 = Europe dd mm yy
  8675.                  2 = Japan    yy mm dd
  8676.  02h    BYTE    currency symbol
  8677.  03h    BYTE    00h
  8678.  04h    BYTE    thousands separator char
  8679.  05h    BYTE    00h
  8680.  06h    BYTE    decimal separator char
  8681.  07h    BYTE    00h
  8682.  08h 24 BYTEs    reserved
  8683.  
  8684. Format of DOS 2.11+ country info:
  8685. Offset    Size    Description
  8686.  00h    WORD    date format (see above)
  8687.  02h  5 BYTEs    ASCIZ currency symbol string
  8688.  07h  2 BYTEs    ASCIZ thousands separator
  8689.  09h  2 BYTEs    ASCIZ decimal separator
  8690.  0Bh  2 BYTEs    ASCIZ date separator
  8691.  0Dh  2 BYTEs    ASCIZ time separator
  8692.  0Fh    BYTE    currency format
  8693.         bit 2 = set if currency symbol replaces decimal point
  8694.         bit 1 = number of spaces between value and currency symbol
  8695.         bit 0 = 0 if currency symbol precedes value
  8696.             1 if currency symbol follows value
  8697.  10h    BYTE    number of digits after decimal in currency
  8698.  11h    BYTE    time format
  8699.         bit 0 = 0 if 12-hour clock
  8700.             1 if 24-hour clock
  8701.  12h    DWORD    address of case map routine
  8702.         (FAR CALL, AL = character to map to upper case [>= 80h])
  8703.  16h  2 BYTEs    ASCIZ data-list separator
  8704.  18h 10 BYTEs    reserved
  8705.  
  8706. Values for country code:
  8707.  001h    United States
  8708.  002h    Canadian-French
  8709.  003h    Latin America
  8710.  01Fh    Netherlands
  8711.  020h    Belgium
  8712.  021h    France
  8713.  022h    Spain
  8714.  024h    Hungary (not supported by DR-DOS 5.0)
  8715.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  8716.  027h    Italy
  8717.  029h    Switzerland
  8718.  02Ah    Czechoslovakia/Tjekia (not supported by DR-DOS 5.0)
  8719.  02Bh    Austria (DR-DOS 5.0)
  8720.  02Ch    United Kingdom
  8721.  02Dh    Denmark
  8722.  02Eh    Sweden
  8723.  02Fh    Norway
  8724.  030h    Poland (not supported by DR-DOS 5.0)
  8725.  031h    Germany
  8726.  037h    Brazil (not supported by DR-DOS 5.0)
  8727.  03Dh    International English [Australia in DR-DOS 5.0]
  8728.  051h    Japan (DR-DOS 5.0, MS-DOS 5.0+)
  8729.  052h    Korea (DR-DOS 5.0)
  8730.  056h    China (MS-DOS 5.0+)
  8731.  058h    Taiwan (MS-DOS 5.0+)
  8732.  05Ah    Turkey (MS-DOS 5.0+)
  8733.  15Fh    Portugal
  8734.  162h    Iceland
  8735.  166h    Finland
  8736.  311h    Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+)
  8737.  3CCh    Israel (DR-DOS 5.0,MS-DOS 5.0+)
  8738. --------D-2138--DXFFFF-----------------------
  8739. INT 21 - DOS 3+ - SET COUNTRY CODE
  8740.     AH = 38h
  8741.     DX = FFFFh
  8742.     AL = 01h thru FEh for specific country with code <255
  8743.     AL = FFh for specific country with code >= 255
  8744.        BX = 16-bit country code (see AH=38h)
  8745. Return: CF set on error
  8746.         AX = error code (see AH=59h)
  8747.     CF clear if successful
  8748. Note:    not supported by OS/2
  8749. SeeAlso: INT 2F/AX=1403h
  8750. --------D-2139-------------------------------
  8751. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  8752.     AH = 39h
  8753.     DS:DX -> ASCIZ pathname
  8754. Return: CF clear if successful
  8755.         AX destroyed
  8756.     CF set on error
  8757.         AX = error code (03h,05h) (see AH=59h)
  8758. Notes:    all directories in the given path except the last must exist
  8759.     fails if the parent directory is the root and is full
  8760.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  8761.       it is not possible to make that directory the current directory
  8762.       because the path would exceed 64 characters
  8763.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8764. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AH=71h,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  8765. --------D-213A-------------------------------
  8766. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  8767.     AH = 3Ah
  8768.     DS:DX -> ASCIZ pathname of directory to be removed
  8769. Return: CF clear if successful
  8770.         AX destroyed
  8771.     CF set on error
  8772.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  8773. Notes:    directory must be empty (contain only '.' and '..' entries)
  8774.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8775. SeeAlso: AH=39h,AH=3Bh,AH=71h,AH=E2h/SF=0Bh,INT 2F/AX=1101h
  8776. --------D-213B-------------------------------
  8777. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  8778.     AH = 3Bh
  8779.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  8780. Return: CF clear if successful
  8781.         AX destroyed
  8782.     CF set on error
  8783.         AX = error code (03h) (see AH=59h)
  8784. Notes:    if new directory name includes a drive letter, the default drive is
  8785.       not changed, only the current directory on that drive
  8786.     changing the current directory also changes the directory in which
  8787.       FCB file calls operate
  8788.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8789. SeeAlso: AH=47h,AH=71h,INT 2F/AX=1105h
  8790. --------D-213C-------------------------------
  8791. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  8792.     AH = 3Ch
  8793.     CX = file attributes (see below)
  8794.     DS:DX -> ASCIZ filename
  8795. Return: CF clear if successful
  8796.         AX = file handle
  8797.     CF set on error
  8798.         AX = error code (03h,04h,05h) (see AH=59h)
  8799. Notes:    if a file with the given name exists, it is truncated to zero length
  8800.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8801.     DR-DOS checks the system password or explicitly supplied password at
  8802.       the end of the filename against the reserved field in the directory
  8803.       entry before allowing access
  8804. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  8805.  
  8806. Bitfields for file attributes:
  8807.  bit 0    read-only
  8808.  bit 1    hidden
  8809.  bit 2    system
  8810.  bit 3    volume label (ignored)
  8811.  bit 4    reserved, must be zero (directory)
  8812.  bit 5    archive bit
  8813.  bit 7    if set, file is shareable under Novell NetWare
  8814. --------D-213D-------------------------------
  8815. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  8816.     AH = 3Dh
  8817.     AL = access and sharing modes (see below)
  8818.     DS:DX -> ASCIZ filename
  8819.     CL = attribute mask of files to look for (server call only)
  8820. Return: CF clear if successful
  8821.         AX = file handle
  8822.     CF set on error
  8823.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see AH=59h)
  8824. Notes:    file pointer is set to start of file
  8825.     file handles which are inherited from a parent also inherit sharing
  8826.       and access restrictions
  8827.     files may be opened even if given the hidden or system attributes
  8828.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8829.     DR-DOS checks the system password or explicitly supplied password at
  8830.       the end of the filename against the reserved field in the directory
  8831.       entry before allowing access
  8832.     sharing modes are only effective on local drives if SHARE is loaded
  8833. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  8834.  
  8835. Bitfields for access and sharing modes:
  8836.  bits 2-0 access mode
  8837.     000 read only
  8838.     001 write only
  8839.     010 read/write
  8840.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  8841.         case-sensitive filenames
  8842.  bit 3    reserved (0)
  8843.  bits 6-4 sharing mode (DOS 3+)
  8844.     000 compatibility mode
  8845.     001 "DENYALL" prohibit both read and write access by others
  8846.     010 "DENYWRITE" prohibit write access by others
  8847.     011 "DENYREAD" prohibit read access by others
  8848.     100 "DENYNONE" allow full access by others
  8849.     111 network FCB (only available during server call)
  8850.  bit 7    inheritance
  8851.     if set, file is private to current process and will not be inherited
  8852.       by child processes
  8853.  
  8854. File sharing behavior:
  8855.       |    Second and subsequent Opens
  8856.  First      |Compat  Deny      Deny     Deny    Deny
  8857.  Open      |       All      Write     Read    None
  8858.       |R W RW R W RW R W RW R W RW R W RW
  8859.  - - - - -| - - - - - - - - - - - - - - - - -
  8860.  Compat R |Y Y Y  N N N     1 N N    N N N  1 N N
  8861.     W |Y Y Y  N N N     N N N    N N N  N N N
  8862.     RW|Y Y Y  N N N     N N N    N N N  N N N
  8863.  - - - - -|
  8864.  Deny    R |C C C  N N N     N N N    N N N  N N N
  8865.  All    W |C C C  N N N     N N N    N N N  N N N
  8866.     RW|C C C  N N N     N N N    N N N  N N N
  8867.  - - - - -|
  8868.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N
  8869.  Write    W |C C C  N N N     N N N    Y N N  Y N N
  8870.     RW|C C C  N N N     N N N    N N N  Y N N
  8871.  - - - - -|
  8872.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  8873.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  8874.     RW|C C C  N N N     N N N    N N N  N Y N
  8875.  - - - - -|
  8876.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  8877.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  8878.     RW|C C C  N N N     N N N    N N N  Y Y Y
  8879. Legend: Y = open succeeds, N = open fails with error code 05h
  8880.     C = open fails, INT 24 generated
  8881.     1 = open succeeds if file read-only, else fails with error code
  8882.     2 = open succeeds if file read-only, else fails with INT 24
  8883. --------v-213DFF-----------------------------
  8884. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  8885.     AX = 3DFFh
  8886. Return: AX = 4A44h if resident
  8887. SeeAlso: AX=357Fh,AX=4203h
  8888. --------D-213E-------------------------------
  8889. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  8890.     AH = 3Eh
  8891.     BX = file handle
  8892. Return: CF clear if successful
  8893.         AX destroyed
  8894.     CF set on error
  8895.         AX = error code (06h) (see AH=59h)
  8896. Note:    if the file was written to, any pending disk writes are performed, the
  8897.       time and date stamps are set to the current time, and the directory
  8898.       entry is updated
  8899. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  8900. --------D-213F-------------------------------
  8901. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  8902.     AH = 3Fh
  8903.     BX = file handle
  8904.     CX = number of bytes to read
  8905.     DS:DX -> buffer for data
  8906. Return: CF clear if successful
  8907.         AX = number of bytes actually read (0 if at EOF before call)
  8908.     CF set on error
  8909.         AX = error code (05h,06h) (see AH=59h)
  8910. Notes:    data is read beginning at current file position, and the file position
  8911.       is updated after a successful read
  8912.     the returned AX may be smaller than the request in CX if a partial
  8913.       read occurred
  8914.     if reading from CON, read stops at first CR
  8915.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8916. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  8917. --------G-213F-------------------------------
  8918. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  8919.     AH = 3Fh
  8920.     BX = handle for character device "TDHDEBUG"
  8921.     CX = number of bytes to read
  8922.     DS:DX -> buffer for status block (see below)
  8923. Return: CF clear if successful
  8924.         AX = number of bytes actually read
  8925.     CF set on error
  8926.         AX = error code (05h,06h) (see AH=59h)
  8927. SeeAlso: AH=40h"Turbo Debug"
  8928.  
  8929. Values for status of command:
  8930.  00h    successful
  8931.  01h    invalid handle
  8932.  02h    no more breakpoints available
  8933.  03h    hardware does not support specified breakpoint type
  8934.  04h    previous command prevents execution
  8935.  05h    debugger hardware not found
  8936.  06h    hardware failure
  8937.  07h    invalid command
  8938.  08h    driver not initialized yet
  8939.  FEh    recursive entry (hardware breakpoint inside hw bp handler)
  8940.  
  8941. Format of status block:
  8942. Offset    Size    Description
  8943.  00h    BYTE    status of command (see above)
  8944. ---status for command 01h---
  8945.  01h    WORD    device driver interface version number (currently 1)
  8946.  03h    WORD    device driver software version
  8947.  05h    BYTE    maximum simultaneous hardware breakpoints
  8948.  06h    BYTE    configuration bits (see below)
  8949.  07h    BYTE    supported breakpoint types (see below)
  8950.  08h    WORD    supported addressing match modes (see below)
  8951.  0Ah    WORD    supported data matches (see below)
  8952.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  8953.  0Dh    WORD    size of onboard memory (in KB)
  8954.  0Fh    WORD    maximum number of trace-back events
  8955.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  8956.         supported)
  8957. ---status for command 04h---
  8958.  01h    BYTE    handle to use when referring to the just-set breakpoint
  8959.  
  8960. Bitfields for configuration bits:
  8961.  bit 0    CPU and DMA accesses are distinct
  8962.  bit 1    can detect DMA transfers
  8963.  bit 2    supports data mask
  8964.  bit 3    hardware pass counter on breakpoints
  8965.  bit 4    can match on data as well as addresses
  8966.  
  8967. Bitfields for supported breakpoint types:
  8968.  bit 0    memory read
  8969.  bit 1    memory write
  8970.  bit 2    memory read/write
  8971.  bit 3    I/O read
  8972.  bit 4    I/O write
  8973.  bit 5    I/O read/write
  8974.  bit 6    instruction fetch
  8975.  
  8976. Bitfields for supported addressing match modes:
  8977.  bit 0    any address
  8978.  bit 1    equal to test value
  8979.  bit 2    not equal
  8980.  bit 3    above test value
  8981.  bit 4    below test value
  8982.  bit 5    below or equal
  8983.  bit 6    above or equal
  8984.  bit 7    within range
  8985.  bit 8    outside range
  8986.  
  8987. Bitfields for supported data matches:
  8988.  bit 0    any data
  8989.  bit 1    equal to test value
  8990.  bit 2    not equal
  8991.  bit 3    above test value
  8992.  bit 4    below test value
  8993.  bit 5    below or equal
  8994.  bit 6    above or equal
  8995.  bit 7    within range
  8996.  bit 8    outside range
  8997. --------N-213F-------------------------------
  8998. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  8999.     AH = 3Fh
  9000.     BX = handle for character device "$IPCUST"
  9001.     CX = number of bytes to read
  9002.     DS:DX -> buffer for configuration data (see below)
  9003. Return: CF clear if successful
  9004.         AX = number of bytes actually read
  9005.     CF set on error
  9006.         AX = error code (05h,06h) (see AH=59h)
  9007. Notes:    if less than the entire data is read or written, the next read/write
  9008.       continues where the previous one ended; IOCTL calls AX=4402h and
  9009.       AX=4403h both reset the location at which the next operation starts
  9010.       to zero
  9011.     the data pointer is also reset to zero if the previous read or write
  9012.       reached or exceeded the end of the data, when the current function
  9013.       is read and the previous was write, or vice versa
  9014.     v2.1+ uses a new configuration method, but allows the installation
  9015.       of IPCUST.SYS for backward compatibility with other software which
  9016.       must read the PC/TCP configuration
  9017. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT"
  9018.  
  9019. Format of configuration data:
  9020. Offset    Size    Description
  9021.  00h 12 BYTEs    IPCUST.SYS device driver header
  9022.  12h    BYTE    ???
  9023.  13h    BYTE    ???
  9024.  14h    WORD    ???
  9025.  16h    BYTE    bit flags
  9026.         bit 0: send BS rather than DEL for BackSpace key
  9027.         bit 1: wrap long lines
  9028.  17h    BYTE    ???
  9029.  18h 64 BYTEs    ASCIZ hostname
  9030.  58h 64 BYTEs    ASCIZ domain name
  9031.         (fully qualified domain name is hostname.domain-name)
  9032.  98h 16 BYTEs    ASCIZ username
  9033.  A8h 64 BYTEs    ASCIZ full name
  9034.  E8h 64 BYTEs    ASCIZ office address
  9035. 128h 32 BYTEs    ASCIZ phone number
  9036. 148h    WORD    offset from GMT in minutes
  9037. 14Ah  4 BYTEs    ASCIZ timezone name
  9038. 14Eh    WORD    number of time servers
  9039. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  9040.     ???
  9041. 164h    WORD    number of old-style name servers
  9042. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  9043. 172h    WORD    number of domain name servers
  9044. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  9045. 180h    DWORD    (big-endian) IP address of default gateway
  9046. 184h    DWORD    (big-endian) IP address of log server
  9047. 188h    DWORD    (big-endian) IP address of cookie server
  9048. 18Ch    DWORD    (big-endian) IP address of lpr server
  9049. 190h    DWORD    (big-endian) IP address of imagen print server
  9050. 194h 54 BYTEs    ???
  9051. 1E8h    WORD    TCP default window size in bytes
  9052. 1EAh    WORD    TCP low window size
  9053. 1ECh 64 BYTEs    ASCIZ host tabel filename
  9054. 22Ch  2 BYTEs    ???
  9055. 22Eh 80 BYTEs    ASCIZ mail relay host name
  9056. 27Eh    BYTE    ???
  9057. 27Fh    BYTE    ??? bit flags
  9058. 280h 44 BYTEs    ???
  9059. 2ACh    WORD    ???
  9060. 2AEh 202 BYTEs    ???
  9061. --------N-213F-------------------------------
  9062. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  9063.     AH = 3Fh
  9064.     BX = file handle for device "NET$HLP$"
  9065.     CX = 0008h
  9066.     DS:DX -> buffer for entry point record (see AX=4402h"WORKGRP.SYS")
  9067. Return: CF clear if successful
  9068.         AX = number of bytes actually read (0 if at EOF before call)
  9069.     CF set on error
  9070.         AX = error code (05h,06h) (see AH=59h)
  9071. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  9072.       permits communication with PCs running Windows for Workgroups or
  9073.       LAN Manager
  9074. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  9075. --------N-213F-------------------------------
  9076. INT 21 - BW-TCP - GET DRIVER INFO
  9077.     AH = 3Fh
  9078.     BX = file handle for device "ETHDEV27"
  9079.     CX = 002Bh
  9080.     DS:DX -> buffer for driver info (see below)
  9081. Return: CF clear if successful
  9082.         AX = number of bytes actually read (0 if at EOF before call)
  9083.     CF set on error
  9084.         AX = error code (05h,06h) (see AH=59h)
  9085. Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software
  9086. Notes:    the B&W socket library performs an INT 21/AX=4401h with DX=0060h before
  9087.       making this call to retrieve the driver information; one should also
  9088.       call the private API interrupt with AH=15h
  9089.     the installation check for the TCP/IP stack is to test for the
  9090.       existence of the character device UDP-IP10
  9091. SeeAlso: INT 14/AH=56h,INT 62"BW-TCP",INT 63/AH=03h,INT 64/AH=00h
  9092. Index:    installation check;BW-TCP hardware driver
  9093. Index:    installation check;BW-TCP TCPIP.SYS
  9094.  
  9095. Format of driver info:
  9096. Offset    Size    Description
  9097.  00h    WORD    I/O base address
  9098.  02h    BYTE    shared memory page (01h = segment 0100h, etc.)
  9099.  03h    BYTE    interrupt vector for private API
  9100.  04h    BYTE    IRQ used by board
  9101.  05h    WORD    size of data buffer
  9102.  07h    WORD    maximum transfer window
  9103.  09h    WORD    time zone
  9104.  0Bh    BYTE    address type (01h user, 04h RARP, 05h BOOTP)
  9105.  0Ch    DWORD    internet address
  9106.  10h    WORD    "value" ???
  9107.  12h    BYTE    subnet mask
  9108.  13h    WORD    "ether_pointer" ???
  9109.  15h    WORD    offset in device driver of log server records
  9110.  17h    WORD    offset in device driver of name server records
  9111.  19h    WORD    offset in device driver of print server records
  9112.  1Bh    WORD    offset in device driver of time server records
  9113.  1Dh    WORD    offset in device driver of gateway records
  9114.  1Fh    WORD    segment address of device driver
  9115.  21h    BYTE    transfer size
  9116.  22h  9 BYTEs    network adapter board name
  9117. ---11/21/91+ ---
  9118.  23h    BYTE    ETHDEV version (major in high nybble, minor in low nybble)
  9119.  24h    BYTE    ETHDEV revision
  9120.  25h    BYTE    TCPIP version (major in high nybble, minor in low nybble)
  9121.  26h    BYTE    TCPIP revision
  9122.  27h    BYTE    BWRPC version (major in high nybble, minor in low nybble)
  9123.  28h    BYTE    BWRPC revision
  9124.  29h    BYTE    BWNFS version (major in high nybble, minor in low nybble)
  9125.  2Ah    BYTE    BWNFS revision
  9126.  2Bh    BYTE    Telnet version (major in high nybble, minor in low nybble)
  9127.  2Ch    BYTE    Telnet revision
  9128.  2Dh    BYTE    NETBIOS version (major in high nybble, minor in low nybble)
  9129.  2Eh    BYTE    NETBIOS revision
  9130. Note:    for each driver, if version=0, the driver is not installed or does
  9131.       not support the version check
  9132.  
  9133. Format of server records:
  9134. Offset    Size    Description
  9135.  00h    BYTE    number of server records following
  9136.  01h  N DWORDs    internet addresses of servers
  9137. --------y-213F-------------------------------
  9138. INT 21 - Trusted Access - NB.SYS - GET STATE
  9139.     AH = 3Fh
  9140.     BX = file handle for device "$$NB$$NB"
  9141.     CX = 0002h (size of state)
  9142.     DS:DX -> buffer for state record
  9143. Return: CF clear if successful
  9144.         AX = number of bytes actually read (0 if at EOF before call)
  9145.     CF set on error
  9146.         AX = error code (05h,06h) (see AH=59h)
  9147. Program: Trusted Access is a security and access-control package by Lassen
  9148.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  9149.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  9150. SeeAlso: AH=40h"NB.SYS",AX=4101h
  9151.  
  9152. Format of state record:
  9153. Offset    Size    Description
  9154.  00h    BYTE    00h off, 01h on
  9155.  01h    BYTE    keys being disabled
  9156.         bit 0: Ctrl-Break
  9157.         bit 1: SysRq
  9158.         bit 2: Ctrl and Alt
  9159.         bit 3: Ctrl-Alt-Del
  9160.         bit 7: all keys (overrides other bits)
  9161. --------D-2140-------------------------------
  9162. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  9163.     AH = 40h
  9164.     BX = file handle
  9165.     CX = number of bytes to write
  9166.     DS:DX -> data to write
  9167. Return: CF clear if successful
  9168.         AX = number of bytes actually written
  9169.     CF set on error
  9170.         AX = error code (05h,06h) (see AH=59h)
  9171. Notes:    if CX is zero, no data is written, and the file is truncated or
  9172.       extended to the current position
  9173.     data is written beginning at the current file position, and the file
  9174.       position is updated after a successful write
  9175.     the usual cause for AX < CX on return is a full disk
  9176. BUG:    a write of zero bytes will appear to succeed when it actually failed
  9177.       if the write is extending the file and there is not enough disk
  9178.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  9179.       whether the file was in fact extended by seeking to 0 bytes from
  9180.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  9181.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  9182. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  9183. --------G-2140-------------------------------
  9184. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  9185.     AH = 40h
  9186.     BX = handle for character device "TDHDEBUG"
  9187.     CX = number of bytes to write
  9188.     DS:DX -> hardware breakpoint command (see below)
  9189. Return: CF clear if successful
  9190.         AX = number of bytes actually written
  9191.     CF set on error
  9192.         AX = error code (05h,06h) (see AH=59h)
  9193. Note:    results are retrieved by reading from the device
  9194. SeeAlso: AH=3Fh"Turbo Debug"
  9195.  
  9196. Format of hardware breakpoint commands:
  9197. Offset    Size    Description
  9198.  00h    BYTE    command code
  9199.         00h install interrupt vectors
  9200.         01h get hardware capabilities
  9201.         02h enable hardware breakpoints
  9202.         03h disable hardware breakpoints
  9203.         04h set hardware breakpoint
  9204.         05h clear hardware breakpoint
  9205.         06h set I/O base address and reset hardware
  9206.         07h restore interrupt vectors
  9207. ---command code 00h---
  9208.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  9209.         hardware breakpoint; call with CPU state the same as on
  9210.         the breakpoint except for pushing AX and placing an entry
  9211.         code (FFh if breakout button or breakpoint handle) in AH
  9212. ---command code 04h---
  9213.  01h    BYTE    breakpoint type
  9214.         00h memory read
  9215.         01h memory write
  9216.         02h memory read/write
  9217.         03h I/O read
  9218.         04h I/O write
  9219.         05h I/O read/write
  9220.         06h instruction fetch
  9221.  02h    BYTE    address matching mode
  9222.         00h any address
  9223.         01h equal to test value
  9224.         02h different from test value
  9225.         03h above test value
  9226.         04h below test value
  9227.         05h below or equal to test value
  9228.         06h above or equal to test value
  9229.         07h within inclusive range
  9230.         08h outside specified range
  9231.  03h    DWORD    32-bit linear low address
  9232.  07h    DWORD    32-bit linear high address
  9233.  0Bh    WORD    pass count
  9234.  0Dh    BYTE    data size (01h, 02h, or 04h)
  9235.  0Eh    BYTE    source of matched bus cycle
  9236.         01h CPU
  9237.         02h DMA
  9238.         03h either
  9239.  0Fh    BYTE    data-matching mode
  9240.         00h match any
  9241.         01h equal to test value
  9242.         02h different from test value
  9243.         03h above test value
  9244.         04h below test value
  9245.         05h below or equal to test value
  9246.         06h above or equal to test value
  9247.         07h within specified range
  9248.         08h outside specified range
  9249.  10h    DWORD    low data value
  9250.  14h    DWORD    high data value
  9251.  18h    DWORD    data mask specifying which bits of the data are tested
  9252. ---command code 05h---
  9253.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  9254.         04h)
  9255. ---command code 06h---
  9256.  01h    WORD    base address of hardware debugger board
  9257. --------N-2140-------------------------------
  9258. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  9259.     AH = 40h
  9260.     BX = handle for character device "$IPCUST"
  9261.     CX = number of bytes to write
  9262.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  9263. Return: CF clear if successful
  9264.         AX = number of bytes actually written
  9265.     CF set on error
  9266.         AX = error code (05h,06h) (see AH=59h)
  9267. Notes:    if less than the entire data is read or written, the next read/write
  9268.       continues where the previous one ended; IOCTL calls AX=4402h and
  9269.       AX=4403h both reset the location at which the next operation starts
  9270.       to zero
  9271.     the data pointer is also reset to zero if the previous read or write
  9272.       reached or exceeded the end of the data, when the current function
  9273.       is read and the previous was write, or vice versa
  9274.     v2.1+ uses a new configuration method, but allows the installation
  9275.       of IPCUST.SYS for backward compatibility with other software which
  9276.       must read the PC/TCP configuration
  9277. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  9278. --------y-2140-------------------------------
  9279. INT 21 U - Trusted Access - NB.SYS - SET STATE
  9280.     AH = 40h
  9281.     BX = handle for character device "$$NB$$NB"
  9282.     DS:DX -> state record (see AH=3Fh"NB.SYS")
  9283.     CX ignored
  9284. Return: CF clear if successful
  9285.         AX = number of bytes actually written
  9286.     CF set on error
  9287.         AX = error code (05h,06h) (see AH=59h)
  9288. Program: Trusted Access is a security and access-control package by Lassen
  9289.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  9290.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  9291. SeeAlso: AH=3Fh"NB.SYS"
  9292. --------j-214000BX0002-----------------------
  9293. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  9294.     AX = 4000h
  9295.     BX = 0002h
  9296.     CX = 0000h
  9297.     DS:DX = 0000h:0000h
  9298. Return: CF clear if installed
  9299.         AX = CS of resident code
  9300. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  9301.       noises when programs output a bell
  9302. SeeAlso: AX=4001h
  9303. --------j-214001BX0002-----------------------
  9304. INT 21 - FARTBELL.EXE - FORCE NOISE
  9305.     AX = 4001h
  9306.     BX = 0002h
  9307.     CX = 0000h
  9308.     DS:DX = 0000h:0000h
  9309. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  9310.       noises when programs output a bell
  9311. SeeAlso: AX=4000h
  9312. --------D-2141-------------------------------
  9313. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  9314.     AH = 41h
  9315.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  9316.     CL = attribute mask for deletion (server call only, see below)
  9317. Return: CF clear if successful
  9318.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  9319.     CF set on error
  9320.         AX = error code (02h,03h,05h) (see AH=59h)
  9321. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  9322.       the filespec must be canonical (as returned by AH=60h), and only
  9323.       files matching the attribute mask in CL are deleted
  9324.     DR-DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h
  9325.     DOS does not erase the file's data; it merely becomes inaccessible
  9326.       because the FAT chain for the file is cleared
  9327.     deleting a file which is currently open may lead to filesystem
  9328.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  9329.       referencing the deleted file, thus allowing writes to a nonexistant
  9330.       file.
  9331.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  9332.       is currently open
  9333.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  9334. BUG:    DR-DOS 3.41 crashes if called via AX=5D00h
  9335. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AH=71h,AX=F244h
  9336. SeeAlso: INT 2F/AX=1113h
  9337. --------y-214101DXFFFE-----------------------
  9338. INT 21 - SoftLogic Data Guardian - ???
  9339.     AX = 4101h
  9340.     DX = FFFEh
  9341. Return: AX = 0000h if installed
  9342. Note:    resident code sets several internal variables on this call
  9343. SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h
  9344. --------!------------------------------------
  9345.