home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR3 / INTER38A.ZIP / INTERRUP.C < prev    next >
Text File  |  1993-12-05  |  331KB  |  8,988 lines

  1. Interrupt List, part 3 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 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
  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-1621-------------------------------
  187. INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE (122-key kbd support only)
  188.     AH = 21h
  189. Return: ZF set if no keystroke available
  190.     ZF clear if keystroke available
  191.         AH = BIOS scan code
  192.         AL = ASCII character
  193. Notes:    use AH=09h to determine whether this function is supported
  194.     some versions of the IBM BIOS Technical Reference erroneously report
  195.       that CF is returned instead of ZF
  196. SeeAlso: AH=01h,AH=09h,AH=11h,AH=20h,AH=21h
  197. --------B-1622-------------------------------
  198. INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS (122-key kbd support only)
  199.     AH = 22h
  200. Return: AL = shift flags 1 (see AH=12h)
  201.     AH = shift flags 2 (see AH=12h)
  202. Note:    use AH=09h to determine whether this function is supported
  203. SeeAlso: AH=02h,AH=09h,AH=12h,AH=20h,AH=21h
  204. --------U-164252-----------------------------
  205. INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
  206.     AX = 4252h
  207. Return: AX = 5242h if installed
  208. Program: TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the
  209.       PC Magazine utility CAPTURE written by Tom Kihlken
  210. SeeAlso: AX=4253h,AX=4254h
  211. --------U-164253-----------------------------
  212. INT 16 - TEXTCAP 2.0 - UNINSTALL
  213.     AX = 4253h
  214. Return: AX = segment of resident code
  215. Notes:    the uninstall code does not check whether interrupt vectors have been
  216.       chained by other programs
  217.     the caller must free the main memory block (using the returned segment)
  218. SeeAlso: AX=4252h,AX=4254h
  219. --------U-164254-----------------------------
  220. INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
  221.     AX = 4254h
  222. Return: AX = status
  223.         4254h if screen dump will be written as soon as disk becomes idle
  224.         5442h if screen dump written
  225. SeeAlso: AX=4252h,AX=4253h
  226. --------e-164500-----------------------------
  227. INT 16 - Shamrock Software EMAIL - GET STATUS
  228.     AX = 4500h
  229.     DL = port number (01h = COM1)
  230.     ES:BX -> 13-byte buffer for ASCIZ name
  231. Return: AX = 4D00h if EMAIL installed on specified port
  232.         ES:BX -> "" if no connection
  233.           -> "*" if connection but caller has not identified name
  234.           -> name otherwise
  235.         CX = version (CH = major, CL = minor)
  236.         DL = privilege level of user (00h = guest)
  237.         DH = chosen language (00h German, 01h English)
  238. SeeAlso: AX=4501h,AX=4502h
  239. --------e-164501-----------------------------
  240. INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
  241.     AX = 4501h
  242.     DL = port number (01h = COM1)
  243. Return: AX = 4D00h if EMAIL installed on specified port
  244.         BX = maximum connect time in clock ticks
  245.         CX = maximum connect time for guests (without name) in clock ticks
  246.         DX = elapsed connect time of current user in clock ticks
  247. SeeAlso: AX=4500h
  248. --------e-164502-----------------------------
  249. INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
  250.     AX = 4502h
  251.     DL = port number (01h = COM1)
  252. Return: AX = 4D00h if EMAIL installed on specified port
  253.         BL = current value of serial port's Line Control Register
  254.         BH = flags
  255.         bit 0: ISO code
  256.         bit 1: pause
  257.         bit 2: linefeed
  258.         bit 3: ANSI sequences
  259.         CX = selected country code (33 = France, 49 = Germany, etc)
  260.         DX = baudrate divisor (115200/DX = baudrate)
  261. SeeAlso: AX=4500h
  262. --------e-164503-----------------------------
  263. INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
  264.     AX = 4503h
  265.     DL = port number (01h = COM1)
  266.     DH = maximum execution time in clock ticks (00h = 5 seconds)
  267.     ES:BX -> ASCIZ string with new user command-word
  268. Return: AX = 4D00h if EMAIL installed on specified port
  269. Notes:    a single user command (consisting of only uppercase letters and digits)
  270.       may be defined, and remains valid until it is overwritten or the
  271.       EMAIL program terminates; the user command must be activated by
  272.       calling AX=4504h at least once.
  273.     an existing command word may be redefined with this function
  274. SeeAlso: AX=4504h,AX=4505h
  275. --------e-164504-----------------------------
  276. INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
  277.     AX = 4504h
  278.     DL = port number (01h = COM1)
  279.     ES:BX -> 80-byte buffer for ASCIZ user input line
  280. Return: AX = 4D00h if EMAIL installed on specified port
  281.         DL = flags
  282.         bit 0: user function supported (always set)
  283.         bit 1: user entered user-function command word
  284.         if DL bit 1 set,
  285.         ES:BX buffer contains line entered by user which begins with
  286.             the defined command word and has been converted to all
  287.             caps
  288. Note:    caller must process the returned commandline and invoke AX=4505h
  289.       within five seconds with the result of that processing
  290. SeeAlso: AX=4503h,AX=4505h
  291. --------e-164505-----------------------------
  292. INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
  293.     AX = 4505h
  294.     DL = port number (01h = COM1)
  295.     DH = error flag
  296.         bit 3: set on error
  297.     ES:BX -> ASCIZ text to return to user, max 1024 bytes
  298. Return: AH = 4Dh if EMAIL installed on specified port
  299.     AL = status
  300.         00h successful
  301.         02h unable to perform function (timeout, prev call not complete)
  302.         other error
  303. Notes:    if the error flag in DH is set, the string is not sent and an error
  304.       message is generated instead; if this function is not called within
  305.       five seconds of AX=4504h, EMAIL automatically generates an error
  306.       message
  307.     the string is copied into an internal buffer, allowing this function's
  308.       caller to continue immediately
  309. SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
  310. --------e-164506-----------------------------
  311. INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
  312.     AX = 4506h
  313.     DL = port number (01h = COM1)
  314.     ES:BX -> 13-byte buffer for ASCIZ filename
  315. Return: AX = 4D00h if EMAIL installed on specified port
  316.         DH = Xmodem status
  317.         00h no XGET command given
  318.         01h XGET in progress
  319.         02h XGET completed successfully
  320.         ES:BX buffer filled with last filename given to XGET command
  321.         (without path)
  322. Note:    DH=02h will only be returned once per XGET; subsequent calls will
  323.       return DH=00h
  324. SeeAlso: AX=4500h,INT 17/AX=2408h
  325. --------K-164D4F-----------------------------
  326. INT 16 - M16_KBD.COM v5.6 - INSTALLATION CHECK
  327.     AX = 4D4Fh
  328. Return: AX = 6F6Dh if installed
  329.         ES = segment of resident code
  330. Program: M16_KBD is a shareware Cyrillic keyboard driver by I.V. Morozov
  331. SeeAlso: INT 10/AX=1130h/BX=4D4Fh
  332. --------J-165000-----------------------------
  333. INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE
  334.     AX = 5000h
  335.     BX = country code
  336.         0001h USA (English), 0051h Japan
  337. Return: AL = status
  338.         00h successful
  339.         01h bad country code
  340.         02h other error
  341. SeeAlso: AX=5001h,INT 10/AX=5000h,INT 17/AX=5000h
  342. --------J-165001-----------------------------
  343. INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE
  344.     AX = 5001h
  345. Return: AL = status
  346.         00h successful
  347.         BX = country code
  348.         02h error
  349. SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h
  350. --------J-1651-------------------------------
  351. INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS
  352.     AH = 51h
  353. Return: AL = standard shift key states (see AH=12h)
  354.     AH = Kana lock (00h off, 01h on)
  355. SeeAlso: AH=02h,AH=12h,AH=22h
  356. --------t-165453BX5242-----------------------
  357. INT 16 - TSRBONES - INSTALLATION CHECK
  358.     AX = 5453h ('TS')
  359.     BX = 5242h ('RB')
  360.     CX = 4F4Eh ('ON')
  361.     DX = 4553h ('ES')
  362. Return: AX = 4553h if installed
  363.     BX = 4F4Eh if installed
  364.     CX = 5242h if installed
  365.     DX = 5453h if installed
  366. Program: TSRBONES is a skeletal TSR framework by Robert Curtis Davis
  367. Note:    these values are the default as the TSRBONES package is distributed,
  368.       but will normally be changed when implementing an actual TSR with
  369.       the TSRBONES skeleton
  370. SeeAlso: INT 2D"AMIS"
  371. --------A-165500-----------------------------
  372. INT 16 C - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  373.     AX = 5500h
  374. Return: AX = 4D53h ('MS') if keyboard TSR present
  375. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  376.       that are present through this call.
  377.     if the return is not 4D53h, Word installs its own INT 09 and INT 16
  378.       handlers; otherwise it assumes that the TSR will handle the keyboard
  379. SeeAlso: INT 1A/AX=3601h
  380. --------A-1655FEDX0000-----------------------
  381. INT 16 CU - Microsoft QBASIC internal - MICROSOFT COOPERATION WITH TSR???
  382.     AX = 55FEh
  383.     DX = 0000h
  384.     ES:BX -> ??? function
  385.     ES:CX -> ??? structure
  386. Return: AX = result
  387.         4D4Bh only the INT 1B handler will be installed.
  388.         <> 4D4Bh handlers for INT 08, INT 09, INT 16, INT 1B, and
  389.           INT 1C are installed
  390. Notes:    The pointer in ES:CX seems to point at a structure defining a callback
  391.       function when new keyboard keys are pressed. If a TSR returns
  392.       AX=4D4Bh, QBASIC will stop (with IRQ's and interrupts enabled).
  393. SeeAlso: INT 16/AX=5500h,INT 1A/AX=3601h
  394. --------U-1655FF-----------------------------
  395. INT 16 - Swap Utilities - ???
  396.     AX = 55FFh
  397.     BX >= 0004h
  398.     CX = function
  399.         0000h set ??? flag
  400.         other clear ??? flag
  401. Note:    present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools v7, as
  402.       well as the Trusted Access SCRNBLNK.COM; this may be part of the
  403.       standard TesSeRact library
  404. SeeAlso: INT 2F/AX=5453h
  405. --------c-165758BX4858-----------------------
  406. INT 16 U - Netroom CACHECLK - INSTALLATION CHECK
  407.     AX = 5758h
  408.     BX = 4858h ('HX')
  409.     DX = 4443h ('DC')
  410.     CX <> 5758h
  411. Return: BX = 6878h if installed
  412.     CX = 6463h if installed
  413.         AX = code segment of TSR
  414.         CX = internal version??? (v3.00 returns 0100h)
  415. Program: CACHECLK is a "cloaked" disk cache included with Netroom
  416. Notes:    if CX=5758h on entry, CACHECLK returns with all registers unchanged
  417.     the cache statistics are located early in the segment pointed at by
  418.       AX on return
  419. ----------165758BX5754-----------------------
  420. INT 16 U - Netroom ??? - ???
  421.     AX = 5758h
  422.     BX = 5754h
  423.     ???
  424. Return: ???
  425. ----------165758BX5755-----------------------
  426. INT 16 U - Netroom ??? - ???
  427.     AX = 5758h
  428.     BX = 5755h
  429.     DS:SI -> ???
  430. Return: ???
  431. ----------165758BX5756-----------------------
  432. INT 16 U - Netroom ??? - INSTALLATION CHECK
  433.     AX = 5758h
  434.     BX = 5756h
  435. Return: BX <> 5756h if installed
  436. --------m-165758BX5858-----------------------
  437. INT 16 U - Netroom PRENET - GET OLD INTERRUPT VECTORS
  438.     AX = 5758h
  439.     BX = 5858h
  440. Return: CF clear
  441.     DX:BX -> saved copy of interrupt vector table
  442. Note:    the installation check consists of calling this function and comparing
  443.       BX against 5858h on return; if it has changed, PRENET is installed
  444. SeeAlso: AX=5758h/BX=5859h
  445. Index:    installation check;Netroom PRENET
  446. --------m-165758BX5859-----------------------
  447. INT 16 U - Netroom POSTNET - GET OLD INTERRUPT VECTORS
  448.     AX = 5758h
  449.     BX = 5859h
  450. Return: CF clear
  451.     DX:BX -> saved copy of interrupt vector table
  452. Note:    the installation check consists of calling this function and comparing
  453.       BX against 5859h on return; if it has changed, POSTNET is installed
  454. SeeAlso: AX=5758h/BX=5858h
  455. Index:    installation check;Netroom POSTNET
  456. --------U-166969BX6968-----------------------
  457. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  458.     AX = 6969h
  459.     BX = 6968h
  460. Return: resident code unhooked, but not removed from memory
  461. Index:    uninstall;BACKTALK
  462. --------U-166969BX6969-----------------------
  463. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  464.     AX = 6969h
  465.     BX = 6969h
  466.     DX = 0000h
  467. Return: DX nonzero if installed
  468.         BX = CS of resident code
  469.         DX = PSP segment of resident code
  470.         DS:SI -> ASCIZ identification string "CPoint Talk"
  471. --------i-166A6B-----------------------------
  472. INT 16 U - FastJuice - DISABLE/UNLOAD???
  473.     AX = 6A6Bh
  474. Return: ???
  475. Program: FastJuice is a resident battery-power monitor by SeaSide Software
  476. SeeAlso: AX=7463h
  477. Index:    uninstall;FastJuice
  478. --------G-166C63-----------------------------
  479. INT 16 U - TMED v1.6a - INSTALLATION CHECK
  480.     AX = 6C63h ('lc')
  481. Return: AX = 4C43h ('LC') if installed
  482. Program: TMED is a freeware resident memory editor by Liang Chen
  483. --------b-166F00BX0000-----------------------
  484. INT 16 - HP HIL Vectras - HP HIL Extended BIOS INSTALLATION CHECK
  485.     AX = 6F00h
  486.     BX = 0000h
  487. Return: BX = 4850h if present
  488. Notes:    called by recent MS Mouse drivers looking for an HP-HIL mouse
  489.     supported by ES, QS, and RS series HP Vectras
  490. SeeAlso: AX=6F0Dh
  491. --------b-166F0D-----------------------------
  492. INT 16 - HP HIL Vectras - GET HIL Extended BIOS INTERRUPT NUMBER
  493.     AX = 6F0Dh
  494. Return: AH = interrupt number (default 6Fh, 02h means 6Fh as well)
  495. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 to support the HP-HIL
  496.       input system
  497. SeeAlso: AX=6F0Eh,INT 6F"HP"
  498. --------b-166F0E-----------------------------
  499. INT 16 - HP HIL Vectras - SET HIL Extended BIOS INTERRUPT NUMBER
  500.     AX = 6F0Eh
  501.     BL = new interrupt number (60h-6Fh,78h-7Fh)
  502. Return: AH = status (00h = successful)
  503. Desc:    allows the HIL Extended BIOS software to use a non-default interrupt
  504.       number in case of an interrupt conflict with another application
  505. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 to support the HP-HIL
  506.       input system
  507. SeeAlso: AX=6F0Dh,INT 6F"HP"
  508. --------K-1670-------------------------------
  509. INT 16 - FAKEY.COM - INSTALLATION CHECK
  510.     AH = 70h
  511. Return: AX = 1954h if installed
  512. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  513. --------K-1671-------------------------------
  514. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  515.     AH = 71h
  516.     CX = number of keystrokes
  517.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  518. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  519. SeeAlso: AH=05h,AH=72h
  520. --------K-1672-------------------------------
  521. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  522.     AH = 72h
  523. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  524. SeeAlso: AH=71h
  525. --------K-1673-------------------------------
  526. INT 16 - FAKEY.COM - PLAY TONES
  527.     AH = 73h
  528.     CX = number of tones to play
  529.     DS:SI -> array of tones (see below)
  530. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  531. SeeAlso: INT 15/AX=1019h
  532.  
  533. Format of tone array entries:
  534. Offset    Size    Description
  535.  00h    WORD    divisor for timer channel 2
  536.  02h    WORD    duration in clock ticks
  537. --------i-167463-----------------------------
  538. INT 16 U - FastJuice - INSTALLATION CHECK
  539.     AX = 7463h ("tc")
  540. Return: AX = 5443h ("TC") if installed
  541. Program: FastJuice is a resident battery-power monitor by SeaSide Software
  542. SeeAlso: AX=6A6Bh
  543. --------R-1675-------------------------------
  544. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  545.     AH = 75h
  546.     AL = number of ticks between checks for new screen changes
  547. --------R-1676-------------------------------
  548. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  549.     AH = 76h
  550.     AL = error checking type
  551.         00h none
  552.         01h fast
  553.         02h slow
  554. --------R-1677-------------------------------
  555. INT 16 - pcANYWHERE III - LOG OFF
  556.     AH = 77h
  557.     AL = mode
  558.         00h wait for another call
  559.         01h leave in Memory Resident Mode
  560.         02h leave in Automatic Mode
  561.         FFh leave in current operating mode
  562. --------U-167761-----------------------------
  563. INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
  564.     AX = 7761h ('wa')
  565. Return: AX = 5741h ('WA') if installed
  566. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  567. SeeAlso: INT 21/AX=7761h
  568. --------U-167788BX7789-----------------------
  569. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  570.     AX = 7788h
  571.     BX = 7789h
  572.     DS:SI -> signature "PUSHDIR VERSION 1.0"
  573. Return: AX = 7789h if installed and signature correct
  574.     BX = 7788h
  575.     SI destroyed
  576. --------R-1679-------------------------------
  577. INT 16 - pcANYWHERE III - CHECK STATUS
  578.     AH = 79h
  579. Return: AX = status
  580.         FFFFh if resident and active
  581.         FFFEh if resident but not active
  582.         FFFDh if in Memory Resident mode
  583.         FFFCh if in Automatic mode
  584.         other value if not resident
  585. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  586. --------R-167A-------------------------------
  587. INT 16 - pcANYWHERE III - CANCEL SESSION
  588.     AH = 7Ah
  589. --------R-167B00-----------------------------
  590. INT 16 - pcANYWHERE III - SUSPEND
  591.     AX = 7B00h
  592. SeeAlso: AH=79h,AX=7B01h
  593. --------R-167B01-----------------------------
  594. INT 16 - pcANYWHERE III - RESUME
  595.     AX = 7B01h
  596. SeeAlso: AH=79h,AX=7B00h
  597. --------R-167C-------------------------------
  598. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  599.     AH = 7Ch
  600. Return: AH = port number
  601.     AL = baud rate
  602.         00h = 50 baud
  603.         01h = 75 baud
  604.         02h = 110 baud
  605.         03h = 134.5 baud
  606.         04h = 150 baud
  607.         05h = 300 baud
  608.         06h = 600 baud
  609.         07h = 1200 baud
  610.         08h = 1800 baud
  611.         09h = 2000 baud
  612.         0Ah = 2400 baud
  613.         0Bh = 4800 baud
  614.         0Ch = 7200 baud
  615.         0Dh = 9600 baud
  616.         0Eh = 19200 baud
  617. --------R-167D-------------------------------
  618. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  619.     AH = 7Dh
  620.     AL = subfunction
  621.         00h set terminal parameters
  622.         01h get terminal parameters
  623.         02h get configuration header and terminal parameters
  624.     DS:CX -> terminal parameter block
  625. --------R-167E-------------------------------
  626. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  627.     AH = 7Eh
  628.     AL = subfunction
  629.         01h port input status
  630.         Return AX = 0 if no characer ready,
  631.                AX = 1 if character ready
  632.         02h port input character
  633.         Return AL = received character
  634.         03h port output character in CX
  635.         11h hang up phone
  636. --------R-167F-------------------------------
  637. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  638.     AH = 7Fh
  639.     AL = subfunction
  640.         00h enable remote keyboard only
  641.         01h enable host keyboard only
  642.         02h enable both keyboards
  643.         08h display top 24 lines
  644.         09h display bottom 24 lines
  645.         10h Hayes modem
  646.         11h other modem
  647.         12h direct connect
  648. --------U-1680-------------------------------
  649. INT 16 - MAKEY.COM - INSTALLATION CHECK
  650.     AH = 80h
  651. Return: AX = 1954h if installed
  652. Program: MAKEY is a utility by System Enhancement Associates
  653. --------U-168765BX4321-----------------------
  654. INT 16 - AT.COM version 8/26/87 - API
  655.     AX = 8765h
  656.     BX = 4321h
  657.     CX = ??? or FFFFh
  658.     if CX = FFFFh
  659.         DX = number of event to remove or FFFFh
  660. Return: ES:BX -> event record array
  661. Program: AT.COM is a resident scheduler by Bill Frolik
  662.  
  663. Format of event record:
  664. Offset    Size    Description
  665.  00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
  666.  01h    BYTE    day of date on which to trigger
  667.  02h    BYTE    month of date on which to trigger
  668.  03h    BYTE    trigger time, minute
  669.  04h    BYTE    trigger time, hour
  670.  05h    WORD    offset of command to be executed
  671. ----------1692-------------------------------
  672. INT 16 - ???
  673.     AH = 92h
  674. Return: AH <= 80h if ???
  675. Note:    this function is called by the DOS 3.2 KEYBxx.COM and DOS 5+ KEYB.COM
  676. SeeAlso: AH=05h"PCjr",AH=A2h
  677. --------U-1699-------------------------------
  678. INT 16 - SCOUT v5.4 - GET ???
  679.     AH = 99h
  680. Return: AX = ABCDh
  681.     BX:CX -> ??? (appears to be start of PSP for resident portion)
  682. Program: Scout is a memory-resident file manager by New-Ware
  683. SeeAlso: AH=9Eh
  684. --------U-169E-------------------------------
  685. INT 16 - SCOUT v5.4 - INSTALLATION CHECK
  686.     AH = 9Eh
  687. Return: AX = ABCDh if installed
  688. Program: Scout is a memory-resident file manager by New-Ware
  689. SeeAlso: AH=99h
  690. ----------16A2-------------------------------
  691. INT 16 - ???
  692.     AH = A2h
  693. Return: AH <= 80h if ???
  694. Note:    this function is this function is called by the DOS 5+ KEYB.COM
  695. SeeAlso: AH=92h
  696. --------V-16AA-------------------------------
  697. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  698.     AH = AAh
  699.     Various registers set up by high level language.
  700. Return: Graphics performed
  701. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  702.       Modula 2 and others from DataBiten in Sweden. The library is
  703.       installed as a memory resident driver.
  704. --------U-16AABBBXEEFF-----------------------
  705. INT 16 U - JORJ v4.3 - INSTALLATION CHECK
  706.     AX = AABBh
  707.     BX = EEFFh
  708. Return: AX = EEFFh if installed
  709.     BX = AABBh if installed
  710.         CL = hotkey name (default 6Ah 'j' for Alt-J)
  711. Program: JORJ is a shareware dictionary with phonetic lookup by Jorj Software
  712.       Co.
  713. Index:    hotkeys;JORJ
  714. --------K-16CA--BX736B-----------------------
  715. INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
  716.     AH = CAh
  717.     BX = 736Bh ("sk")
  718.     CX = 736Bh
  719.     AL = function
  720.         00h installation check
  721.         Return: DX = words available in keyboard buffer
  722.         01h place keystroke in buffer
  723.         DX = keystroke (DH = scan code, DL = ASCII character)
  724.         Return: DX = words available in keyboard buffer
  725.                 FFFFh on error
  726.         02h flush STACKEY and BIOS keyboard buffers
  727. Return: AX = CAFFh if installed
  728.         BX = segment of resident code
  729.         CX = STACKEY version (CH = major, CL = minor)
  730. Program: STACKEY is a shareware keyboard-input faking TSR
  731. Index:    installation check;STACKEY
  732. --------V-16CA00BX6570-----------------------
  733. INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
  734.     AX = CA00h
  735.     BX = 6570h ("ep")
  736.     CX = 6570h
  737. Return: AX = CAFFh if installed
  738.         BX = segment of resident code
  739.         CX = ??? (0090h)
  740. Program: EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
  741.       permanent across mode switches
  742. SeeAlso: AX=CA00h/BX=7670h
  743. --------V-16CA00BX7670-----------------------
  744. INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
  745.     AX = CA00h
  746.     BX = 7670h ("vp")
  747.     CX = 7670h
  748. Return: AX = CAFFh if installed
  749.         BX = segment of resident code
  750.         CX = ??? (0090h)
  751. Program: VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
  752.       permanent across mode switches
  753. SeeAlso: AX=CA00h/BX=6570h
  754. --------U-16D724CX00CB-----------------------
  755. INT 16 U - APCAL v3.20 - GET ???
  756.     AX = D724h
  757.     CX = 00CBh
  758. Return: AX = 0000h
  759.     BX = 0000h
  760.     DX:CX -> ??? or 0000h:0000h
  761. Program: APCAL is an optionally-resident shareware appointment calendar by
  762.       Gamma Software
  763. SeeAlso: AX=D724h/CX=00CCh,AX=D724h/CX=00CDh
  764. --------U-16D724CX00CC-----------------------
  765. INT 16 U - APCAL v3.20 - GET ???
  766.     AX = D724h
  767.     CX = 00CCh
  768. Return: AX = 0000h
  769.     BX = 0000h
  770.     DX:CX -> ??? (apparently an internal data area)
  771. SeeAlso: AX=D724h/CX=00CBh,AX=D724h/CX=00CDh
  772. --------U-16D724CX00CD-----------------------
  773. INT 16 U - APCAL v3.20 - GET ???
  774.     AX = D724h
  775.     CX = 00CDh
  776. Return: AX = ??? (5345h seen)
  777. SeeAlso: AX=D724h/CX=00CBh,AX=D724h/CX=00CCh
  778. --------t-16E0E0-----------------------------
  779. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  780.     AX = E0E0h
  781. Return: AX = 1F1Fh if installed
  782.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  783. Note:    the returned TSR list provides support for communication among TSRs
  784.       built with TurboPower's Turbo Professional and Object Professional
  785.       libraries for Turbo Pascal
  786. SeeAlso: AX=F0F0h
  787. --------U-16ED--BHED-------------------------
  788. INT 16 - BORLAND TURBO LIGHTNING - API
  789.     AH = EDh
  790.     BH = EDh
  791.     BL = function
  792.         00h installation check
  793.         Return: AX = 5205h
  794.             CH = major version
  795.             CL = minor version
  796.         01h ???
  797.         02h get resident CS
  798.         Return: AX = code segment of resident portion
  799.         03h get resident ???
  800.         Return: AX = offset of some buffer in resident code seg
  801.         04h ???
  802.         05h set ???
  803.         AL = 0 to 0Ch
  804.         Return: AX = status
  805.                 0000h if OK
  806.                 0001h if out of range.
  807.         06h ???
  808.         07h ???
  809.         08h ???
  810.         AL = char???
  811.         CX = ???
  812.         DX = ???
  813.         Return: AX = 0, 1 or 2
  814.         09h ???
  815.         0Ah ???
  816.         CX = ???
  817.         DX = ???
  818.         Return: AX = ???
  819.         0Bh ???
  820.         DS:SI -> ???
  821.         Return: AX = 0, 40h, 80h
  822.         0Ch ???
  823.         DS:SI -> ???
  824.         Return: AH = 0
  825.             AL = ???
  826.         0Dh set ???
  827.         (sets an internal flag)
  828.         0Eh ???
  829.         DS:SI -> ???
  830.         Return: AX = 0, 1 or 2.
  831.         0Fh ???
  832.         10h ???
  833. Notes:    AX in general returns an error code from most functions.
  834. Index:    installation check;Turbo Lightning
  835. --------U-16EF-------------------------------
  836. INT 16 - CALCULATOR - INSTALLATION CHECK
  837.     AH = EFh
  838. Return: AX = 0088h if installed
  839. Program: CALCULATOR is a shareware popup calculator by Andrzej Brzezinski and
  840.       Marek Kosznik
  841. --------b-16F0-------------------------------
  842. INT 16 - Compaq 386 and newer - SET CPU SPEED
  843.     AH = F0h
  844.     AL = speed
  845.         00h equivalent to 6 MHz 80286 (COMMON)
  846.         01h equivalent to 8 MHz 80286 (FAST)
  847.         02h full 16 MHz (HIGH)
  848.         03h toggles between 8 MHz-equivalent and speed set by system board
  849.         switch (AUTO or HIGH)
  850.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  851.         09h specify speed directly
  852.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  853. SeeAlso: AH=F1h,AH=F3h
  854. --------t-16F0F0-----------------------------
  855. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  856.     AX = F0F0h
  857. Return: AX = 0F0Fh if installed
  858.         ES:DI -> last data block in TSR list
  859. Note:    the returned TSR list provides support for communication among TSRs
  860.       built with TurboPower's Turbo Professional and Object Professional
  861.       libraries for Turbo Pascal
  862. SeeAlso: AX=E0E0h
  863.  
  864. Format of data block:
  865. Offset    Size    Description
  866.  00h    DWORD    pointer to program tag (counted ASCII string)
  867.  04h    WORD    interface version number (0400h)
  868.  06h    DWORD    pointer to command entry point
  869.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  870.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  871. ---swappable TSRs only---
  872.  12h    DWORD    pointer to swapping data
  873.  16h    DWORD    pointer to user data
  874.     more???
  875. --------b-16F1-------------------------------
  876. INT 16 - Compaq 386 and newer - READ CURRENT CPU SPEED
  877.     AH = F1h
  878. Return: AL = speed code (see AH=F0h)
  879.          if AL = 09h, CX = speed code
  880. SeeAlso: AH=F0h,AH=F3h
  881. --------b-16F2-------------------------------
  882. INT 16 - Compaq 386 and newer - DETERMINE ATTACHED KEYBOARD TYPE
  883.     AH = F2h
  884. Return: AL = type
  885.         00h if 11-bit AT keyboard is in use
  886.         01h if 9-bit PC keyboard is in use
  887.     AH = 00h (04/08/93 system ROM)
  888. --------b-16F3-------------------------------
  889. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  890.     AH = F3h
  891.     AL = new limit
  892.         00h limit is 6 Mhz
  893.         01h limit is 8 Mhz/6 Mhz
  894. SeeAlso: AH=F0h,AH=F1h
  895. --------U-16F398-----------------------------
  896. INT 16 U - NORTON GUIDES - INSTALLATION CHECK
  897.     AX = F398h
  898. Return: AX = 6A73h ("js")
  899.     BH = scan code of current hot key
  900.     BL = ASCII code of current hot key
  901. Note:    NG.EXE was written by John Socha
  902. --------b-16F400-----------------------------
  903. INT 16 - Compaq Systempro and higher - CACHE CONTROLLER STATUS
  904.     AX = F400h
  905. Return: AH = E2h
  906.     AL = status
  907.         00h not present
  908.         01h enabled
  909.         02h disabled
  910. SeeAlso: AX=F401h,AX=F402h
  911. --------b-16F401-----------------------------
  912. INT 16 - Compaq Systempro and higher - ENABLE CACHE CONTROLLER
  913.     AX = F401h
  914. Return: AX = E201h
  915. SeeAlso: AX=F400h,AX=F402h
  916. --------b-16F402-----------------------------
  917. INT 16 - Compaq Systempro and higher - DISABLE CACHE CONTROLLER
  918.     AX = F402h
  919. Return: AX = E202h
  920. SeeAlso: AX=F400h,AX=F401h
  921. --------v-16FA00DX5945-----------------------
  922. INT 16 U - PC Tools v8+ VSAFE, VWATCH - INSTALLATION CHECK
  923.     AX = FA00h
  924.     DX = 5945h
  925. Return: CF clear
  926.     DI = 4559h
  927.     BX = BIOS hotkey scancode (default 2F00h) (VSAFE only)
  928.         FFFFh if disabled
  929. Note:    MS-DOS 6.0 bundles VSAFE and VWATCH as part of its virus protection
  930. SeeAlso: AX=FA05h,INT 13/AH=FAh,INT 21/AH=FAh"VDEFEND",INT 2F/AX=6282h
  931. --------v-16FA01DX5945-----------------------
  932. INT 16 U - PC Tools v8+ VSAFE, VWATCH - UNINSTALL
  933.     AX = FA01h
  934.     DX = 5945h
  935. Return: CF clear if successful
  936.     DI = 4559h
  937. SeeAlso: AX=FA00h
  938. --------v-16FA02DX5945-----------------------
  939. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET/SET OPTIONS
  940.     AX = FA02h
  941.     DX = 5945h
  942.     BL = new parameter flags (see below)
  943. Return: CF clear
  944.     DI = 4559h
  945.     CL = old value of parameter flags
  946.  
  947. Bitfields for parameter flags:
  948.  bit 7    Protect executable files
  949.  bit 6    Protect FD boot sector
  950.  bit 5    Protect HD boot sector
  951.  bit 4    Boot sector viruses
  952.  bit 3    Check executable files
  953.  bit 2    General write protect
  954.  bit 1    Resident
  955.  bit 0    HD Low level format
  956. --------v-16FA03DX5945-----------------------
  957. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET ???
  958.     AX = FA03h
  959.     DX = 5945h
  960. Return: CF clear
  961.     DI = 4559h
  962.     AX = 0002h
  963. --------v-16FA04DX5945-----------------------
  964. INT 16 U - PC Tools v8+ VSAFE - GET HOTKEY DISABLE FLAG
  965.     AX = FA04h
  966.     DX = 5945h
  967. Return: CF clear
  968.     DI = 4559h
  969.     BL = hotkey disable flag (nonzero if hotkey disabled)
  970. Note:    this function is a NOP under VWATCH, merely returning CF clear/DI=4559h
  971. SeeAlso: AX=FA00h,AX=FA05h
  972. --------v-16FA05DX5945-----------------------
  973. INT 16 U - PC Tools v8+ VSAFE - SET HOTKEY DISABLE FLAG
  974.     AX = FA05h
  975.     DX = 5945h
  976.     BL = new value of hotkey disable flag (nonzero to disable hotkey)
  977. Return: CF clear
  978.     DI = 4559h
  979. Note:    this function is a NOP under VWATCH, merely returning CF clear/DI=4559h
  980. SeeAlso: AX=FA00h,AX=FA04h
  981. --------v-16FA06DX5945-----------------------
  982. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET NETWORK DRIVES TEST FLAG
  983.     AX = FA06h
  984.     DX = 5945h
  985. Return: CF clear
  986.     DI = 4559h
  987.     BL = test status
  988.         00h don't monitor network drives (default for VWATCH v2.1)
  989.         FFh monitor network drives (default for VSAFE v2.0)
  990.     CL = ??? (only VSAFE 2.0)
  991. SeeAlso: AX=FA07h
  992. --------v-16FA07DX5945-----------------------
  993. INT 16 U - PC Tools v8+ VSAFE, VWATCH - SET NETWORK DRIVES TEST FLAG
  994.     AX = FA07h
  995.     DX = 5945h
  996.     BL = new state
  997.         00h don't monitor
  998.         01h monitor network drives
  999. Return: CF clear
  1000.     DI = 4559h
  1001. Note:    VWATCH v2.1 (from PC Tools 9.0) returns CF set instead
  1002. SeeAlso: AX=FA00h,AX=FA06h
  1003. --------v-16FA08DX5945-----------------------
  1004. INT 16 U - PC Tools v9+ VWATCH v2.1 - ???
  1005.     AX = FA08h
  1006.     DX = 5945h
  1007. Return: CF clear
  1008.     DI = 4559h
  1009.     AX = ??? (0002h)
  1010.     BX = version (BH=major, BL=two-digit minor)
  1011. Note:    this function is not supported by the PC Tools 9.0 VSAFE v2.0
  1012. SeeAlso: AX=FA00h,AX=FA06h
  1013. --------U-16FE55-----------------------------
  1014. INT 16 U - PC Tools v8+ programs - GET ???
  1015.     AX = FE55h
  1016.     CX = segment of resident program or 0000h for last loaded
  1017.     DX = 0000h
  1018. Return: DX = resident code segment (unchanged if CX=0000h on entry)
  1019.     AX = ??? or 0000h
  1020. Note:    this call is supported by CPSCHED, CPTASK, DATAMON, DPROTECT, DRIVEMAP,
  1021.       and DSKLIGHT beginning in PC Tools v8.0; programs other than CPTASK
  1022.       seem to hook it merely to return the same AX as the CPTASK loaded
  1023.       prior to them returned
  1024. --------U-16FEA4-----------------------------
  1025. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - RESET ???
  1026.     AX = FEA4h
  1027. Return: nothing
  1028. Note:    this function is identical to AX=FFA4h, and is implemented by the same
  1029.       code in DESKTOP
  1030. SeeAlso: AX=FFA4h
  1031. --------U-16FEC6-----------------------------
  1032. INT 16 U - PC Tools v7+ CPSCHED - ENABLE/DISABLE CPSCHED API
  1033.     AX = FEC6h
  1034.     BL = new state (00h enabled, nonzero disabled)
  1035. Return: nothing
  1036. Desc:    specify whether CPSCHED API calls other than this one and AX=FE55h will
  1037.       be honored
  1038. --------U-16FED3-----------------------------
  1039. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  1040.     AX = FED3h
  1041.     DS:SI -> 92-byte data record for ???
  1042. Return: ???
  1043. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  1044.       code in DESKTOP
  1045. SeeAlso: AX=FFD3h
  1046. --------U-16FEDC-----------------------------
  1047. INT 16 U - PC Tools v7+ CPSCHED - UNHOOK INTERRUPTS
  1048.     AX = FEDCh
  1049. Return: AX,DX destroyed
  1050. Index:    uninstall;CPSCHED
  1051. --------U-16FEEFCX0000-----------------------
  1052. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - INSTALLATION CHECK
  1053.     AX = FEEFh
  1054.     CX = 0000h
  1055. Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
  1056.         BX = segment of resident portion
  1057.         DX = (CPSCHED v8.0) resident CS
  1058. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  1059.       code in DESKTOP
  1060. SeeAlso: AX=FFEFh
  1061. --------U-16FEF1-----------------------------
  1062. INT 16 U - PC Tools v7 only CPSCHED/DESKTOP - ALTERNATE INSTALLATION CHECK
  1063.     AX = FEF1h
  1064.     BX = ???
  1065. Return: CX = 5555h if PC Tools scheduler (CPSCHED or DESKTOP) installed
  1066.     DX = 5555h
  1067. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  1068.       code in DESKTOP
  1069. SeeAlso: AX=FFF1h
  1070. --------K-16FF-------------------------------
  1071. INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
  1072.     AH = FFh
  1073.     DX = scan code
  1074. Return: AL = status
  1075.         00h success
  1076.         01h failure
  1077. Program: KBUF is a keyboard buffer expander by Mark Adler
  1078. SeeAlso: AH=05h
  1079. --------V-16FF-------------------------------
  1080. INT 16 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - QUERY ZOOM INTERRUPT
  1081.     AH = FFh
  1082. Return: AL = interrupt number to which BIOS keyboard handler has been relocated
  1083.     AL+1 = Zoom interrupt number
  1084.     BX = hotkey
  1085. Notes:    the default interrupts are 60h for keyboard and 61h for Zoom interrupt;
  1086.       the default hot key is F10
  1087.     not all vendors include the Tseng TSR which supports these functions
  1088. SeeAlso: INT 60"OPTIMA"
  1089. Index:    hotkeys;OPTIMA 1024 VGA
  1090. --------d-16FF70BX0000-----------------------
  1091. INT 16 U - PC Tools v8+ DRIVEMAP - INSTALLATION CHECK
  1092.     AX = FF70h
  1093.     BX = 0000h
  1094.     CX = 4C69h ('Li')
  1095.     DX = 6E6Bh ('nk')
  1096. Return: AX = 0000h
  1097.     CX = 4350h ('CP')
  1098.     DH = major version
  1099.     DL = minor version
  1100. Program: DRIVEMAP is a redirector which allows drives on computers connected
  1101.       over the parallel or serial ports to appear as local drives
  1102. SeeAlso: AX=FF70h/BX=0001h,AX=FF70h/BX=0002h
  1103. --------d-16FF70BX0001-----------------------
  1104. INT 16 U - PC Tools v8+ DRIVEMAP - ???
  1105.     AX = FF70h
  1106.     BX = 0001h
  1107.     DL = ???
  1108. Return: AX = ???
  1109.     DH = ???
  1110. SeeAlso: AX=FF70h/BX=0000h,AX=FF70h/BX=0002h
  1111. --------d-16FF70BX0002-----------------------
  1112. INT 16 U - PC Tools v8+ DRIVEMAP - ???
  1113.     AX = FF70h
  1114.     BX = 0002h
  1115.     CX = ???
  1116.     DX = ???
  1117. Return: AX = ??? or FFFEh/FFFFh on error
  1118.     DL = ???
  1119. BUG:    DRIVEMAP will branch to random locations for BX values other than
  1120.       those listed above for v8.0-9.0 because a) the incorrect register is
  1121.       range-tested, resulting in BX=0003h-5CD6h being accepted as valid
  1122.       function numbers, and b) the conditional which branches on invalid
  1123.       function numbers jumps to the following instruction, becoming a NOP
  1124. SeeAlso: INT 2F/AX=9203h"DRIVEMAP"
  1125. Index:    installation check;DRIVEMAP
  1126. --------T-16FF80BX0000-----------------------
  1127. INT 16 U - PC Tools v8+ CPTASK - INSTALLATION CHECK
  1128.     AX = FF80h
  1129.     BX = 0000h
  1130.     CX = 0000h
  1131.     DX = 0000h
  1132. Return: CX = 5555h if installed
  1133. Program: CPTASK is a task switcher by Central Point Software
  1134. --------T-16FF80BX0001-----------------------
  1135. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1136.     AX = FF80h
  1137.     BX = 0001h
  1138.     ???
  1139. Return: DX:SI -> task list??? (ten entries of 70h bytes in v9.0)
  1140.     BX = ??? (PSP segment of resident code???)
  1141. --------T-16FF80BX0002-----------------------
  1142. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1143.     AX = FF80h
  1144.     BX = 0002h
  1145. Return: DX:SI -> ???
  1146. --------T-16FF80BX0003-----------------------
  1147. INT 16 U - PC Tools v8+ CPTASK - GET ??? FLAGS
  1148.     AX = FF80h
  1149.     BX = 0003h
  1150. Return: AX = flags
  1151.         bit 10: ???
  1152.         bit 13: ???
  1153.         bit 14: ???
  1154.         bit 15: ???
  1155. SeeAlso: AX=FF80h/BX=0004h,AX=FF80h/BX=0006h
  1156. --------T-16FF80BX0004-----------------------
  1157. INT 16 U - PC Tools v8+ CPTASK - SET ???
  1158.     AX = FF80h
  1159.     BX = 0004h
  1160.     CX = new value of ???
  1161. Return: ???
  1162. Note:    this function also sets bit 14 of the flags word returned by
  1163.       AX=FF80h/BX=0003h
  1164. --------T-16FF80BX0005-----------------------
  1165. INT 16 U - PC Tools v8+ CPTASK - GET NUMBER OF ACTIVE TASKS???
  1166.     AX = FF80h
  1167.     BX = 0005h
  1168. Return: AX = number of active tasks???
  1169. --------T-16FF80BX0006-----------------------
  1170. INT 16 U - PC Tools v8+ CPTASK - GET AND CLEAR ??? FLAG
  1171.     AX = FF80h
  1172.     BX = 0006h
  1173. Return: AX = old state (0000h clear, 0001h set)
  1174. Note:    the tested flag is bit 13 of the flags returned by AX=FF80h/BX=0003h
  1175. --------T-16FF80BX0007-----------------------
  1176. INT 16 U - PC Tools v8+ CPTASK - ???
  1177.     AX = FF80h
  1178.     BX = 0007h
  1179.     ES:DI -> ???
  1180.     ???
  1181. Return: ???
  1182. --------T-16FF80BX0008-----------------------
  1183. INT 16 U - PC Tools v8+ CPTASK - ???
  1184.     AX = FF80h
  1185.     BX = 0008h
  1186.     ???
  1187. Return: ???
  1188. --------T-16FF80BX0009-----------------------
  1189. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1190.     AX = FF80h
  1191.     BX = 0009h
  1192. Return: CL = ???
  1193.     CH = ??? (01h or 02h)
  1194. --------T-16FF80BX000A-----------------------
  1195. INT 16 U - PC Tools v9+ CPTASK - SET ???
  1196.     AX = FF80h
  1197.     BX = 000Ah
  1198.     DS:SI -> 128-byte buffer containing ???
  1199. --------T-16FF80BX000B-----------------------
  1200. INT 16 U - PC Tools v9+ CPTASK - SET ???
  1201.     AX = FF80h
  1202.     BX = 000Bh
  1203.     DX = index of ??? task (1-10)
  1204. --------T-16FF80BX000C-----------------------
  1205. INT 16 U - PC Tools v9+ CPTASK - SET IDLE??? DELAY
  1206.     AX = FF80h
  1207.     BX = 000Ch
  1208.     CX = new delay time in minutes
  1209. --------T-16FF80BX4350-----------------------
  1210. INT 16 U - PC Tools v8+ CPTASK - UNINSTALL
  1211.     AX = FF80h
  1212.     BX = 4350h ('CP')
  1213.     CX = 5354h ('ST')
  1214. Return: never returns; terminates all tasks and exits to program originally
  1215.       calling CPTASK
  1216. --------U-16FF90-----------------------------
  1217. INT 16 U - PC Tools v8+ DESKTOP - ???
  1218.     AX = FF90h
  1219.     ???
  1220. Return: ???
  1221. Note:    available only when popped up
  1222. --------U-16FF91-----------------------------
  1223. INT 16 U - PC Tools v7+ DESKTOP - ???
  1224.     AX = FF91h
  1225.     ???
  1226. Return: AX = 0000h
  1227. Note:    calls AX=FFFDh after ???
  1228. SeeAlso: AX=FF92h,AX=FFFDh
  1229. --------U-16FF92-----------------------------
  1230. INT 16 U - PC Tools v7+ DESKTOP - ???
  1231.     AX = FF92h
  1232.     ???
  1233. Return: AX = 0000h
  1234. Note:    like AX=FF91h, but temporarily sets ??? to 3
  1235. SeeAlso: AX=FF91h,AX=FFFDh
  1236. --------U-16FF93-----------------------------
  1237. INT 16 U - PC Tools v7+ DESKTOP - SET ??? FLAG
  1238.     AX = FF93h
  1239. --------U-16FF94-----------------------------
  1240. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  1241.     AX = FF94h
  1242.     CX = ??? (default 0017h)
  1243. --------U-16FF95-----------------------------
  1244. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  1245.     AX = FF95h
  1246.     BX = ???
  1247. --------U-16FF96-----------------------------
  1248. INT 16 U - PC Tools v7+ DESKTOP - ???
  1249.     AX = FF96h
  1250.     CL = ???
  1251. Return: AX = ???
  1252. --------U-16FF97-----------------------------
  1253. INT 16 U - PC Tools v7+ DESKTOP - ???
  1254.     AX = FF97h
  1255.     DS:DX -> buffer for ??? (see below)
  1256. Return: ???
  1257.  
  1258. Format of buffer:
  1259. Offset    Size    Description
  1260.  00h 48 BYTEs    ???
  1261.  30h 128 BYTEs    ???
  1262. --------U-16FF98-----------------------------
  1263. INT 16 U - PC Tools v7+ DESKTOP - OPEN \DESK.OVL FILE AND SEEK TO OVERLAY
  1264.     AX = FF98h
  1265.     DX = byte offset in file of overlay header
  1266. Return: BX = file handle for DESK.OVL file
  1267. Desc:    open the DESK.OVL file, seek to the specified offset, read in the
  1268.       overlay header, and seek to the offset specified by the header
  1269.  
  1270. Format of overlay header:
  1271. Offset    Size    Description
  1272.  00h 12 BYTEs    NUL-padded ASCII overlay filename
  1273.  0Ch    DWORD    offset within DESK.OVL file of actual overlay
  1274. --------U-16FF99-----------------------------
  1275. INT 16 U - PC Tools v7+ DESKTOP - ???
  1276.     AX = FF99h
  1277.     ???
  1278. Return: ???
  1279. --------U-16FF9A-----------------------------
  1280. INT 16 U - PC Tools v7+ DESKTOP - GET NAME OF COLOR SCHEME
  1281.     AX = FF9Ah
  1282. Return: ES:BX -> name of current color scheme
  1283. Note:    available even if not popped up
  1284. --------U-16FF9B-----------------------------
  1285. INT 16 U - PC Tools v7+ DESKTOP - UNUSED
  1286.     AX = FF9Bh
  1287. Return: ???
  1288. Note:    sounds triple-length beep
  1289. --------T-16FF9C-----------------------------
  1290. INT 16 U - PC Tools v8+ CPTASK - SET/CLEAR ??? POINTER
  1291.     AX = FF9Ch
  1292.     BL = function
  1293.         00h set ??? pointer
  1294.         DS:SI -> ???
  1295.         01h clear pointer to 0000h:0000h
  1296. ----------16FF9D-----------------------------
  1297. INT 16 U - PC Tools v8+ CPTASK, VSAFE - ???
  1298.     AX = FF9Dh
  1299.     ES:BX -> ??? word
  1300. Return: ???
  1301. Note:    if ES is non-zero, the word pointed at by ES:BX determines whether the
  1302.       ??? flag is cleared (word = 0000h) or set (word is nonzero).    The
  1303.       flag is always cleared if ES=0000h.
  1304. --------U-16FF9E-----------------------------
  1305. INT 16 U - PC Tools v7+ DESKTOP - ???
  1306.     AX = FF9Eh
  1307.     DL = ???
  1308.         bit 7: ???
  1309.         bits 6-0: function number??? (00h,01h,other)
  1310.     ???
  1311. Return: ???
  1312. --------U-16FFA1-----------------------------
  1313. INT 16 U - PC Tools v7+ DESKTOP - ???
  1314.     AX = FFA1h
  1315.     ???
  1316. Return: ???
  1317. Note:    same as AX=FFA2h, except ??? set to FFh
  1318. SeeAlso: AX=FFA2h
  1319. --------U-16FFA2-----------------------------
  1320. INT 16 U - PC Tools v7+ DESKTOP - ???
  1321.     AX = FFA2h
  1322.     ???
  1323. Return: ???
  1324. Note:    calls AX=FFC7h (remove window) and AX=FFFDh
  1325. SeeAlso: AX=FFA1h,AX=FFC7h,AX=FFFDh
  1326. --------y-16FFA3BX0000-----------------------
  1327. INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - INSTALLATION CHECK
  1328.     AX = FFA3h
  1329.     BX = 0000h
  1330.     CX = 0000h
  1331. Return: AX = segment of resident code
  1332.     BX = 5555h
  1333.     CX = 5555h
  1334. SeeAlso: INT 21/AH=3Fh"NB.SYS",INT 21/AX=4101h
  1335. --------y-16FFA3BX0001-----------------------
  1336. INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  1337.     AX = FFA3h
  1338.     BX = 0001h
  1339.     CX = 0001h
  1340. Return: AX:BX -> ???
  1341.     CX = BX
  1342. --------y-16FFA3BX0002-----------------------
  1343. INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  1344.     AX = FFA3h
  1345.     BX = 0002h
  1346.     CX = 0002h
  1347. Return: AX = ??? (0 or 1)
  1348.     CX = BX = AX
  1349. --------y-16FFA3BX0003-----------------------
  1350. INT 16 U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  1351.     AX = FFA3h
  1352.     BX = 0003h
  1353.     CX = 0003h
  1354. Return: AX = ??? (0 or 1)
  1355.     CX = BX = AX
  1356. --------y-16FFA3BX0004-----------------------
  1357. INT 16 U - PC Tools v7+ DATAMON - SET ??? FLAG
  1358.     AX = FFA3h
  1359.     BX = 0004h
  1360.     CX = 0004h
  1361. SeeAlso: AX=FFA3h/BX=0005h
  1362. --------y-16FFA3BX0005-----------------------
  1363. INT 16 U - PC Tools v7+ DATAMON - CLEAR ??? FLAG
  1364.     AX = FFA3h
  1365.     BX = 0005h
  1366.     CX = 0005h
  1367. SeeAlso: AX=FFA3h/BX=0004h
  1368. --------y-16FFA3BX0006-----------------------
  1369. INT 16 U - PC Tools v7+ DATAMON - SET PSP SEGMENT ???
  1370.     AX = FFA3h
  1371.     BX = 0006h
  1372.     CX = 0006h
  1373.     DX = current PSP segment as known to DOS??? or 0000h
  1374. ----------16FFA3BXFFA3-----------------------
  1375. INT 16 U - PC Tools v9 DSKLIGHT - INSTALLATION CHECK
  1376.     AX = FFA3h
  1377.     BX = FFA3h
  1378.     CX = FFA3h
  1379. Return: BX = CX = 5555h if installed
  1380.         AX = resident code segment
  1381. Program: DSKLIGHT is a TSR included with PC Tools v9+ which displays a disk-
  1382.       access indicator on the screen; in v7 and v8, this function was
  1383.       provided by DATAMON
  1384. Note:    DSKLIGHT chains to the previous handler if BX or CX is not FFA3h
  1385. --------U-16FFA4-----------------------------
  1386. INT 16 U - PC Tools v7-8 DESKTOP - ???
  1387.     AX = FFA4h
  1388. Return: ???
  1389. Notes:    available even when not popped up
  1390.     sets unknown flag if ??? conditions met
  1391. SeeAlso: AX=FEA4h
  1392. --------c-16FFA5CX1111-----------------------
  1393. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  1394.     AX = FFA5h
  1395.     CX = 1111h
  1396. Return: CH = 00h if installed
  1397.         ES:DI -> internal data (see below)
  1398.         CL = cache state
  1399.         01h enabled
  1400.         02h disabled
  1401. SeeAlso: INT 13/AH=27h,INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  1402.  
  1403. Format of internal data:
  1404. Offset    Size    Description
  1405. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  1406.         each byte is either blank (20h) or drive letter (41h-54h)
  1407.  -8    BYTE    ???
  1408.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  1409.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  1410.  -3   3 BYTEs    ???
  1411. --------c-16FFA5CXAAAA-----------------------
  1412. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  1413.     AX = FFA5h
  1414.     CX = AAAAh
  1415. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  1416. SeeAlso: AX=FFA5h/CX=CCCCh
  1417. --------c-16FFA5CXCCCC-----------------------
  1418. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  1419.     AX = FFA5h
  1420.     CX = CCCCh
  1421. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  1422. Note:    delayed writes are automatically disabled on EXECing
  1423.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  1424.       however, delayed writes are not automatically reenabled upon the
  1425.       program's termination in v6.
  1426. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  1427. --------c-16FFA5CXDDDD-----------------------
  1428. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  1429.     AX = FFA5h
  1430.     CX = DDDDh
  1431. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  1432. --------c-16FFA5CXEEEE-----------------------
  1433. INT 16 - PC-Cache v6+ - ENABLE CACHE
  1434.     AX = FFA5h
  1435.     CX = EEEEh
  1436. SeeAlso: AX=FFA5h/CX=DDDDh
  1437. --------c-16FFA5CXFFFF-----------------------
  1438. INT 16 - PC-Cache v6+ - FLUSH CACHE
  1439.     AX = FFA5h
  1440.     CX = FFFFh
  1441. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  1442. --------U-16FFA6-----------------------------
  1443. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ???
  1444.     AX = FFA6h
  1445. Return: DS:SI -> ???
  1446. Note:    available only when popped up
  1447. --------U-16FFA7-----------------------------
  1448. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ??? PATH
  1449.     AX = FFA7h
  1450. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  1451. --------U-16FFA8-----------------------------
  1452. INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
  1453.     AX = FFA8h
  1454.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  1455.     ???
  1456. Return: ???
  1457. Notes:    available only when popped up
  1458.     strings copied into internal buffer, among other actions
  1459. --------U-16FFA9-----------------------------
  1460. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET VERSION STRING
  1461.     AX = FFA9h
  1462. Return: DS:SI -> version string
  1463. --------U-16FFAA-----------------------------
  1464. INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
  1465.     AX = FFAAh
  1466.     ???
  1467. Return: ???
  1468. Note:    available only when popped up
  1469. --------U-16FFAB-----------------------------
  1470. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET EDITOR SETTINGS???
  1471.     AX = FFABh
  1472. Return: DS:SI -> editor setting strings???
  1473. --------U-16FFAC-----------------------------
  1474. INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
  1475.     AX = FFACh
  1476.     DL = ???
  1477. Note:    available only when popped up
  1478. --------U-16FFAD-----------------------------
  1479. INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
  1480.     AX = FFADh
  1481.     DL = ???
  1482. --------U-16FFAE-----------------------------
  1483. INT 16 U - PC Tools v6.0-8.0 DESKTOP - GET ???
  1484.     AX = FFAEh
  1485. Return: AL = ???
  1486. --------U-16FFAF-----------------------------
  1487. INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
  1488.     AX = FFAFh
  1489.     DL = ???
  1490. --------U-16FFB0-----------------------------
  1491. INT 16 U - PC Tools v6.0-8.0 DESKTOP - SET ???
  1492.     AX = FFB0h
  1493.     BL = ???
  1494. --------U-16FFB1-----------------------------
  1495. INT 16 U - PC Tools v6.0-8.0 DESKTOP - ???
  1496.     AX = FFB1h
  1497.     ???
  1498. Return: ???
  1499. --------U-16FFB2-----------------------------
  1500. INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET ???
  1501.     AX = FFB2h
  1502. Return: DS:SI -> ???
  1503. --------U-16FFB3-----------------------------
  1504. INT 16 U - PC Tools v5.5-8.0 DESKTOP - ???
  1505.     AX = FFB3h
  1506.     ???
  1507. Return: ???
  1508. Note:    available only when popped up
  1509. --------U-16FFB4-----------------------------
  1510. INT 16 U - PC Tools v5.5-8.0 DESKTOP - SET ??? FLAG
  1511.     AX = FFB4h
  1512. Note:    available only when popped up
  1513. SeeAlso: AX=FFBBh
  1514. --------U-16FFB5-----------------------------
  1515. INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET/SET WINDOW PARAMETERS
  1516.     AX = FFB5h
  1517.     BX = window specifier (000Fh to 0019h) (see below)
  1518.     DX = 0000h get, nonzero = set
  1519.     ES:DI -> window parameter buffer (see below)
  1520. SeeAlso: AX=FFCBh
  1521.  
  1522. Values for window specifier:
  1523.  000Fh    comm/FAX
  1524.  0014h    hotkey selection
  1525.  0015h    ASCII table
  1526.  0016h    system colors menu
  1527.  
  1528. Format of window parameters:
  1529. Offset    Size    Description
  1530.  00h    BYTE    rows in window, not counting frame
  1531.  01h    BYTE    columns in window, not counting frame
  1532.  02h    BYTE    row number of top of window
  1533.  03h    BYTE    2*column number of left of window
  1534.  04h    BYTE    character attribute for ???
  1535.  05h    BYTE    character attribute for background/border
  1536.  06h    BYTE    character attribute for ???
  1537.  07h    DWORD    pointer to ??? on screen
  1538.  0Bh  4 BYTEs    ???
  1539.  0Fh    BYTE    nonzero if window may be resized
  1540. Note:    if running in monochrome mode, character attributes at offsets 04h to
  1541.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  1542.       are changed to 07h on reading
  1543. --------U-16FFB6-----------------------------
  1544. INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET ???
  1545.     AX = FFB6h
  1546. Return: AH = ???
  1547.     AL = ???
  1548. --------U-16FFB7-----------------------------
  1549. INT 16 U - PC Tools v5.5-8.0 DESKTOP - GET/SET ???
  1550.     AX = FFB7h
  1551.     BX = direction
  1552.         0000h copy to buffer
  1553.         else  copy from buffer
  1554.     DS:SI -> 70-byte buffer with ???
  1555. Return: data copied
  1556. Note:    available only when popped up under v6.0+
  1557. --------U-16FFB8-----------------------------
  1558. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET/SET???
  1559.     AX = FFB8h
  1560.     BH = subfunction
  1561.         00h get
  1562.         Return: BL = old value of ???
  1563.             CL = old value of ??? (v6.0+)
  1564.             CH = old value of ??? (v6.0+)
  1565.         nonzero set
  1566.         BL = new value for ???
  1567.         CL = new value for ??? (v6.0+)
  1568.         CH = new value for ??? (v6.0+)
  1569.         DH = ???
  1570.         Return: AL = old value replaced by CL (v6.0+)
  1571.             AH = old value replaced by CH (v6.0+)
  1572. --------U-16FFB9-----------------------------
  1573. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1574.     AX = FFB9h
  1575.     ???
  1576. Return: AX = ???
  1577.     CX = ???
  1578.     DS:SI -> ???
  1579.     ES:DI -> ???
  1580. --------U-16FFBA-----------------------------
  1581. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1582.     AX = FFBAh
  1583.     ???
  1584. Return: AX = ???
  1585. Note:    available only when popped up
  1586. --------U-16FFBB-----------------------------
  1587. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CLEAR ??? FLAG
  1588.     AX = FFBBh
  1589. Note:    available only when popped up
  1590. SeeAlso: AX=FFB4h
  1591. --------U-16FFBC-----------------------------
  1592. INT 16 U - PC Tools v5.1-8.0 DESKTOP - RESTORE ORIGINAL SCREEN???
  1593.     AX = FFBCh
  1594. --------U-16FFBD-----------------------------
  1595. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ??? DATABASE INDEXING MESSAGES
  1596.     AX = FFBDh
  1597.     ???
  1598. Return: ???
  1599. --------U-16FFBE-----------------------------
  1600. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1601.     AX = FFBEh
  1602.     ???
  1603. Return: ???
  1604. Note:    available only when popped up
  1605. --------U-16FFBF-----------------------------
  1606. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1607.     AX = FFBFh
  1608.     BX = DOS file handle to write on
  1609.     ???
  1610. Return: ???
  1611. Note:    available only when popped up
  1612. --------U-16FFC0-----------------------------
  1613. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1614.     AX = FFC0h
  1615.     ???
  1616. Return: AX = 0000h if successful
  1617.     AX = FFFFh on error
  1618. Note:    available only when popped up
  1619. --------U-16FFC1-----------------------------
  1620. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1621.     AX = FFC1h
  1622.     BL = ???
  1623.     ES:DI -> data structure (see below)
  1624.     ???
  1625. Return: AX = ???
  1626. Note:    available only when popped up
  1627. SeeAlso: AX=FFC2h,AX=FFC3h
  1628.  
  1629. Format of data structure:
  1630. Offset    Size    Description
  1631.  00h    WORD    ???
  1632.  02h    WORD    ???
  1633.  04h    WORD    ???
  1634.  06h    WORD    ???
  1635.  08h    WORD    ???
  1636.  0Ah    BYTE    ???
  1637.  0Bh    BYTE    ??? (zero/nonzero)
  1638. ---v7.1---
  1639.  0Ch    WORD    ???
  1640.  0Eh    BYTE    ???
  1641.  0Fh    WORD    ???
  1642.  11h    WORD    ???
  1643.     ???
  1644. --------U-16FFC2-----------------------------
  1645. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1646.     AX = FFC2h
  1647.     BL = ???
  1648.     ES:DI -> data structure (see AX=FFC1h)
  1649.     ???
  1650. Return: AH = ???
  1651.     CX = ???
  1652.     DH = ???
  1653.     DL = ???
  1654. Note:    available only when popped up
  1655. SeeAlso: AX=FFC1h,AX=FFC3h
  1656. --------U-16FFC3-----------------------------
  1657. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1658.     AX = FFC3h
  1659.     BL = ???
  1660.     ES:DI -> data structure (see AX=FFC1h)
  1661.     ???
  1662. Return: AH = ???
  1663.     CX = ???
  1664.     DH = ???
  1665.     DL = ???
  1666. Note:    available only when popped up
  1667. SeeAlso: AX=FFC1h,AX=FFC2h
  1668. --------U-16FFC4-----------------------------
  1669. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
  1670.     AX = FFC4h
  1671. Return: AL = ???
  1672.     BX = segment of scratch space???
  1673.     CX = segment of stored screen data (section covered by window???)
  1674.     DX = segment of window parameters for ???
  1675.     ES:BP -> ???
  1676. Note:    available only when popped up in versions prior to 6.0
  1677. --------U-16FFC5-----------------------------
  1678. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CHECK WHETHER DESKTOP LOADED RESIDENT
  1679.     AX = FFC5h
  1680. Return: BL = nonzero if loaded resident
  1681.        = 00h if nonresident
  1682. Note:    available only when popped up; should call AX=FFEFh first to ensure
  1683.       that DESKTOP is active
  1684. SeeAlso: AX=FFEFh,AX=FFF3h
  1685. --------U-16FFC6-----------------------------
  1686. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
  1687.     AX = FFC6h
  1688.     BL = new value for ???
  1689. --------U-16FFC7-----------------------------
  1690. INT 16 U - PC Tools v5.1-8.0 DESKTOP - REMOVE WINDOW
  1691.     AX = FFC7h
  1692.     ???
  1693. Return: ???
  1694. --------U-16FFC8-----------------------------
  1695. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
  1696.     AX = FFC8h
  1697. Return: DS:SI -> ???
  1698. Note:    valid only while popped up
  1699. --------U-16FFC9-----------------------------
  1700. INT 16 U - PC Tools v5.1-8.0 DESKTOP - COPY DATA TO CLIPBOARD
  1701.     AX = FFC9h
  1702.     DS:SI -> characters to store in clipboard
  1703.     CX = size in bytes
  1704. Return: CF set on error
  1705. Notes:    available only when popped up
  1706.     while copying, bytes of 00h and 0Ah are skipped
  1707. --------U-16FFCA-----------------------------
  1708. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
  1709.     AX = FFCAh
  1710.     DX = ???
  1711. Return: AX destroyed
  1712. Note:    available only when popped up
  1713. --------U-16FFCB-----------------------------
  1714. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SELECT WINDOW PARAMETERS???
  1715.     AX = FFCBh
  1716.     DX = window specifier???
  1717. Return: AX destroyed
  1718. Note:    available only when popped up
  1719. SeeAlso: AX=FFB5h
  1720. --------U-16FFCC-----------------------------
  1721. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  1722.     AX = FFCCh
  1723.     DS:SI -> ASCIZ string
  1724. Return: AX = ???
  1725.     CX = ???
  1726.     ES:DI -> address past last character displayed (v5.1/5.5)
  1727.           -> ??? on menu bar (v6.0)
  1728. --------U-16FFCD-----------------------------
  1729. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1730.     AX = FFCDh
  1731.     DS:DX -> ???
  1732. Return: ???
  1733. Note:    available only when popped up
  1734. --------U-16FFCE-----------------------------
  1735. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ??? DELAYS
  1736.     AX = FFCEh
  1737.     CX = ???
  1738. Return: nothing???
  1739. --------U-16FFCF-----------------------------
  1740. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CLOSE PRINTER/PRINT FILE
  1741.     AX = FFCFh
  1742. Note:    available only when popped up
  1743. --------U-16FFD0-----------------------------
  1744. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PREPARE TO PRINT???
  1745.     AX = FFD0h
  1746.     ???
  1747. Return: ???
  1748. Note:    available only when popped up
  1749. --------U-16FFD1-----------------------------
  1750. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY PRINT OPTIONS MENU
  1751.     AX = FFD1h
  1752. Return: BX = number of copies
  1753.     DX = destination
  1754.         00h cancel
  1755.         01h LPT1
  1756.         02h LPT2
  1757.         03h LPT3
  1758.         04h COM1
  1759.         05h COM2
  1760.         06h disk file
  1761. Note:    available only when popped up
  1762. --------U-16FFD2-----------------------------
  1763. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1764.     AX = FFD2h
  1765.     BX = ???
  1766. Return: BL = ???
  1767. Note:    available only when popped up
  1768. --------U-16FFD3-----------------------------
  1769. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1770.     AX = FFD3h
  1771.     DS:SI -> 92-byte data record for ???
  1772. Return: ???
  1773. SeeAlso: AX=FED3h
  1774. --------U-16FFD4BH3C-------------------------
  1775. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CREATE/OPEN/DELETE FILE
  1776.     AX = FFD4h
  1777.     BH = 3Ch create file (with no attributes)
  1778.          3Dh open file
  1779.          41h delete file
  1780.     BL = access mode
  1781.          00h read only
  1782.          01h write only
  1783.          02h read/write
  1784.     DS:SI -> ASCIZ filename
  1785. Return: BX = file handle
  1786.         0000h on error
  1787. Note:    operation is attempted in (in order) the directory from which the
  1788.       desktop was started/run???, the directory specified with the
  1789.       filename, X:\PCTOOLS\, and X:\
  1790. --------U-16FFD5-----------------------------
  1791. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1792.     AX = FFD5h
  1793.     ???
  1794. Return: ???
  1795. Note:    available only when popped up
  1796. --------U-16FFD6-----------------------------
  1797. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1798.     AX = FFD6h
  1799.     BX = ???
  1800.     CX = ???
  1801.     DX = offset in ???
  1802.     ???
  1803. Return: ???
  1804. Note:    available only when popped up
  1805. --------U-16FFD7-----------------------------
  1806. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1807.     AX = FFD7h
  1808.     ???
  1809. Return: BL = ???
  1810. Note:    available only when popped up
  1811. --------U-16FFD8-----------------------------
  1812. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SAFE CREATE FILE
  1813.     AX = FFD8h
  1814.     DS:BX -> ASCIZ filename
  1815. Return: BX = file handle
  1816.         0000h on error
  1817. Note:    pops up confirmation menu if file already exists
  1818.     only available when popped up???
  1819. --------U-16FFD9-----------------------------
  1820. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
  1821.     AX = FFD9h
  1822. Return: AX = ???
  1823. Note:    available only when popped up
  1824. --------U-16FFDA-----------------------------
  1825. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET NAME OF LAST FILE OPENED
  1826.     AX = FFDAh
  1827.     DS:SI -> ??? (v5.1/5.5 only)
  1828. Return: DS:SI -> filename
  1829. --------U-16FFDB-----------------------------
  1830. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
  1831.     AX = FFDBh
  1832.     BL = ???
  1833. Note:    available only when popped up
  1834. --------U-16FFDC-----------------------------
  1835. INT 16 U - PC Tools v5.1-8.0 DESKTOP - UNHOOK
  1836.     AX = FFDCh
  1837. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  1838.       original values
  1839. Index:    uninstall;PC Tools DESKTOP
  1840. --------U-16FFDDBX0000-----------------------
  1841. INT 16 U - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  1842.     AX = FFDDh
  1843.     BX = 0000h
  1844. Return: CX = 5555h
  1845.     DX = 5555h if PCShell installed in resident mode
  1846. --------U-16FFDDBX0001-----------------------
  1847. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  1848.     AX = FFDDh
  1849.     BX = 0001h
  1850. Return: CF clear if request successful (PCShell will pop up)
  1851.     CF set on error
  1852. SeeAlso: AX=FFDDh/BX=0003h
  1853. --------U-16FFDDBX0002-----------------------
  1854. INT 16 U - PC Tools v5.1-5.5 PCShell API - GET ???
  1855.     AX = FFDDh
  1856.     BX = 0002h
  1857. Return: AL =
  1858.         00h ???
  1859.         01h ???
  1860. Note:    PCShell v6.0+ displays the error message "Incorrect PCRUN version",
  1861.       awaits a keystroke, and aborts the current process
  1862. --------U-16FFDDBX0003-----------------------
  1863. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  1864.     AX = FFDDh
  1865.     BX = 0003h
  1866. SeeAlso: AX=FFDDh/BX=0001h
  1867. --------U-16FFDDBX0004-----------------------
  1868. INT 16 U - PC Tools v5.1+ PCShell API - GET ???
  1869.     AX = FFDDh
  1870.     BX = 0004h
  1871. Return: CF clear if successful
  1872.         DS:SI -> ???
  1873. --------U-16FFDDBX0005-----------------------
  1874. INT 16 U - PC Tools v5.1+ PCShell API - ???
  1875.     AX = FFDDh
  1876.     BX = 0005h
  1877.     ???
  1878. Return: ???
  1879. Note:    resets various variables if certain conditions are met
  1880. --------U-16FFDDBX0006-----------------------
  1881. INT 16 U - PC Tools v5.1+ PCShell API - ???
  1882.     AX = FFDDh
  1883.     BX = 0006h
  1884.     ???
  1885. Return: ???
  1886. Note:    resets various variables if certain conditions are met
  1887. --------U-16FFDDBX0007-----------------------
  1888. INT 16 U - PC Tools v5.1+ PCShell API - SET ??? FLAG
  1889.     AX = FFDDh
  1890.     BX = 0007h
  1891. Return: CF clear if successful
  1892. SeeAlso: AX=FFDDh/BX=0008h
  1893. --------U-16FFDDBX0008-----------------------
  1894. INT 16 U - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  1895.     AX = FFDDh
  1896.     BX = 0008h
  1897. Return: CF undefined
  1898. SeeAlso: AX=FFDDh/BX=0007h
  1899. --------U-16FFDDBX0009-----------------------
  1900. INT 16 U - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
  1901.     AX = FFDDh
  1902.     BX = 0009h
  1903. Return: CF clear if successful
  1904.         DS:SI -> list of pointers (see below)
  1905.  
  1906. Format of returned pointer list:
  1907. Offset    Size    Description
  1908.  00h    WORD    offset of WORD containing ???
  1909.  02h    WORD    offset of name of program to execute
  1910.  04h    WORD    offset of 80-byte buffer for ???
  1911.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  1912.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  1913. --------U-16FFDDBX000A-----------------------
  1914. INT 16 U - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
  1915.     AX = FFDDh
  1916.     BX = 000Ah
  1917. Return: CX = 5555h if running
  1918.     DX = 5555h
  1919. Note:    also sets a flag
  1920. --------U-16FFDDBX000B-----------------------
  1921. INT 16 U - PC Tools v6.0+ PCRUN API - ???
  1922.     AX = FFDDh
  1923.     BX = 000Bh
  1924.     ???
  1925. Return: CX = 5555h if PCRUN active
  1926.     DX = 5555h
  1927. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  1928. --------U-16FFDE-----------------------------
  1929. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY POPUP MENU
  1930.     AX = FFDEh
  1931.     DS:DX -> menu description (must be on a paragraph boundary)
  1932. Return: AX = ???
  1933.         AL seems to be the number of the selected button
  1934. Note:    available only when popped up
  1935. SeeAlso: AX=FFEEh
  1936. --------U-16FFDF-----------------------------
  1937. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1938.     AX = FFDFh
  1939.     ???
  1940. Return: ???
  1941. --------U-16FFE0-----------------------------
  1942. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1943.     AX = FFE0h
  1944.     CX = ???
  1945.     DX = ???
  1946. Note:    available only when popped up
  1947. --------U-16FFE1-----------------------------
  1948. INT 16 U - PC Tools v5.1-8.0 DESKTOP - BEEP
  1949.     AX = FFE1h
  1950. --------U-16FFE2-----------------------------
  1951. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1952.     AX = FFE2h
  1953.     DX = ???
  1954. Return: ???
  1955. Note:    available only when popped up
  1956. --------U-16FFE3-----------------------------
  1957. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PRINT CHARACTER
  1958.     AX = FFE3h
  1959.     BL = character to print to currently open printer or print file
  1960. Return: CF set on error
  1961. Note:    available only when popped up
  1962. SeeAlso: INT 17/AH=00h
  1963. --------U-16FFE4-----------------------------
  1964. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1965.     AX = FFE4h
  1966.     DX = segment of ???
  1967. Return: ???
  1968. Note:    available only when popped up
  1969. --------U-16FFE5-----------------------------
  1970. INT 16 U - PC Tools v5.1-8.0 DESKTOP - POP UP FILE SELECTION MENU
  1971.     AX = FFE5h
  1972.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  1973.     DX = segment of window parameters???
  1974. Return: AX = DOS file handle for file
  1975.         DS:DX -> filename???
  1976.        = FFFFh if cancelled by user
  1977. Note:    available only when popped up
  1978. SeeAlso: AX=FFDAh
  1979. --------U-16FFE6-----------------------------
  1980. INT 16 U - PC Tools v5.1-8.0 DESKTOP - CHECK FOR AND GET KEYSTROKE
  1981.     AX = FFE6h
  1982. Return: AX = 0000h if no key available
  1983.          else  BIOS keycode
  1984. Notes:    available only when popped up
  1985.     invokes INT 28 idle interrupt before checking for key
  1986. --------U-16FFE7-----------------------------
  1987. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  1988.     AX = FFE7h
  1989.     BX = segment of ???
  1990. Return: ???
  1991. Note:    available only when popped up
  1992. --------U-16FFE8-----------------------------
  1993. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY NUMBER
  1994.     AX = FFE8h
  1995.     CX = number
  1996.     DH = attribute
  1997.     DS:SI -> destination for ASCII number
  1998. Return: DS:SI buffer filled in with alternating characters and attributes
  1999. --------U-16FFE9-----------------------------
  2000. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET FILE LIST???
  2001.     AX = FFE9h
  2002. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  2003. Note:    available only when popped up
  2004. --------U-16FFEA-----------------------------
  2005. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY COUNTED STRING
  2006.     AX = FFEAh
  2007.     DS:SI -> counted string (count byte followed by string)
  2008. Return: ???
  2009. Note:    available only when popped up
  2010. --------U-16FFEB-----------------------------
  2011. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2012.     AX = FFEBh
  2013.     ???
  2014. Return: ???
  2015. --------U-16FFEC-----------------------------
  2016. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET KEY
  2017.     AX = FFECh
  2018.     DS:SI -> FAR routine to ???
  2019.     BX = ???
  2020.     ???
  2021. Return: AX = keystroke
  2022.         FFFFh if F10 pressed to go to menu
  2023. Notes:    available only when popped up
  2024.     invokes INT 28 while waiting for keystroke
  2025.     F10 is hotkey to Desktop menu
  2026. Index:    hotkeys;PC Tools DESKTOP
  2027. --------U-16FFED-----------------------------
  2028. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET ???
  2029.     AX = FFEDh
  2030. Return: AX = ???
  2031. Note:    available only when popped up
  2032. --------U-16FFEE-----------------------------
  2033. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE PULLDOWN MENUS
  2034.     AX = FFEEh
  2035.     DS:SI -> pulldown menu system description (see below)
  2036. Return: AX destroyed
  2037. Notes:    available only when popped up
  2038.     if the accessory does not need any menu items of its own, it should
  2039.       call AX=FFFAh instead
  2040. SeeAlso: AX=FFF7h,AX=FFFAh
  2041.  
  2042. Format of pulldown menu system description:
  2043. Offset    Size    Description
  2044.  00h    WORD    offset of menu bar contents (counted string)
  2045.  02h    WORD    number of items on menu bar
  2046.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  2047.  0Eh 10 BYTEs    which character to highlight in each menu item (01h=first)
  2048.  18h    WORD    offset of first menu definition (see below)
  2049.  1Ah    WORD    offset of second menu definition
  2050.     ...
  2051.  
  2052. Format of menu definition:
  2053. Offset    Size    Description
  2054.  00h    WORD    offset of menu contents (see below)
  2055.  02h    WORD    number of entries in menu
  2056.  04h    for each entry:
  2057.         Offset    Size    Description
  2058.          00h    BYTE    scancode of Alt-key to invoke entry
  2059.          01h    BYTE    character to highlight (01h=first, etc)
  2060.          02h    WORD    offset of FAR routine to handle selection
  2061.  
  2062. Format of menu contents:
  2063. Offset    Size    Description
  2064.  00h    BYTE    number of lines in menu
  2065.  01h    BYTE    width of menu
  2066.  02h  N BYTEs    counted strings, one for each line in menu
  2067. --------U-16FFEFCX0000-----------------------
  2068. INT 16 U - PC Tools v5.1-8.0 DESKTOP - INSTALLATION CHECK
  2069.     AX = FFEFh
  2070.     CX = 0000h
  2071. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  2072.         BX = segment of resident portion
  2073.         AX = ??? (v5.1/5.5 only)
  2074. SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
  2075. --------U-16FFF0-----------------------------
  2076. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SET ???
  2077.     AX = FFF0h
  2078.     DX = ???
  2079. Return: AX destroyed
  2080. Note:    available only when popped up
  2081. --------U-16FFF1BX0000-----------------------
  2082. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ALTERNATE INSTALLATION CHECK
  2083.     AX = FFF1h
  2084.     BX = 0000h  leave ??? flag as is
  2085.         nonzero set ??? flag
  2086. Return: CX = 5555h if installed
  2087.     DX = 5555h
  2088. --------U-16FFF2-----------------------------
  2089. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DISPLAY HELP LINE
  2090.     AX = FFF2h
  2091.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  2092.         or help text
  2093. Return: AX destroyed
  2094. Notes:    available only when popped up
  2095.     if the specified string does not start with '[', it is displayed
  2096.       centered on the bottom line, else the function key labels are shown
  2097. --------U-16FFF3-----------------------------
  2098. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PREPARE TO UNLOAD RESIDENT DESKTOP
  2099.     AX = FFF3h
  2100. Note:    releases any EMS being used; restores video mode, page, and cursor
  2101.       shape; and restores interrupt vectors
  2102. SeeAlso: AX=FFC5h,AX=FFEFh
  2103. Index:    uninstall;PC Tools DESKTOP
  2104. --------U-16FFF4-----------------------------
  2105. INT 16 U - PC Tools v5.1-8.0 DESKTOP - ???
  2106.     AX = FFF4h
  2107.     ???
  2108. Return: ???
  2109. Note:    available only when popped up
  2110. SeeAlso: AX=FFF6h
  2111. --------U-16FFF5-----------------------------
  2112. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET SCREEN ATTRIBUTE ARRAY
  2113.     AX = FFF5h
  2114. Return: ES:BX -> screen attributes data structure (see below)
  2115.     AL = ??? (v6.0+)
  2116.  
  2117. Format of attribute data structure:
  2118. Offset    Size    Description
  2119.  -1    BYTE    attribute for desktop background
  2120.  00h    BYTE    attribute for normal characters on desktop menu
  2121.  01h    BYTE    attribute for highlighted characters on desktop menu
  2122.  02h  5 BYTEs    ???
  2123.  07h    BYTE    attribute for dialog boxes
  2124.  08h 15 BYTEs    ???
  2125.  17h    BYTE    attribute for message boxes
  2126. --------U-16FFF6-----------------------------
  2127. INT 16 U - PC Tools v5.1-8.0 DESKTOP - INVOKE NOTEPAD EDITOR
  2128.     AX = FFF6h
  2129.     DS = segment of editor buffer structure (see below)
  2130.     BX = ???
  2131.     DX = segment of window parameters structure (see AX=FFB5h)
  2132. Return: ???
  2133. Note:    available only when popped up
  2134. SeeAlso: AX=FFF4h
  2135.  
  2136. Format of editor buffer structure:
  2137. Offset    Size    Description
  2138.  00h    WORD    offset of current cursor position in buffer segment
  2139.  02h  2 BYTEs    ???
  2140.  04h    WORD    offset of beginning of file data in buffer segment
  2141.  06h 10 BYTEs    ???
  2142.  10h  N BYTEs    ASCIZ name of file being edited
  2143. --------U-16FFF7-----------------------------
  2144. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PROCESS MENU BAR ENTRY???
  2145.     AX = FFF7h
  2146.     DS:SI -> ???
  2147.     ???
  2148. Return: ???
  2149. Notes:    available only when popped up
  2150.     performs input processing on the menu bar set up with AX=FFEEh
  2151. SeeAlso: AX=FFEEh,AX=FFFBh
  2152. --------U-16FFF8-----------------------------
  2153. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DRAW EMPTY WINDOW
  2154.     AX = FFF8h
  2155.     DS:0000h -> window parameters structure (see AX=FFB5h)
  2156.     DS:BX -> DWORD to store address of ??? on screen
  2157. Return: ???
  2158. --------U-16FFF9-----------------------------
  2159. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE SCREEN REFRESH ROUTINE
  2160.     AX = FFF9h
  2161.     ES:BX -> FAR routine to redisplay the utility's window
  2162. Note:    available only when popped up
  2163. --------U-16FFFA-----------------------------
  2164. INT 16 U - PC Tools v5.1-8.0 DESKTOP - DEFINE STANDARD PULLDOWN MENUS
  2165.     AX = FFFAh
  2166. Notes:    available only when popped up
  2167.     adds the "Window" option to the "Desktop" option which is the only one
  2168.       available when no accessories are active.  Unlike AX=FFEEh, no
  2169.       additional menu items are added between "Desktop" and "Window"
  2170. SeeAlso: AX=FFEEh,AX=FFFBh
  2171. --------U-16FFFB-----------------------------
  2172. INT 16 U - PC Tools v5.1-8.0 DESKTOP - PROCESS STANDARD MENU BAR
  2173.     AX = FFFBh
  2174. Return: ???
  2175. Notes:    available only when popped up
  2176.     performs input processing on the standard menu bar set up with AX=FFFAh
  2177. SeeAlso: AX=FFF7h
  2178. --------U-16FFFC-----------------------------
  2179. INT 16 U - PC Tools v5.1-8.0 DESKTOP - GET HOTKEYS AND KEYBOARD VECTOR
  2180.     AX = FFFCh
  2181. Return: ES:BX -> hotkey table (see below)
  2182.     DS:DX = original INT 09 vector
  2183.  
  2184. Format of hotkey table:
  2185. Offset    Size    Description
  2186.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  2187.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  2188.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  2189.  06h  2 BYTEs    scancode/shift state for screen autodial key
  2190. --------U-16FFFD-----------------------------
  2191. INT 16 U - PC Tools v5.1-8.0 DESKTOP - COPY ???
  2192.     AX = FFFDh
  2193. Return: AX destroyed
  2194. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  2195. SeeAlso: AX=FF91h,AX=FF92h
  2196. --------M-16FFFE-----------------------------
  2197. INT 16 U - PC Tools v5.1-8.0 DESKTOP - SHOW MOUSE CURSOR
  2198.     AX = FFFEh
  2199. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  2200. --------M-16FFFF-----------------------------
  2201. INT 16 U - PC Tools v5.1-8.0 DESKTOP - HIDE MOUSE CURSOR
  2202.     AX = FFFFh
  2203. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  2204. --------P-17----DX0ABC-----------------------
  2205. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  2206.     DX = 0ABCh
  2207. Return: AX = AAAAh
  2208.     DX = BAAAh
  2209.     ES = code segment of resident portion
  2210. --------P-17----DX0B90-----------------------
  2211. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  2212.     DX = 0B90h
  2213. Return: DX = ABBBh
  2214.     ES = code segment of resident portion
  2215. --------P-17----DX0B91-----------------------
  2216. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  2217.     DX = 0B91h
  2218. Return: DX = ABCBh
  2219.     ES = code segment of resident portion
  2220. --------P-17----DX0F5F-----------------------
  2221. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  2222.     DX = 0F5Fh
  2223. Return: AX = AAAAh
  2224.     DX = F555h
  2225.     ES = code segment of resident portion
  2226. --------B-1700-------------------------------
  2227. INT 17 - PRINTER - WRITE CHARACTER
  2228.     AH = 00h
  2229.     AL = character to write
  2230.     DX = printer number (00h-02h)
  2231. Return: AH = printer status (see below)
  2232. SeeAlso: AH=02h,AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
  2233.  
  2234. Bitfields for printer status:
  2235.  bit 7    not busy
  2236.  bit 6    acknowledge
  2237.  bit 5    out of paper
  2238.  bit 4    selected
  2239.  bit 3    I/O error
  2240.  bits 2,1 unused
  2241.  bit 0    timeout
  2242. --------B-1701-------------------------------
  2243. INT 17 - PRINTER - INITIALIZE PORT
  2244.     AH = 01h
  2245.     DX = printer number (00h-02h)
  2246. Return: AH = printer status (see AH=00h)
  2247. Note:    some printers report that they are ready immediately after
  2248.       initialization when they actually are not; a more reliable result may
  2249.       be obtained by calling AH=02h after a brief delay
  2250. SeeAlso: AH=02h,AH=FFh"PC-MOS",INT 1A/AH=10h"NEC"
  2251. --------B-1702-------------------------------
  2252. INT 17 - PRINTER - GET STATUS
  2253.     AH = 02h
  2254.     DX = printer number (00h-02h)
  2255. Return: AH = printer status (see AH=00h)
  2256. Note:    PRINTFIX from MS-DOS 5.0 hooks this function and always returns AH=90h
  2257. SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
  2258. --------P-1702--DX0000-----------------------
  2259. INT 17 - INSET - INSTALLATION CHECK
  2260.     AH = 02h
  2261.     DX = 0000h
  2262.     CX = 07C3h (1987d)
  2263. Return: CX = 07C2h (1986d) if installed
  2264. Program: INSET is a text/graphics integration program
  2265. --------P-1703-------------------------------
  2266. INT 17 U - Emulaser ELTSR - INSTALL INTERRUPT HANDLERS
  2267.     AH = 03h
  2268. Return: BX = ???
  2269.     CX = ???
  2270. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2271.       Vertisoft Systems, Inc.
  2272. SeeAlso: AH=04h"Emulaser",AH=0Eh,INT 1A/AH=E5h
  2273. --------c-1703-------------------------------
  2274. INT 17 - PC-MOS/386 v5.01 - PRINT SPOOLER - PRINT STRING
  2275.     AH = 03h
  2276.     DX = printer port number
  2277.     CX = number of characters to print
  2278.     DS:SI -> string
  2279. Return: AH = printer status (see AH=00h)
  2280.     CX = number of characters actually printed
  2281. Desc:    send an entire string of chars to the print spooler with a single call
  2282. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  2283.       operating system by The Software Link, Inc.
  2284. SeeAlso: AH=00h,AH=01h,AH=02h,AH=FFh"PC-MOS"
  2285. --------P-1704-------------------------------
  2286. INT 17 U - Emulaser ELTSR - BEGIN CAPTURING OUTPUT
  2287.     AH = 04h
  2288. Note:    has no effect unless ELTSR is deactivated (see AX=0503h)
  2289. SeeAlso: AH=03h"Emulaser",AX=0503h,INT 1A/AH=E5h
  2290. --------P-170500-----------------------------
  2291. INT 17 U - Emulaser ELTSR - ???
  2292.     AX = 0500h
  2293.     ???
  2294. Return: AX = unload status (0001h safe to unload, 0002h not safe)
  2295.     BX = ???
  2296.     CX = PSP segment of ELTSR
  2297.     DX = activity flag (0000h disabled, 0001h capturing, 0002h ???printing)
  2298.     SI = ???
  2299.     DI = ???
  2300. SeeAlso: AH=04h,INT 1A/AH=E5h
  2301. --------P-170501-----------------------------
  2302. INT 17 U - Emulaser ELTSR - UNHOOK INTERRUPTS
  2303.     AX = 0501h
  2304. Return: (see AX=0500h)
  2305. Note:    restores interrupt vectors without checking whether they have been
  2306.       hooked by later programs; should only be called if ELTSR reports
  2307.       that it is safe to unload
  2308. SeeAlso: AH=04h,AX=0500h,AX=0503h,INT 1A/AH=E5h
  2309. Index:    uninstall;Emulaser ELTSR
  2310. --------P-170502-----------------------------
  2311. INT 17 U - Emulaser ELTSR - SET ???
  2312.     AX = 0502h
  2313.     BL = Emulaser port (31h = LPT1, 32h = LPT2, 33h = LPT3)
  2314.     CL = ???
  2315.     DL = ???
  2316. Return: (see AX=0500h)
  2317. SeeAlso: AH=04h,AX=0500h,INT 1A/AH=E5h
  2318. --------P-170503-----------------------------
  2319. INT 17 U - Emulaser ELTSR - DEACTIVATE???
  2320.     AX = 0503h
  2321. Return: (see AX=0500h)
  2322. SeeAlso: AH=04h,AX=0500h,AX=0501h,INT 1A/AH=E5h
  2323. --------P-1706-------------------------------
  2324. INT 17 U - Emulaser ELTSR - ???
  2325.     AH = 06h
  2326.     ???
  2327. Return: ???
  2328. SeeAlso: AH=05h,INT 1A/AH=E5h
  2329. --------P-1707-------------------------------
  2330. INT 17 U - Emulaser ELTSR - OPEN CAPTURE FILE
  2331.     AH = 07h
  2332.     ES:DX -> ASCIZ filename to be opened
  2333. Return: ???
  2334. Note:    new output will be appended to the specified file
  2335. SeeAlso: AH=08h,INT 1A/AH=E5h
  2336. --------P-1708-------------------------------
  2337. INT 17 U - Emulaser ELTSR - CLOSE CAPTURE FILE
  2338.     AH = 08h
  2339.     ???
  2340. Return: ???
  2341. Desc:    close the file previously opened by function 07h
  2342. SeeAlso: AH=07h,INT 1A/AH=E5h
  2343. --------P-1709-------------------------------
  2344. INT 17 U - Emulaser ELTSR - PRINT CAPTURE FILE???
  2345.     AH = 09h
  2346.     BX = ???
  2347.     CX = ???
  2348.     DX = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  2349. Return: AX = status
  2350.         00h successful
  2351.         FFh failed
  2352. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2353.       Vertisoft Systems, Inc.
  2354. Note:    this function calls through to INT 1A/AX=E401h, and thus requires
  2355.       that either ELSPL or Disk Spool II be installed
  2356. SeeAlso: AH=0Ah,INT 1A/AX=E401h,INT 1A/AH=E5h
  2357. --------P-170A-------------------------------
  2358. INT 17 U - Emulaser ELTSR - SET ??? FILENAME
  2359.     AH = 0Ah
  2360.     ES:BX -> ??? buffer
  2361.     CX = length of ??? buffer
  2362. Return: ???
  2363. Note:    copies the specified name into the buffer passed to ELSPL as the
  2364.       filename by AH=09h
  2365. SeeAlso: AH=09h,INT 1A/AH=E5h
  2366. --------P-170B-------------------------------
  2367. INT 17 U - Emulaser ELTSR - GET ???
  2368.     AH = 0Bh
  2369. Return: AX:BX -> ???
  2370. SeeAlso: AH=0Ah,INT 1A/AH=E5h
  2371. --------P-170C-------------------------------
  2372. INT 17 U - Emulaser ELTSR - SET ??? FLAG
  2373.     AH = 0Ch
  2374.     ???
  2375. Return: ???
  2376. SeeAlso: AH=0Bh,INT 1A/AH=E5h
  2377. --------P-170D-------------------------------
  2378. INT 17 U - Emulaser ELTSR - GET TRUE ScrlLk STATE
  2379.     AH = 0Dh
  2380. Return: AX = state (0000h off, 0010h on)
  2381. Desc:    determine the actual state of ScrlLk even when Emulaser is controlling
  2382.       the ScrlLk light as its activity indicator
  2383. SeeAlso: AH=0Ch,INT 16/AH=02h,INT 1A/AH=E5h
  2384. --------P-170E-------------------------------
  2385. INT 17 U - Emulaser ELTSR - BACKGROUND PROCESSING
  2386.     AH = 0Eh
  2387. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2388.       Vertisoft Systems, Inc.
  2389. Note:    this function is called by ELTSR on every INT 08 to allow data to be
  2390.       processed in the background, but may also be called by applications
  2391.       to give Emulaser additional CPU time
  2392. SeeAlso: AH=0Dh,INT 1A/AH=E5h
  2393. --------P-172000-----------------------------
  2394. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - INSTALLATION CHECK
  2395.     AX = 2000h
  2396.     BL = printer number???
  2397. Return:    AX = status (see below)
  2398.     BX = driver version number (BH=major,BL=minor)
  2399.     CH = ??? (00h)
  2400.     CL = ???
  2401.     DX = ??? (0100h)
  2402. Note:    also enables the remaining printer driver functions (2001h-2007h)
  2403. SeeAlso: AX=2001h,AX=2002h,AX=2003h,AX=2004h,AX=2005h,AX=2006h,AX=2007h
  2404.  
  2405. Values for status:
  2406.  0000h    successful
  2407.  0001h    invalid printer???
  2408.  0002h    ???
  2409.  0003h    invalid subfunction
  2410.  0005h    driver disabled, must call function 00h first
  2411.  0009h    unknown printer error
  2412.  000Bh    printer not selected
  2413.  000Ch    printer out of paper
  2414.  000Eh    error while writing to serial printer
  2415.  000Fh    ???
  2416.  0010h    invalid function number
  2417.  0011h    value out of range
  2418. --------P-172001-----------------------------
  2419. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - SET ??? FLAG
  2420.     AX = 2001h
  2421.     BL = printer number???
  2422. Return: AX = status (see AX=2000h)
  2423. --------P-172002-----------------------------
  2424. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - GET INFORMATION
  2425.     AX = 2002h
  2426.     BL = printer number???
  2427.     CL = desired information
  2428.         00h printer type
  2429.         Return: ES:DI -> ASCIZ printer name
  2430.         01h paper size
  2431.         DX = size index
  2432.         Return: ES:DI -> ASCIZ paper size description
  2433.         02h ???
  2434.         Return: BX = ???
  2435.         03h printer information???
  2436.         DX = ???
  2437.         ES:BX -> buffer for ??? (min 134 bytes)
  2438. Return: AX = status (see AX=2000h)
  2439. SeeAlso: AX=2000h,AX=2004h
  2440. --------P-172003-----------------------------
  2441. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ???
  2442.     AX = 2003h
  2443.     ES:BX -> ???
  2444. Return: AX = status (see AX=2000h)
  2445. SeeAlso: AX=2000h,AX=2004h
  2446. --------P-172004-----------------------------
  2447. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - GET ???
  2448.     AX = 2004h
  2449.     BL = printer number???
  2450. Return: AX = status (see AX=2000h)
  2451.     ES:DI -> ???
  2452. SeeAlso: AX=2000h,AX=2003h
  2453. --------P-172005-----------------------------
  2454. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ADVANCE PRINTER TO NEXT PAGE
  2455.     AX = 2005h
  2456.     BL = printer number???
  2457. Return: AX = status (see AX=2000h)
  2458. Note:    this function also clears the flag set by AX=2001h
  2459. SeeAlso: AX=2000h,AX=2001h,AX=2006h
  2460. --------P-172006-----------------------------
  2461. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ADVANCE TO NEXT PAGE & SHUT DOWN
  2462.     AX = 2006h
  2463.     BL = printer number???
  2464. Return: AX = status (see AX=2000h)
  2465. Note:    this function also clears the flag set by AX=2001h and disables
  2466.       functions other than AX=2000h
  2467. SeeAlso: AX=2000h,AX=2001h,AX=2005h
  2468. --------P-172007-----------------------------
  2469. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - UNIMPLEMENTED
  2470.     AX = 2007h
  2471. Return: AX unchanged
  2472. SeeAlso: AX=2000h
  2473. --------N-172400-----------------------------
  2474. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  2475.     AX = 2400h
  2476.     DL = new state
  2477.         00h disabled
  2478.         01h enabled
  2479. Return: DL = 24h if installed
  2480.     DH = minor version number
  2481.     CX = network address of this machine
  2482.     AL = status
  2483.         00h successful
  2484.         01h timeout
  2485.         02h header error
  2486.         03h data error
  2487.         04h busy
  2488.         05h invalid parameters
  2489. SeeAlso: AX=2403h,INT 16/AX=4500h
  2490. --------N-172401-----------------------------
  2491. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  2492.     AX = 2401h
  2493.     BL = timeout in clock ticks
  2494. Return: AL = status (see AX=2400h)
  2495.     DX:BX -> receive buffer
  2496. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  2497. --------N-172402-----------------------------
  2498. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  2499.     AX = 2402h
  2500.     transmit buffer filled (see AX=2403h)
  2501. Return: AL = status (see AX=2400h)
  2502. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  2503. --------N-172403-----------------------------
  2504. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  2505.     AX = 2403h
  2506. Return: AL = status (see AX=2400h)
  2507.     CX = number of characters in receive ring buffer
  2508.     DX:BX -> transmit buffer
  2509. SeeAlso: AX=2400h,AX=2402h
  2510. --------N-172404-----------------------------
  2511. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  2512.     AX = 2404h
  2513.     BX = target address
  2514. Return: AL = status (see AX=2400h)
  2515. SeeAlso: AX=2402h,AX=2405h
  2516. --------N-172405-----------------------------
  2517. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  2518.     AX = 2405h
  2519.     BX = target address
  2520. Return: AL = status (see AX=2400h)
  2521. SeeAlso: AX=2402h,AX=2404h
  2522. --------N-172406-----------------------------
  2523. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  2524.     AX = 2406h
  2525. Return: AL = status (see AX=2400h)
  2526. SeeAlso: AX=2407h,AX=240Ah
  2527. --------N-172407-----------------------------
  2528. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  2529.     AX = 2407h
  2530. Return: AL = status (see also AX=2400h)
  2531.         06h end of data
  2532.     DL = received character
  2533. SeeAlso: AX=2406h
  2534. --------N-172408-----------------------------
  2535. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  2536.     AX = 2408h
  2537. Return: AL = status (see also AX=2400h)
  2538.         06h end of data
  2539.     CX = number of bytes in receive buffer
  2540.     DX:SI -> receive buffer
  2541. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  2542. --------N-172409-----------------------------
  2543. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  2544.     AX = 2409h
  2545.     BX = target address
  2546.     CX = number of data bytes
  2547.     DL = command code to send
  2548.     DS:SI -> data bytes for command
  2549. Return: AL = status (see also AX=2400h)
  2550.         03h no response
  2551.         06h remote currently unable to perform command
  2552. SeeAlso: AX=2405h,AX=2408h
  2553. --------N-17240A-----------------------------
  2554. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  2555.     AX = 240Ah
  2556. Return: AL = status (see AX=2400h)
  2557. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  2558. --------N-17240B-----------------------------
  2559. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  2560.     AX = 240Bh
  2561.     DL = character to send
  2562. Return: AL = status (see also AX=2400h)
  2563.         03h transmission error
  2564.         06h write error
  2565. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  2566. --------N-17240C-----------------------------
  2567. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  2568.     AX = 240Ch
  2569. Return: AL = status (see also AX=2400h)
  2570.         03h transmission error
  2571.         06h remote breaks connection
  2572. SeeAlso: AX=240Ah,AX=240Bh
  2573. --------J-175000-----------------------------
  2574. INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
  2575.     AX = 5000h
  2576.     BX = country code
  2577.         0001h USA (English), 0051h Japan
  2578. Return: AL = status
  2579.         00h successful
  2580.         01h bad country code
  2581.         02h other error
  2582. SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
  2583. --------J-175001-----------------------------
  2584. INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
  2585.     AX = 5001h
  2586. Return: AL = status
  2587.         00h successful
  2588.         BX = country code
  2589.         02h error
  2590. SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
  2591. --------J-1751-------------------------------
  2592. INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
  2593.     AH = 51h
  2594.     DX = 2-byte JIS code
  2595. Return: DX = shift-JIS value or 0000h on error
  2596. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  2597.       characters to Shift-JIS characters, and the other performs the
  2598.       opposite conversion
  2599. SeeAlso: AX=5000h,AH=52h
  2600. --------J-1752-------------------------------
  2601. INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
  2602.     AH = 52h
  2603.     DX = 2-byte shift-JIS code
  2604. Return: DX = JIS code or 0000h on error
  2605. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  2606.       characters to Shift-JIS characters, and the other performs the
  2607.       opposite conversion
  2608. SeeAlso: AH=51h
  2609. --------V-1760-------------------------------
  2610. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  2611.     AH = 60h
  2612. Return: AL = 60h
  2613.     DX = CS of resident code
  2614. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  2615.     FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
  2616.       consisting of an 80h followed by the actual command
  2617. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  2618. --------V-1761-------------------------------
  2619. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  2620.     AH = 61h
  2621. Return: AL = 61h
  2622.     DX = CS of resident code
  2623. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  2624. --------P-1762-------------------------------
  2625. INT 17 U - T2PS v1.0 - UNINSTALL
  2626.     AH = 62h
  2627. Return: nothing
  2628. SeeAlso: AH=63h,AH=64h,INT 05/AX=554Eh
  2629. --------P-1763-------------------------------
  2630. INT 17 U - T2PS v1.0 - SET PARAMETERS
  2631.     AH = 63h
  2632.     ES:SI -> settings (see below)
  2633. Program: T2PS is a shareware ASCII-to-PostScript converter by A.N.D.
  2634.       Technologies
  2635. SeeAlso: AH=62h,AH=64h,INT 05/AX=4E57h
  2636.  
  2637. Format of settings:
  2638. Offset    Size    Description
  2639.  00h    WORD    LPT port number (0=LPT1, etc.)
  2640.  02h    WORD    page heigh in points
  2641.  04h    WORD    page width in points
  2642.  06h    WORD    top margin in points
  2643.  08h    WORD    bottom margin in points
  2644.  0Ah    WORD    left margin in points
  2645.  0Ch    WORD    right margin in points
  2646.  0Eh    WORD    font size in points
  2647.  10h    WORD    tab size
  2648.  12h    WORD    timeout in clock ticks
  2649. --------P-1764-------------------------------
  2650. INT 17 U - T2PS v1.0 - GET PARAMETERS
  2651.     AH = 64h
  2652.     ES:SI -> buffer for settings (see AH=63h)
  2653. Return: ES:SI buffer filled
  2654. SeeAlso: AH=62h,AH=63h,INT 05/AX=5053h
  2655. --------N-1781-------------------------------
  2656. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  2657.     AH = 81h
  2658.     AL = 00h (NTNX compatibility mode)
  2659.     CL = number of jobs to cancel
  2660. Return: AL = status
  2661.         00h success
  2662.         01h..7Fh warning
  2663.         80h general failure
  2664.         81h host overloaded (NTNX only)
  2665.         82h module busy (NTNX only)
  2666.         83h host busy (NTNX only)
  2667.         84h re-entry flag set
  2668.         85h invalid request
  2669.         86h invalid printer
  2670.         87h invalid process ID
  2671.         89h access denied
  2672.         8Ah option not available for given port type
  2673.         8Bh option not available for given task type
  2674.         91h printer busy
  2675.         C2h file not found
  2676.         C3h path not found
  2677.         C4h file access failure
  2678. Note:    cancels the last CL printouts for the current task
  2679. SeeAlso: AH=82h
  2680. --------N-1782-------------------------------
  2681. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  2682.     AH = 82h
  2683.     AL = 00h (NTNX compatibility mode)
  2684. Return: AL = status (see AH=81h)
  2685. SeeAlso: AH=81h
  2686. --------N-1783-------------------------------
  2687. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  2688.     AH = 83h
  2689.     AL = mode
  2690.         00h NTNX compatibility
  2691.         CL = number of copies (max 99, default 1)
  2692.         02h MW386 v2+
  2693.         BX = logical device number
  2694.             00h-03h = LPT1-LPT4
  2695.             04h-07h = COM1-COM4
  2696.         CX = number of copies
  2697. Return: AL = status (see AH=81h)
  2698. Note:    in NTNX compatibility mode, this function only affects LPT1
  2699. --------N-1784-------------------------------
  2700. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  2701.     AH = 84h
  2702.     AL = mode
  2703.         00h NTNX compatibility
  2704.         02h MW386 v2+
  2705.         BX = logical device number
  2706.             00h-03h = LPT1-LPT4
  2707.             04h-07h = COM1-COM4
  2708. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  2709.       under MW386 in NTNX compatibility mode)
  2710. --------J-1784-------------------------------
  2711. INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
  2712.     AH = 84h
  2713.     AL = character
  2714.     DX = printer number
  2715. Return: AH = printer status (see AH=00h)
  2716. SeeAlso: AH=00h,AH=85h
  2717. --------J-1785-------------------------------
  2718. INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
  2719.     AH = 85h
  2720.     AL = new state (00h enabled, 01h disabled)
  2721. SeeAlso: AH=84h"AX"
  2722. --------N-1787-------------------------------
  2723. INT 17 - Alloy NTNX - SET INDOS POINTER
  2724.     AH = 87h
  2725.     AL = 00h
  2726.     CX:BX -> buffer for user-written printer drivers
  2727. Return: BX,CX destroyed
  2728. Note:    must be executed before the printer is enabled
  2729. SeeAlso: AH=8Ah
  2730. --------N-1788-------------------------------
  2731. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  2732.     AH = 88h
  2733.     AL = mode
  2734.         00h NTNX compatibility
  2735.         DX = NTNX printer number (see below)
  2736.         01h MW386
  2737.         DX = MW386 printer number
  2738. Return: AH = status (see AH=81h)
  2739. Note:    removes specified printer from the spooler's list of printers
  2740. SeeAlso: AH=89h,AH=8Bh
  2741.  
  2742. Values for NTNX printer number:
  2743.  00h    host LPT1
  2744.  01h    host LPT2
  2745.  02h    host LPT3
  2746.  03h    host LPT4
  2747.  04h    host COM1
  2748.  05h    host COM2
  2749.  06h    user's logical COM2
  2750.  07h    user's terminal AUX port
  2751.  08h    user's logical COM1 (MW386 only)
  2752. --------N-1789-------------------------------
  2753. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  2754.     AH = 89h
  2755.     AL = mode
  2756.         00h NTNX compatibility
  2757.         DX = NTNX printer number (see AH=88h)
  2758.         01h MW386
  2759.         DX = MW386 printer number
  2760. Return: AL = status (see AH=81h)
  2761. Note:    the specified printer is added to the spooler's list of available
  2762.       printers
  2763. SeeAlso: AH=88h,AH=8Bh
  2764. --------N-178A-------------------------------
  2765. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  2766.     AH = 8Ah
  2767.     ???
  2768. SeeAlso: AH=92h
  2769. --------N-178B-------------------------------
  2770. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  2771.     AH = 8Bh
  2772.     DS:DX -> ASCIZ printer name
  2773. Return: AL = status (see also AH=81h)
  2774.         00h successful
  2775.         DX = physical device number
  2776. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  2777. --------N-178C-------------------------------
  2778. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  2779.     AH = 8Ch
  2780.     DX = physical device number
  2781.     ES:DI -> 17-byte buffer for ASCIZ device name
  2782. Return: AL = status (see also AH=81h)
  2783.         00h successful
  2784.         ES:DI buffer filled
  2785. SeeAlso: AH=88h,AH=8Bh
  2786. --------N-178D-------------------------------
  2787. INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
  2788.     AH = 8Dh
  2789.     AL = 00h
  2790. Return: AL = status (see AH=81h)
  2791. Notes:    clears all buffers and resets spooler to boot-up values
  2792.     MW386 supports this function for compatibility only; it is a NOP
  2793. --------N-178E-------------------------------
  2794. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  2795.     AH = 8Eh
  2796.     AL = 00h
  2797. Return: CX:BX -> INT 28 entry point
  2798. SeeAlso: AH=8Fh
  2799. --------N-178F-------------------------------
  2800. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  2801.     AH = 8Fh
  2802.     AL = 00h
  2803. Return: CX:BX -> DOS intercept routine
  2804. SeeAlso: AH=8Eh
  2805. --------N-1790-------------------------------
  2806. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  2807.     AH = 90h
  2808.     AL = mode
  2809.         00h NTNX compatibility
  2810.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  2811.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  2812.         02h MW386 v2+
  2813.         BX = logical device number
  2814.             00h-03h = LPT1-LPT4
  2815.             04h-07h = COM1-COM4
  2816.     CX:SI -> ASCIZ pathname
  2817. Return: AL = status (see AH=81h)
  2818. Note:    in mode 00h, the file is always sent to logical LPT1
  2819. SeeAlso: AH=A0h
  2820. --------N-1791-------------------------------
  2821. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  2822.     AH = 91h
  2823.     AL = mode
  2824.         00h NTNX compatibility
  2825.         Return: CX = user number (00h = host)
  2826.             DX = currently selected printer number (00h-08h)
  2827.         01h MW386
  2828.         Return: CX = user number
  2829.             DX = physical dev number of currently selected printer
  2830.         02h MW386 v2+
  2831.         BX = logical device number
  2832.             00h-03h = LPT1-LPT4
  2833.             04h-07h = COM1-COM4
  2834.         Return: CX = user number
  2835.             DX = physical device number
  2836. Return: AL = status (see AH=81h)
  2837. SeeAlso: AH=8Ch
  2838. --------N-1792-------------------------------
  2839. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  2840.     AH = 92h
  2841.     AL = 00h
  2842.     CL = 00h
  2843. Return: CL = driver state
  2844.         01h initialized
  2845.         80h not initialized
  2846.     AX = status (see AH=81h)
  2847. SeeAlso: AH=8Ah
  2848. --------N-1794-------------------------------
  2849. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  2850.     AH = 94h
  2851.     AL = mode
  2852.         00h NTNX compatibility
  2853.         DX = NTNX printer number (see AH=88h)
  2854.         01h MW386
  2855.         DX = MW386 printer number
  2856.         02h MW386 v2+
  2857.         BX = logical printer number
  2858.         DX = MW386 printer number
  2859. Return: AL = status (see AH=81h)
  2860. Note:    modes 00h and 01h affect only logical LPT1
  2861. SeeAlso: AH=8Bh,AH=95h
  2862. --------N-1795-------------------------------
  2863. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  2864.     AH = 95h
  2865.     AL = mode
  2866.         00h NTNX compatibility
  2867.         Return: DX = NTNX printer number (see AH=88h)
  2868.                 (FFFFh if current printer not compatible with NTNX)
  2869.         01h MW386
  2870.         Return: DX = MW386 printer number
  2871.         02h MW386 v2+
  2872.         BX = logical device number
  2873.             00h-03h = LPT1-LPT4
  2874.             04h-07h = COM1-COM4
  2875.         Return: DX = MW386 printer number (FFFFh = none)
  2876. Return: AL = status (see AH=81h)
  2877. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  2878. SeeAlso: AH=94h
  2879. --------N-1796-------------------------------
  2880. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  2881.     AH = 96h
  2882.     AL = 00h
  2883. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  2884.       returning
  2885. SeeAlso: INT 14/AH=24h
  2886. --------N-1797-------------------------------
  2887. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  2888.     AH = 97h
  2889.     AL = mode
  2890.         00h NTNX compatibility
  2891.         02h MW386 v2+
  2892.         BX = logical device number
  2893.             00h-03h = LPT1-LPT4
  2894.             04h-07h = COM1-COM4
  2895.     CH,CL,DH = three character break sequence
  2896.     DL = subfunction
  2897.         00h set break string
  2898.         else reset break
  2899. Return: AL = status (see AH=81h)
  2900. Notes:    mode 00h affects only logical LPT1
  2901.     when the break string is encountered, the spool file will be closed and
  2902.       queued for printing automatically
  2903.     the break string is not permanently saved, and will be reset each time
  2904.       MW386 or the user is rebooted
  2905. SeeAlso: AH=9Bh
  2906. --------N-1798-------------------------------
  2907. INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
  2908.     AH = 98h
  2909.     AL = 00h
  2910.     DL = printer number (FFh=current)
  2911. Return: AL = status
  2912.         00h successful
  2913.         01h incorrect printer
  2914.         02h task not found
  2915. Note:    MW386 supports this function for compatibility only; it is a NOP
  2916. --------N-1799-------------------------------
  2917. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  2918.     AH = 99h
  2919.     AL = mode
  2920.         00h NTNX compatibility
  2921.         DL = NTNX printer number (see AH=88h)
  2922.             (FFh = task's current logical LPT1)
  2923.         DH = mode
  2924.             bit 0: get mode if 1, set mode if 0
  2925.             bit 1: private ("attached")
  2926.             bit 2: direct instead of spooled
  2927.             bits 3-7 reserved (0)
  2928.         01h MW386
  2929.         DX = MW386 printer number
  2930.         CL = mode (as for DH above)
  2931. Return: AL = status (see AH=81h)
  2932.     DH = mode (bits 1 and 2 set as above)
  2933.     DL = printer owner's user number if not spooled
  2934. --------N-179A-------------------------------
  2935. INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
  2936.     AH = 9Ah
  2937.     AL = mode
  2938.         00h NTNX compatibility
  2939.         DX = NTNX printer number (see AH=88h)
  2940.             (FFFFh = current logical LPT1)
  2941.         01h MW386
  2942.         DX = MW386 printer number
  2943.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  2944. Return: AL = status (see AH=81h)
  2945. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  2946.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  2947. SeeAlso: AH=A4h
  2948. --------N-179B-------------------------------
  2949. INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
  2950.     AH = 9Bh
  2951.     AL = mode
  2952.         00h NTNX compatibility
  2953.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  2954.         01h MW386
  2955.         CX = timeout value in seconds (00h = never)
  2956.         02h MW386 v2+
  2957.         BX = logical device number
  2958.             00h-03h = LPT1-LPT4
  2959.             04h-07h = COM1-COM4
  2960.         CX = timeout value in seconds (00h = never)
  2961. Return: AL = status (see AH=81h)
  2962. Notes:    modes 00h and 01h affect only the current logical LPT1
  2963.     if no data is sent to a printer for the specified amount of time, the
  2964.       spool file will be closed and queued for printing automatically
  2965. SeeAlso: AH=97h
  2966. --------N-17A0-------------------------------
  2967. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  2968.     AH = A0h
  2969.     AL = mode
  2970.         00h NTNX compatibility
  2971.         DX = ??? (NTNX, MW386 v1.x only)
  2972.         02h MW386 v2+
  2973.         BX = logical device number
  2974.             00h-03h = LPT1-LPT4
  2975.             04h-07h = COM1-COM4
  2976.     CX:SI -> ASCIZ pathname
  2977. Return: AL = status (see AH=81h)
  2978. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  2979.       the original file to be modified or deleted while the copy is printed
  2980.     in mode 00h, the file is printed on logical LPT1
  2981. SeeAlso: AH=90h
  2982. --------N-17A4-------------------------------
  2983. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  2984.     AH = A4h
  2985.     AL = new state
  2986.         00h form feed after end of print job disabled
  2987.         01h form feed enabled
  2988. Return: AL = status (see AH=81h)
  2989. Note:    only affects the current logical LPT1
  2990. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  2991. --------N-17A6-------------------------------
  2992. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  2993.     AH = A6h
  2994.     AL = new state
  2995.         00h banner page before print job disabled
  2996.         01h banner page enabled
  2997. Return: AL = status (see AH=81h)
  2998. Note:    only affects the current logical LPT1
  2999. SeeAlso: AH=A4h
  3000. --------N-17A7-------------------------------
  3001. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  3002.     AH = A7h
  3003.     AL = spool flags
  3004.         bit 0: banner page enabled (see AH=A4h)
  3005.         bit 1: form feed enabled (see AH=A6h)
  3006.         bits 2-6: reserved (0)
  3007.         bit 7: set flags if 1, get flags if 0
  3008.     BX = logical device number
  3009.         00h-03h = LPT1-LPT4
  3010.         04h-07h = COM1-COM4
  3011. Return: AL = status (see AH=81h)
  3012. Note:    the documentation does not state which register contains the result of
  3013.       a GET
  3014. SeeAlso: AH=A4h,AH=A6h
  3015. --------N-17A8-------------------------------
  3016. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  3017.     AH = A8h
  3018.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  3019. Return: AL = status (see AH=81h)
  3020. Note:    allows application to specify banner page filename for spool files
  3021.       collected from the application's printer output
  3022. SeeAlso: AH=A9h
  3023. --------N-17A9-------------------------------
  3024. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  3025.     AH = A9h
  3026.     AL = new spool drive (2=C:,3=D:,etc)
  3027. Return: AL = status (see AH=81h)
  3028. Note:    does not remove previous spooling directory since jobs may be pending
  3029. SeeAlso: AH=A8h
  3030. --------N-17AA-------------------------------
  3031. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  3032.     AH = AAh
  3033.     AL = mode
  3034.         00h NTNX
  3035.         DX = NTNX printer number (see AH=88h)
  3036.         01h MW386
  3037.         DX = MW386 printer number
  3038. Return: AH = instantaneous printer status
  3039.         00h printer ready
  3040.         01h not ready
  3041.         12h off line
  3042.         13h out of paper
  3043.         14h general device failure
  3044.         15h device timeout
  3045.         16h bad device number
  3046. --------N-17AF-------------------------------
  3047. INT 17 - Alloy MW386 - CHECK SPOOLER
  3048.     AH = AFh
  3049. Return: AX = 55AAh if spooler available
  3050. --------c-17C0-------------------------------
  3051. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  3052.     AH = C0h
  3053.     DX = printer port (0-3)
  3054. Return: ES:BX -> control block (see below)
  3055. SeeAlso: AH=C1h
  3056.  
  3057. Format of control block:
  3058. Offset    Size    Description
  3059.  00h    WORD    printer number
  3060.  02h    WORD    address of printer status port
  3061.  04h    WORD    number of first record in queue
  3062.  06h    WORD    number of last record in queue
  3063.  08h    DWORD    characters already printed
  3064.  0Ch    DWORD    number of characters remaining
  3065.  10h    DWORD    pointer to dequeue buffer
  3066.  14h    DWORD    previous count of characters printed
  3067.  18h    DWORD    number of clock ticks taken to print them
  3068.  1Ch    WORD    offset of next character to output
  3069.  1Eh    WORD    offset of next character to print
  3070.  20h    WORD    pointer to spooling queue record
  3071.  22h    BYTE    current spooling status
  3072.  23h    BYTE    current printer status:
  3073.         00h OK
  3074.         01h not ready
  3075.         02h paused with message
  3076.         03h paused
  3077.         04h initializing
  3078.         FEh non-existent port
  3079.         FFh not spooled
  3080.  24h    BYTE    current control record type
  3081.  25h    WORD    observed printer speed
  3082.  27h    WORD    characters to print per service
  3083.  29h    BYTE    01h if disk write needed
  3084.  2Ah    BYTE    01h if queued data should be flushed
  3085.  2Bh    BYTE    01h to update cps status
  3086. --------c-17C1--------------------------------
  3087. INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
  3088.     AH = C1h
  3089.     DX = printer port (0-3)
  3090.     DS:SI -> ASCIZ string to save for display
  3091. Note:    flushes pending writes
  3092. SeeAlso: AH=C0h,AH=C2h
  3093. --------c-17C2-------------------------------
  3094. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  3095.     AH = C2h
  3096.     DX = printer port (0-3)
  3097. SeeAlso: AH=C3h
  3098. --------c-17C3-------------------------------
  3099. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  3100.     AH = C3h
  3101.     DX = printer port (0-3)
  3102. SeeAlso: AH=C2h,AH=C7h
  3103. --------c-17C4-------------------------------
  3104. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  3105.     AH = C4h
  3106. Return: DI = B0BFh
  3107.     SI = segment
  3108. --------c-17C5-------------------------------
  3109. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  3110.     AH = C5h
  3111.     DX = printer port (0-3)
  3112. Note:    cancels up to the pause record
  3113. --------c-17C6-------------------------------
  3114. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  3115.     AH = C6h
  3116.     DX = printer port (0-3)
  3117. Return: AX = 0 printer not active or at pause
  3118.        = 1 printer busy
  3119. --------c-17C7-------------------------------
  3120. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  3121.     AH = C7h
  3122.     DX = printer port (0-3)
  3123. SeeAlso: AH=C3h
  3124. --------P-17CD00-----------------------------
  3125. INT 17 - INSET - EXECUTE COMMAND STRING
  3126.     AX = CD00h
  3127.     DS:DX -> ASCIZ command string (max 80 bytes)
  3128. Return: CX = 07C2h (1986d)
  3129. Note:    user interface menus pop up after last command, unless that command
  3130.     exits INSET
  3131. --------P-17CD01-----------------------------
  3132. INT 17 - INSET - GET IMAGE SIZE
  3133.     AX = CD01h
  3134.     DS:DX -> ASCIZ name of image file
  3135. Return: AX = height in 1/720th inch
  3136.     BX = width in 1/720th inch
  3137.     CX = 07C2h (1986d)
  3138. --------P-17CD02-----------------------------
  3139. INT 17 - INSET - INITIALIZE
  3140.     AX = CD02h
  3141. Return: CX = 07C2h (1986d)
  3142. Note:    all open files are closed and the printer is reset
  3143. SeeAlso: AX=CD04h
  3144. --------P-17CD03-----------------------------
  3145. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  3146.     AX = CD03h
  3147. Return: CX = 07C2h (1986d)
  3148. --------P-17CD04-----------------------------
  3149. INT 17 - INSET - INITIALIZE LINKED MODE
  3150.     AX = CD04h
  3151.     ES:SI -> FAR routine for linked mode
  3152. Return: CX = 07C2h
  3153. Note:    calling sequence for linked-mode routine
  3154.     AL = 00h send character in BL to printer
  3155.        = 01h send CX bytes from DS:DX to printer
  3156.        = 02h move print head to horizontal starting position of image
  3157.     return code for linked-mode routine:
  3158.     AX = 0000h success
  3159.        = 0001h failure
  3160. SeeAlso: AX=CD02h,AX=CD08h
  3161. --------P-17CD05-----------------------------
  3162. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  3163.     AX = CD05h
  3164.     DS:DX -> ASCIZ name of PIX file
  3165.     CX = left margin of text in 1/720th inch
  3166. Return: AH = printer type
  3167.         00h page-oriented (multiple images may be placed side-by-side)
  3168.         01h line-oriented (use AX=CD06h for vertical paper movement)
  3169.     CX = 07C2h (1986d)
  3170. SeeAlso: AX=CD07h
  3171. --------P-17CD06-----------------------------
  3172. INT 17 - INSET - GRAPHICS LINE FEED
  3173.     AX = CD06h
  3174. Return: AH = completion status
  3175.         00h image complete
  3176.         01h image incomplete
  3177.     CX = 07C2h (1986d)
  3178. SeeAlso: AX=CD09h
  3179. --------P-17CD07-----------------------------
  3180. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  3181.     AX = CD07h
  3182. Return: CX = 07C2h
  3183. SeeAlso: AX=CD05h
  3184. --------P-17CD08-----------------------------
  3185. INT 17 - INSET - CANCEL LINK MODE
  3186.     AX = CD08h
  3187. Return: CX = 07C2h
  3188. SeeAlso: AX=CD04h
  3189. --------P-17CD09-----------------------------
  3190. INT 17 - INSET - ALTER TEXT LINE SPACING
  3191.     AX = CD09h
  3192.     CX = line spacing in 1/720th inch
  3193. Return: CX = 07C2h
  3194. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  3195. SeeAlso: AX=CD06h
  3196. --------P-17CD0A-----------------------------
  3197. INT 17 - INSET - GET SETUP
  3198.     AX = CD0Ah
  3199.     DS:DX -> buffer for IN.SET data
  3200. Return: CX = 07C2h
  3201. --------P-17CD0B-----------------------------
  3202. INT 17 - INSET - START GETTING SCALED IMAGE
  3203.     AX = CD0Bh
  3204.     DS:SI -> ASCIZ pathname of .PIX file
  3205.     BX = number of bitplanes
  3206.     CX = number of rows in output bitmap
  3207.     DX = number of columns in output bitmap
  3208. Return: AX = status
  3209.         0000h OK
  3210.         FFFFh error
  3211. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  3212. --------P-17CD0C-----------------------------
  3213. INT 17 - INSET - GET NEXT IMAGE STRIP
  3214.     AX = CD0Ch
  3215. Return: AX = status
  3216.         0000h OK but not complete
  3217.         0001h OK and image complete
  3218.         FFFFh error
  3219.     DS:SI -> buffer (max 4K) for bit map strip
  3220.     CX = start row
  3221.     DX = number of rows
  3222.     BX = offset in bytes between bit planes
  3223. Note:    buffer may be overwritten by subsequent calls
  3224. SeeAlso: AX=CD0Bh
  3225. --------P-17F0-------------------------------
  3226. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  3227.     AH = F0h
  3228.     DX = printer port (0-3)
  3229. Return: AX = 0001h Jetstream present
  3230.          else  non-Jetstream port
  3231. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  3232.       to drive printers at up to 80000 characters per second
  3233. --------P-17F1-------------------------------
  3234. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  3235.     AH = F1h
  3236.     CX = data buffer length
  3237.     DX = printer port (0-3)
  3238.     DS:SI -> data buffer
  3239. Return: AX = status
  3240.         0000h printer not ready (see also AH=02h)
  3241.         other printing started
  3242. SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
  3243. --------P-17F2-------------------------------
  3244. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  3245.     AH = F2h
  3246.     DX = printer port (0-3)
  3247. Return: AX = status
  3248.         0000h prior print request finished
  3249.         other number of characters left to print
  3250. SeeAlso: AH=02h,AH=F1h,AH=F3h
  3251. --------P-17F3-------------------------------
  3252. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  3253.     AH = F3h
  3254.     DX = printer port (0-3)
  3255. Return: AX = number of unprinted characters due to abort
  3256. SeeAlso: AH=F1h,AH=F4h
  3257. --------P-17F4-------------------------------
  3258. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  3259.     AH = F4h
  3260.     DX = printer port (0-3)
  3261.     DS:DS -> FAR post address (called with interrupts on)
  3262. SeeAlso: AH=F1h,AH=F3h
  3263. --------P-17F5-------------------------------
  3264. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  3265.     AH = F5h
  3266.     CX = data buffer length
  3267.     DX = printer port (0-3)
  3268.     DS:SI -> data buffer (32-bit physical address)
  3269. Return: AX = status
  3270.         0000h printer not ready (see also AH=02h)
  3271.         other printing started
  3272. SeeAlso: AH=F1h
  3273. --------c-17FF--BX0000-----------------------
  3274. INT 17 U - PC-MOS/386 v5.01 - PRINT SPOOLER - CLOSE SPOOL FILE
  3275.     AH = FFh
  3276.     BX = 0000h
  3277.     CX = 0000h
  3278.     DX = printer port number
  3279. Return: AH = printer status (see AH=00h)
  3280. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  3281.       operating system by The Software Link, Inc.
  3282. Desc:    close the spool file immediately instead of waiting for the close time
  3283.       to elapse
  3284. SeeAlso: AH=01h,AH=03h"PC-MOS"
  3285. --------B-18---------------------------------
  3286. INT 18 - DISKLESS BOOT HOOK (START CASSETTE BASIC)
  3287. Desc:    called when there is no bootable disk available to the system
  3288. Notes:    only PCs produced by IBM contain BASIC in ROM, so the action is
  3289.       unpredictable on compatibles; this interrupt often reboots the
  3290.       system, and often has no effect at all
  3291.     network cards with their own BIOS can hook this interrupt to allow
  3292.       a diskless boot off the network (even when a hard disk is present
  3293.       if none of the partitions is marked as the boot partition)
  3294. SeeAlso: INT 86"NetBIOS"
  3295. --------J-1800-------------------------------
  3296. INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
  3297.     AH = 00h
  3298. Return: AX = keystroke
  3299. SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
  3300. --------J-1801-------------------------------
  3301. INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
  3302.     AH = 01h
  3303. Return: ZF set if no keystroke available
  3304.     ZF clear if keystroke available
  3305.         AX = keystroke
  3306. SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
  3307. --------J-1802-------------------------------
  3308. INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
  3309.     AH = 02h
  3310. Return: AL = shift flags
  3311. SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
  3312. --------J-1803-------------------------------
  3313. INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
  3314.     AH = 03h
  3315.     ???
  3316. Return: ???
  3317. SeeAlso: AH=00h,AH=04h
  3318. --------J-1804-------------------------------
  3319. INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
  3320.     AH = 04h
  3321.     ???
  3322. Return: ???
  3323. Note:    details are not available at this time
  3324. SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
  3325. --------J-18---------------------------------
  3326. INT 18 - NEC PC-9800 series - VIDEO
  3327.     AH = function
  3328.         0Ah set video mode
  3329.         0Bh get video mode
  3330.         0Ch start text screen display
  3331.         0Dh end text screen display
  3332.         0Eh set single display area
  3333.         0Fh set multiple display area
  3334.         10h set cursor shape
  3335.         11h display cursor
  3336.         12h terminate cursor
  3337.         13h set cursor position
  3338.         14h read font patter
  3339.         16h initialize text video RAM
  3340.         1Ah define user character
  3341.     ???
  3342. Return: ???
  3343. Notes:    details are not available at this time
  3344.     text video RAM is located at segments A000h (characters) and A200h
  3345.       (attributes)
  3346. --------B-19---------------------------------
  3347. INT 19 - SYSTEM - BOOTSTRAP LOADER
  3348. Desc:    This interrupt reboots the system without clearing memory or restoring
  3349.       interrupt vectors.  Because interrupt vectors are preserved, this
  3350.       interrupt usually causes a system hang if any TSRs have hooked
  3351.       vectors from 00h through 1Ch, particularly INT 08.
  3352. Notes:    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive
  3353.       A: to 0000h:7C00h.  If this fails, and a hard disk is installed, the
  3354.       BIOS will read sector 1, head 0, track 0 of the first hard disk.
  3355.       This sector should contain a master bootstrap loader and a partition
  3356.       table.  After loading the master boot sector at 0000h:7C00h, the
  3357.       master bootstrap loader is given control.  It will scan the partition
  3358.       table for an active partition, and will then load the operating
  3359.       system's bootstrap loader (contained in the first sector of the
  3360.       active partition) and give it control.
  3361.     true IBM PCs and most clones issue an INT 18 if neither floppy nor hard
  3362.       disk have a valid boot sector
  3363.     to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  3364.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  3365.       a reset, store 0000h at 0040h:0072h before jumping.
  3366.     VDISK.SYS hooks this interrupt to allow applications to find out how
  3367.       much extended memory has been used by VDISKs (see below).  DOS 3.3+
  3368.       PRINT hooks INT 19 but does not set up a correct VDISK header block
  3369.       at the beginning of its INT 19 handler segment, thus causing some
  3370.       programs to overwrite extended memory which is already in use.
  3371.     the default handler is at F000h:E6F2h for 100% compatible BIOSes
  3372.     MS-DOS 3.2+ hangs on booting (even from floppy) if the hard disk
  3373.       contains extended partitions which point at each other in a loop,
  3374.       since it will never find the end of the linked list of extended
  3375.       partitions
  3376. SeeAlso: INT 14/AH=17h,INT 18
  3377.  
  3378. Format of VDISK header block (at beginning of INT 19 handler's segment):
  3379. Offset    Size    Description
  3380.  00h 18 BYTEs    n/a (for VDISK.SYS, the device driver header)
  3381.  12h 11 BYTEs    signature string "VDISK     Vn.m" for VDISK.SYS version n.m
  3382.  1Dh 15 BYTEs    n/a
  3383.  2Ch  3 BYTEs    linear address of first byte of available extended memory
  3384.  
  3385. Format of hard disk master boot sector:
  3386. Offset    Size    Description
  3387.  00h 446 BYTEs    Master bootstrap loader code
  3388. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  3389. 1CEh 16 BYTEs    partition record for partition 2
  3390. 1DEh 16 BYTEs    partition record for partition 3
  3391. 1EEh 16 BYTEs    partition record for partition 4
  3392. 1FEh    WORD    signature, AA55h indicates valid boot block
  3393.  
  3394. Format of partition record:
  3395. Offset    Size    Description
  3396.  00h    BYTE    boot indicator (80h = active partition)
  3397.  01h    BYTE    partition start head
  3398.  02h    BYTE    partition start sector (bits 0-5)
  3399.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  3400.  04h    BYTE    operating system indicator (see below)
  3401.  05h    BYTE    partition end head
  3402.  06h    BYTE    partition end sector (bits 0-5)
  3403.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  3404.  08h    DWORD    sectors preceding partition
  3405.  0Ch    DWORD    length of partition in sectors
  3406.  
  3407. Values for operating system indicator:
  3408.  00h    empty
  3409.  01h    DOS 12-bit FAT
  3410.  02h    XENIX root file system
  3411.  03h    XENIX /usr file system (obsolete)
  3412.  04h    DOS 16-bit FAT
  3413.  05h    DOS 3.3+ extended partition
  3414.  06h    DOS 3.31+ Large File System
  3415.  07h    QNX
  3416.  07h    OS/2 HPFS
  3417.  07h    Advanced Unix
  3418.  08h    AIX bootable partition, SplitDrive
  3419.  09h    AIX data partition
  3420.  09h    Coherent filesystem
  3421.  0Ah    OS/2 Boot Manager
  3422.  0Ah    OPUS
  3423.  0Ah    Coherent swap partition
  3424.  10h    OPUS
  3425.  18h    AST special Windows swap file
  3426.  24h    NEC MS-DOS 3.x
  3427.  40h    VENIX 80286
  3428.  50h    Disk Manager, read-only partition
  3429.  51h    Disk Manager, read/write partition
  3430.  51h    Novell???
  3431.  52h    CP/M
  3432.  52h    Microport System V/386
  3433.  56h    GoldenBow VFeature
  3434.  61h    SpeedStor
  3435.  63h    Unix SysV/386, 386/ix
  3436.  63h    Mach, MtXinu BSD 4.3 on Mach
  3437.  63h    GNU HURD
  3438.  64h    Novell NetWare
  3439.  65h    Novell NetWare (3.11)
  3440.  70h    DiskSecure Multi-Boot
  3441.  75h    PC/IX
  3442.  80h    Minix v1.1 - 1.4a
  3443.  81h    Minix v1.4b+
  3444.  81h    Linux
  3445.  81h    Mitac Advanced Disk Manager
  3446.  82h    Linux Swap partition (planned)
  3447.  84h    OS/2-renumbered type 04h partition (related to hiding DOS C: drive)
  3448.  93h    Amoeba file system
  3449.  94h    Amoeba bad block table
  3450.  B7h    BSDI file system (secondarily swap)
  3451.  B8h    BSDI swap partition (secondarily file system)
  3452.  C1h    DR-DOS 6.0 LOGIN.EXE-secured 12-bit FAT partition
  3453.  C4h    DR-DOS 6.0 LOGIN.EXE-secured 16-bit FAT partition
  3454.  C6h    DR-DOS 6.0 LOGIN.EXE-secured Huge partition
  3455.  DBh    CP/M, Concurrent CP/M, Concurrent DOS
  3456.  DBh    CTOS (Convergent Technologies OS)
  3457.  E1h    SpeedStor 12-bit FAT extended partition
  3458.  E4h    SpeedStor 16-bit FAT extended partition
  3459.  F2h    DOS 3.3+ secondary
  3460.  FEh    LANstep
  3461.  FFh    Xenix bad block table
  3462. --------B-1A00-------------------------------
  3463. INT 1A - TIME - GET SYSTEM TIME
  3464.     AH = 00h
  3465. Return: CX:DX = number of clock ticks since midnight
  3466.     AL = midnight flag, nonzero if midnight passed since time last read
  3467. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  3468.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  3469.       it, leading to loss of a day if two consecutive midnights pass
  3470.       without a request for the time (e.g. if the system is on but idle)
  3471. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch,INT 62/AX=0099h
  3472. --------B-1A01-------------------------------
  3473. INT 1A - TIME - SET SYSTEM TIME
  3474.     AH = 01h
  3475.     CX:DX = number of clock ticks since midnight
  3476. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  3477. --------B-1A02-------------------------------
  3478. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  3479.     AH = 02h
  3480. Return: CF clear if successful
  3481.         CH = hour (BCD)
  3482.         CL = minutes (BCD)
  3483.         DH = seconds (BCD)
  3484.         DL = daylight savings flag (00h standard time, 01h daylight time)
  3485.     CF set on error (i.e. clock not running or in middle of update)
  3486. SeeAlso: AH=00h
  3487. --------B-1A03-------------------------------
  3488. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  3489.     AH = 03h
  3490.     CH = hour (BCD)
  3491.     CL = minutes (BCD)
  3492.     DH = seconds (BCD)
  3493.     DL = daylight savings flag (00h standard time, 01h daylight time)
  3494. SeeAlso: AH=01h
  3495. --------B-1A04-------------------------------
  3496. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  3497.     AH = 04h
  3498. Return: CF clear if successful
  3499.         CH = century (BCD)
  3500.         CL = year (BCD)
  3501.         DH = month (BCD)
  3502.         DL = day (BCD)
  3503.     CF set on error
  3504. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  3505. --------B-1A05-------------------------------
  3506. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  3507.     AH = 05h
  3508.     CH = century (BCD)
  3509.     CL = year (BCD)
  3510.     DH = month (BCD)
  3511.     DL = day (BCD)
  3512. SeeAlso: AH=04h,INT 21/AH=2Bh
  3513. --------B-1A06-------------------------------
  3514. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  3515.     AH = 06h
  3516.     CH = hour (BCD)
  3517.     CL = minutes (BCD)
  3518.     DH = seconds (BCD)
  3519. Return: CF set on error (alarm already set or clock stopped for update)
  3520.     CF clear if successful
  3521. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  3522.       time
  3523. SeeAlso: AH=07h,INT 4A
  3524. --------B-1A07-------------------------------
  3525. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  3526.     AH = 07h
  3527. Return: alarm disabled
  3528. Note:    does not disable the real-time clock's IRQ
  3529. SeeAlso: AH=06h,INT 70
  3530. --------B-1A08-------------------------------
  3531. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  3532.     AH = 08h
  3533.     CH = hours in BCD
  3534.     CL = minutes in BCD
  3535.     DH = seconds in BCD
  3536. SeeAlso: AH=09h
  3537. --------B-1A09-------------------------------
  3538. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  3539.     AH = 09h
  3540. Return: CH = hours in BCD
  3541.     CL = minutes in BCD
  3542.     DH = seconds in BCD
  3543.     DL = alarm status
  3544.         00h alarm not enabled
  3545.         01h alarm enabled but will not power up system
  3546.         02h alarm will power up system
  3547. SeeAlso: AH=08h
  3548. --------B-1A0A-------------------------------
  3549. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  3550.     AH = 0Ah
  3551. Return: CF set on error
  3552.     CF clear if successful
  3553.         CX = count of days since Jan 1,1980
  3554. SeeAlso: AH=04h,AH=0Bh
  3555. --------B-1A0B-------------------------------
  3556. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  3557.     AH = 0Bh
  3558.     CX = count of days since Jan 1,1980
  3559. Return: CF set on error
  3560.     CF clear if successful
  3561. SeeAlso: AH=05h,AH=0Ah
  3562. --------J-1A10-------------------------------
  3563. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  3564.     AH = 10h
  3565.     ???
  3566. Return: ???
  3567. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  3568. --------J-1A11-------------------------------
  3569. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  3570.     AH = 11h
  3571.     ???
  3572. Return: ???
  3573. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  3574. --------J-1A12-------------------------------
  3575. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  3576.     AH = 12h
  3577.     ???
  3578. Return: ???
  3579. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  3580. --------A-1A3601-----------------------------
  3581. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  3582.     AX = 3601h
  3583. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  3584.         ASCIZ string "WPCORP\0"
  3585. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  3586.       third party product wants to interface with it.  The third party
  3587.       product must intercept this interrupt and return the address of a
  3588.       keyboard monitor routine.
  3589.     Before checking for keyboard input, and after every key entered by the
  3590.       user, Word Perfect will call the routine whose address was provided
  3591.       in DS:SI with the following parameters:
  3592.         Entry:    AX = key code or 0
  3593.             BX = WordPerfect state flag
  3594.         Exit:    AX = 0 or key code
  3595.             BX = 0 or segment address of buffer with key codes
  3596.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  3597. SeeAlso: INT 16/AX=5500h
  3598. --------N-1A6108-----------------------------
  3599. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  3600.     AX = 6108h
  3601.     STACK:    WORD    conversation ID (0000h-0009h)
  3602.         DWORD    pointer to message buffer
  3603.         WORD    length of message
  3604.         DWORD    pointer to reply buffer
  3605.         WORD    length of reply buffer
  3606.         WORD    0000h (use default "Cparams" structure)
  3607. Return: AX = status (see below)
  3608.     STACK unchanged
  3609. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3610.       which implements the Simple Network Application Protocol
  3611. SeeAlso: AX=6205h
  3612.  
  3613. Values for status:
  3614.  0000h    successful
  3615.  F830h    "SNAP_ABORTED"
  3616.  FC04h    "SNAP_SERVERDIED"
  3617.  FC05h    "SNAP_RESEND"
  3618.  FC06h    "SNAP_SELECTFAILED"
  3619.  FC07h    "SNAP_WRONGVERSION"
  3620.  FC08h    "SNAP_INVALIDACK"
  3621.  FC09h    "SNAP_TIMEOUT"
  3622.  FC0Ah    "SNAP_SERVERREJECT"
  3623.  FC0Bh    "SNAP_NOREPLYDUE"
  3624.  FC0Ch    "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  3625.  FC0Dh    "SNAP_NOINIT"
  3626.  FC0Eh    "SNAP_SOCKETERROR"
  3627.  FC0Fh    "SNAP_BUFFERLIMIT"
  3628.  FC10h    "SNAP_INVALIDCID"
  3629.  FC11h    "SNAP_INVALIDOP"
  3630.  FC12h    "SNAP_XMITFAIL"
  3631.  FC13h    "SNAP_NOMORERETRIES"
  3632.  FC14h    "SNAP_BADPARMS"
  3633.  FC15h    "SNAP_NOMEMORY"
  3634.  FC16h    "SNAP_NOMORECONVS"
  3635.  FFFFh    failed (invalid function/parameter)
  3636. --------N-1A6205-----------------------------
  3637. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  3638.     AX = 6205h
  3639.     STACK:    WORD    conversation ID (0000h-0009h)
  3640.         DWORD    pointer to message
  3641.         WORD    length of message
  3642.         WORD    0000h (use default "Cparms" structure)
  3643. Return: AX = status (see AX=6108h)
  3644.     STACK unchanged
  3645. SeeAlso: AX=6108h
  3646. --------N-1A6308-----------------------------
  3647. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  3648.     AX = 6308h
  3649.     STACK:    WORD    offset of ASCIZ "guardian"
  3650.         WORD    offset of ASCIZ hostname
  3651.         WORD    offset of ASCIZ server name
  3652.         WORD    offset of ASCIZ userid
  3653.         WORD    offset of ASCIZ password
  3654.         WORD    offset of password length
  3655.         WORD    offset of password type
  3656.         WORD    offset of "Cparms" structure (see below)
  3657. Return: ???
  3658.     STACK unchanged
  3659. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  3660.       to allocate a buffer)
  3661. SeeAlso: AX=6405h,AX=7202h
  3662.  
  3663. Format of Cparms structure:
  3664. Offset    Size    Description
  3665.  00h    WORD    retry delay in seconds
  3666.  02h    WORD    timeout delay in seconds
  3667.  04h    WORD    maximum buffer size
  3668.  06h    WORD    encryption level
  3669. --------N-1A6405-----------------------------
  3670. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  3671.     AX = 6405h
  3672.     STACK:    WORD    conversation ID (0000h-0009h)
  3673.         DWORD    pointer to message buffer
  3674.         WORD    length of message
  3675.         WORD    0000h (use default "Cparms" structure)
  3676. Return: AX = status (see AX=6108h)
  3677.     STACK unchanged
  3678. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3679.       which implements the Simple Network Application Protocol
  3680. SeeAlso: AX=6308h
  3681. --------N-1A6900-----------------------------
  3682. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  3683.     AX = 6900h
  3684. Return: AX = value used for DS by resident code
  3685. SeeAlso: AX=6A01h,AX=6F01h
  3686. --------N-1A6A01-----------------------------
  3687. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  3688.     AX = 6A01h
  3689.     STACK:    WORD    number of bytes to allocate
  3690. Return: AX = offset of allocated buffer or 0000h if out of memory
  3691.     STACK unchanged
  3692. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3693.       which implements the Simple Network Application Protocol
  3694. SeeAlso: AX=6B01h
  3695. --------N-1A6B01-----------------------------
  3696. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  3697.     AX = 6B01h
  3698.     STACK:    WORD    offset within SNAP data segment of previously allocated
  3699.             buffer
  3700. Return: STACK unchanged
  3701. Note:    this call is a NOP if the specified offset is 0000h
  3702. SeeAlso: AX=6A01h
  3703. --------N-1A6C04-----------------------------
  3704. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  3705.     AX = 6C04h
  3706.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  3707.         WORD    segment of source buffer
  3708.         WORD    offset of source buffer
  3709.         WORD    number of bytes to copy
  3710. Return: AX = offset of byte after last one copied to destination
  3711.     STACK unchanged
  3712. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3713.       which implements the Simple Network Application Protocol
  3714. SeeAlso: AX=6D04h
  3715. --------N-1A6D04-----------------------------
  3716. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  3717.     AX = 6D04h
  3718.     STACK:    WORD    offset within SNAP data segment of source buffer
  3719.         WORD    segment of destination buffer
  3720.         WORD    offset of destination buffer
  3721.         WORD    number of bytes to copy
  3722. Return: AX = offset of byte after last one copied from source
  3723.     buffer filled
  3724.     STACK unchanged
  3725. SeeAlso: AX=6C04h
  3726. --------N-1A6E01-----------------------------
  3727. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  3728.     AX = 6E01h
  3729.     STACK:    WORD    new value for ???
  3730. Return: AX = old value of ???
  3731.     STACK unchanged
  3732. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3733.       which implements the Simple Network Application Protocol
  3734. --------N-1A6F01-----------------------------
  3735. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  3736.     AX = 6F01h
  3737.     STACK: WORD 0000h
  3738. Return: AX = status
  3739.         0000h SNAP is resident
  3740.         other SNAP not present
  3741.     STACK unchanged
  3742. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3743.       which implements the Simple Network Application Protocol, and is
  3744.       required by PCVENUS (a network shell).  The combination of SNAP and
  3745.       PCVENUS allows the use of the Andrew File System as one or more
  3746.       networked drives.
  3747. SeeAlso: AX=6900h,AX=7400h
  3748. --------N-1A7002-----------------------------
  3749. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  3750.     AX = 7002h
  3751.     STACK:    WORD    anchor number (0000h-0009h)
  3752.         WORD    new value for the anchor
  3753. Return: AX = status
  3754.         0000h successful
  3755.         FFFFh failed (top word on stack not in range 00h-09h)
  3756.     STACK unchanged
  3757. SeeAlso: AX=7101h
  3758. --------N-1A7101-----------------------------
  3759. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  3760.     AX = 7101h
  3761.     STACK:    WORD    anchor number (0000h-0009h)
  3762. Return: AX = anchor's value
  3763.     STACK unchanged
  3764. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3765.       which implements the Simple Network Application Protocol
  3766. SeeAlso: AX=7002h
  3767. --------N-1A7202-----------------------------
  3768. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  3769.     AX = 7202h
  3770.     STACK:    WORD    conversation ID (0000h-0009h)
  3771.         WORD    offset within resident data segment of "Cparms"
  3772.             structure (see AX=6308h)
  3773. Return: AX = status???
  3774.     STACK unchanged
  3775. SeeAlso: AX=6308h
  3776. --------N-1A7302-----------------------------
  3777. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  3778.     AX = 7302h
  3779.     STACK:    WORD    conversation ID (0000h-0009h)
  3780.         WORD    offset within resident data segment of ???
  3781. Return: AX = ???
  3782.     ???
  3783.     STACK unchanged
  3784. SeeAlso: AX=7400h
  3785. --------N-1A7400-----------------------------
  3786. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  3787.     AX = 7400h
  3788. Return: AX = version (AH=major, AL=minor)
  3789. Note:    this call is only valid if SNAP is installed
  3790. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  3791. --------N-1A75-------------------------------
  3792. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  3793.     AH = 75h
  3794.     AL = ???
  3795. Return: AX = ??? (0000h)
  3796. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3797.       which implements the Simple Network Application Protocol
  3798. --------N-1A76-------------------------------
  3799. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  3800.     AH = 76h
  3801.     AL = ???
  3802. Return: AX = ???
  3803. --------N-1A77-------------------------------
  3804. INT 1A - SNAP.EXE 3.4 - ???
  3805.     AH = 77h
  3806.     AL = ??? (at least 01h)
  3807.     STACK:    WORD    ???
  3808.         ???
  3809. Return: ???
  3810.     STACK unchanged
  3811. --------N-1A7802-----------------------------
  3812. INT 1A - SNAP.EXE 3.4 - ???
  3813.     AX = 7802h
  3814.     STACK:    WORD    ???
  3815.         WORD    ???
  3816. Return: ???
  3817.     STACK unchanged
  3818. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3819.       which implements the Simple Network Application Protocol
  3820. --------s-1A7F-------------------------------
  3821. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  3822.     AH = 7Fh
  3823.     ???
  3824. Return: ???
  3825. SeeAlso: AH=80h,AH=83h,AH=85h
  3826. --------s-1A80-------------------------------
  3827. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  3828.     AH = 80h
  3829.     AL = 00h source is 8253 channel 2
  3830.          01h source is cassette input
  3831.          02h source is I/O channel "Audio IN"
  3832.          03h source is sound generator chip
  3833. SeeAlso: AH=7Fh,AH=83h
  3834. --------X-1A80-------------------------------
  3835. INT 1A - PCMCIA Socket Services - GET NUMBER OF ADAPTERS
  3836.     AH = 80h
  3837. Return: CF clear if successful
  3838.         CX = 5353h ('SS') if Socket Services installed
  3839.         AL = number of adapters present (0-16)
  3840.         AH destroyed
  3841.     CF set on error
  3842.         AH = error code (see below)
  3843. SeeAlso: AH=83h"PCMCIA"
  3844.  
  3845. Values for PCMCIA error codes:
  3846.  01h    "BAD_ADAPTER" nonexistent adapter
  3847.  02h    "BAD_ATTRIBUTE" invalid attribute specified
  3848.  03h    "BAD_BASE" invalid system memory base address
  3849.  04h    "BAD_EDC" invalid EDC generator specified
  3850.  05h    "BAD_INDICATOR" invalid indicator specified
  3851.  06h    "BAD_IRQ" invalid IRQ channel specified
  3852.  07h    "BAD_OFFSET" invalid PCMCIA card offset specified
  3853.  08h    "BAD_PAGE" invalid page specified
  3854.  09h    "BAD_READ" unable to complete request
  3855.  0Ah    "BAD_SIZE" invalid window size specified
  3856.  0Bh    "BAD_SOCKET" nonexistent socket specified
  3857.  0Ch    "BAD_TECHNOLOGY" unsupported Card Technology for writes
  3858.  0Dh    "BAD_TYPE" unavailable window type specified
  3859.  0Eh    "BAD_VCC" invalid Vcc power level index specified
  3860.  0Fh    "BAD_VPP" invalid Vpp1 or Vpp2 power level index specified
  3861.  10h    "BAD_WAIT" invalid number of wait states specified
  3862.  11h    "BAD_WINDOW" nonexistent window specified
  3863.  12h    "BAD_WRITE" unable to complete request
  3864.  13h    "NO_ADAPTERS" no adapters installed, but Socket Services is present
  3865.  14h    "NO_CARD" no card in socket
  3866. --------X-1A81-------------------------------
  3867. INT 1A - PCMCIA Socket Services - REGISTER STATUS CHANGE CALLBACK
  3868.     AH = 81h
  3869.     DS:DX -> callback routine (see below) or 0000h:0000h to disable
  3870. Return: CF clear if successful
  3871.         AH destroyed
  3872.     CF set on error
  3873.         AH = error code (see AH=80h"PCMCIA")
  3874. Note:    the callback will be invoked on any socket changes whose notification
  3875.       has not been disabled with the status change enable mask; it may be
  3876.       invoked either while processing a hardware interrupt from the adapter
  3877.       or while processing the following Socket Services request
  3878. SeeAlso: AH=80h"PCMCIA",AH=82h"PCMCIA"
  3879.  
  3880. Callback routine invoked with:
  3881.     AL = adapter number
  3882.     BH = status change interrupt enable mask (see below)
  3883.     BL = socket number
  3884.     DH = current socket status (see below)
  3885.     DL = current card status (see below)
  3886. Return: all registers preserved
  3887. Notes:    the callback may be invoked during a hardware interrupt, and may not
  3888.       call on Socket Services
  3889.     the callback will be invoked once for each socket with a status change
  3890.  
  3891. Bitfields for status change enable mask:
  3892.  bits 0,1 reserved (0)
  3893.  bit 2    ejection request
  3894.  bit 3    insertion request
  3895.  bit 4    battery dead change
  3896.  bit 5    battery warning change
  3897.  bit 6    ready change
  3898.  bit 7    card detect change
  3899.  
  3900. Bitfields for current socket status:
  3901.  bit 0    reserved (0)
  3902.  bit 1    card locked
  3903.  bit 2    card ejection request pending
  3904.  bit 3    card insertion request pending
  3905.  bit 4    card ejection complete
  3906.  bit 5    card insertion complete
  3907.  bit 6    reserved (0)
  3908.  bit 7    card changed
  3909.  
  3910. Bitfields for current card status:
  3911.  bit 0    write protected
  3912.  bits 1-3 reserved (0)
  3913.  bit 4    battery voltage detect 1 (battery dead)
  3914.  bit 5    battery voltage detect 2 (battery warning)
  3915.  bit 6    ready
  3916.  bit 7    card detect
  3917. --------s-1A8100-----------------------------
  3918. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  3919.     AX = 8100h
  3920. Return: AH > 80h if supported
  3921. --------X-1A82-------------------------------
  3922. INT 1A - PCMCIA Socket Services - REGISTER CARD TECHNOLOGY CALLBACK
  3923.     AH = 82h
  3924.     DS:DX -> callback routine (see below) or 0000h:0000h
  3925. Return: CF clear if successful
  3926.         AH destroyed
  3927.     CF set on error
  3928.         AH = error code (see AH=80h"PCMCIA")
  3929. Note:    the callback is invoked on a Write Multiple request with an unsupported
  3930.       card technology type
  3931. SeeAlso: AH=81h"PCMCIA",AH=94h
  3932.  
  3933. Callback routine invoked with:
  3934.     ES:AX -> Low-Level Socket Services Routines (see below)
  3935.     BH = socket attributes (see below)
  3936.     CX = number of bytes or words to write
  3937.     DS:SI -> data buffer to be written
  3938.     DX:DI -> 26-bit linear card address
  3939.     BP = card technology type
  3940. Return: CF clear if successful
  3941.     CF set on error
  3942.         AH = error code (07h,0Ch,12h,14h) (see AH=80h"PCMCIA")
  3943.  
  3944. Bitfields for socket attributes:
  3945.  bit 0    memory type (clear = common, set = attribute)
  3946.  bit 1    data width (clear = byte, set = word)
  3947.  bit 2    even bytes only (only valid if bit 1 set)
  3948.  bit 3    packed buffer
  3949.  bits 4-7 reserved (0)
  3950.  
  3951. Format of Low-Level Socket Services Routines:
  3952. Offset    Size    Description
  3953.  00h    WORD    offset of Write Many routine (see below)
  3954.  02h    WORD    offset of Write One routine (see below)
  3955.  04h    WORD    offset of Read One routine (see below)
  3956.  06h    WORD    offset of Increment Offset routine (see below)
  3957.  08h    WORD    offset of Set Offset routine (see below)
  3958.  0Ah    WORD    offset of Get Status routine (see below)
  3959.  
  3960. Call Write Many routine with:
  3961.     BH = socket attributes (see above)
  3962.     CX = number of bytes or words to write
  3963.     DS:SI -> data to be written
  3964. Return: CF clear if successful
  3965.     CF set on error
  3966.  
  3967. Call Write One routine with:
  3968.     AL/AX = data to be written
  3969.     BH = socket attributes (see above)
  3970. Return: CF clear if successful
  3971.     CF set on error
  3972.  
  3973. Call Read One routine with:
  3974.     BH = socket attributes (see above)
  3975. Return: CF clear if successful
  3976.         AL/AX = data read
  3977.     CF set on error
  3978.  
  3979. Call Increment Offset routine with:
  3980.     BH = socket attributes (see above)
  3981. Return: CF clear if successful
  3982.     CF set on error
  3983.  
  3984. Call Set Offset routine with:
  3985.     DX:DI = new offset address
  3986. Return: CF clear if successful
  3987.     CF set on error
  3988.  
  3989. Call Get Status routine with:
  3990.     nothing
  3991. Return: AL = current card status (see AH=81h"PCMCIA")
  3992. --------s-1A83-------------------------------
  3993. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  3994.     AH = 83h
  3995.     AL = volume (0=lowest, 7=highest)
  3996.     CX = number of bytes to play
  3997.     DX = time between sound samples (multiples of 273 nanoseconds)
  3998.     ES:BX -> sound data (array of 8-bit PCM samples)
  3999. Return: ???
  4000. Notes:    this call returns immediately while the sound plays in the
  4001.       background
  4002.     The sound data pointed to by ES:BX probably shouldn't cross a 64k
  4003.       boundary.  The BIOS appears to call INT 15/AX=91FBh when the sound
  4004.       device underflows to allow another INT 1A/AH=83h for seamless
  4005.       playing of long sounds.
  4006. SeeAlso: AH=84h,INT 15/AH=91h
  4007. --------X-1A83-------------------------------
  4008. INT 1A - PCMCIA Socket Services - GET SOCKET SERVICES VERSION NUMBER
  4009.     AH = 83h
  4010.     AL = adapter number
  4011. Return: CF clear if successful
  4012.         AX = Socket Services version (BCD)
  4013.         BX = implementation version (BCD)
  4014.         CX = 5353h ("SS")
  4015.         DS:SI -> ASCIZ implementor description
  4016.     CF set on error
  4017.         AH = error code (01h) (see AH=80h"PCMCIA")
  4018. Note:    the current version (from the Revision A.00 documentation) of Socket
  4019.       Services is 1.00 (AX=0100h)
  4020. SeeAlso: AH=80h"PCMCIA"
  4021. --------s-1A84-------------------------------
  4022. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  4023.     AH = 84h
  4024. Return: ???
  4025. SeeAlso: AH=83h,AH=85h
  4026. --------X-1A84-------------------------------
  4027. INT 1A - PCMCIA Socket Services - INQUIRE ADAPTER
  4028.     AH = 84h
  4029.     AL = adapter number
  4030. Return: CF clear if successful
  4031.         AH destroyed
  4032.         BH = number of windows
  4033.         BL = number of sockets (1-16)
  4034.         CX = number of EDCs
  4035.         DH = capabilities (see below)
  4036.         DL = status change interrupt used (only if DH bit 3 set)(see below)
  4037.     CF set on error
  4038.         AH = error code (01h) (see AH=80h"PCMCIA")
  4039. SeeAlso: AH=80h"PCMCIA",AH=85h"PCMCIA",AH=87h
  4040.  
  4041. Bitfields for capabilities:
  4042.  bit 0    indicators are per-adapter rather than per-socket
  4043.  bit 1    power management is per-adapter rather than per-socket
  4044.  bit 2    data bus width is per-socket rather than per-window
  4045.  bit 3    status change interrupt
  4046.  bit 4    status change interrupt is software shareable
  4047.  bit 5    status change interrupt is hardware shareable
  4048.  bits 6-7 reserved (0)
  4049.  
  4050. Values for status change interrupt usage:
  4051.  00h-0Fh IRQ level
  4052.  10h    NMI
  4053.  11h    I/O check
  4054.  12h    bus error
  4055.  13h    vendor specific
  4056.  14h-FFh reserved
  4057. --------s-1A85-------------------------------
  4058. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  4059.     AH = 85h
  4060.     ???
  4061. Return: ???
  4062. SeeAlso: AH=7Fh,AH=83h
  4063. --------X-1A85-------------------------------
  4064. INT 1A - PCMCIA Socket Services - GET ADAPTER
  4065.     AH = 85h
  4066.     AL = adapter number
  4067. Return: CF clear if successful
  4068.         AH destroyed
  4069.         DH = adapter attributes (see below)
  4070.     CF set on error
  4071.         AH = error code (01h) (see AH=80h"PCMCIA")
  4072. SeeAlso: AH=84h"PCMCIA",AH=86h
  4073.  
  4074. Bitfields for adapter attributes:
  4075.  bit 0    attempting to reduce power consumption
  4076.  bit 1    adapter preserves state information during reduced power consumption
  4077.  bit 2    enable status change interrupts
  4078.  bit 3    software share status change
  4079.  bit 4    hardware share status change
  4080.  bits 5-7 reserved (0)
  4081. --------X-1A86-------------------------------
  4082. INT 1A - PCMCIA Socket Services - SET ADAPTER
  4083.     AH = 86h
  4084.     AL = adapter number
  4085.     DH = new adapter attributes (see AH=85h"PCMCIA")
  4086. Return: CF clear if successful
  4087.         AH destroyed
  4088.     CF set on error
  4089.         AH = error code (01h) (see AH=80h"PCMCIA")
  4090. SeeAlso: AH=84h"PCMCIA",AH=85h"PCMCIA"
  4091. --------X-1A87-------------------------------
  4092. INT 1A - PCMCIA Socket Services - INQUIRE WINDOW
  4093.     AH = 87h
  4094.     AL = adapter number
  4095.     BH = window number
  4096. Return: CF clear if successful
  4097.         AH destroyed
  4098.         BL = capabilities (see below)
  4099.         CX = bitmap of assignable sockets
  4100.         DH = EISA A15-A12 address lines (in bits 7-4, bits 3-0 = 0)
  4101.         DL = supported access speeds (see below)
  4102.         DS:SI -> Memory Window Characteristics table (see below)
  4103.         DS:DI -> I/O Window Characteristics table (see below)
  4104.     CF set on error
  4105.         AH = error code (01h,11h) (see AH=80h"PCMCIA")
  4106. SeeAlso: AH=84h"PCMCIA",AH=88h,AH=89h,AH=8Ch
  4107.  
  4108. Bitfields for window capabilities:
  4109.  bit 0    common memory
  4110.  bit 1    attribute memory
  4111.  bit 2    I/O space
  4112.  bit 3    EISA I/O mappable
  4113.  bit 4    separate enable for EISA comon space
  4114.  bits 5-7 reserved (0)
  4115.  
  4116. Values for supported access speeds:
  4117.  bit 0    WAIT line monitoring
  4118.  bit 1    100 ns
  4119.  bit 2    150 ns
  4120.  bit 3    200 ns
  4121.  bit 4    250 ns
  4122.  bit 5    300 ns
  4123.  bit 6    600 ns
  4124.  bit 7    reserved (0)
  4125.  
  4126. Format of Memory Window Characteristics table:
  4127. Offset    Size    Description
  4128.  00h    WORD    window capabilities (see below)
  4129.  02h    WORD    minimum base address in 4K pages
  4130.  04h    WORD    maximum base address in 4K pages
  4131.  06h    WORD    minimum window size in 4K pages
  4132.  08h    WORD    maximum window size in 4K pages
  4133.  0Ah    WORD    window size granularity (4K units)
  4134.  0Ch    WORD    required base address alignment (4K units)
  4135.  0Eh    WORD    required card offset alignment (4K units)
  4136.  
  4137. Format of I/O Window Characteristics table:
  4138. Offset    Size    Description
  4139.  00h    WORD    window capabilities (see below)
  4140.  02h    WORD    minimum base address in bytes
  4141.  04h    WORD    maximum base address in bytes
  4142.  06h    WORD    minimum window size in bytes
  4143.  08h    WORD    maximum window size in bytes
  4144.  0Ah    WORD    window size granularity (bytes)
  4145.  
  4146. Bitfields for window capabilities:
  4147.  bit 0    programmable base address
  4148.  bit 1    programmable window size
  4149.  bit 2    window disable/enable supported
  4150.  bit 3    8-bit data bus
  4151.  bit 4    16-bit data bus
  4152.  bit 5    base address alignment on size boundary required
  4153.  bit 6    power-of-two size granularity
  4154. ---memory windows---
  4155.  bit 7    card offset must be aligned on size boundary
  4156.  bit 8    paging hardware available
  4157.  bit 9    paging hardware shared
  4158.  bit 10    page disable/enable supported
  4159.  bits 11-15 reserved (0)
  4160. ---I/O windows---
  4161.  bits 7-15 reserved (0)
  4162. --------X-1A88-------------------------------
  4163. INT 1A - PCMCIA Socket Services - GET WINDOW
  4164.     AH = 88h
  4165.     AL = adapter number
  4166.     BH = window number
  4167. Return: CF clear if successful
  4168.         AH destroyed
  4169.         BL = socket number (0-16) (0 = not assigned)
  4170.         CX = window size (bytes for I/O window, 4K units for memory window)
  4171.         DH = window attributes (see below)
  4172.         DL = access speed (only one bit set) (see AH=87h)
  4173.         SI = window base address (bytes if I/O, 4K units if memory)
  4174.         DI = card offset address (memory only, 4K units)
  4175.     CF set on error
  4176.         AH = error code (01h,11h) (see AH=80h"PCMCIA")
  4177. SeeAlso: AH=87h,AH=89h,AH=8Ah
  4178.  
  4179. Bitfields for window attributes:
  4180.  bit 0    memory-mapped rather than I/O-mapped
  4181.  bit 1    attribute memory rather than common (memory-mapped)
  4182.     EISA mapped (I/O)
  4183.  bit 2    enabled
  4184.  bit 3    16-bit data path
  4185.  bit 4    subdivided into pages (memory-mapped only)
  4186.  bit 5    non-specific access slot enable (EISA-mapped only)
  4187.  bits 6-7 reserved (0)
  4188. --------X-1A89-------------------------------
  4189. INT 1A - PCMCIA Socket Services - SET WINDOW
  4190.     AH = 89h
  4191.     AL = adapter number
  4192.     BH = window number
  4193.     BL = socket number
  4194.     CX = window size (bytes if I/O window, 4K units if memory window)
  4195.     DH = window attributes (see AH=88h)
  4196.     DL = access speed (only one bit set) (see AH=87h)
  4197.     SI = window base address (bytes if I/O, 4K units if memory window)
  4198.     DI = card offset addrress (memory only, 4K units)
  4199. Return: CF clear if successful
  4200.         AH destroyed
  4201.     CF set on error
  4202.         AH = error code (01h,03h,07h,08h,0Ah,0Bh,0Dh,10h,11h)
  4203.         (see AH=80h"PCMCIA")
  4204. SeeAlso: AH=87h,AH=88h,AH=8Bh
  4205. --------X-1A8A-------------------------------
  4206. INT 1A - PCMCIA Socket Services - GET PAGE
  4207.     AH = 8Ah
  4208.     AL = adapter number
  4209.     BH = window number
  4210.     BL = page number
  4211. Return: CF clear if successful
  4212.         AH destroyed
  4213.         DX = page attributes
  4214.         bit 0: page enabled
  4215.         bits 15-1 reserved (0)
  4216.         DI = memory card offset (4K units)
  4217.     CF set on error
  4218.         AH = error code (01h,08h,11h) (see AH=80h"PCMCIA")
  4219. Notes:    this function is only valid for memory-mapped windows
  4220.     the socket being operated on is implied by the previous AH=89h call
  4221. SeeAlso: AH=88h,AH=8Bh
  4222. --------X-1A8B-------------------------------
  4223. INT 1A - PCMCIA Socket Services - SET PAGE
  4224.     AH = 8Bh
  4225.     AL = adapter number
  4226.     BH = window number
  4227.     BL = page number
  4228.     DX = page attributes
  4229.         bit 0: page enabled
  4230.         bits 15-1 reserved (0)
  4231.     DI = memory card offset (4K units)
  4232. Return: CF clear if successful
  4233.         AH destroyed
  4234.     CF set on error
  4235.         AH = error code (01h,02h,07h,08h,11h) (see AH=80h"PCMCIA")
  4236. Notes:    this function is only valid for memory-mapped windows
  4237.     the socket being operated on is implied by the previous AH=89h call
  4238. SeeAlso: AH=89h,AH=8Ah
  4239. --------X-1A8C-------------------------------
  4240. INT 1A - PCMCIA Socket Services - INQUIRE SOCKET
  4241.     AH = 8Ch
  4242.     AL = adapter number
  4243.     BL = socket number (01h to maximum supported by adapter)
  4244. Return: CF clear if successful
  4245.         AH destroyed
  4246.         DH = capabilities (see below)
  4247.         DL = hardware indicators (see below)
  4248.         DS:SI -> Socket Characteristics table (see below)
  4249.         DS:DI -> Power Management table (see below)
  4250.     CF set on error
  4251.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4252. SeeAlso: AH=87h,AH=8Dh,AH=8Eh
  4253.  
  4254. Bitfields for socket capabilities:
  4255.  bit 0    card change
  4256.  bit 1    card lock
  4257.  bit 2    insert card (motor control)
  4258.  bit 3    eject card (motor control)
  4259.  bits 4-7 reserved (0)
  4260.  
  4261. Bitfields for socket hardware indicators:
  4262.  bit 0    busy status
  4263.  bit 1    write-protected
  4264.  bit 2    battery status
  4265.  bit 3    card lock status
  4266.  bit 4    XIP status (eXecute-In-Place)
  4267.  bits 5-7 reserved (0)
  4268.  
  4269. Format of Socket Characteristics table:
  4270. Offset    Size    Description
  4271.  00h    WORD    supported card types
  4272.         bit 0: memory card
  4273.         bit 1: I/O card
  4274.         bits 2-7 reserved (0)
  4275.  02h    WORD    steerable IRQ levels (bit 0 = IRQ0 to bit 15 = IRQ15)
  4276.  04h    WORD    additional steerable IRQ levels
  4277.         bit 0: NMI
  4278.         bit 1: I/O check
  4279.         bit 2: bus error
  4280.         bit 3: vendor-unique
  4281.         bits 4-7 reserved (0)
  4282.  
  4283. Format of Power Management table:
  4284. Offset    Size    Description
  4285.  00h    WORD    number of entries in table (0 if power management not avail)
  4286.  02h 2N BYTEs    power levels
  4287.         byte 0: voltage in 0.1V units
  4288.         byte 1: power supply
  4289.             bit 7: Vcc
  4290.             bit 6: Vpp1
  4291.             bit 5: Vpp2
  4292. --------X-1A8D-------------------------------
  4293. INT 1A - PCMCIA Socket Services - GET SOCKET
  4294.     AH = 8Dh
  4295.     AL = adapter number
  4296.     BL = socket number (01h to maximum supported by adapter)
  4297. Return: CF clear if successful
  4298.         AH destroyed
  4299.         BH = status change interrupt enable mask (see AH=81h"PCMCIA")
  4300.         CH = Vcc level (lower nybble)
  4301.         CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  4302.         DH = current socket status (see AH=81h"PCMCIA")
  4303.         DL = indicators (see AH=8Ch)
  4304.         SI = card type (see below)
  4305.         DI = IRQ level steering (I/O only) (see below)
  4306.     CF set on error
  4307.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4308. SeeAlso: AH=8Ch,AH=8Eh
  4309.  
  4310. Bitfields for card type:
  4311.  bit 0    memory
  4312.  bit 1    I/O
  4313.  bits 2-15 reserved (0)
  4314.  
  4315. Bitfields for I/O level steering:
  4316.  bits 0-4    IRQ level (0-15=IRQ,16=NMI,17=I/O check,18=bus error,19=vendor)
  4317.  bits 5-14    reserved (0)
  4318.  bit 15        interrupt steering enabled
  4319. --------X-1A8E-------------------------------
  4320. INT 1A - PCMCIA Socket Services - SET SOCKET
  4321.     AH = 8Eh
  4322.     AL = adapter number
  4323.     BL = socket number (01h to maximum supported by adapter)
  4324.     BH = status change interrupt enable mask (see AH=81h"PCMCIA")
  4325.     CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  4326.     DH = current socket status (see AH=81h"PCMCIA")
  4327.     DL = indicators (see AH=8Ch)
  4328.     SI = card type (see AH=8Dh)
  4329.     DI = IRQ level steering (I/O only) (see AH=8Dh)
  4330. Return: CF clear if successful
  4331.         AH destroyed
  4332.     CF set on error
  4333.         AH = error code (01h,02h,05h,06h,0Bh,0Eh,0Fh) (see AH=80h"PCMCIA")
  4334. SeeAlso: AH=8Ch,AH=8Dh
  4335. --------X-1A8F-------------------------------
  4336. INT 1A - PCMCIA Socket Services - GET CARD
  4337.     AH = 8Fh
  4338.     AL = adapter number
  4339.     BL = socket number (01h to maximum supported by adapter)
  4340. Return: CF clear if successful
  4341.         AH destroyed
  4342.         DL = current card status (see AH=81h"PCMCIA")
  4343.     CF set on error
  4344.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4345. SeeAlso: AH=8Dh,AH=90h
  4346. --------X-1A90-------------------------------
  4347. INT 1A - PCMCIA Socket Services - RESET CARD
  4348.     AH = 90h
  4349.     AL = adapter number
  4350.     BL = socket number (01h to maximum supported by adapter)
  4351. Return: CF clear if successful
  4352.         AH destroyed
  4353.     CF set on error
  4354.         AH = error code (01h,0Bh,14h) (see AH=80h"PCMCIA")
  4355. Note:    toggles RESET pin of the specified card, but does not wait after
  4356.       toggling the pin; it is the caller's responsibility to avoid
  4357.       accessing the card before it is ready again
  4358. --------X-1A91-------------------------------
  4359. INT 1A - PCMCIA Socket Services - READ ONE
  4360.     AH = 91h
  4361.     AL = adapter number
  4362.     BL = socket number (01h to maximum supported by adapter)
  4363.     BH = attributes (see below)
  4364.     DX:SI = card address
  4365. Return: CF clear if successful
  4366.         AH destroyed
  4367.         CL/CX = value read
  4368.     CF set on error
  4369.         AH = error code (01h,07h,09h,0Bh,14h) (see AH=80h"PCMCIA")
  4370.         CX may be destroyed
  4371. Note:    this function is only valid for I/O-mapped sockets
  4372. SeeAlso: AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  4373.  
  4374. Bitfields for attributes:
  4375.  bit 0    attribute memory instead of common memory
  4376.  bit 1    word rather than byte
  4377.  bit 2    even bytes only
  4378. --------X-1A92-------------------------------
  4379. INT 1A - PCMCIA Socket Services - WRITE ONE
  4380.     AH = 92h
  4381.     AL = adapter number
  4382.     BL = socket number (01h to maximum supported by adapter)
  4383.     BH = attributes (see AH=91h)
  4384.     CL/CX = value to write
  4385.     DX:SI = card address
  4386. Return: CF clear if successful
  4387.         AH destroyed
  4388.     CF set on error
  4389.         AH = error code (01h,07h,0Bh,12h,14h) (see AH=80h"PCMCIA")
  4390. Note:    this function is only valid for I/O-mapped sockets; it also does not
  4391.       implement Card Technology handling--use AH=94h when writing to
  4392.       non-RAM technologies
  4393. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  4394. --------X-1A93-------------------------------
  4395. INT 1A - PCMCIA Socket Services - READ MULTIPLE
  4396.     AH = 93h
  4397.     AL = adapter number
  4398.     BL = socket number (01h to maximum supported by adapter)
  4399.     BH = attributes (see AH=91h)
  4400.     CX = number of bytes or words to read
  4401.     DX:SI = card address
  4402.     DS:DI -> data buffer to be filled
  4403. Return: CF clear if successful
  4404.         AH destroyed
  4405.     CF set on error
  4406.         AH = error code (01h,07h,09h,0Bh,14h) (see AH=80h"PCMCIA")
  4407. Note:    this function is only available on I/O-mapped sockets
  4408. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  4409. --------X-1A94-------------------------------
  4410. INT 1A - PCMCIA Socket Services - WRITE MULTIPLE
  4411.     AH = 94h
  4412.     AL = adapter number
  4413.     BL = socket number (01h to maximum supported by adapter)
  4414.     BH = attributes (see AH=91h)
  4415.     CX = number of bytes or words to read
  4416.     DX:DI = card address
  4417.     DS:SI -> buffer containing data
  4418.     BP = Card Technology type (0000h = RAM)
  4419. Return: CF clear if successful
  4420.         AH destroyed
  4421.     CF set on error
  4422.         AH = error code (01h,07h,0Bh,0Ch,12h,14h) (see AH=80h"PCMCIA")
  4423. Notes:    this function is only available on I/O-mapped sockets
  4424.     Socket Services calls the Card Technology callback (see AH=82h"PCMCIA")
  4425.       for any card technology it does not directly support
  4426. SeeAlso: AH=82h"PCMCIA",AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  4427. --------X-1A95-------------------------------
  4428. INT 1A - PCMCIA Socket Services - INQUIRE ERROR DETECTION CODE
  4429.     AH = 95h
  4430.     AL = adapter number
  4431.     BH = EDC generator number
  4432. Return: CF clear if successful
  4433.         AH destroyed
  4434.         CX = bitmap of assignable sockets
  4435.         DH = EDC capabilities (see below)
  4436.         DL = supported EDC types (see below)
  4437.     CF set on error
  4438.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4439. SeeAlso: AH=96h,AH=9Ch
  4440.  
  4441. Bitfields for EDC capabilities:
  4442.  bit 0    unidirectional only generation
  4443.  bit 1    bidirectional only generation
  4444.  bit 2    register-based (I/O-mapped) support
  4445.  bit 3    memory-mapped support
  4446.  bit 4    pausable
  4447.  bits 5-7 reserved (0)
  4448.  
  4449. Bitfields for supported EDC types:
  4450.  bit 0    8-bit checksum
  4451.  bit 1    16-bit CRC-SDLC
  4452.  bits 2-7 reserved (0)
  4453. --------X-1A96-------------------------------
  4454. INT 1A - PCMCIA Socket Services - GET ERROR DETECTION CODE
  4455.     AH = 96h
  4456.     AL = adapter number
  4457.     BH = EDC generator number
  4458. Return: CF clear if successful
  4459.         AH destroyed
  4460.         BL = socket number
  4461.         DH = EDC attributes (see below)
  4462.         DL = EDC type (see AH=95h) (only one bit set)
  4463.     CF set on error
  4464.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4465. SeeAlso: AH=95h,AH=97h,AH=9Ch
  4466.  
  4467. Bitfields for EDC attributes:
  4468.  bit 0    unidirectional only
  4469.  bit 1    (if bit 0 set) clear=read, set=write
  4470.  bits 2-7 reserved (0)
  4471. --------X-1A97-------------------------------
  4472. INT 1A - PCMCIA Socket Services - SET ERROR DETECTION CODE
  4473.     AH = 97h
  4474.     AL = adapter number
  4475.     BH = EDC generator
  4476.     BL = socket number
  4477.     DH = EDC attributes (see AH=96h)
  4478.     DL = EDC type (see AH=95h) (only one bit may be set)
  4479. Return: CF clear if successful
  4480.         AH destroyed
  4481.     CF set on error
  4482.         AH = error code (01h,02h,04h,0Bh) (see AH=80h"PCMCIA")
  4483. SeeAlso: AH=96h,AH=9Ch
  4484. --------X-1A98-------------------------------
  4485. INT 1A - PCMCIA Socket Services - START ERROR DETECTION CODE
  4486.     AH = 98h
  4487.     AL = adapter number
  4488.     BH = EDC generator
  4489. Return: CF clear if successful
  4490.         AH destroyed
  4491.     CF set on error
  4492.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4493. SeeAlso: AH=96h,AH=99h,AH=9Bh,AH=9Ch
  4494. --------X-1A99-------------------------------
  4495. INT 1A - PCMCIA Socket Services - PAUSE ERROR DETECTION CODE
  4496.     AH = 99h
  4497.     AL = adapter number
  4498.     BH = EDC generator
  4499. Return: CF clear if successful
  4500.         AH destroyed
  4501.     CF set on error
  4502.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4503. SeeAlso: AH=9Ah
  4504. --------X-1A9A-------------------------------
  4505. INT 1A - PCMCIA Socket Services - RESUME ERROR DETECTION CODE
  4506.     AH = 9Ah
  4507.     AL = adapter number
  4508.     BH = EDC generator
  4509. Return: CF clear if successful
  4510.         AH destroyed
  4511.     CF set on error
  4512.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4513. SeeAlso: AH=99h,AH=98h
  4514. --------X-1A9B-------------------------------
  4515. INT 1A - PCMCIA Socket Services - STOP ERROR DETECTION CODE
  4516.     AH = 9Bh
  4517.     AL = adapter number
  4518.     BH = EDC generator
  4519. Return: CF clear if successful
  4520.         AH destroyed
  4521.     CF set on error
  4522.         AH = error code (see AH=80h"PCMCIA")
  4523. SeeAlso: AH=98h,AH=99h,AH=9Ch
  4524. --------X-1A9C-------------------------------
  4525. INT 1A - PCMCIA Socket Services - READ ERROR DETECTION CODE
  4526.     AH = 9Ch
  4527.     AL = adapter number
  4528.     BH = EDC generator
  4529. Return: CF clear if successful
  4530.         AH destroyed
  4531.         DL/DX = computed checksum or CRC
  4532.     CF set on error
  4533.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4534. SeeAlso: AH=95h,AH=96h,AH=98h,AH=99h,AH=9Bh
  4535. --------c-1AA0-------------------------------
  4536. INT 1A U - Disk Spool II v2.07+ - INSTALLATION CHECK
  4537.     AH = A0h
  4538. Return: AH = B0h if installed
  4539.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  4540.         ES = code segment
  4541.         ES:BX -> name of current spool file
  4542.         ES:SI -> current despool file
  4543.         CL = despooler state (00h disabled, 41h enabled)
  4544.         CH = spooler state (00h disabled, 41h enabled)
  4545.         DL = 00h despooler is currently active printing a file
  4546.            = 41h despooler is standing by
  4547.         DH = 00h ???
  4548.            = 41h ???
  4549.         DI = 0000h ???
  4550.          0001h ???
  4551. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  4552.       Software Company
  4553. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4554.       as that is a licensed version of Disk Spool II
  4555. SeeAlso: AH=ABh,AH=C0h,AH=D0h,AH=E1h
  4556. --------c-1AAB-------------------------------
  4557. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  4558.     AH = ABh
  4559. Return: AH = BAh if installed
  4560.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  4561.         ES = code segment
  4562.         ES:BX -> name of current spool file
  4563.         ES:SI -> current despool file
  4564.         CL = 00h despooler is disabled
  4565.            = 41h despooler is enabled
  4566.         CH = 00h spooler is disabled
  4567.            = 41h spooler is enabled
  4568.         DL = 00h despooler is currently active printing a file
  4569.            = 41h despooler is standing by
  4570.         DH = 00h ???
  4571.            = 41h ???
  4572.         DI = 0000h ???
  4573.          0001h ???
  4574. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  4575.       Software Company
  4576. SeeAlso: AH=A0h,AH=ACh,AH=ADh,AH=E1h
  4577. --------c-1AAC-------------------------------
  4578. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  4579.     AH = ACh
  4580. Return: (see AH=ABh)
  4581. Note:    this function is identical to AH=ABh
  4582. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  4583. --------c-1AAD-------------------------------
  4584. INT 1A U - Disk Spool II v1.83 - FUNCTION CALLS
  4585.     AH = ADh
  4586.     AL = function code
  4587.         02h enable spooler only
  4588.         03h enable the despooler
  4589.         04h disable the despooler
  4590.         08h inhibit popup menu
  4591.         09h enable popup menu
  4592.         0Ah ???
  4593.         0Bh disable the spooler
  4594.         0Ch start despooler after last successfully printed document???
  4595.         0Dh start despooler at the exact point where it last left off???
  4596.         0Eh pop up the menu
  4597.         0Fh ???
  4598.         11h ???
  4599.         14h ???
  4600.         15h ???
  4601.         16h ???
  4602.         17h ???
  4603.         18h ???
  4604.         19h ???
  4605.         20h clear file pointed to by the despooler???
  4606.         21h ???
  4607.         22h ???
  4608.         23h ???
  4609.         30h ???
  4610. Return: AH = 00h if successful
  4611. SeeAlso: AH=ABh
  4612. --------d-1AB001CX4D52-----------------------
  4613. INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
  4614.     AX = B001h
  4615.     CX = 4D52h ("MR")
  4616.     DX = 4349h ("CI")
  4617. Return: CX = 4943h ("IC") if installed
  4618.     DX = 524Dh ("RM") if installed
  4619.         ES:DI -> MRCINFO structure (see below)
  4620. Note:    this call is functionally identical to INT 2F/AX=4A12h, which should
  4621.       be called first, as this call is used for the first, ROM-based
  4622.       MRCI server, while the other call is used for RAM-based servers
  4623.       which may be partially or entirely replacing a prior server
  4624. SeeAlso: INT 2F/AX=4A12h
  4625.  
  4626. Format of MRCINFO structure:
  4627. Offset    Size    Description
  4628.  00h  4 BYTEs    vendor signature
  4629.         "MSFT" Microsoft
  4630.  04h    WORD    server version (high=major)
  4631.  06h    WORD    MRCI specification version
  4632.  08h    DWORD    address of server entry point
  4633.  0Ch    WORD    bit flags: server capabilities (see below)
  4634.  0Eh    WORD    bit flags: hardware assisted capabilities (see below)
  4635.  10h    WORD    maximum block size supported by server (at least 8192 bytes)
  4636.  
  4637. Bitfields for capabilities:
  4638.  bit 0    standard compress
  4639.  bit 1    standard decompress
  4640.  bit 2    update compress
  4641.  bit 3    MaxCompress
  4642.  bit 4    reserved
  4643.  bit 5    incremental decompress
  4644.  bits 6-14 reserved
  4645.  bit 15 this structure is in ROM and can't be modified
  4646.     (server capabilities only)
  4647.  
  4648. Call MRCI entry point with:
  4649.     DS:SI -> MRCREQUEST structure (see below)
  4650.     CX = type of client (0000h application, 0001h file system)
  4651.     AX = operation
  4652.         0001h perform standard compression
  4653.         0002h perform standard decompression
  4654.         0004h perform update compression
  4655.         0008h perform MaxCompress
  4656.         0020h perform incremental decompression
  4657.     AX = FFFFh clear flags
  4658.         BX = bitmask of flags to clear (set bits in BX are flags to clear)
  4659. Return: AX = status
  4660.         0000h successful
  4661.         0001h invalid function
  4662.         0002h server busy, try again
  4663.         0003h destination buffer too small
  4664.         0004h incompressible data
  4665.         0005h bad compressed data format
  4666. Note:    MRCI driver may chain to a previous driver
  4667.  
  4668. Format of MRCREQUEST structure:
  4669. Offset    Size    Description
  4670.  00h    DWORD    pointer to source buffer
  4671.  04h    WORD    size of source buffer (0000h = 64K)
  4672.  06h    WORD    (UpdateCompress only)
  4673.         (call) offset in source buffer of beginning of changed data
  4674.         (return) offset in destination buffer of beginning of changed
  4675.             compressed data
  4676.  08h    DWORD    pointer to destination buffer
  4677.         must contain original compressed data for UpdateCompress
  4678.  0Ch    WORD    size of destination buffer (0000h = 64K)
  4679.         any compression: size of buffer for compressed data
  4680.         standard decompression: number of bytes to be decompressed
  4681.         incremental decompression: number of byte to decompress now
  4682.         (return) actual size of resulting data
  4683.  0Eh    WORD    client compressed data storage allocation size
  4684.  10h    DWORD    incremental decompression state data
  4685.         set to 00000000h before first incremental decompression call
  4686. Notes:    the source and destination buffers may not overlap
  4687.     the source and destination buffer sizes should normally be the same
  4688.     application should not update the contents of the MRCREQUEST structure
  4689.       between incremental decompression calls
  4690. --------X-1AB101-----------------------------
  4691. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK
  4692.     AX = B101h
  4693. Return: AH = 00h if installed
  4694.         CF clear
  4695.         EDX = 20494350h (' ICP')
  4696.         EDI = physical address of protected-mode entry point (see below)
  4697.         AL = PCI hardware characteristics
  4698.         bit 0: configuration space access mechanism 1 supported
  4699.         bit 1: configuration space access mechanism 2 supported
  4700.         bits 2-3 reserved
  4701.         bit 4: Special Cycle generation mechanism 1 supported
  4702.         bit 5: Special Cycle generation mechanism 2 supported
  4703.         bits 6-7 reserved
  4704.         BH = PCI interface level major version (BCD)
  4705.         BL = PCI interface level minor version (BCD)
  4706.         CL = number of last PCI bus in system
  4707.     EAX, EBX, ECX, and EDX may be modified
  4708.     all other flags (except IF) may be modified
  4709. Note:    this function may require up to 1024 byte of stack; it will not enable
  4710.       interrupts if they were disabled before making the call
  4711. SeeAlso: AX=B181h
  4712.  
  4713. Call protected-mode entry point with:
  4714.     registers as for real/V86-mode INT call
  4715.     CS = ring 0 descriptor with access to full address space
  4716. Return: as for real/V86-mode call
  4717. --------X-1AB102-----------------------------
  4718. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE
  4719.     AX = B102h
  4720.     CX = device ID
  4721.     DX = vendor ID
  4722.     SI = device index (0-n)
  4723. Return: CF clear if successful
  4724.     CF set on error
  4725.     AH = status
  4726.         00h successful
  4727.         BL = bus number
  4728.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  4729.         83h bad vendor ID
  4730.         86h device not found
  4731.     EAX, EBX, ECX, and EDX may be modified
  4732.     all other flags (except IF) may be modified
  4733. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4734.       interrupts if they were disabled before making the call
  4735.     device ID FFFFh may be reserved as a wildcard in future implementations
  4736.     the meanings of BL and BH on return may be exchanged in future
  4737.       implementations
  4738.     all devices sharing a single vendor ID and device ID may be enumerated
  4739.       by incrementing SI from 0 until error 86h is returned
  4740. SeeAlso: AX=B182h
  4741. --------X-1AB103-----------------------------
  4742. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE
  4743.     AX = B103h
  4744.     ECX = class code (bits 23-0)
  4745.     SI = device index (0-n)
  4746. Return: CF clear if successful
  4747.     CF set on error
  4748.     AH = status
  4749.         00h successful
  4750.         BL = bus number
  4751.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  4752.         86h device not found
  4753.     EAX, EBX, ECX, and EDX may be modified
  4754.     all other flags (except IF) may be modified
  4755. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4756.       interrupts if they were disabled before making the call
  4757.     the meanings of BL and BH on return may be exchanged in future
  4758.       implementations
  4759.     all devices sharing the same Class Code may be enumerated by
  4760.       incrementing SI from 0 until error 86h is returned
  4761. SeeAlso: AX=B183h
  4762. --------X-1AB106-----------------------------
  4763. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS
  4764.     AX = B106h
  4765.     BL = bus number
  4766.     EDX = Special Cycle data
  4767. Return: CF clear if successful
  4768.     CF set on error
  4769.     AH = status
  4770.         00h successful
  4771.         81h unsupported function
  4772.     EAX, EBX, ECX, and EDX may be modified
  4773.     all other flags (except IF) may be modified
  4774. Note:    this function may require up to 1024 byte of stack; it will not enable
  4775.       interrupts if they were disabled before making the call
  4776. SeeAlso: AX=B186h
  4777. --------X-1AB108-----------------------------
  4778. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE
  4779.     AX = B108h
  4780.     BL = bus number
  4781.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4782.     DI = register number (0000h-00FFh)
  4783. Return: CF clear if successful
  4784.         CL = byte read
  4785.     CF set on error
  4786.     AH = status
  4787.         00h successful
  4788.         87h bad register number
  4789.     EAX, EBX, ECX, and EDX may be modified
  4790.     all other flags (except IF) may be modified
  4791. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4792.       interrupts if they were disabled before making the call
  4793.     the meanings of BL and BH on entry may be exchanged in future
  4794.       implementations
  4795. SeeAlso: AX=B188h
  4796. --------X-1AB109-----------------------------
  4797. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD
  4798.     AX = B109h
  4799.     BL = bus number
  4800.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4801.     DI = register number (0000h-00FFh)
  4802. Return: CF clear if successful
  4803.         CX = word read
  4804.     CF set on error
  4805.     AH = status
  4806.         00h successful
  4807.         87h bad register number
  4808.     EAX, EBX, ECX, and EDX may be modified
  4809.     all other flags (except IF) may be modified
  4810. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4811.       interrupts if they were disabled before making the call
  4812.     the meanings of BL and BH on entry may be exchanged in future
  4813.       implementations
  4814. SeeAlso: AX=B189h
  4815. --------X-1AB10A-----------------------------
  4816. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD
  4817.     AX = B10Ah
  4818.     BL = bus number
  4819.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4820.     DI = register number (0000h-00FFh)
  4821. Return: CF clear if successful
  4822.         ECX = dword read
  4823.     CF set on error
  4824.     AH = status
  4825.         00h successful
  4826.         87h bad register number
  4827.     EAX, EBX, ECX, and EDX may be modified
  4828.     all other flags (except IF) may be modified
  4829. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4830.       interrupts if they were disabled before making the call
  4831.     the meanings of BL and BH on entry may be exchanged in future
  4832.       implementations
  4833. SeeAlso: AX=B18Ah
  4834. --------X-1AB10B-----------------------------
  4835. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE
  4836.     AX = B10Bh
  4837.     BL = bus number
  4838.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4839.     DI = register number (0000h-00FFh)
  4840.     CL = byte to write
  4841. Return: CF clear if successful
  4842.     CF set on error
  4843.     AH = status
  4844.         00h successful
  4845.         87h bad register number
  4846.     EAX, EBX, ECX, and EDX may be modified
  4847.     all other flags (except IF) may be modified
  4848. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4849.       interrupts if they were disabled before making the call
  4850.     the meanings of BL and BH on entry may be exchanged in future
  4851.       implementations
  4852. SeeAlso: AX=B18Bh
  4853. --------X-1AB10C-----------------------------
  4854. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD
  4855.     AX = B10Ch
  4856.     BL = bus number
  4857.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4858.     DI = register number (multiple of 2 less than 0100h)
  4859.     CX = word to write
  4860. Return: CF clear if successful
  4861.     CF set on error
  4862.     AH = status
  4863.         00h successful
  4864.         87h bad register number
  4865.     EAX, EBX, ECX, and EDX may be modified
  4866.     all other flags (except IF) may be modified
  4867. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4868.       interrupts if they were disabled before making the call
  4869.     the meanings of BL and BH on entry may be exchanged in future
  4870.       implementations
  4871. SeeAlso: AX=B18Ch
  4872. --------X-1AB10D-----------------------------
  4873. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD
  4874.     AX = B10Dh
  4875.     BL = bus number
  4876.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4877.     DI = register number (multiple of 4 less than 0100h)
  4878.     ECX = dword to write
  4879. Return: CF clear if successful
  4880.     CF set on error
  4881.     AH = status
  4882.         00h successful
  4883.         87h bad register number
  4884.     EAX, EBX, ECX, and EDX may be modified
  4885.     all other flags (except IF) may be modified
  4886. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4887.       interrupts if they were disabled before making the call
  4888.     the meanings of BL and BH on entry may be exchanged in future
  4889.       implementations
  4890. SeeAlso: AX=B18Dh
  4891. --------X-1AB181-----------------------------
  4892. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK (32-bit)
  4893.     AX = B181h
  4894. Return: as for AX=B101h
  4895. SeeAlso: AX=B101h
  4896. --------X-1AB182-----------------------------
  4897. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE (32-bit)
  4898.     AX = B182h
  4899.     CX = device ID
  4900.     DX = vendor ID
  4901.     SI = device index (0-n)
  4902. Return: as for AX=B102h
  4903. SeeAlso: AX=B102h
  4904. --------X-1AB183-----------------------------
  4905. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE (32-bit)
  4906.     AX = B183h
  4907.     ECX = class code (bits 23-0)
  4908.     SI = device index (0-n)
  4909. Return: as for AX=B103h
  4910. SeeAlso: AX=B103h
  4911. --------X-1AB186-----------------------------
  4912. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS (32-bit)
  4913.     AX = B186h
  4914.     BL = bus number
  4915.     EDX = Special Cycle data
  4916. Return: as for AX=B106h
  4917. SeeAlso: AX=B106h
  4918. --------X-1AB188-----------------------------
  4919. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE (32-bit)
  4920.     AX = B188h
  4921.     BL = bus number
  4922.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4923.     DI = register number (0000h-00FFh)
  4924. Return: as for AX=B108h
  4925. SeeAlso: AX=B108h
  4926. --------X-1AB189-----------------------------
  4927. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD (32-bit)
  4928.     AX = B189h
  4929.     BL = bus number
  4930.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4931.     DI = register number (0000h-00FFh)
  4932. Return: as for AX=B109h
  4933. SeeAlso: AX=B109h
  4934. --------X-1AB18A-----------------------------
  4935. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD (32-bit)
  4936.     AX = B18Ah
  4937.     BL = bus number
  4938.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4939.     DI = register number (0000h-00FFh)
  4940. Return: as for AX=B10Ah
  4941. SeeAlso: AX=B10Ah
  4942. --------X-1AB18B-----------------------------
  4943. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE (32-bit)
  4944.     AX = B18Bh
  4945.     BL = bus number
  4946.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4947.     DI = register number (0000h-00FFh)
  4948.     CL = byte to write
  4949. Return: as for AX=B10Bh
  4950. SeeAlso: AX=B10Bh
  4951. --------X-1AB18C-----------------------------
  4952. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD (32-bit)
  4953.     AX = B18Ch
  4954.     BL = bus number
  4955.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4956.     DI = register number (multiple of 2 less than 0100h)
  4957.     CX = word to write
  4958. Return: as for AX=B10Ch
  4959. SeeAlso: AX=B10Ch
  4960. --------X-1AB18D-----------------------------
  4961. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD (32-bit)
  4962.     AX = B18Dh
  4963.     BL = bus number
  4964.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4965.     DI = register number (multiple of 4 less than 0100h)
  4966.     ECX = dword to write
  4967. Return: as for AX=B10Dh
  4968. SeeAlso: AX=B10Dh
  4969. --------c-1AC0-------------------------------
  4970. INT 1A U - Disk Spool II v2.07+ - ALTERNATE INSTALLATION CHECK
  4971.     AH = C0h
  4972. Return: (see AH=A0h)
  4973. Notes:    this call is identical to AH=A0h
  4974.     this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4975.       as that is a licensed version of Disk Spool II
  4976. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  4977. --------U-1ACCCCBXCCCC-----------------------
  4978. INT 1A U - DATEFIX - INSTALLATION CHECK
  4979.     AX = CCCCh
  4980.     BX = CCCCh
  4981.     CX = 0000h
  4982. Return: CX = CCCCh if installed
  4983.         ES:BX -> original interrupt handler
  4984. Program: DATEFIX is a public-domain TSR to correct the date on AT&T 6300
  4985.       machines, where the realtime clock's calendar wraps after 1991
  4986. SeeAlso: AH=FEh,AH=FFh"AT&T"
  4987. --------c-1AD0-------------------------------
  4988. INT 1A U - Disk Spool II v2.07+ - FUNCTION CALLS
  4989.     AH = D0h
  4990.     AL = function code
  4991.         01h enable spooler and despooler
  4992.         02h enable spooler only
  4993.         03h enable despooler at beginning of file
  4994.         04h disable the despooler
  4995.         05h disable the despooler and spooler
  4996.         06h clear the spool file
  4997.         08h inhibit the popup menu
  4998.         09h enable the popup menu
  4999.         0Ah ??? (called by Disk Spool's INT 21 handler)
  5000.         0Bh disable the spooler
  5001.         0Ch start despooler after last successfully printed document
  5002.         0Dh start despooler at the exact point where it last left off
  5003.         0Eh pop up the menu
  5004.         0Fh ???
  5005.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  5006.             when a program terminates)
  5007.         14h ???
  5008.         15h delete despool file and reset ???
  5009.         16h ??? (writes something to unknown file)
  5010.         17h ??? (writes something to despool file, then reads something
  5011.             else and ???)
  5012.         18h ??? (reads something from despool file, and then ???)
  5013.         19h ??? (creates/truncates spool file)
  5014.         20h clear file pointed to by the despooler
  5015.         21h ??? (writes something to unknown file)
  5016.         22h ??? (writes something to spool file if spooler/despooler using
  5017.             same file)
  5018.         23h ??? (opens/creates unknown file, then ???)
  5019.         30h ???
  5020.         31h ???
  5021.         32h beep
  5022.         33h append CRLF to spool file???
  5023.         34h ???
  5024.         35h ???
  5025.         36h ???
  5026.         37h append CRLF to spool file and start a new spool file???
  5027.         38h ???
  5028.         40h ??? (v4.05)
  5029.         41h ??? (v4.05)
  5030.         51h ??? (called by Disk Spool's INT 21 handler)
  5031.         52h ??? (called by Disk Spool's INT 21 handler)
  5032.         57h ???
  5033.         5Ah ??? (v4.05)
  5034.         5Bh ??? (v4.05)
  5035.         5Ch ??? (v4.05)
  5036. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5037.       as that is a licensed version of Disk Spool II
  5038. SeeAlso: AH=A0h,AH=ADh
  5039. --------c-1AE0-------------------------------
  5040. INT 1A - Disk Spool II v4.0x - ENABLE/DISABLE
  5041.     AH = E0h
  5042.     AL = subfunction
  5043.         01h enable spooler
  5044.         02h disable spooler
  5045.         03h enable despooler
  5046.         04h disable despooler
  5047.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5048. Return: AH = status
  5049.         00h successful
  5050.         F0h printer port not managed by Disk Spool II
  5051.         FFH failed
  5052. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5053.       as that is a licensed version of Disk Spool II
  5054. SeeAlso: AH=A0h,AH=E1h,AX=E301h,AX=E401h
  5055. --------c-1AE1-------------------------------
  5056. INT 1A - Disk Spool II v4.0x - GET STATUS
  5057.     AH = E1h
  5058.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5059. Return: AH = status
  5060.         00h successful
  5061.         CL = despooler state (00h disabled, 41h enabled)
  5062.         CH = spooler state (00h disabled, 41h enabled)
  5063.         DL = despooler activity (00h standing by, 41h printing)
  5064.         ES:BX -> ASCIZ name of current spool file (or next if AutoSpool
  5065.             or AutoDespool enabled)
  5066.         ES:SI -> ASCIZ name of current despool file
  5067.         ES:DI -> 3-byte file extension used by Disk Spool II
  5068.         F0h printer port not managed by Disk Spool II
  5069. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5070.       as that is a licensed version of Disk Spool II
  5071. SeeAlso: AH=A0h,AH=E0h,AH=E2h
  5072. --------c-1AE2-------------------------------
  5073. INT 1A - Disk Spool II v4.0x - GET SPOOL FILES
  5074.     AH = E2h
  5075.     AL = which
  5076.         01h first
  5077.         02h next (can only call after "first")
  5078.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5079. Return: AH = status
  5080.         00h successful
  5081.         ES:BX -> ASCIZ filename
  5082.         F0h no (more) spool files
  5083.         FFh failed
  5084. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5085.       as that is a licensed version of Disk Spool II
  5086. SeeAlso: AH=E0h,AH=E1h
  5087. --------c-1AE301-----------------------------
  5088. INT 1A - Disk Spool II v4.0x - GET SPOOL FILE STATUS
  5089.     AX = E301h
  5090.     ES:BX -> ASCIZ filename (max 32 chars)
  5091. Return: AH = status
  5092.         00h successful
  5093.         ES:SI -> spool file status record (see below)
  5094.         F0h not a spool file
  5095.         FFh failed
  5096. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5097.       as that is a licensed version of Disk Spool II
  5098. SeeAlso: AH=E0h,AX=E302h,AX=E401h
  5099.  
  5100. Format of spool file status record:
  5101. Offset    Size    Description
  5102.  00h    BYTE    hour of creation or last update
  5103.  01h    BYTE    minute of creation or last update
  5104.  02h    BYTE    year-1980 of creation or last update
  5105.  03h    BYTE    month of creation or last update
  5106.  04h    BYTE    day of creation or last update
  5107.  05h    BYTE    total number of copies to print
  5108.  06h    BYTE    number of copies already printed
  5109.  07h    BYTE    printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5110.  08h    BYTE    save status (00h delete after printing, 01h save)
  5111.  09h    BYTE    file status
  5112.         01h done printing, but being saved
  5113.         02h on hold
  5114.         03h queued for printing
  5115.         04h being spooled
  5116.         05h being despooled (i.e. printed)
  5117.  0Ah 16 BYTEs    ASCIZ description
  5118.  1Ah  2 WORDs    file size in bytes (high,low)
  5119.  1Eh  2 WORDs    bytes left to print (high,low)
  5120. --------c-1AE302-----------------------------
  5121. INT 1A - Disk Spool II v4.0x - UPDATE SPOOL FILE
  5122.     AX = E302h
  5123.     ES:BX -> ASCIZ filename (max 32 chars)
  5124.     ES:SI -> spool file status record (see AX=E301h)
  5125. Return: AH = status
  5126.         00h successful
  5127.         F0h not a spool file
  5128.         FFh failed
  5129. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5130.       as that is a licensed version of Disk Spool II
  5131. SeeAlso: AH=E0h,AX=E301h,AX=E401h
  5132. --------c-1AE401-----------------------------
  5133. INT 1A - Disk Spool II v4.0x - SPOOL EXISTING FILE
  5134.     AX = E401h
  5135.     ES:BX -> ASCIZ filename (max 32 chars)
  5136.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5137. Return: AH = status
  5138.         00h successful
  5139.         FFh failed
  5140. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5141.       as that is a licensed version of Disk Spool II
  5142. SeeAlso: AH=E1h,AX=E302h,AX=E402h
  5143. --------c-1AE402-----------------------------
  5144. INT 1A U - Disk Spool II v4.0x - SPOOL EXISTING FILE???
  5145.     AX = E402h
  5146.     ES:BX -> ASCIZ filename (max 32 chars)
  5147.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5148. Return: AH = status
  5149.         00h successful
  5150.         FFh failed
  5151. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5152.       as that is a licensed version of Disk Spool II
  5153. SeeAlso: AH=E1h,AX=E302h,AX=E401h
  5154. --------c-1AE5-------------------------------
  5155. INT 1A U - Emulaser ELSPL.COM - ???
  5156.     AH = E5h
  5157.     ???
  5158. Return: ???
  5159. Program: ELSPL.COM is a licensed version of Disk Spool II which is distributed
  5160.       as part of Vertisoft's Emulaser PostScript emulator
  5161. SeeAlso: AH=A0h,INT 17/AH=03h
  5162. --------c-1AEE-------------------------------
  5163. INT 1A U - Disk Spool II v4.05 - ???
  5164.     AH = EEh
  5165.     AL = printer port???
  5166.     ???
  5167. Return: ???
  5168. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5169.       as that is a licensed version of Disk Spool II
  5170. SeeAlso: AH=E1h
  5171. --------U-1AF7-------------------------------
  5172. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  5173.     AH = F7h
  5174. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5175.       time to correct for clock drift
  5176. Note:    any AH value from F0h-F7h or F9h-FEh will perform this function in
  5177.       version 1.1, but F7h is the function called by transient portion
  5178. SeeAlso: AH=F8h,AH=FFh"RighTime"
  5179. --------U-1AF8-------------------------------
  5180. INT 1A - RighTime v1.1 - ENABLE
  5181.     AH = F8h
  5182. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5183.       time to correct for clock drift
  5184. Note:    RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  5185.       TeSseRact program identifier based on its current state: "RighTime"
  5186.       when enabled, "RighTim"F7h when disabled.
  5187. SeeAlso: AH=F7h,AH=FFh"RighTime"
  5188. --------b-1AFE-------------------------------
  5189. INT 1A - AT&T 6300 - READ TIME AND DATE
  5190.     AH = FEh
  5191. Return: BX = day count (0 = Jan 1, 1984)
  5192.     CH = hour
  5193.     CL = minute
  5194.     DH = second
  5195.     DL = hundredths
  5196. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  5197. --------b-1AFF-------------------------------
  5198. INT 1A - AT&T 6300 - SET TIME AND DATE
  5199.     AH = FFh
  5200.     BX = day count (0 = Jan 1, 1984)
  5201.     CH = hour
  5202.     CL = minute
  5203.     DH = second
  5204.     DL = hundredths
  5205. Return: ???
  5206. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  5207. --------U-1AFF-------------------------------
  5208. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  5209.     AH = FFh
  5210. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5211.       time to correct for clock drift
  5212. Note:    upon being permanently disabled, RighTime closes the file handle
  5213.       referencing its executable (which is updated with time correction
  5214.       information every two minutes while RighTime is enabled).
  5215. --------s-1AFF00-----------------------------
  5216. INT 1A - SND - INSTALLATION CHECK???
  5217.     AX = FF00h
  5218. Return: AL = version??? (02h)
  5219.     AH = busy flag (00h if not in a SND call, 01h if SND currently active)
  5220. Note:    the SND API is also supported by IC (Internal Commands) v2.0, a
  5221.       shareware TSR by Geoff Friesen which extends COMMAND.COM's internal
  5222.       command set
  5223. SeeAlso: AX=FF01h,AX=FF02h,AX=FF04h,AX=FF05h
  5224. --------s-1AFF01-----------------------------
  5225. INT 1A - SND - PAUSE
  5226.     AX = FF01h
  5227.     DX = number of clock ticks to delay
  5228. Return: AH = status
  5229.         00h successful
  5230.         01h SND busy
  5231. Notes:    if successful, execution returns to the caller after the delay expires;
  5232.       if SND is busy, execution returns immediately
  5233.     the IC v2.0 implementation of this API makes no special allowance for
  5234.       time rollover at midnight, which can cause the delay to be over one
  5235.       hour if this function is called just before the BIOS time count
  5236.       rolls over and the delay extends into the next day
  5237. SeeAlso: AX=FF00h,INT 15/AH=86h,INT 62/AX=0096h,INT 7F/AH=E8h,INT 80/BX=0009h
  5238. SeeAlso: INT E0/CL=BDh
  5239. --------s-1AFF02-----------------------------
  5240. INT 1A - SND - START SOUND
  5241.     AX = FF02h
  5242.     DX = frequency in Hertz (14h-FFFFh)
  5243. Return: AH = status
  5244.         00h successful
  5245.         01h SND busy
  5246. SeeAlso: AX=FF00h,AX=FF01h,AX=FF03h
  5247. --------s-1AFF03-----------------------------
  5248. INT 1A - SND - STOP SOUND
  5249.     AX = FF03h
  5250. Return: AH = status
  5251.         00h successful
  5252.         01h busy
  5253. Note:    turns off any sound currently being emitted by the PC's speaker unless
  5254.       SND is currently busy processing an API call (this includes
  5255.       background music).  Use AX=FF05h to stop the sound even if an API
  5256.       call is in progress.
  5257. SeeAlso: AX=FF00h,AX=FF02h,AX=FF05h
  5258. --------s-1AFF04-----------------------------
  5259. INT 1A - SND - PLAY MUSIC STRING IN BACKGROUND
  5260.     AX = FF04h
  5261.     DS:DX -> ASCIZ music string
  5262. Return: AH = status
  5263.         00h successful (music begins playing in background)
  5264.         01h busy
  5265. Note:    the music string accepted by SND is not the same as that accepted by
  5266.       BASIC and other programs which process music strings
  5267. SeeAlso: AX=FF00h,AX=FF05h,INT 80/BX=0006h
  5268. --------s-1AFF05-----------------------------
  5269. INT 1A - SND - UNCONDITIONALLY STOP SOUND
  5270.     AX = FF05h
  5271. Return: AH = 00h (successful)
  5272. Note:    this function is the same as AX=FF03h, but will stop the sound even if
  5273.       SND is currently busy, such as playing background music
  5274. SeeAlso: AX=FF00h,AX=FF03h,INT 80/BX=0007h
  5275. --------B-1B---------------------------------
  5276. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  5277. Desc:    this interrupt is automatically called when INT 09 determines that
  5278.       Control-Break has been pressed
  5279. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  5280.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  5281. SeeAlso: INT 23
  5282. --------B-1C---------------------------------
  5283. INT 1C - TIME - SYSTEM TIMER TICK
  5284. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  5285.       handler
  5286. Notes:    this is the preferred interrupt to chain when a program needs to be
  5287.       invoked regularly
  5288.     not available on NEC 9800-series PCs
  5289. SeeAlso: INT 08
  5290. --------B-1D---------------------------------
  5291. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  5292. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  5293. SeeAlso: INT 10/AH=00h
  5294.  
  5295. Format of video parameters:
  5296. Offset    Size    Description
  5297.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  5298.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  5299.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  5300.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  5301.  40h    WORD    bytes in video buffer for modes 00h and 01h
  5302.  42h    WORD    bytes in video buffer for modes 02h and 03h
  5303.  44h    WORD    bytes in video buffer for modes 04h and 05h
  5304.  46h    WORD    bytes in video buffer for modes 06h and 07h
  5305.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  5306.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  5307. --------B-1E---------------------------------
  5308. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  5309. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  5310. SeeAlso: INT 13/AH=0Fh,INT 41
  5311.  
  5312. Format of diskette parameter table:
  5313. Offset    Size    Description
  5314.  00h    BYTE    first specify byte
  5315.         bits 7-4: step rate
  5316.         bits 3-0: head unload time (0Fh = 240 ms)
  5317.  01h    BYTE    second specify byte
  5318.         bits 7-1: head load time (01h = 4 ms)
  5319.         bit    0: non-DMA mode (always 0)
  5320.  02h    BYTE    delay until motor turned off (in clock ticks)
  5321.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  5322.  04h    BYTE    sectors per track
  5323.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  5324.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  5325.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  5326.  08h    BYTE    format filler byte (default F6h)
  5327.  09h    BYTE    head settle time in milliseconds
  5328.  0Ah    BYTE    motor start time in 1/8 seconds
  5329. --------B-1F---------------------------------
  5330. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  5331. Desc:    this vector points at 1024 bytes of graphics data, 8 bytes for each
  5332.       character 80h-FFh
  5333. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  5334.       compatible BIOSes
  5335. SeeAlso: INT 10/AX=5000h,INT 43
  5336. --------O-20---------------------------------
  5337. INT 20 - Minix - SEND/RECEIVE MESSAGE
  5338.     AX = process ID of other process
  5339.     BX -> message
  5340.     CX = operation (1 send, 2 receive, 3 send&receive)
  5341. Program: Minix is a Version 7 Unix-compatible operating system by Andrew
  5342.       Tanenbaum
  5343. Note:    the message contains the system call number (numbered as in V7
  5344.       Unix(tm)) and the call parameters
  5345. --------D-20---------------------------------
  5346. INT 20 - DOS 1+ - TERMINATE PROGRAM
  5347.     CS = PSP segment
  5348. Return: never
  5349. Note:    (see INT 21/AH=00h)
  5350. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  5351. --------G-20---------------------------------
  5352. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  5353.     ???
  5354. Return: ???
  5355. SeeAlso: INT 21"COMTROL"
  5356. --------G-21---------------------------------
  5357. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  5358.     ???
  5359. Return: AX = first segment available for control program use
  5360. SeeAlso: INT 20"COMTROL",INT 22"COMTROL"
  5361. --------D-2100-------------------------------
  5362. INT 21 - DOS 1+ - TERMINATE PROGRAM
  5363.     AH = 00h
  5364.     CS = PSP segment
  5365. Notes:    Microsoft recommends using INT 21/AH=4Ch for DOS 2+
  5366.     execution continues at the address stored in INT 22 after DOS performs
  5367.       whatever cleanup it needs to do
  5368.     if the PSP is its own parent, the process's memory is not freed; if
  5369.       INT 22 additionally points into the terminating program, the
  5370.       process is effectively NOT terminated
  5371.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5372. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  5373. --------D-2101-------------------------------
  5374. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  5375.     AH = 01h
  5376. Return: AL = character read
  5377. Notes:    ^C/^Break are checked, and INT 23 executed if read
  5378.     character is echoed to standard output
  5379.     standard input is always the keyboard and standard output the screen
  5380.       under DOS 1.x, but they may be redirected under DOS 2+
  5381. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  5382. --------D-2102-------------------------------
  5383. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  5384.     AH = 02h
  5385.     DL = character to write
  5386. Return: AL = last character output (despite the official docs which state
  5387.         nothing is returned) (at least DOS 3.3-5.0)
  5388. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  5389.     standard output is always the screen under DOS 1.x, but may be
  5390.       redirected under DOS 2+
  5391.     the last character output will be the character in DL unless DL=09h
  5392.       on entry, in which case AL=20h as tabs are expanded to blanks
  5393. SeeAlso: AH=06h,AH=09h
  5394. --------D-2103-------------------------------
  5395. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  5396.     AH = 03h
  5397. Return: AL = character read
  5398. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5399.     STDAUX is usually the first serial port
  5400. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  5401. --------D-2104-------------------------------
  5402. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  5403.     AH = 04h
  5404.     DL = character to write
  5405. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5406.     STDAUX is usually the first serial port
  5407.     if STDAUX is busy, this function will wait until it becomes free
  5408. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  5409. --------D-2105-------------------------------
  5410. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  5411.     AH = 05h
  5412.     DL = character to print
  5413. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5414.     STDPRN is usually the first parallel port, but may be redirected under
  5415.       DOS 2+
  5416.     if the printer is busy, this function will wait
  5417. SeeAlso: INT 17/AH=00h
  5418. --------D-2106-------------------------------
  5419. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  5420.     AH = 06h
  5421.     DL = character (except FFh)
  5422. Return: AL = character output (despite official docs which state nothing is
  5423.         returned) (at least DOS 3.3-5.0)
  5424. Notes:    does not check ^C/^Break
  5425.     writes to standard output, which is always the screen under DOS 1.x,
  5426.       but may be redirected under DOS 2+
  5427. SeeAlso: AH=02h,AH=09h
  5428. --------D-2106--DLFF-------------------------
  5429. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  5430.     AH = 06h
  5431.     DL = FFh
  5432. Return: ZF set if no character available
  5433.         AL = 00h
  5434.     ZF clear if character available
  5435.         AL = character read
  5436. Notes:    ^C/^Break are NOT checked
  5437.     if the returned character is 00h, the user pressed a key with an
  5438.       extended keycode, which will be returned by the next call of this
  5439.       function
  5440.     this function reads from standard input, which is always the keyboard
  5441.       under DOS 1.x, but may be redirected under DOS 2+
  5442.     although the return of AL=00h when no characters are available is not
  5443.       documented, some programs rely on this behavior
  5444. SeeAlso: AH=0Bh
  5445. --------D-2107-------------------------------
  5446. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  5447.     AH = 07h
  5448. Return: AL = character read from standard input
  5449. Notes:    does not check ^C/^Break
  5450.     standard input is always the keyboard under DOS 1.x, but may be
  5451.       redirected under DOS 2+
  5452.     if the interim console flag is set (see AX=6301h), partially-formed
  5453.       double-byte characters may be returned
  5454. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  5455. --------D-2108-------------------------------
  5456. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  5457.     AH = 08h
  5458. Return: AL = character read from standard input
  5459. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  5460.     standard input is always the keyboard under DOS 1.x, but may be
  5461.       redirected under DOS 2+
  5462.     if the interim console flag is set (see AX=6301h), partially-formed
  5463.       double-byte characters may be returned
  5464. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  5465. --------D-2109-------------------------------
  5466. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  5467.     AH = 09h
  5468.     DS:DX -> '$'-terminated string
  5469. Return: AL = 24h (the '$' terminating the string, despite official docs which
  5470.         state that nothing is returned) (at least DOS 3.3-5.0)
  5471. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  5472.     standard output is always the screen under DOS 1.x, but may be
  5473.       redirected under DOS 2+
  5474.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5475. SeeAlso: AH=02h,AH=06h"OUTPUT"
  5476. --------D-210A-------------------------------
  5477. INT 21 - DOS 1+ - BUFFERED INPUT
  5478.     AH = 0Ah
  5479.     DS:DX -> buffer (see below)
  5480. Return: buffer filled with user input
  5481. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  5482.     reads from standard input, which may be redirected under DOS 2+
  5483.     if the maximum buffer size (see below) is set to 00h, this call returns
  5484.       immediately without reading any input
  5485. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  5486.  
  5487. Format of input buffer:
  5488. Offset    Size    Description
  5489.  00h    BYTE    maximum characters buffer can hold
  5490.  01h    BYTE    (input) number of chars from last input which may be recalled
  5491.         (return) number of characters actually read, excluding CR
  5492.  02h  N BYTEs    actual characters read, including the final carriage return
  5493. --------K-210A00-----------------------------
  5494. INT 21 - WCED v1.6+ - INSTALLATION CHECK
  5495.     AX = 0A00h
  5496.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  5497. Return: buffer offset 02h-05h filled with "Wced" if installed
  5498. Program: WCED is a free command-line editor and history utility by Stuart
  5499.       Russell
  5500. SeeAlso: AH=FFh"CED"
  5501. --------D-210B-------------------------------
  5502. INT 21 - DOS 1+ - GET STDIN STATUS
  5503.     AH = 0Bh
  5504. Return: AL = 00h if no character available
  5505.        = FFh if character is available
  5506. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  5507.     standard input is always the keyboard under DOS 1.x, but may be
  5508.       redirected under DOS 2+
  5509.     if the interim console flag is set (see AX=6301h), this function
  5510.       returns AL=FFh if a partially-formed double-byte character is
  5511.       available
  5512. SeeAlso: AH=06h"INPUT",AX=4406h
  5513. --------v-210B56-----------------------------
  5514. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  5515.     AX = 0B56h
  5516. Return: AX = 4952h if resident
  5517. SeeAlso: AX=0D20h
  5518. --------D-210C-------------------------------
  5519. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  5520.     AH = 0Ch
  5521.     AL = STDIN input function to execute after flushing buffer
  5522.     other registers as appropriate for the input function
  5523. Return: as appropriate for the specified input function
  5524. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  5525.       no input is attempted
  5526. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  5527. --------D-210D-------------------------------
  5528. INT 21 - DOS 1+ - DISK RESET
  5529.     AH = 0Dh
  5530. Return: (DOS 6 only) CF clear (earlier versions preserve CF)
  5531. Notes:    This function writes all modified disk buffers to disk, but does not
  5532.       update the directory information (that is only done when files are
  5533.       closed or a SYNC call is issued)
  5534. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  5535. --------v-210D20-----------------------------
  5536. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  5537.     AX = 0D20h
  5538. Return: AX = 1971h if resident
  5539. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  5540. --------D-210E-------------------------------
  5541. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  5542.     AH = 0Eh
  5543.     DL = new default drive (00h = A:, 01h = B:, etc)
  5544. Return: AL = number of potentially valid drive letters
  5545. Notes:    under Novell NetWare, the return value is always 32, the number of
  5546.       drives that NetWare supports
  5547.     under DOS 3+, the return value is the greatest of 5, the value of
  5548.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  5549.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  5550.       may be accessed as either A: or B:
  5551.     otherwise, the return value is the highest drive actually present
  5552.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  5553.       and 3+ a maximum of 26 drives
  5554. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  5555. --------D-210F-------------------------------
  5556. INT 21 - DOS 1+ - OPEN FILE USING FCB
  5557.     AH = 0Fh
  5558.     DS:DX -> unopened File Control Block (see below)
  5559. Return: AL = status
  5560.         00h successful
  5561.         FFh file not found or access denied
  5562. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  5563.     an unopened FCB has the drive, filename, and extension fields filled
  5564.       in and all other bytes cleared
  5565.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5566.     DR-DOS checks password attached with AX=4303h
  5567. SeeAlso: AH=10h,AH=16h,AH=3Dh,4303h
  5568.  
  5569. Format of File Control Block:
  5570. Offset    Size    Description
  5571.  -7    BYTE    extended FCB if FFh
  5572.  -6   5 BYTEs    reserved
  5573.  -1    BYTE    file attribute if extended FCB
  5574.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  5575.  01h  8 BYTEs    blank-padded file name
  5576.  09h  3 BYTEs    blank-padded file extension
  5577.  0Ch    WORD    current block number
  5578.  0Eh    WORD    logical record size
  5579.  10h    DWORD    file size
  5580.  14h    WORD    date of last write (see AX=5700h)
  5581.  16h    WORD    time of last write (see AX=5700h) (DOS 1.1+)
  5582.  18h  8 BYTEs    reserved (see below)
  5583.  20h    BYTE    record within current block
  5584.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  5585.         byte is omitted)
  5586. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  5587.       offset -7, rather than the address of the drive number field
  5588.  
  5589. Format of reserved field for DOS 1.0:
  5590. Offset    Size    Description
  5591.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  5592.         ID)
  5593.  18h    WORD    number of first cluster in file
  5594.  1Ah    WORD    current absolute cluster number on disk
  5595.  1Ch    WORD    current relative cluster number within file
  5596.         (0 = first cluster of file, 1 = second cluster, etc.)
  5597.  1Eh    BYTE    dirty flag (00h = not dirty)
  5598.  1Fh    BYTE    unused
  5599.  
  5600. Format of reserved field for DOS 1.10-1.25:
  5601. Offset    Size    Description
  5602.  18h    BYTE    bit 7: set if logical device
  5603.         bit 6: not dirty
  5604.         bits 5-0: disk number or logical device ID
  5605.  19h    WORD    starting cluster number on disk
  5606.  1Bh    WORD    current absolute cluster number on disk
  5607.  1Dh    WORD    current relative cluster number within file
  5608.  1Fh    BYTE    unused
  5609.  
  5610. Format of reserved field for DOS 2.x:
  5611. Offset    Size    Description
  5612.  18h    BYTE    bit 7: set if logical device
  5613.         bit 6: set if open???
  5614.         bits 5-0: ???
  5615.  19h    WORD    starting cluster number on disk
  5616.  1Bh    WORD    ???
  5617.  1Dh    BYTE    ???
  5618.  1Eh    BYTE    ???
  5619.  1Fh    BYTE    ???
  5620.  
  5621. Format of reserved field for DOS 3.x:
  5622. Offset    Size    Description
  5623.  18h    BYTE    number of system file table entry for file
  5624.  19h    BYTE    attributes
  5625.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  5626.               01 = SHARE.EXE not loaded, character device
  5627.               10 = SHARE.EXE loaded, remote file
  5628.               11 = SHARE.EXE loaded, local file or device
  5629.         bits 5-0: low six bits of device attribute word
  5630. ---SHARE.EXE loaded, local file---
  5631.  1Ah    WORD    starting cluster of file on disk
  5632.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record (see AH=52h)
  5633.  1Eh    BYTE    file attribute
  5634.  1Fh    BYTE    ???
  5635. ---SHARE.EXE loaded, remote file---
  5636.  1Ah    WORD    number of sector containing directory entry
  5637.  1Ch    WORD    relative cluster within file of last cluster accessed
  5638.  1Eh    BYTE    absolute cluster number of last cluster accessed
  5639.  1Fh    BYTE    ???
  5640. ---SHARE.EXE not loaded---
  5641.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  5642.  1Bh    WORD    starting cluster of file
  5643.  1Dh    WORD    number of sector containing directory entry
  5644.  1Fh    BYTE    number of directory entry within sector
  5645. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  5646.       of the device driver header, then the BYTE at 1Ah is overwritten.
  5647.  
  5648. Format of reserved field for DOS 5.0:
  5649. Offset    Size    Description
  5650.  18h    BYTE    number of system file table entry for file
  5651.  19h    BYTE    attributes
  5652.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  5653.               01 = SHARE.EXE not loaded, character device
  5654.               10 = SHARE.EXE loaded, remote file
  5655.               11 = SHARE.EXE loaded, local file or device
  5656.         bits 5-0: low six bits of device attribute word
  5657. ---SHARE.EXE loaded, local file---
  5658.  1Ah    WORD    starting cluster of file on disk
  5659.  1Ch    WORD    unique sequence number of sharing record
  5660.  1Eh    BYTE    file attributes
  5661.  1Fh    BYTE    unused???
  5662. ---SHARE.EXE loaded, remote file---
  5663.  1Ah    WORD    network handle
  5664.  1Ch    DWORD    network ID
  5665. ---SHARE not loaded, local device---
  5666.  1Ah    DWORD    pointer to device driver header
  5667.  1Eh  2 BYTEs    unused???
  5668. ---SHARE not loaded, local file---
  5669.  1Ah    BYTE    extra info
  5670.         bit 7: read-only attribute from SFT
  5671.         bit 6: archive attribute from SFT
  5672.         bits 5-0: high bits of sector number
  5673.  1Bh    WORD    starting cluster of file
  5674.  1Dh    WORD    low word of sector number containing directory entry
  5675.  1Fh    BYTE    number of directory entry within sector
  5676. --------D-2110-------------------------------
  5677. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  5678.     AH = 10h
  5679.     DS:DX -> File Control Block (see AH=0Fh)
  5680. Return: AL = status
  5681.         00h successful
  5682.         FFh failed
  5683. Notes:    a successful close forces all disk buffers used by the file to be
  5684.       written and the directory entry to be updated
  5685.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5686. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  5687. --------D-2111-------------------------------
  5688. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  5689.     AH = 11h
  5690.     DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
  5691. Return: AL = status
  5692.         00h successful
  5693.         [DTA] unopened FCB for first matching file
  5694.         FFh no matching filename, or bad FCB
  5695. Notes:    the type of the returned FCB depends on whether the input FCB was a
  5696.       normal or an extended FCB
  5697.     the data returned in the DTA is actually the drive number (or extended
  5698.       FCB header and drive number) followed by the file's directory entry
  5699.       (see below); this format happens to be compatible with an unopened
  5700.       FCB
  5701.     for extended FCBs with search attribute 08h, the volume label (if any)
  5702.       will be returned even if the current directory is not the root dir.
  5703.     DOS 3+ also allows the '*' wildcard
  5704.     the search FCB must not be modified if AH=12h will be used to continue
  5705.       searching; DOS 3.3 has set the following parts of the FCB:
  5706.          0Ch    BYTE    ???
  5707.          0Dh    WORD    directory entry number of matching file
  5708.          0Fh    WORD    cluster number of current directory
  5709.          11h  4 BYTEs    ???
  5710.          15h    BYTE    drive number (1=A:)
  5711.     this function is used by many copy protection schemes to obtain the
  5712.       starting cluster of a file
  5713. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  5714.  
  5715. Format of directory entry:
  5716. Offset    Size    Description
  5717.  00h  8 BYTEs    blank-padded filename
  5718.  08h  3 BYTEs    blank-padded file extension
  5719.  0Bh    BYTE    attributes
  5720.  0Ch 10 BYTEs    reserved
  5721.         used by DR-DOS to store file password
  5722.  16h    WORD    time of creation or last update (see AX=5700h)
  5723.  18h    WORD    date of creation or last update (see AX=5700h)
  5724.  1Ah    WORD    starting cluster number
  5725.  1Ch    DWORD    file size
  5726. --------D-2112-------------------------------
  5727. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  5728.     AH = 12h
  5729.     DS:DX -> unopened FCB (see AH=0Fh)
  5730. Return: AL = status
  5731.         00h successful
  5732.         [DTA] = unopened FCB
  5733.         FFh no more matching filenames
  5734. Note:    (see AH=11h)
  5735.     assumes that successful FindFirst executed on search FCB before call
  5736. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  5737. --------D-2113-------------------------------
  5738. INT 21 - DOS 1+ - DELETE FILE USING FCB
  5739.     AH = 13h
  5740.     DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for
  5741.         deletion ('?' wildcards allowed)
  5742. Return: AL = status
  5743.         00h one or more files successfully deleted
  5744.         FFh no matching files or all were read-only or locked
  5745. Notes:    DOS 1.25+ deletes everything in the current directory (including
  5746.       subdirectories) and sets the first byte of the name to 00h (entry
  5747.       never used) instead of E5h if called on an extended FCB with
  5748.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  5749.       2 for DOS 1.x).  This may have originally been an optimization to
  5750.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  5751.       the directory search upon encountering a never-used entry), but can
  5752.       corrupt the filesystem under DOS 2+ because subdirectories are
  5753.       removed without deleting the files they contain.
  5754.     currently-open files should not be deleted
  5755.     MS-DOS allows deletion of read-only files with an extended FCB, whereas
  5756.       Novell NetWare does not
  5757. SeeAlso: AH=41h,INT 2F/AX=1113h
  5758. --------D-2114-------------------------------
  5759. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  5760.     AH = 14h
  5761.     DS:DX -> opened FCB (see AH=0Fh)
  5762. Return: AL = status
  5763.         00h successful
  5764.         01h end of file (no data)
  5765.         02h segment wrap in DTA
  5766.         03h end of file, partial record read
  5767.     [DTA] = record read from file
  5768. Notes:    reads a record of the size specified in the FCB beginning at the
  5769.       current file position, then updates the current block and current
  5770.       record fields in the FCB
  5771.     if a partial record was read, it is zero-padded to the full size
  5772.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5773. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  5774. --------D-2115-------------------------------
  5775. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  5776.     AH = 15h
  5777.     DS:DX -> opened FCB (see AH=0Fh)
  5778.     [DTA] = record to write
  5779. Return: AL = status
  5780.         00h successful
  5781.         01h disk full
  5782.         02h segment wrap in DTA
  5783. Notes:    writes a record of the size specified in the FCB beginning at the
  5784.       current file position, then updates the current block and current
  5785.       record fields in the FCB
  5786.     if less than a full sector is written, the data is placed in a DOS
  5787.       buffer to be written out at a later time
  5788.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5789. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  5790. --------D-2116-------------------------------
  5791. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  5792.     AH = 16h
  5793.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  5794. Return: AL = status
  5795.         00h successful
  5796.         FFh directory full or file exists and is read-only or locked
  5797. Notes:    if file already exists, it is truncated to zero length
  5798.     if an extended FCB is used, the file is given the attribute in the
  5799.       FCB; this is how to create a volume label in the disk's root dir
  5800.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5801. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  5802. --------D-2117-------------------------------
  5803. INT 21 - DOS 1+ - RENAME FILE USING FCB
  5804.     AH = 17h
  5805.     DS:DX -> modified FCB (see also AH=0Fh)
  5806.         the old filename ('?' wildcards OK) is in the standard location
  5807.         while the new filename ('?' wildcards OK) is stored in the 11
  5808.         bytes beginning at offset 11h
  5809. Return: AL = status
  5810.         00h successfully renamed
  5811.         FFh no matching files,file is read-only, or new name already exists
  5812. Notes:    subdirectories may be renamed using an extended FCB with the
  5813.       appropriate attribute, as may volume labels
  5814.     DR-DOS checks password attached with AX=4303h before permitting rename
  5815. SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h
  5816. --------D-2118-------------------------------
  5817. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  5818.     AH = 18h
  5819. Return: AL = 00h
  5820. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  5821.       which is meaningless under MS-DOS
  5822. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
  5823. --------D-2119-------------------------------
  5824. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  5825.     AH = 19h
  5826. Return: AL = drive (00h = A:, 01h = B:, etc)
  5827. Note:    Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
  5828.       from a particular location every time it starts a command to
  5829.       determine when to issue an automatic EOJ
  5830. SeeAlso: AH=0Eh,AH=47h,AH=BBh
  5831. --------D-211A-------------------------------
  5832. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  5833.     AH = 1Ah
  5834.     DS:DX -> Disk Transfer Area (DTA)
  5835. Notes:    the DTA is set to PSP:0080h when a program is started
  5836.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5837. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  5838. --------D-211B-------------------------------
  5839. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  5840.     AH = 1Bh
  5841. Return: AL = sectors per cluster (allocation unit)
  5842.     CX = bytes per sector
  5843.     DX = total number of clusters
  5844.     DS:BX -> media ID byte (see below)
  5845. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  5846.       versions return a pointer to a copy of the FAT's ID byte
  5847. SeeAlso: AH=1Ch,AH=36h
  5848.  
  5849. Values for media ID byte:
  5850.  FFh    floppy, double-sided, 8 sectors per track (320K)
  5851.  FEh    floppy, single-sided, 8 sectors per track (160K)
  5852.  FDh    floppy, double-sided, 9 sectors per track (360K)
  5853.  FCh    floppy, single-sided, 9 sectors per track (180K)
  5854.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  5855.  F8h    hard disk
  5856.  F0h    other
  5857. --------D-211C-------------------------------
  5858. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  5859.     AH = 1Ch
  5860.     DL = drive (00h = default, 01h = A:, etc)
  5861. Return: AL = sectors per cluster (allocation unit), or FFh if invalid drive
  5862.     CX = bytes per sector
  5863.     DX = total number of clusters
  5864.     DS:BX -> media ID byte (see AH=1Bh)
  5865. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  5866.       versions return a pointer to a copy of the FAT's ID byte
  5867.     on a DBLSPACE drive, the total number of clusters is based on the
  5868.       estimated compression ratio
  5869. SeeAlso: AH=1Bh,AH=36h
  5870. --------D-211D-------------------------------
  5871. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  5872.     AH = 1Dh
  5873. Return: AL = 00h
  5874. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  5875.       drives", which is meaningless under MS-DOS
  5876. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  5877. --------D-211E-------------------------------
  5878. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  5879.     AH = 1Eh
  5880. Return: AL = 00h
  5881. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  5882.      meaningless under MS-DOS 1.x
  5883. SeeAlso: AH=18h,AH=1Dh,AH=20h
  5884. --------D-211F-------------------------------
  5885. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  5886.     AH = 1Fh
  5887. Return: AL = status
  5888.         00h successful
  5889.         DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x,
  5890.             AH=32h for DOS 2+)
  5891.         FFh invalid drive
  5892. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  5893.       only the DOS 4+ version of the DPB has been documented
  5894. SeeAlso: AH=32h
  5895.  
  5896. Format of DOS 1.1 and MS-DOS 1.25 drive parameter block:
  5897. Offset    Size    Description
  5898.  00h    BYTE    sequential device ID
  5899.  01h    BYTE    logical drive number (0=A:)
  5900.  02h    WORD    bytes per sector
  5901.  04h    BYTE    highest sector number within a cluster
  5902.  05h    BYTE    shift count to convert clusters into sectors
  5903.  06h    WORD    starting sector number of first FAT
  5904.  08h    BYTE    number of copies of FAT
  5905.  09h    WORD    number of directory entries
  5906.  0Bh    WORD    number of first data sector
  5907.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  5908.  0Fh    BYTE    sectors per FAT
  5909.  10h    WORD    starting sector of directory
  5910.  12h    WORD    address of allocation table
  5911. Note:    the DOS 1.0 table is the same except that the first and last fields
  5912.       are missing; see INT 21/AH=32h for the DOS 2+ version
  5913. --------D-2120-------------------------------
  5914. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  5915.     AH = 20h
  5916. Return: AL = 00h
  5917. Note:    corresponds to the CP/M BDOS function "get/set default user
  5918.       (sublibrary) number", which is meaningless under MS-DOS
  5919. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  5920. --------D-2121-------------------------------
  5921. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  5922.     AH = 21h
  5923.     DS:DX -> opened FCB (see AH=0Fh)
  5924. Return: AL = status
  5925.         00h successful
  5926.         01h end of file, no data read
  5927.         02h segment wrap in DTA, no data read
  5928.         03h end of file, partial record read
  5929.     [DTA] = record read from file
  5930. Notes:    the record is read from the current file position as specified by the
  5931.       random record and record size fields of the FCB
  5932.     the file position is not updated after reading the record
  5933.     if a partial record is read, it is zero-padded to the full size
  5934.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5935. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  5936. --------D-2122-------------------------------
  5937. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  5938.     AH = 22h
  5939.     DS:DX -> opened FCB (see AH=0Fh)
  5940.     [DTA] = record to write
  5941. Return: AL = status
  5942.         00h successful
  5943.         01h disk full
  5944.         02h segment wrap in DTA
  5945. Notes:    the record is written to the current file position as specified by the
  5946.       random record and record size fields of the FCB
  5947.     the file position is not updated after writing the record
  5948.     if the record is located beyond the end of the file, the file is
  5949.       extended but the intervening data remains uninitialized
  5950.     if the record only partially fills a disk sector, it is copied to a
  5951.       DOS disk buffer to be written out to disk at a later time
  5952.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5953. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  5954. --------D-2123-------------------------------
  5955. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  5956.     AH = 23h
  5957.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  5958. Return: AL = status
  5959.         00h successful (matching file found)
  5960.         FCB random record field filled with size in records, rounded up
  5961.         to next full record
  5962.         FFh failed (no matching file found)
  5963. Notes:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5964.     MS-DOS returns nonsense if the FCB record number field is set to a very
  5965.       large positive number, and status FFh if negative; DR-DOS returns the
  5966.       correct file size in both cases
  5967. SeeAlso: AH=42h
  5968. --------D-2124-------------------------------
  5969. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  5970.     AH = 24h
  5971.     DS:DX -> opened FCB (see AH=0Fh)
  5972. Notes:    computes the random record number corresponding to the current record
  5973.       number and record size, then stores the result in the FCB
  5974.     normally used when switching from sequential to random access
  5975.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5976. SeeAlso: AH=21h,AH=27h,AH=42h
  5977. --------D-2125-------------------------------
  5978. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  5979.     AH = 25h
  5980.     AL = interrupt number
  5981.     DS:DX -> new interrupt handler
  5982. Notes:    this function is preferred over direct modification of the interrupt
  5983.       vector table
  5984.     some DOS extenders place an API on this function, as it is not
  5985.       directly meaningful in protected mode
  5986.     under DR-DOS 5.0+, this function does not use any of the DOS-internal
  5987.       stacks and may thus be called at any time
  5988.     Novell NetWare (except the new DOS Requester) monitors the offset of
  5989.       any INT 24 set, and if equal to the value at startup, substitutes
  5990.       its own handler to allow handling of network errors; this introduces
  5991.       the potential bug that any program whose INT 24 handler offset
  5992.       happens to be the same as COMMAND.COM's will not have its INT 24
  5993.       handler installed
  5994. SeeAlso: AX=2501h,AH=35h
  5995. --------E-212501-----------------------------
  5996. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
  5997.     AX = 2501h
  5998.     SS = application's original SS or DS (FlashTek X-32VM)
  5999. Return: CF clear if successful
  6000.     CF set on error
  6001.         caller is operating on X-32 stack (FlashTek X-32VM)
  6002. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  6003.       system calls.     Only available when directly using 386/DOS-Extender or
  6004.       a compatible DOS extender, or when using a product that was created
  6005.       using 386-DOS/Extender or a compatible
  6006.     this function is also supported by FlashTek X-32VM
  6007. SeeAlso: AH=30h"Phar Lap"
  6008. --------E-212502-----------------------------
  6009. INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  6010.     AX = 2502h
  6011.     CL = interrupt number
  6012. Return: CF clear
  6013.     ES:EBX = CS:EIP of protected-mode interrupt handler
  6014. Note:    this function is also supported by FlashTek X-32VM
  6015. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  6016. --------E-212503-----------------------------
  6017. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  6018.     AX = 2503h
  6019.     CL = interrupt number
  6020. Return: CF clear
  6021.     EBX = CS:IP of real-mode interrupt handler
  6022. Note:    this function is also supported by FlashTek X-32VM
  6023. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  6024. --------E-212504-----------------------------
  6025. INT 21 P - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  6026.     AX = 2504h
  6027.     CL = interrupt number
  6028.     DS:EDX = CS:EIP of protected-mode interrupt handler
  6029. Return: CF clear
  6030. Note:    this function is also supported by FlashTek X-32VM
  6031. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  6032. --------E-212505-----------------------------
  6033. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  6034.     AX = 2505h
  6035.     CL = interrupt number
  6036.     EBX = CS:IP of real-mode interrupt handler
  6037. Return: CF clear
  6038. Note:    this function is also supported by FlashTek X-32VM
  6039. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  6040. --------E-212506-----------------------------
  6041. INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. MODE
  6042.     AX = 2506h
  6043.     CL = interrupt number
  6044.     DS:EDX = CS:EIP of protected-mode interrupt handler
  6045. Return: CF clear
  6046. Notes:    this function modifies both the real-mode low-memory interrupt
  6047.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  6048.     interrupts occurring in real mode are resignaled in protected mode
  6049.     this function is also supported by FlashTek X-32VM
  6050. --------E-212507-----------------------------
  6051. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  6052.     AX = 2507h
  6053.     CL = interrupt number
  6054.     DS:EDX = CS:EIP of protected-mode interrupt handler
  6055.     EBX = CS:IP of real-mode interrupt handler
  6056. Return: CF clear
  6057. Notes:    interrupts are disabled until both vectors have been modified
  6058.     this function is also supported by FlashTek X-32VM
  6059. SeeAlso: AX=2504h,AX=2505h
  6060. --------E-212508-----------------------------
  6061. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  6062.     AX = 2508h
  6063.     BX = segment selector
  6064. Return: CF clear if successful
  6065.         ECX = linear base address of segment
  6066.     CF set if invalid segment selector
  6067. Note:    this function is also supported by FlashTek X-32VM
  6068. SeeAlso: AX=2509h
  6069. --------E-212509-----------------------------
  6070. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  6071.     AX = 2509h
  6072.     EBX = linear address to convert
  6073. Return: CF clear if successful
  6074.         ECX = physical address (carry flag clear)
  6075.     CF set if linear address not mapped in page tables
  6076. SeeAlso: AX=2508h
  6077. --------E-212509-----------------------------
  6078. INT 21 P - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  6079.     AX = 2509h
  6080. Return: CF clear
  6081.     EAX high word = default DS
  6082.     AX = alias for 16-bit data segment
  6083.     BX = real mode code segment
  6084.     EDX high word = selector covering full 4GB address space
  6085.     DX = default SS
  6086.     ESI high word = PSP selector
  6087.     SI = environment selector
  6088. --------E-21250A-----------------------------
  6089. INT 21 P - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  6090.     AX = 250Ah
  6091.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  6092.          to modify
  6093.     EBX = physical base address of memory to map (multiple of 4K)
  6094.     ECX = number of physical 4K pages to map
  6095. Return: CF clear if successful
  6096.         EAX = 32-bit offset in segment of mapped memory
  6097.     CF set on error
  6098.         EAX = error code
  6099.         08h insufficient memory to create page tables
  6100.         09h invalid segment selector
  6101. SeeAlso: INT 31/AX=0800h
  6102. --------E-21250C-----------------------------
  6103. INT 21 P - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  6104.     AX = 250Ch
  6105. Return: CF clear
  6106.     AL = base interrupt vector for IRQ0-IRQ7
  6107.     AH = base interrupt vector for IRQ8-IRQ15
  6108.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  6109. Note:    this function is also supported by FlashTek X-32VM
  6110. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  6111. --------E-21250D-----------------------------
  6112. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  6113.     AX = 250Dh
  6114. Return: CF clear
  6115.     EAX = CS:IP of real-mode callback procedure that will call through
  6116.         from real mode to a protected-mode routine
  6117.     EBX = 32-bit real-mode address of intermode call data buffer
  6118.     ECX = size in bytes of intermode call data buffer
  6119.     ES:EDX = protected-mode address of intermode call data buffer
  6120. Notes:    this function is also supported by FlashTek X-32VM
  6121.     X-32VM guarantees the intermode buffer to be at least 4 KB
  6122. SeeAlso: AX=250Eh
  6123.  
  6124. Call real-mode callback with:
  6125.     STACK:    DWORD    offset to protected-mode code
  6126.         WORD    placeholder for protected-mode CS
  6127.         DWORD    pointer to selector structure (see below)
  6128.             or 0000h:0000h for defaults
  6129.         var    parameters for protected-mode procedure
  6130. Return: via FAR return
  6131.  
  6132. Format of selector structure:
  6133. Offset    Size    Description
  6134.  00h    WORD    protected-mode GS selector
  6135.  02h    WORD    protected-mode FS selector
  6136.  04h    WORD    protected-mode ES selector
  6137.  06h    WORD    protected-mode DS selector
  6138. --------E-21250E-----------------------------
  6139. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  6140.     AX = 250Eh
  6141.     EBX = CS:IP of real-mode procedure to call
  6142.     ECX = number of two-byte words to copy from protected-mode stack
  6143.           to real-mode stack
  6144. Return: CF clear if successful
  6145.         all segment registers unchanged
  6146.         all general registers contain values set by real-mode procedure
  6147.         all other flags set as they were left by real-mode procedure
  6148.         stack unchanged
  6149.     CF set on error
  6150.         EAX = error code
  6151.         01h not enough real-mode stack space
  6152. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  6153.       call will fail if ECX > 0000003Fh
  6154. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  6155. --------E-21250F-----------------------------
  6156. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  6157.     AX = 250Fh
  6158.     ES:EBX = 48-bit protected-mode address to convert
  6159.     ECX = 00000000h or length of data in bytes
  6160. Return: CF clear if successful (address < 1MB and contiguous)
  6161.         ECX = 32-bit real-mode MS-DOS address
  6162.     CF set on error (address >= 1MB or not contiguous)
  6163.         ECX = linear address
  6164. Note:    this function is also supported by FlashTek X-32VM
  6165. SeeAlso: AX=2510h
  6166. --------E-212510-----------------------------
  6167. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  6168.     AX = 2510h
  6169.     EBX = CS:IP of real-mode procedure to call
  6170.     ECX = number of two-byte words to copy to protected-mode stack to
  6171.           real-mode stack
  6172.     DS:EDX -> pointer to parameter block (see below)
  6173. Return: CF clear if successful
  6174.         all segment registers unchanged,
  6175.         EDX unchanged
  6176.         all other general registers contain values set by real-mode proc
  6177.         all other flags are set as they were left by real-mode procedure
  6178.         real-mode register values are returned in the parameter block
  6179.     CF set on error
  6180.         EAX = error code
  6181.         01h not enough real-mode stack space
  6182. Note:    unlike most of the preceding 25xxh functions, this one is not
  6183.       supported by FlashTek X-32VM
  6184. SeeAlso: AX=250Eh,AX=250Fh
  6185.  
  6186. Format of parameter block:
  6187. Offset    Size    Description
  6188.  00h    WORD    real-mode DS value
  6189.  02h    WORD    real-mode ES value
  6190.  04h    WORD    real-mode FS value
  6191.  06h    WORD    real-mode GS value
  6192.  08h    DWORD    real-mode EAX value
  6193.  0Ch    DWORD    real-mode EBX value
  6194.  10h    DWORD    real-mode ECX value
  6195.  14h    DWORD    real-mode EDX value
  6196. --------E-212511-----------------------------
  6197. INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  6198.     AX = 2511h
  6199.     DS:EDX -> parameter block (see below)
  6200. Return: all segment registers unchanged
  6201.     EDX unchanged
  6202.     all other registers contain values set by the real-mode int handler
  6203.     the flags are set as they were left by the real-mode interrupt handler
  6204.     real-mode register values are returned in the parameter block
  6205. Note:    this function is also supported by FlashTek X-32VM
  6206. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  6207.  
  6208. Format of parameter block:
  6209. Offset    Size    Description
  6210.  00h    WORD    interrupt number
  6211.  02h    WORD    real-mode DS value
  6212.  04h    WORD    real-mode ES value
  6213.  06h    WORD    real-mode FS value
  6214.  08h    WORD    real-mode GS value
  6215.  0Ah    DWORD    real-mode EAX value
  6216.  0Eh    DWORD    real-mode EDX value
  6217. Note: all other real-mode values set from protected-mode registers
  6218. --------E-212512-----------------------------
  6219. INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  6220.     AX = 2512h
  6221.     DS:EDX -> pointer to ASCIZ program name
  6222.     ES:EBX -> pointer to parameter block (see below)
  6223.     ECX = size in bytes of LDT buffer
  6224. Return: CF clear if successful
  6225.         EAX = number of segment descriptors in LDT
  6226.     CF set on error
  6227.         EAX = error code
  6228.         02h file not found or path invalid
  6229.         05h access denied
  6230.         08h insufficient memory
  6231.         0Ah environment invalid
  6232.         0Bh invalid file format
  6233.         80h LDT too small
  6234. SeeAlso: AX=2517h
  6235.  
  6236. Format of parameter block:
  6237. Offset    Size    Description
  6238. Input:
  6239.  00h    DWORD    32-bit offset of environment string
  6240.  04h    WORD    segment of environment string
  6241.  06h    DWORD    32-bit offset of command-tail string
  6242.  0Ah    WORD    segment of command-tail string
  6243.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  6244.  10h    WORD    segment of LDT buffer
  6245. Output:
  6246.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  6247.  14h    WORD    real/protected mode flag
  6248.         0000h  real mode
  6249.         0001h  protected mode
  6250.  16h    DWORD    initial EIP value
  6251.  1Ah    WORD    initial CS value
  6252.  1Ch    DWORD    initial ESP value
  6253.  20h    WORD    initial SS value
  6254.  22h    WORD    initial DS value
  6255.  24h    WORD    initial ES value
  6256.  26h    WORD    initial FS value
  6257.  28h    WORD    initial GS value
  6258. --------E-212513-----------------------------
  6259. INT 21 P - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  6260.     AX = 2513h
  6261.     BX = segment selector of descriptor in GDT or LDT
  6262.     CL = access-rights byte for alias descriptor
  6263.     CH = use-type bit (USE16 or USE32) for alias descriptor
  6264. Return: CF clear if successful
  6265.         AX = segment selector for created alias
  6266.     CF set on error
  6267.         EAX = error code
  6268.         08h insufficient memory (can't grow LDT)
  6269.         09h invalid segment selector in BX
  6270. --------E-212514-----------------------------
  6271. INT 21 P - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  6272.     AX = 2514h
  6273.     BX = segment selector of descriptor in GDT or LDT
  6274.     CL = new access-rights byte
  6275.     CH = new use-type bit (USE16 or USE32)
  6276. Return: CF clear if successful
  6277.     CF set on error
  6278.         EAX = error code
  6279.         09h invalid selector in BX
  6280. SeeAlso: AX=2515h,INT 31/AX=0009h
  6281. --------E-212515-----------------------------
  6282. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  6283.     AX = 2515h
  6284.     BX = segment selector of descriptor in GDT or LDT
  6285. Return: CF clear if successful
  6286.         CL = access-rights byte for segment
  6287.         CH = use-type bit (USE16 or USE32)
  6288.     ECX<16-31> destroyed
  6289.     CF set on error
  6290.         EAX = error code
  6291.         09h invalid segment selector in BX
  6292. SeeAlso: AX=2514h
  6293. --------E-212516-----------------------------
  6294. INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT
  6295.     AX = 2516h
  6296. Return: CF clear
  6297. Note:    this function must be called from Ring 0 or the CS descriptor is freed
  6298. --------E-212517-----------------------------
  6299. INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER
  6300.     AX = 2517h
  6301. Return: CF clear
  6302.     ES:EBX -> data buffer (protected mode address)
  6303.     ECX -> data buffer (real mode address)
  6304.     EDX = size of data buffer in bytes
  6305. Note:    the data buffer's address changes after calls to AX=2512h and AX=252Ah
  6306. SeeAlso: AX=2512h,AX=252Ah,AX=2530h
  6307. --------E-212518-----------------------------
  6308. INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS
  6309.     AX = 2518h
  6310.     ES:EBX -> function to call when a segment is moved
  6311. Return: CF clear
  6312.     ES:EBX -> previous handler
  6313. --------E-212519-----------------------------
  6314. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  6315.     AX = 2519h
  6316. Return: CF clear
  6317.     EAX = error code
  6318.         0000h  no error
  6319.         0001h  out of physical memory
  6320.         0002h  out of swap space (unable to grow swap file)
  6321.         0003h  out of LDT entries and unable to grow LDT
  6322.         0004h  unable to change extended memory allocation mark
  6323.         FFFFFFFFh    paging disabled
  6324. Note:    VMM is the Virtual Memory Manager option
  6325. --------E-21251A-----------------------------
  6326. INT 21 P - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  6327.     AX = 251Ah
  6328.     EDX = number of 4k pages to lock
  6329.     if BL = 00h
  6330.         ECX = linear address of first page to lock
  6331.     if BL = 01h
  6332.         ES:ECX -> pointer to first page to lock
  6333. Return: CF clear if successful
  6334.     CF set on error
  6335.         EAX = error code
  6336.         08h insufficient memory
  6337.         09h invalid address range
  6338. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  6339. --------E-21251B-----------------------------
  6340. INT 21 P - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  6341.     AX = 251Bh
  6342.     EDX = number of pages to unlock
  6343.     if BL = 00h
  6344.         ECX = linear address of first page to unlock
  6345.     if BL = 01h
  6346.         ES:ECX -> pointer to first page to unlock
  6347. Return: CF clear if successful
  6348.     CF set on error
  6349.         EAX = error code
  6350.         09h invalid address range
  6351. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  6352. --------E-21251C-----------------------------
  6353. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES
  6354.     AX = 251Ch
  6355.     BH = preservation flag (00h preserve contents, 01h discard contents)
  6356.     EDX = number of pages to free
  6357.     BL = address type
  6358.         00h linear address
  6359.         ECX = linear address of first page to be freed
  6360.         01h pointer
  6361.         ES:ECX -> first page to be freed
  6362. Return: CF clear if successful
  6363.     CF set on error
  6364.         EAX = error code
  6365.         08h memory error, swap space full, no VMM or DPMI
  6366.         09h invalid address
  6367. --------E-21251D-----------------------------
  6368. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY
  6369.     AX = 251Dh
  6370.     BL = address type
  6371.         00h linear address
  6372.         ECX = linear address of page table entry to read
  6373.         01h pointer
  6374.         ES:ECX -> page table entry to read
  6375. Return: CF clear if successful
  6376.         EAX = contents of page table entry
  6377.     CF set on error
  6378.         EAX = error code
  6379.         09h invalid address or NOPAGE option set
  6380.         78h invalid under DPMI
  6381. Note:    this function is obsolete; use AX=252Bh/BH=09h instead
  6382. SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h
  6383. --------E-21251E-----------------------------
  6384. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY
  6385.     AX = 251Eh
  6386.     BL = address type
  6387.         00h linear address
  6388.         ECX = linear address of page table entry to read
  6389.         01h pointer
  6390.         ES:ECX -> page table entry to read
  6391.     EDX = new value for page table entry
  6392. Return: CF clear if successful
  6393.     CF set on error
  6394.         EAX = error code
  6395.         09h invalid address or NOPAGE option set
  6396.         82h not compatible with DPMI
  6397. Note:    this call is obsolete; use AX=252Bh/BH=0Ah instead
  6398. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h
  6399. --------E-21251F-----------------------------
  6400. INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  6401.     AX = 251Fh
  6402.     BL = address type
  6403.         00h linear address
  6404.         ECX = linear address of first page table entry
  6405.         EDX = linear address of second page table entry
  6406.         01h pointer
  6407.         ES:ECX -> first page table entry
  6408.         ES:EDX -> second page table entry
  6409. Return: CF clear if successful
  6410.     CF set on error
  6411.         EAX = error code
  6412.         09h invalid address or NOPAGE option set
  6413.         82h not compatible with DPMI
  6414. SeeAlso: AX=251Dh,AX=251Eh
  6415. --------E-212520-----------------------------
  6416. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  6417.     AX = 2520h
  6418.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  6419.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  6420. Return: carry flag clear
  6421.  
  6422. Format of VM stats buffer:
  6423. Offset    Size    Description
  6424.  00h    DWORD    VM status
  6425.         0001h VM subsystem is present
  6426.         0000h VM not present
  6427.  04h    DWORD    "nconvpg" number of conventional memory pages available
  6428.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  6429.  0Ch    DWORD    "nextpg" total number of extended memory pages
  6430.  10h    DWORD    "extlim" extender memory pages limit
  6431.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  6432.  18h    DWORD    "alockpg" number of locked pages owned by application
  6433.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  6434.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  6435.  24h    DWORD    linear address of beginning of application address space
  6436.  28h    DWORD    linear address of end of application address space
  6437.  2Ch    DWORD    number of seconds since last time VM stats were reset
  6438.  30h    DWORD    number of page faults since last time
  6439.  34h    DWORD    number of pages written to swap file since last time
  6440.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  6441.  3Ch    DWORD    number of virtual pages allocated to the application
  6442.  40h    DWORD    size in pages of swap file
  6443.  44h    DWORD    number of system pages allocated with EMS calls
  6444.  48h    DWORD    minimum number of conventional memory pages
  6445.  4Ch    DWORD    maximum size in pages to which swap file can be increased
  6446.  50h    DWORD    "vmflags"
  6447.         bit 0 = 1 if page fault in progress
  6448. ---v4.0+ ---
  6449.  54h    DWORD    number of physical pages guaranteed to be free
  6450.  58h    DWORD    number of free physical pages currently available
  6451.  5Ch    DWORD    size in pages of largest free block of memory (including disk
  6452.           swap space)
  6453.  60h    DWORD    reserved
  6454. --------E-212521-----------------------------
  6455. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM USAGE
  6456.     AX = 2521h
  6457.     EBX = max 4k pages of physical extended memory which program may use
  6458. Return: CF clear if successful
  6459.        EBX = maximum limit in pages
  6460.        ECX = minimum limit in pages
  6461.     CF set on error
  6462.         EAX = error code
  6463.         08h insufficient memory or -nopage switch used
  6464. SeeAlso: AX=2522h
  6465. --------E-212522-----------------------------
  6466. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
  6467.     AX = 2522h
  6468.     ES:EBX -> alternate handler for page faults
  6469. Return: CF clear
  6470.     ES:EBX -> previous page-fault handler
  6471. SeeAlso: AX=2523h
  6472. --------E-212523-----------------------------
  6473. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  6474.     AX = 2523h
  6475.     ???
  6476. Return: ???
  6477. Note:    this function takes a DWORD pointer and a DWORD pointer to a DWORD
  6478.       pointer as arguments
  6479. SeeAlso: AX=2522h
  6480. --------E-212524-----------------------------
  6481. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS
  6482.     AX = 2524h
  6483.     ???
  6484. Return: ???
  6485. Note:    this function takes three DWORD pointers and three DWORD pointers to
  6486.       DWORD pointers as arguments
  6487. --------E-212525-----------------------------
  6488. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L MEM USAGE
  6489.     AX = 2525h
  6490.     EBX = limit in 4k pages of physical conventional memory which program
  6491.           may use
  6492. Return: CF clear if successful
  6493.         EBX = maximum limit in pages
  6494.         ECX = minimum limit in pages
  6495.     CF set on error
  6496.         EAX = error code
  6497.         08h insufficient memory or -nopage switch used
  6498. SeeAlso: AX=2521h
  6499. --------E-212526-----------------------------
  6500. INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  6501.     AX = 2526h
  6502.     ???
  6503. Return: ???
  6504. Notes:    details are not yet available
  6505.     this function takes a pointer to the configuration buffer (see below)
  6506.       and a poitner to a BYTE as arguments
  6507.  
  6508. Format of configuration buffer:
  6509. Offset    Size    Description
  6510.  00h    DWORD    flags 1 (see below)
  6511.  04h    DWORD    flags 2 (unused through v5.0)
  6512.  08h    DWORD    flags 3 (unused through v5.0)
  6513.  0Ch    DWORD    386|DOS-Extender major version
  6514.  10h    DWORD    386|DOS-Extender minor version
  6515.  14h    DWORD    first letter of text after minor version number in version str
  6516.  18h    DWORD    beta flag (00h normal release, 01h beta release)
  6517.  1Ch    DWORD    processor (3 = 386, 4 = 486)
  6518.  20h    DWORD    coprocessor (4 = none, 6 = 287, 7 = 387/486)
  6519.  24h    DWORD    Weitek coprocessor flag (0 = none, 1 = present)
  6520.  28h    DWORD    machine type (0 = IBM PC compatible, 1 = NEC 9800 series)
  6521.  2Ch    DWORD    machine class
  6522.         IBM: bus type (0=ISA, 1=MCA, 2=XT, 3=EISA)
  6523.         NEC: 0=normal mode, 1=high-res mode
  6524.  30h    DWORD    VCPI flag (0 = none, 1 = present)
  6525.  34h    DWORD    -WEITEK/-1167 switch (0 = AUTO, 1 = ON, 2 = OFF)
  6526.  38h    DWORD    -MINREAL setting
  6527.  3Ch    DWORD    -MAXREAL setting
  6528.  40h    DWORD    -MINIBUF setting
  6529.  44h    DWORD    -MAXIBUF setting
  6530.  48h    DWORD    size in bytes of DOS call data buffer
  6531.  4Ch    DWORD    number of interrupt stacks (-NISTACK)
  6532.  50h    DWORD    interrupt stack size (-ISTKSIZE)
  6533.  54h    DWORD    -REALBREAK setting
  6534.  58h    DWORD    -CALLBUFS
  6535.  5Ch    DWORD    -HWIVEC
  6536.  60h    DWORD    -PRIVEC
  6537.  64h    DWORD    -INTMAP
  6538.  68h    DWORD    -PRIMAP
  6539.  6Ch    DWORD    VCPI: master 8259 interrupt vector base (IRQ0 mapping)
  6540.  70h    DWORD    VCPI: slave 8259 interrupt vector base (IRQ8 mapping)
  6541.  74h    DWORD    BIOS print screen interrupt vector (0 if NEC)
  6542.  78h    DWORD    -EXTLOW setting
  6543.  7Ch    DWORD    -EXTHIGH setting
  6544.  80h    DWORD    lowest physical extended-memory address allocatable
  6545.  84h    DWORD    highest physical extended-memory address allocatable + 1
  6546.  88h    DWORD    special memory's physical base address (00000000h if none)
  6547.  8Ch    DWORD    special memory size in bytes (00000000h if none)
  6548.  90h    DWORD    -MAXVCPIMEM setting
  6549.  94h    DWORD    -VSCAN
  6550.  98h    DWORD    -SWAPCHK (0 = OFF, 1 = ON, 2 = FORCE, 3 = MAX)
  6551.  9Ch    DWORD    -CODESIZE setting
  6552.  A0h    DWORD    minimum swap file size (-MINSWFSIZE)
  6553.  A4h    DWORD    maximum swap fiel size (-MAXSWFSIZE)
  6554.  A8h    DWORD    page replacement policy (0 = LFU, 1 = NUR)
  6555.  ACh    DWORD    number of GDT entries (-NGDTENT)
  6556.  B0h    DWORD    number of LDT entries (-NLDTENT)
  6557.  B4h    DWORD    program's privilege level (0-3)
  6558. ---386|DOS-Extender v3.0+ ---
  6559.  B8h    DWORD    -LOCKSTACK setting
  6560.  BCh    DWORD    -MAXEXTMEM
  6561.  C0h    DWORD    -MAXXMSMEM
  6562.  C4h    DWORD    -MAXPGMMEM
  6563.  C8h    DWORD    -DATATHRESHOLD
  6564.  CCh    DWORD    virtual memory manager flag (0 = not present, 1 = present)
  6565.  D0h    DWORD    Cyrix coprocessor flag (0 = no Cyrix EMC387, 1 = present)
  6566.  D4h    DWORD    -CYRIX setting (0 = AUTO, 1 = ON, 2 = OFF)
  6567.  D8h    DWORD    DPMI flag (0 = not present, 1 = present)
  6568.  DCh    DWORD    DPMI major version
  6569.  E0h    DWORD    DPMI minor version
  6570.  E4h    DWORD    DPMI capabilities flags
  6571.         bit 0: paging supported
  6572.         bit 1: physical device mapping
  6573.         bit 2: conventional memory mapping
  6574.         bit 3: exceptions restartable
  6575.  E8h    DWORD    VCPI major version
  6576.  ECh    DWORD    VCPI minor version
  6577.  F0h    WORD    VCPI: IRQ0-7 physical base interrupt vector
  6578.  F2h    WORD    VCPI: IRQ8-15 physical base interrupt vector
  6579.  F4h    DWORD    XMS flag (0 = none, 1 = present)
  6580.  F8h    DWORD    XMS major version
  6581.  FCh    DWORD    XMS minor version
  6582. 100h    WORD    application's CS selector
  6583. 102h    WORD    application's DS selector
  6584. 104h    WORD    application's PSP selector
  6585. 106h    WORD    application's environment selector
  6586. 108h    WORD    selector mapping entire first megabyte
  6587. 10Ah    WORD    selector mapping text video memory
  6588. 10Ch    WORD    selector mapping video memory (text for IBM, graphics for NEC)
  6589. 10Eh    WORD    selector mapping Weitek address space, 0000h if not present
  6590. 110h    WORD    selector mapping Cyrix EMC387 address space, 0000h if none
  6591. 112h    WORD    reserved (0)
  6592. 114h    DWORD    real-mode FAR entry point to call to switch to protected mode
  6593.           with no saved context
  6594. 118h    DWORD    size of LDT in bytes
  6595. ---386|DOS-Extender v5.0+ ---
  6596. 11Ch    DWORD    Windows flag (0 = not present, 1 = Windows present)
  6597. 120h    DWORD    Windows major version
  6598. 124h    DWORD    Windows minor version
  6599. 128h    DWORD    Windows mode (0 = real/standard, 1 = enhanced)
  6600. 12Ch    DWORD    OS/2 flag (0 = not present, 1 = OS/2 present)
  6601. 130h    DWORD    OS/2 major version
  6602. 134h    DWORD    OS/2 minor version
  6603. 138h 50 DWORDs    reserved (0)
  6604.  
  6605. Bitfields for flags 1:
  6606.  bit 0    -NOPAGE specified
  6607.  bit 1    -A20 specified
  6608.  bit 2    -VDISK specified
  6609.  bit 3    -XT specified
  6610.  bit 4    -AT specified
  6611.  bit 5    -MCA specified
  6612.  bit 6    -EISA specified
  6613.  bit 7    -NORMRES specified (NEC only)
  6614.  bit 8    -HIGHRES specified (NEC only)
  6615.  bit 9    set if -SWFGROW1ST, clear if -NOSWFGROW1ST
  6616.  bit 10    -NOVM specified
  6617.  bit 11    -SAVEREGS specified
  6618.  bit 12    unused (clear)
  6619.  bit 13    -NOVCPI specified
  6620.  bit 14    -NOMUL specified
  6621.  bit 15    -NOBMCHK specified
  6622.  bit 16    -NOSPCLMEM or -NOBIM
  6623.  bit 17    -NOPGEXP specified
  6624.  bit 18    -SWAPDEFDISK specified
  6625. ---v3.0+ ---
  6626.  bit 19    -SAVEINTS specified
  6627.  bit 20    -NOLOAD specified
  6628.  bit 21    -PAGELOG specified
  6629.  bit 22    -OPENDENY specified
  6630.  bit 23    -ERRATA17 specified
  6631. ---v4.1+ ---
  6632.  bit 24    -NESTDPMI specified
  6633.  bit 25    -NONESTDPMI specified
  6634.  bit 26    -NODPMI specified
  6635.  bit 27    -NOPCDWEITEK specified
  6636. ---v4.2+ ---
  6637.  bit 28    -WININT21 specified
  6638. --------E-212527-----------------------------
  6639. INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS
  6640.     AX = 2527h
  6641.     EBX = new status (00h disabled, 01h enabled)
  6642. Return: CF clear
  6643.     EBX = previous state save flag
  6644. SeeAlso: AX=2528h
  6645. --------E-212528-----------------------------
  6646. INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT
  6647.     AX = 2528h
  6648.     DS:EBX -> buffer for registers (see below)
  6649. Return: CF clear if successful
  6650.         DS:EBX buffer filled
  6651.     CF set on error
  6652.         EAX = error code
  6653.         83h interrupt state save not enabled
  6654.         84h no active interrupt
  6655. SeeAlso: AX=2527h
  6656.  
  6657. Format of buffer for registers:
  6658. Offset    Size    Description
  6659.  00h  8 BYTEs    unused
  6660.  08h  4    DWORDs    EAX,EBX,ECX,EDX
  6661.  18h  4 DWORDs    ESI,EDI,EBP,ESP
  6662.  28h  6 WORDs    CS,DS,SS,ES,FS,GS
  6663.  34h    DWORD    EIP
  6664.  38h    DWORD    EFLAGS
  6665. --------E-212529-----------------------------
  6666. INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE
  6667.     AX = 2529h
  6668.     ???
  6669. Return: ES:EBX -> parameter block
  6670.     ???
  6671. Note:    details not available at this time
  6672. SeeAlso: AX=252Ah
  6673.  
  6674. Format of parameter block:
  6675. Offset    Size    Description
  6676.  00h    DWORD    initial EIP
  6677.  04h    WORD    initial CS
  6678.  06h    DWORD    initial ESP
  6679.  0Ah    WORD    initial SS
  6680.  0Ch  4 WORDs    initial DS, ES, FS, GS
  6681.  14h    DWORD    minimum size in bytes of program segment
  6682.  18h    DWORD    bytes of additional memory allocated
  6683.  1Ch    DWORD    flags
  6684.         bit 0: child linked with -UNPRIVILEGED
  6685.         ---v6.0+ ---
  6686.         bit 1: child is PE file instead of .EXP
  6687.         bit 2: loaded file is a DLL
  6688.         bits 3-31 reserved
  6689. ---v6.0+ ---
  6690.  20h    DWORD    module handles (PE files only)
  6691.  24h  7 DWORDs    reserved (0)
  6692. --------E-21252A-----------------------------
  6693. INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG
  6694.     AX = 252Ah
  6695.     DS:EDX -> ASCIZ program name
  6696.     ES:EBX -> parameter block (see AX=2512h)
  6697.     ECX = size of LDT buffer in bytes
  6698.     ESI = bit flags
  6699.         bit 0: allow demand paging rather than loading entire program
  6700.         bit 1: demand page from swap file rather than from .EXP
  6701. Return: CF clear if successful
  6702.         EAX = VMM handle or FFFFFFFFh if none
  6703.         ECX = number of descriptors in LDT buffer
  6704.     CF set on error
  6705.         EAX = error code
  6706.         02h file error
  6707.             EBX = file error code (see below)
  6708.             ECX = DOS error code if EBX=1,2,3, or 8
  6709.         08h insufficient memory
  6710.             EBX = memory error code (see below)
  6711.         80h LDT buffer too small
  6712.         87h called twice without intervening call to AX=2531h
  6713. SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h
  6714.  
  6715. Values for file error code:
  6716.  01h    DOS open error
  6717.  02h    DOS seek error
  6718.  03h    DOS read error
  6719.  04h    not an .EXP or .REX file
  6720.  05h    invalid file format
  6721.  06h    -OFFSET is not a multiple of 64K
  6722.  07h    -NOPAGE incompatible with -REALBREAK/-OFFSET
  6723.  08h    DOS error loading .EXE file
  6724.  
  6725. Values for memory error code:
  6726.  01h    out of physical memory
  6727.  02h    out of swap space
  6728.  04h    unable to change extended memory allocation
  6729.  05h    -MAXPGMMEM exceeded
  6730.  06h    insufficient low memory to REALBREAK value
  6731.  07h    insufficient low memory for PSP and environment
  6732. --------E-21252BBL00-------------------------
  6733. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE UNMAPPED PAGES
  6734.     AX = 252Bh
  6735.     BL = 00h
  6736.     ???
  6737. Return: ???
  6738. --------E-21252BBL01-------------------------
  6739. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE ALLOCATED PAGES
  6740.     AX = 252Bh
  6741.     BL = 01h
  6742.     ???
  6743. Return: ???
  6744. --------E-21252BBL02-------------------------
  6745. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE PHYSICAL DEVICE PAGES
  6746.     AX = 252Bh
  6747.     BL = 02h
  6748.     ???
  6749. Return: ???
  6750. --------E-21252BBL03-------------------------
  6751. INT 21 Pu - Phar Lap 386/DOS-Extender - MAP DATA FILE
  6752.     AX = 252Bh
  6753.     BL = 03h
  6754.     ???
  6755. Return: ???
  6756. SeeAlso: AX=252Bh/BL=0Bh
  6757. --------E-21252BBL04-------------------------
  6758. INT 21 Pu - Phar Lap 386/DOS-Extender - GET PAGE TYPES
  6759.     AX = 252Bh
  6760.     BL = 04h
  6761.     ???
  6762. Return: ???
  6763. Note:    returns one word per page
  6764.  
  6765. Bitfields for page information:
  6766.  bits 3-0    page type
  6767.     0 unmapped
  6768.     1 allocated
  6769.     2 physical device page
  6770.  bit 4    locked
  6771.  bit 5    swapped to disk
  6772.  bit 6    mapped to read-only data file
  6773.  bit 7    mapped to read/write data file
  6774. --------E-21252B-----------------------------
  6775. INT 21 P - Phar Lap 386/DOS-Extender - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  6776.     AX = 252Bh
  6777.     BH = function
  6778.         05h lock pages
  6779.         06h unlock pages
  6780.     BL = address type
  6781.         00h linear address
  6782.         ECX = linear start address of memory region
  6783.         01h segmented address
  6784.         ES:ECX -> start of memory region
  6785.     EDX = size of memory region in bytes
  6786. Return: CF clear if successful
  6787.     CF set on error
  6788. Note:    this function is also supported by FlashTek X-32VM; if X-32 is not
  6789.       using virtual memory, this function always succeeds
  6790. --------E-21252B-----------------------------
  6791. INT 21 Pu - Phar Lap 386/DOS-Extender - FREE PHYSICAL PAGES
  6792.     AX = 252Bh
  6793.     BL = function (07h,08h)
  6794.     ???
  6795. Return: ???
  6796. --------E-21252BBH09-------------------------
  6797. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO
  6798.     AX = 252Bh
  6799.     BH = 09h
  6800.     BL = subfunction
  6801.         00h get page table entry by linear address
  6802.         ECX = linear address for which to get page table entry
  6803.         01h get page table entry by logical address
  6804.         ES:ECX = address for which to get page table entry
  6805. Return: CF clear if successful
  6806.         EAX = page table entry
  6807.         EBX = additional page table information
  6808.     CF set on error
  6809.         EAX = error code
  6810.         0009h invalid address
  6811.         0082h running under DPMI
  6812. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah
  6813. --------E-21252BBH0A-------------------------
  6814. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO
  6815.     AX = 252Bh
  6816.     BH = 0Ah
  6817.     BL = subfunction
  6818.         00h set page table entry for linear address
  6819.         ECX = linear address for which to get page table entry
  6820.         01h set page table entry for logical address
  6821.         ES:ECX = address for which to get page table entry
  6822.     ESI = page table entry
  6823.     EDI = additional page table information
  6824. Return: CF clear if successful
  6825.     CF set on error
  6826.         EAX = error code
  6827.         0009h invalid address
  6828.         0082h running under DPMI
  6829. SeeAlso: AX=252Bh/BH=09h
  6830. --------E-21252BBH0B-------------------------
  6831. INT 21 P - Phar Lap 386/DOS-Extender v4.1+ - MAP DATA FILE AT FILE OFFSET
  6832.     AX = 252Bh
  6833.     BH = 0Bh
  6834.     BL = subfunction
  6835.         00h by linear address
  6836.         ECX = linear address at which to map data file
  6837.         01h by logical address
  6838.         ES:ECX = logical address at which to map data file
  6839.     EDX = number of bytes to map
  6840.     DS:ESI -> mapping structure (see below)
  6841.     DS:EDI -> ASCIZ filename
  6842. Return: CF clear if successful
  6843.     CF set on error
  6844.         EAX = error code
  6845.         0002h file error
  6846.             ECX = phase (01h opening file, 02h seeking, 03h reading)
  6847.             EDX = error code returned by DOS
  6848.         0009h invalid address
  6849.         0081h invalid parameters or 386|VMM not present
  6850.         0086h all 386|VMM file handles already in use
  6851. SeeAlso: AX=252Bh/BH=03h,AX=252Bh/BH=09h
  6852.  
  6853. Format of mapping structure:
  6854. Offset    Size    Description
  6855.  00h    DWORD    starting file offset to be mapped
  6856.  04h    DWORD    DOS file access and sharing modes (see INT 21/AH=3Dh)
  6857. --------E-21252C-----------------------------
  6858. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT
  6859.     AX = 252Ch
  6860.     BX = segment selector
  6861.     ECX = number of 4K pages to add
  6862. Return: CF clear if successful
  6863.         EAX = offset in segment of beginning of unmapped pages
  6864.     CF set on error
  6865.         EAX = error code
  6866.         08h insufficent memory
  6867.         09h invalid selector
  6868.         82h not supported by current DPMI
  6869. --------E-21252D-----------------------------
  6870. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE
  6871.     AX = 252Dh
  6872.     EBX = VMM file handle
  6873. Return: CF clear if successful
  6874.     CF set on error
  6875.         EAX = error code (81h invalid VMM handle)
  6876. --------E-21252E-----------------------------
  6877. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS
  6878.     AX = 252Eh
  6879.     CL = direction (00h get parameters, 01h set parameters)
  6880.     DS:EBX -> parameter buffer (see below)
  6881. Return: CF clear if successful
  6882.     CF set on error
  6883.         EAX = error code (81h bad parameter value)
  6884.  
  6885. Format of VMM parameter buffer:
  6886. Offset    Size    Description
  6887.  00h    DWORD    flags
  6888.         bit 0: page fault logging enabled
  6889.         ---v5.0+ ---
  6890.         bit 1: swap extender to disk during DOS EXEC call
  6891.         bit 2: don't zero allocated memory
  6892.  04h    DWORD    scan period for page aging, in milliseconds
  6893.  08h    DWORD    maximum size (in bytes) to check on each page scan
  6894.  0Ch 52 BYTEs    unused
  6895. --------E-21252F-----------------------------
  6896. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE
  6897.     AX = 252Fh
  6898.     DS:EBX -> data to be written
  6899.     CX = size of data in bytes
  6900. Return: CF clear if successful
  6901.     CF set on error
  6902.         EAX = error code (85h no page log file or not 386/VMM)
  6903. --------E-212530-----------------------------
  6904. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS
  6905.     AX = 2530h
  6906.     ECX = size of data buffer in bytes (1024 to 65536)
  6907. Return: CF clear if successful
  6908.     CF set on error
  6909.         EAX = error code
  6910.         08h insufficient low memory
  6911.         81h invalid size
  6912. SeeAlso: AX=2517h
  6913. --------E-212531-----------------------------
  6914. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR
  6915.     AX = 2531h
  6916.     BX = segment selector
  6917.     ECX = direction (00h read, 01h write)
  6918.     DS:EDX -> 8-byte buffer for descriptor contents
  6919. Return: CF clear if successful
  6920.     CF set on error
  6921.         EAX = error code
  6922.         81h invalid selector
  6923.         82h DPMI running, or not a code or data segment
  6924. --------E-212532-----------------------------
  6925. INT 21 P - Phar Lap 386/DOS-Extender - GET EXCEPTION HANDLER VECTOR
  6926.     AX = 2532h
  6927.     CL = exception number (00h-0Fh)
  6928. Return: CF clear if successful
  6929.         ES:EBX = CS:EIP of current exception handler
  6930.     CF set on error (CL > 0Fh)
  6931. Notes:    this call is also supported by the FlashTek X-32VM extender
  6932.     this function is incompatible with 386|VMM; use AX=2522h instead
  6933. SeeAlso: AX=2522h,AX=2533h
  6934. --------E-212533-----------------------------
  6935. INT 21 P - Phar Lap 386/DOS-Extender - SET EXCEPTION HANDLER VECTOR
  6936.     AX = 2533h
  6937.     CL = exception number (00h-0Fh)
  6938.     DS:EDX = CS:EIP of new exception handler
  6939. Return: CF clear if successful
  6940.     CF set on error (CL > 0Fh)
  6941. Notes:    this call is also supported by the FlashTek X-32VM extender
  6942.     this function is incompatible with 386|VMM; use AX=2522h instead
  6943. SeeAlso: AX=2522h,AX=2532h
  6944. --------E-212534-----------------------------
  6945. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG
  6946.     AX = 2534h
  6947. Return: CF clear
  6948.     EAX = interrupt state (00h disabled, 01h enabled)
  6949. --------E-212535-----------------------------
  6950. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS
  6951.     AX = 2535h
  6952.     EBX = direction (00h read registers, 01h write)
  6953.     DS:EDX -> system register record (see below)
  6954. Return: CF clear
  6955. Note:    this call is only available under MS Windows if PHARLAP.386 VDD is
  6956.       installed
  6957.  
  6958. Format of system register record:
  6959. Offset    Size    Description
  6960.  00h    DWORD    CR0
  6961.  04h  4 DWORDs    DR0,DR1,DR2,DR3
  6962.  14h  2 DWORDs    reserved
  6963.  1Ch  2 DWORDs    DR6,DR7
  6964.  24h  3 DWORDs    reserved
  6965. --------E-212536----------------------------
  6966. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE
  6967.     AX = 2536h
  6968.     EBX = bit flags
  6969.         bit 0: modifying conventional memory rather than extended memory
  6970.         bit 1: setting maximum memory usage rather than minimum
  6971.     ECX = new limit in 4K pages
  6972. Return: CF clear if successful
  6973.         EAX = new limit
  6974.     CF set on error
  6975.         EAX = error code (08h memory error or -NOPAGE set)
  6976.         EBX = maximum limit in pages
  6977.         ECX = minimum limit in pages
  6978. --------E-212537----------------------------
  6979. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER
  6980.     AX = 2537h
  6981.     BX = number of paragraphs to allocate
  6982. Return: CF clear if successful
  6983.         AX = real-mode segment of allocated block
  6984.     CF set on error
  6985.         AX = error code
  6986.         07h MS-DOS memory chain corrupted
  6987.         08h insufficient low memory
  6988.         BX = size in paragraphs of largest free block
  6989. SeeAlso: AH=48h
  6990. --------E-212538----------------------------
  6991. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT
  6992.     AX = 2538h
  6993.     DS:EBX -> buffer for registers (see AX=2528h)
  6994.     ECX = register record to retrieve
  6995.         00h first interrupt state
  6996.         01h next interrupt state
  6997.         EDX = handle for current interrupt state
  6998. Return: CF clear if successful
  6999.         DS:EBX buffer filled
  7000.         EDX = handle of current interrupt state
  7001.         ESI = number of interrupt which occurred
  7002.     CF set on error
  7003.         EAX = error code
  7004.         81h invalid handle in EDX
  7005.         83h register saving not enabled
  7006.         84h no more interrupt states
  7007. SeeAlso: AX=2527h,AX=2528h
  7008. --------E-212539----------------------------
  7009. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER
  7010.     AX = 2539h
  7011.     BX = MS-DOS file handle for open file
  7012. Return: CF clear if successful
  7013.         EAX = offset of .EXP header in file
  7014.     CF set on error
  7015.         EAX = error code (02h file error)
  7016.         EBX = file error code
  7017.         02h DOS error seeking
  7018.         03h DOS error reading
  7019.         04h invalid file type    
  7020.         05h invalid file format
  7021.         ECX = DOS error code if EBX=02h or 03h
  7022.     current file position in file modified
  7023. --------E-21253A----------------------------
  7024. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER
  7025.     AX = 253Ah
  7026.     ES:EBX -> function to be called when INT 21/AH=4Ah is about to return
  7027.         an error
  7028. Return: CF clear
  7029.     ES:EBX -> previous handler
  7030. SeeAlso: AH=4Ah
  7031. --------E-21253B----------------------------
  7032. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT
  7033.     AX = 253Bh
  7034.     DS:EBX -> buffer containing register contents (see AX=2528h)
  7035. Return: never returns
  7036. SeeAlso: AX=2528h
  7037. --------E-21253C-----------------------------
  7038. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE
  7039.     AX = 253Ch
  7040. Return: CF clear
  7041.     EAX = old size of swap file in bytes
  7042.     EBX = new size of swap file in bytes
  7043. --------E-21253D-----------------------------
  7044. INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR
  7045.     AX = 253Dh
  7046.     BL = interrupt number
  7047.     ECX = direction (0 = read, 1 = write)
  7048.     DS:EDX -> 8-byte buffer for descriptor
  7049. Return: CF clear if successful
  7050.         DS:EDX filled if reading
  7051.     CF set on error
  7052.         EAX = error code (0082h if running under DPMI)
  7053. Desc:    access hardware-level IDT rather than the internal 386/DOS-Extender
  7054.       shadow IDT
  7055. Notes:    this call will always fail under DPMI because it is not possible to
  7056.       access the IDT
  7057.     the descriptor is not checked when writing
  7058.     this call can normally be used only by programs running in ring 0
  7059.       because the processor does not allow an interrupt to be vectored to
  7060.       a less privileged ring
  7061. --------E-21253F-----------------------------
  7062. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - ALLOCATE LDT DESCRIPTOR
  7063.     AX = 253Fh
  7064.     BX = LDT descriptor to allocate (0000h for any)
  7065.     ???
  7066. Return: ???
  7067. --------E-212540-----------------------------
  7068. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - FORCE ALIAS OF SEGMENT
  7069.     AX = 2540h
  7070.     ???
  7071. Return: ???
  7072. --------E-212544-----------------------------
  7073. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - FREE DLL
  7074.     AX = 2544h
  7075.     ???
  7076. Return: ???
  7077. --------E-212545-----------------------------
  7078. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - GET/SET PROCEDURE ADDRESS
  7079.     AX = 2545h
  7080.     ECX = direction (00h get, 01h set)
  7081.     ???
  7082. Return: ???
  7083. --------E-212546-----------------------------
  7084. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - GET MODULE HANDLE
  7085.     AX = 2546h
  7086.     ???
  7087. Return: ???
  7088. --------E-2125C0-----------------------------
  7089. INT 21 P - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  7090.     AX = 25C0h
  7091.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  7092. Return: CF clear if successful
  7093.         AX = real-mode paragraph address of memory
  7094.     CF set on error
  7095.         AX = error code
  7096.         07h MS-DOS memory control blocks destroyed
  7097.         08h insufficient memory
  7098.         BX = size in paragraphs of largest available memory block
  7099. SeeAlso: AX=25C1h,AX=25C2h
  7100. --------E-2125C1-----------------------------
  7101. INT 21 P - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  7102.     AX = 25C1h
  7103.     CX = real-mode paragraph address of memory block to free
  7104. Return: CF clear if successful
  7105.         EAX destroyed
  7106.     CF set on error
  7107.         AX = error code
  7108.         07h MS-DOS memory control blocks destroyed
  7109.         09h invalid memory block address in CX
  7110. SeeAlso: AX=25C0h,AX=25C2h
  7111. --------E-2125C2-----------------------------
  7112. INT 21 P - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  7113.     AX = 25C2h
  7114.     BX = new requested block size in paragraphs
  7115.     CX = real-mode paragraph address of memory block to modify
  7116. Return: CF clear if successful
  7117.         EAX destroyed
  7118.     CF set on error
  7119.         AX = error code
  7120.         07h MS-DOS memory control blocks destroyed
  7121.         08h insufficient memory
  7122.         09h invalid memory block address in CX
  7123.         BX = size in paragraphs of largest available memory block
  7124. SeeAlso: AX=25C0h,AX=25C1h
  7125. --------E-2125C3-----------------------------
  7126. INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  7127.     AX = 25C3h
  7128.     ES:EBX -> pointer to parameter block (see below)
  7129.     DS:EDX -> pointer to ASCIZ program filename
  7130. Return: CF clear if successful
  7131.         all registers unchanged
  7132.     CF set on error
  7133.         EAX = error code (see below)
  7134.  
  7135. Values for error code:
  7136.  01h function code in AL is invalid ???
  7137.  02h file not found or path invalid
  7138.  05h access denied
  7139.  08h insufficient memory to load program
  7140.  0Ah environment invalid
  7141.  0Bh invalid file format
  7142.  
  7143. Format of parameter block:
  7144. Offset    Size    Description
  7145.  00h    DWORD    32-bit offset of environment string
  7146.  04h    WORD    segment selector of environment string
  7147.  06h    DWORD    32-bit offset of command-tail string
  7148.  0Ah    WORD    segment selector of command-tail string
  7149. --------D-2126-------------------------------
  7150. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  7151.     AH = 26h
  7152.     DX = segment at which to create PSP (see below)
  7153. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  7154.       taken from interrupt vector table; the parent PSP field is set to 0
  7155.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  7156.       copy
  7157. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  7158.  
  7159. Format of PSP:
  7160. Offset    Size    Description
  7161.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  7162.         the CDh 20h here is often used as a signature for a valid PSP
  7163.  02h    WORD    segment of first byte beyond memory allocated to program
  7164.  04h    BYTE    unused filler
  7165.  05h    BYTE    CP/M CALL 5 service request (FAR JMP to 000C0h)
  7166.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  7167.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  7168.  08h  2 BYTEs    remainder of FAR JMP at 05h
  7169.  0Ah    DWORD    stored INT 22 termination address
  7170.  0Eh    DWORD    stored INT 23 control-Break handler address
  7171.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  7172.  16h    WORD    segment of parent PSP
  7173.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  7174.  2Ch    WORD    DOS 2+ segment of environment for process
  7175.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  7176.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  7177.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  7178.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  7179.         used by SHARE in DOS 3.3
  7180.  3Ch    BYTE    apparently unused by DOS versions <= 6.00
  7181.  3Dh    BYTE    apparently used by some versions of APPEND
  7182.  3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh
  7183.  3Fh    BYTE    (Novell NetWare) Novell task number if previous byte is CEh
  7184.  40h  2 BYTEs    DOS 5+ version to return on INT 21/AH=30h
  7185.  42h    WORD    (MSWin3) selector of next PSP (PDB) in linked list
  7186.         Windows keeps a linked list of Windows programs only
  7187.  44h  4 BYTEs    unused by DOS versions <= 6.00
  7188.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  7189.  49h  7 BYTEs    unused by DOS versions <= 6.00
  7190.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  7191.  53h  2 BYTEs    unused in DOS versions <= 6.00
  7192.  55h  7 BYTEs    unused in DOS versions <= 6.00; can be used to make first FCB
  7193.         into an extended FCB
  7194.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  7195.         overwrites second FCB if opened
  7196.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  7197.         overwrites beginning of commandline if opened
  7198.  7Ch  4 BYTEs    unused
  7199.  80h 128 BYTEs    commandline / default DTA
  7200.         command tail is BYTE for length of tail, N BYTEs for the tail,
  7201.         followed by a BYTE containing 0Dh
  7202. Notes:    in DOS v3+, the limit on simultaneously open files may be increased by
  7203.       allocating memory for a new open file table, filling it with FFh,
  7204.       copying the first 20 bytes from the default table, and adjusting the
  7205.       pointer and count at 34h and 32h.  However, DOS will only copy the
  7206.       first 20 file handles into a child PSP (including the one created on
  7207.       EXEC).
  7208.     network redirectors based on the original MS-Net implementation use
  7209.       values of 80h-FEh in the open file table to indicate remote files;
  7210.       Novell NetWare reportedly also uses values of 80h-FEh
  7211.     MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  7212.       high; the first FCB is empty and the second contains the first
  7213.       parameter
  7214.     some DOS extenders place protected-mode values in various PSP fields
  7215.       such as the "parent" field, which can confuse PSP walkers.  Always
  7216.       check either for the CDh 20h signature or that the suspected PSP is
  7217.       at the beginning of a memory block which owns itself (the preceding
  7218.       paragraph should be a valid MCB with "owner" the same as the
  7219.       suspected PSP).
  7220.     Novell NetWare updates the fields at offsets 3Eh and 3Fh without
  7221.       checking that a legal PSP segment is current; see AH=50h for further
  7222.       discussion
  7223.  
  7224. Format of environment block:
  7225. Offset    Size    Description
  7226.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  7227.       N BYTEs    second environment variable, ASCIZ string
  7228.     ...
  7229.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  7230.     BYTE    00h
  7231. ---DOS 3+---
  7232.     WORD    number of strings following environment (normally 1)
  7233.       N BYTEs    ASCIZ full pathname of program owning this environment
  7234.         other strings may follow
  7235. --------D-2127-------------------------------
  7236. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  7237.     AH = 27h
  7238.     CX = number of records to read
  7239.     DS:DX -> opened FCB (see AH=0Fh)
  7240. Return: AL = status
  7241.         00h successful, all records read
  7242.         01h end of file, no data read
  7243.         02h segment wrap in DTA, no data read
  7244.         03h end of file, partial read
  7245.     [DTA] = records read from file
  7246.     CX = number of records read (return AL = 00h or 03h)
  7247. Notes:    read begins at current file position as specified in FCB; the file
  7248.       position is updated after reading
  7249.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  7250. SeeAlso: AH=21h,AH=28h,AH=3Fh
  7251. --------D-2128-------------------------------
  7252. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  7253.     AH = 28h
  7254.     CX = number of records to write
  7255.     DS:DX -> opened FCB (see AH=0Fh)
  7256.     [DTA] = records to write
  7257. Return: AL = status
  7258.         00h successful
  7259.         01h disk full or file read-only
  7260.         02h segment wrap in DTA
  7261.     CX = number of records written
  7262. Notes:    write begins at current file position as specified in FCB; the file
  7263.       position is updated after writing
  7264.     if CX = 0000h on entry, no data is written; instead the file size is
  7265.       adjusted to be the same as the file position specified by the random
  7266.       record and record size fields of the FCB
  7267.     if the data to be written is less than a disk sector, it is copied into
  7268.       a DOS disk buffer, to be written out to disk at a later time
  7269.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  7270. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  7271. --------D-2129-------------------------------
  7272. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  7273.     AH = 29h
  7274.     AL = parsing options (see below)
  7275.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  7276.     ES:DI -> buffer for unopened FCB
  7277. Return: AL = result code
  7278.         00h successful parse, no wildcards encountered
  7279.         01h successful parse, wildcards present
  7280.         FFh failed (invalid drive specifier)
  7281.     DS:SI -> first unparsed character
  7282.     ES:DI buffer filled with unopened FCB (see AH=0Fh)
  7283. Notes:    asterisks expanded to question marks in the FCB
  7284.     all processing stops when a filename terminator is encountered
  7285.     cannot be used with filespecs which include a path (DOS 2+)
  7286.     Novell NetWare monitors the result code since an 'invalid drive' may
  7287.       signal an attempt to reconnect a network drive; if there are no
  7288.       connections to the specified drive, NetWare attempts to build a
  7289.       connection and map the drive to the SYS:LOGIN directory
  7290. SeeAlso: AH=0Fh,AH=16h,AH=26h
  7291.  
  7292. Bitfields for parsing options:
  7293.  bit 0    skip leading separators
  7294.  bit 1    use existing drive number in FCB if no drive is specified, instead of
  7295.         setting field to zero
  7296.  bit 2    use existing filename in FCB if no base name is specified, instead of
  7297.         filling field with blanks
  7298.  bit 3    use existing extension in FCB if no extension is specified, instead of
  7299.         filling field with blanks
  7300.  bits 4-7 reserved (0)
  7301. --------D-212A-------------------------------
  7302. INT 21 - DOS 1+ - GET SYSTEM DATE
  7303.     AH = 2Ah
  7304. Return: CX = year (1980-2099)
  7305.     DH = month
  7306.     DL = day
  7307. ---DOS 1.10+---
  7308.     AL = day of week (00h=Sunday)
  7309. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
  7310. --------D-212B-------------------------------
  7311. INT 21 - DOS 1+ - SET SYSTEM DATE
  7312.     AH = 2Bh
  7313.     CX = year (1980-2099)
  7314.     DH = month
  7315.     DL = day
  7316. Return: AL = status
  7317.         00h successful
  7318.         FFh invalid date, system date unchanged
  7319. Note:    DOS 3.3+ also sets CMOS clock
  7320. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  7321. --------E-212B--CX4149-----------------------
  7322. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  7323.     AH = 2Bh
  7324.     CX = 4149h ('AI')
  7325.     DX = 413Fh ('A?')
  7326. Return: AL <> FFh if installed
  7327. Note:    Borland's TKERNEL makes this call
  7328. --------c-212B--CX4358-----------------------
  7329. INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK
  7330.     AH = 2Bh
  7331.     CX = 4358h ('CX')
  7332. Return: AL = FFh if PC-Kwik/PC-Cache not installed
  7333.     AL = 00h if installed
  7334.         CF clear
  7335.         CX = 6378h ('cx')
  7336.         BX = ???
  7337.         DX = version (DH = major version, DL = binary minor version)
  7338. Note:    PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of
  7339.       Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds
  7340.       to PC-Kwik v3.20)
  7341. SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h
  7342. Index:    PC-Cache;installation check|Qualitas Qcache;installation check
  7343. Index:    installation check;PC-Cache 5.x|installation check;Qualitas Qcache
  7344. --------Q-212B--CX4445-----------------------
  7345. INT 21 - DESQview - INSTALLATION CHECK
  7346.     AH = 2Bh
  7347.     CX = 4445h ('DE')
  7348.     DX = 5351h ('SQ')
  7349.     AL = subfunction (DV v2.00+)
  7350.         01h get version
  7351.         Return: BX = version (BH = major, BL = minor)
  7352.         Note: early copies of v2.00 return 0002h
  7353.         02h get shadow buffer info, and start shadowing
  7354.         Return: BH = rows in shadow buffer
  7355.             BL = columns in shadow buffer
  7356.             DX = segment of shadow buffer
  7357.         04h get shadow buffer info
  7358.         Return: BH = rows in shadow buffer
  7359.             BL = columns in shadow buffer
  7360.             DX = segment of shadow buffer
  7361.         05h stop shadowing
  7362. Return: AL = FFh if DESQview not installed
  7363. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  7364.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  7365.       01h for all subfunction requests 0Ch and higher and appears to ignore
  7366.       all lower-numbered functions not listed here.
  7367.     DESQview versions 2.5x are part of DESQview/X v1.0x.
  7368. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  7369. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  7370. --------U-212B--CX454C-----------------------
  7371. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  7372.     AH = 2Bh
  7373.     CX = 454Ch ('EL')
  7374.     DX = 5253h ('RS')
  7375. Return: ES:BX -> ELRES history structure (see below)
  7376.     DX = DABEh (signature, DAve BEnnett)
  7377. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  7378.       Bennett which stores recent errorlevel values, allows them to be
  7379.       retrieved for use in batch files, and can place them in an
  7380.       environment variable
  7381. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  7382.  
  7383. Format of ELRES history structure:
  7384. Offset    Size    Description
  7385.  00h    WORD    number of return codes which can be stored by following buffer
  7386.  02h    WORD    current position in buffer (treated as a ring)
  7387.  04h  N BYTEs    ELRES buffer
  7388. --------m-212B01CX444D-----------------------
  7389. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  7390.     AX = 2B01h
  7391.     CX = 444Dh ('DM')
  7392.     DX = 4158h ('AX')
  7393. Return: AX = 0000h if installed
  7394.         BX = version??? (0002h)
  7395.         CX = 4845h ('HE')
  7396.         DX = 5245h ('RE')
  7397.         ES = DOS-UP driver segment
  7398. --------T-212B01CX5441-----------------------
  7399. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  7400.     AX = 2B01h
  7401.     CX = 5441h ('TA')
  7402.     DX = 4D45h ('ME')
  7403. ---v2.60---
  7404.     BH = ???
  7405.         00h skip ???, else do
  7406. Return: AL = 02h if installed
  7407.     ES:DX -> data area in TAME-RES (see below)
  7408. Program: TAME is a shareware program by David G. Thomas which gives up CPU time
  7409.       to other partitions under a multitasker when the current partition's
  7410.       program incessantly polls the keyboard or system time
  7411.  
  7412. Format of TAME 2.10-2.20 data area:
  7413. Offset    Size    Description
  7414.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  7415.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  7416.  02h    DWORD    number of task switches
  7417.  06h    DWORD    number of keyboard polls
  7418.  0Ah    DWORD    number of time polls
  7419.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7420.  12h    DWORD    original INT 10h
  7421.  16h    DWORD    original INT 14h
  7422.  1Ah    DWORD    original INT 15h
  7423.  1Eh    DWORD    original INT 16h
  7424.  22h    DWORD    original INT 17h
  7425.  26h    DWORD    original INT 21h
  7426.  2Ah    DWORD    original INT 28h
  7427.  2Eh    WORD    offset of TAME INT 10h handler
  7428.  30h    WORD    offset of TAME INT 14h handler
  7429.  32h    WORD    offset of TAME INT 15h handler
  7430.  34h    WORD    offset of TAME INT 16h handler
  7431.  36h    WORD    offset of TAME INT 17h handler
  7432.  38h    WORD    offset of TAME INT 21h handler
  7433.  3Ah    WORD    offset of TAME INT 28h handler
  7434.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  7435.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  7436.  40h    WORD    number of polls remaining before next task switch
  7437.  42h    WORD    /KEYIDLE value
  7438.  44h    BYTE    interrupts already grabbed by TAME (see below)
  7439.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  7440.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  7441.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  7442.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  7443.  49h    BYTE    window or task number for this task
  7444.  4Ah    BYTE    multitasker type (see below)
  7445.  4Bh    BYTE    type of task switching selected
  7446.         bit 0: DESQview???
  7447.         bit 1: DoubleDOS???
  7448.         bit 2: TopView???
  7449.         bit 3: KeySwitch
  7450.         bit 4: HLT instruction
  7451.  4Ch    BYTE    ???
  7452.  4Dh    BYTE    flags
  7453.         bit 1: /FREQ instead of /MAX
  7454.  4Eh    BYTE    /FG: value
  7455.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  7456.  50h    BYTE    ???
  7457.  
  7458. Bitfields for interrupts already grabbed by TAME:
  7459.  bit 0    INT 10h
  7460.  bit 1    INT 14h
  7461.  bit 2    INT 15h
  7462.  bit 3    INT 16h
  7463.  bit 4    INT 17h
  7464.  bit 5    INT 21h
  7465.  bit 6    INT 28h
  7466.  
  7467. Values for multitasker type:
  7468.  01h    DESQview
  7469.  02h    DoubleDOS
  7470.  03h    TopView
  7471.  04h    OmniView
  7472.  05h    VM/386
  7473.  
  7474. Bitfields for type of task switching selected:
  7475.  bit 0    DESQview
  7476.  bit 1    DoubleDOS
  7477.  bit 2    TopView
  7478.  bit 3    OmniView
  7479.  bit 4    KeySwitch
  7480.  bit 5    HLT instruction
  7481.  
  7482. Format of TAME 2.30 data area:
  7483. Offset    Size    Description
  7484.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  7485.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  7486.  02h    DWORD    number of task switches
  7487.  06h    DWORD    number of keyboard polls
  7488.  0Ah    DWORD    number of time polls
  7489.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7490.  12h    DWORD    time of last /CLEAR or TAME-RES load
  7491.  16h    DWORD    time yielded
  7492.  1Ah    DWORD    time spent polling
  7493.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  7494.  22h    DWORD    original INT 10h
  7495.  26h    DWORD    original INT 14h
  7496.  2Ah    DWORD    original INT 15h
  7497.  2Eh    DWORD    original INT 16h
  7498.  32h    DWORD    original INT 17h
  7499.  36h    DWORD    original INT 21h
  7500.  3Ah    DWORD    original INT 28h
  7501.  3Eh    WORD    offset of TAME INT 10h handler
  7502.  40h    WORD    offset of TAME INT 14h handler
  7503.  42h    WORD    offset of TAME INT 15h handler
  7504.  44h    WORD    offset of TAME INT 16h handler
  7505.  46h    WORD    offset of TAME INT 17h handler
  7506.  48h    WORD    offset of TAME INT 21h handler
  7507.  4Ah    WORD    offset of TAME INT 28h handler
  7508.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  7509.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  7510.  50h    WORD    number of polls remaining before next task switch
  7511.  52h    WORD    /KEYIDLE value
  7512.  54h    WORD    /FG: value
  7513.  56h    WORD    task switches left until next FGONLY DESQview API call
  7514.  58h    WORD    multitasker version
  7515.  5Ah    WORD    virtual screen segment
  7516.  5Ch    BYTE    interrupts already grabbed by TAME (see above)
  7517.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  7518.  5Eh    BYTE    window or task number for this task
  7519.  5Fh    BYTE    multitasker type (see above)
  7520.  60h    BYTE    type of task switching selected (bit flags) (see above)
  7521.  61h    BYTE    watch_DOS
  7522.  62h    BYTE    bit flags
  7523.         bit 0: TAME enabled
  7524.         bit 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  7525.         bit 2: /TIMEPOLL
  7526.         bit 3: /KEYPOLL
  7527.         bit 4: inhibit timer
  7528.         bit 5: enable status monitoring
  7529.  63h    BYTE    old status
  7530.  64h    WORD    signature DA34h
  7531.  
  7532. Format of TAME 2.60 data area:
  7533. Offset    Size    Description
  7534.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  7535.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  7536.  02h    DWORD    number of task switches
  7537.  06h    DWORD    number of keyboard polls
  7538.  0Ah    DWORD    number of time polls
  7539.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7540.  12h    DWORD    time of last /CLEAR or TAME-RES load
  7541.  16h    DWORD    time yielded
  7542.  1Ah    DWORD    time spent polling
  7543.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  7544.  22h  4 BYTEs    ???
  7545.  26h    DWORD    original INT 10h
  7546.  2Ah    DWORD    original INT 14h
  7547.  2Eh    DWORD    original INT 15h
  7548.  32h    DWORD    original INT 16h
  7549.  36h    DWORD    original INT 17h
  7550.  3Ah    DWORD    original INT 21h
  7551.  3Eh    DWORD    original INT 28h
  7552.  42h    WORD    offset of TAME INT 10h handler
  7553.  44h    WORD    offset of TAME INT 14h handler
  7554.  46h    WORD    offset of TAME INT 15h handler
  7555.  48h    WORD    offset of TAME INT 16h handler
  7556.  4Ah    WORD    offset of TAME INT 17h handler
  7557.  4Ch    WORD    offset of TAME INT 21h handler
  7558.  4Eh    WORD    offset of TAME INT 28h handler
  7559.  50h    WORD    X in /max:X,Y or /freq:X,Y
  7560.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  7561.  54h    WORD    number of polls remaining before next task switch
  7562.  56h    WORD    /KEYIDLE value
  7563.  58h  4 BYTEs    ???
  7564.  5Ch    WORD    X in /boost:X,Y
  7565.  5Eh    WORD    Y in /boost:X,Y
  7566.  60h    WORD    /FG: value
  7567.  62h    WORD    task switches remaining until next FGONLY DESQview API call
  7568.  64h    WORD    multitasker version ???
  7569.  66h    WORD    virtual screen segment
  7570.  68h    BYTE    interrupts already grabbed by TAME (see above)
  7571.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  7572.  6Ah    BYTE    window or task number for this task
  7573.  6Bh    BYTE    multitasker type (see above)
  7574.  6Ch    BYTE    type of task switching selected (bit flags) (see above)
  7575.  6Dh    BYTE    watch_DOS
  7576.  6Eh    BYTE    bit flags
  7577.         bit 0: TAME enabled
  7578.         bit 1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  7579.         bit 2: /TIMEPOLL
  7580.         bit 3: /KEYPOLL
  7581.         bit 4: inhibit timer
  7582.         bit 5: enable status monitoring
  7583.  6Fh    BYTE    old status
  7584.  70h    WORD    signature DA34h
  7585. --------R-212B44BX4D41-----------------------
  7586. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  7587.     AX = 2B44h ('D')
  7588.     BX = 4D41h ('MA')
  7589.     CX = 7063h ('pc')
  7590.     DX = 4157h ('AW')
  7591. Return: AX = 4F4Bh ('OK') if large host resident
  7592.        = 6F6Bh ('ok') if small host resident
  7593.     CX:DX -> API entry point
  7594. SeeAlso: INT 16/AH=79h
  7595.  
  7596. Call API entry point with:
  7597.     AX = 0000h get pcANYWHERE IV version
  7598.         DS:SI -> BYTE buffer for host type code
  7599.         Return: AH = version number
  7600.             AL = revision number
  7601.             DS:DI buffer byte filled with
  7602.             00h full-featured host
  7603.             01h limited-feature LAN host
  7604.             other API may not be supported
  7605.     AX = 0001h initialize operation
  7606.         DS:SI -> initialization request structure (see below)
  7607.         Return: AX = function status (see below)
  7608.     AX = 0002h get status
  7609.         Return: AH = current operating mode (see init req structure below)
  7610.             AL = current connection status
  7611.             bit 0: a physical connection is active
  7612.             bit 1: remove screen updating is active
  7613.             bit 2: connection checking is active
  7614.             bit 3: hot key detection is active
  7615.             bit 4: background file transfer is active
  7616.     AX = 0003h suspend remote screen updates
  7617.         Return: AX = function status (see below)
  7618.     AX = 0004h resume screen updates
  7619.         Return: AX = function status (see below)
  7620.     AX = 0005h end current remote access session
  7621.         DS:SI -> termination request structure (see below)
  7622.         Return: AX = function status (see below)
  7623.     AX = 0006h remove pcANYWHERE IV from memory
  7624.         Return: AX = status
  7625.             0000h successful
  7626.             FFD2h unable to release allocated memory
  7627.             FFD1h unable to release interrupt vectors
  7628.     AX = 8000h read data from communications channel
  7629.         DS:BX -> buffer
  7630.         CX = buffer size
  7631.         Return: AX >= number of characters read/available
  7632.             AX < 0 on error
  7633.     AX = 8001h write data to communications channel
  7634.         DS:BX -> buffer
  7635.         CX = buffer size
  7636.         Return: AX >= number of characters written
  7637.             AX < 0 on error
  7638.     AX = 8002h get connection status
  7639.         Return: AX = status
  7640.             > 0000h if connection active
  7641.             = 0000h if connection lost
  7642.             < 0000h on error
  7643.  
  7644. Format of initialization request structure:
  7645. Offset    Size    Description
  7646.  00h    BYTE    operating mode
  7647.         00h wait for a call
  7648.         01h hot key activates
  7649.         02h incoming call activates
  7650.         03h initiate a call
  7651.  01h  3 BYTEs    user ID to append to config file names
  7652.  04h    WORD    DS-relative pointer to path for config files
  7653.  06h    WORD    DS-relative pointer to path for program files
  7654.  
  7655. Format of termination request structure:
  7656. Offset    Size    Description
  7657.  00h    BYTE    operating mode after termination
  7658.         00h wait for a call
  7659.         01h hot key activates
  7660.         02h incoming call activates
  7661.         80h use current mode
  7662.         FFh remove from memory
  7663.  
  7664. Values for function status:
  7665.  0000h    function completed successfully
  7666.  FFF2h    unable to establish a connection when operating mode is
  7667.     "Initiate a call"
  7668.  FFF3h    modem configuration is invalid (corrupt config)
  7669.  FFF4h    modem initialization failed (no modem response)
  7670.  FFF5h    the communications device could not be initialized
  7671.  FFF6h    the host operator aborted the function
  7672.  FFF7h    the communications driver type specified in the configuration file is
  7673.     different than the one loaded when pcANYWHERE IV was initially started
  7674.  FFF9h    the configuration file is invalid
  7675.  FFFAh    the configuration file could not be found
  7676.  FFFBh    no session is active
  7677.  FFFCh    a remote access session is active
  7678.  FFFDh    the specified operating mode is invalid
  7679. --------D-212C-------------------------------
  7680. INT 21 - DOS 1+ - GET SYSTEM TIME
  7681.     AH = 2Ch
  7682. Return: CH = hour
  7683.     CL = minute
  7684.     DH = second
  7685.     DL = 1/100 seconds
  7686. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  7687.       so returned times generally do not increment by 1
  7688.     on some systems, DL may always return 00h
  7689. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  7690. SeeAlso: INT 2F/AX=120Dh
  7691. --------D-212D-------------------------------
  7692. INT 21 - DOS 1+ - SET SYSTEM TIME
  7693.     AH = 2Dh
  7694.     CH = hour
  7695.     CL = minute
  7696.     DH = second
  7697.     DL = 1/100 seconds
  7698. Return: AL = result
  7699.         00h successful
  7700.         FFh invalid time, system time unchanged
  7701. Note:    DOS 3.3+ also sets CMOS clock
  7702. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  7703. --------T-212D01CX7820-----------------------
  7704. INT 21 - PC-Mix - INSTALLATION CHECK
  7705.     AX = 2D01h
  7706.     CX = 7820h ('X ')
  7707.     DX = 6D69h ('MI')
  7708. Return: AL = 00h if installed
  7709. --------D-212E--DL00-------------------------
  7710. INT 21 - DOS 1+ - SET VERIFY FLAG
  7711.     AH = 2Eh
  7712.     DL = 00h (DOS 1.x/2.x only)
  7713.     AL = new state of verify flag
  7714.         00h off
  7715.         01h on
  7716. Notes:    default state at system boot is OFF
  7717.     when ON, all disk writes are verified provided the device driver
  7718.       supports read-after-write verification
  7719. SeeAlso: AH=54h
  7720. --------D-212F-------------------------------
  7721. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  7722.     AH = 2Fh
  7723. Return: ES:BX -> current DTA
  7724. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  7725. SeeAlso: AH=1Ah
  7726. --------D-2130-------------------------------
  7727. INT 21 - DOS 2+ - GET DOS VERSION
  7728.     AH = 30h
  7729. ---DOS 5+ ---
  7730.     AL = what to return in BH
  7731.         00h OEM number (as for DOS 2.0-4.0x)
  7732.         01h version flag
  7733. Return: AL = major version number (00h if DOS 1.x)
  7734.     AH = minor version number
  7735.     BL:CX = 24-bit user serial number (most versions do not use this)
  7736. ---if DOS <5 or AL=00h---
  7737.     BH = MS-DOS OEM number (see below)
  7738. ---if DOS 5+ and AL=01h---
  7739.     BH = version flag
  7740.         bit 3: DOS is in ROM
  7741.         other: reserved (0)
  7742. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  7743.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  7744.     the Windows/NT DOS box returns version 5.00, subject to SETVER
  7745.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  7746.       INT 21/AH=87h to distinguish between the original European MS-DOS 4.0
  7747.       and the later PC-DOS 4.0x and MS-DOS 4.0x
  7748.     IBM DOS 6.1 reports its version as 6.00; use the OEM number to
  7749.       distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an
  7750.       IBM DOS 6.0)
  7751.     generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves
  7752.       as PC-DOS by returning OEM number 00h
  7753.     the version returned under DOS 4.0x may be modified by entries in
  7754.       the special program list (see AH=52h); the version returned under
  7755.       DOS 5+ may be modified by SETVER--use AX=3306h to get the true
  7756.       version number
  7757. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  7758. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=E002h
  7759.  
  7760. Values for DOS OEM number:
  7761.  00h    IBM
  7762.  01h    Compaq
  7763.  02h    MS Packaged Product
  7764.  04h    AT&T
  7765.  05h    Zenith
  7766.  06h    Hewlett-Packard
  7767.  0Dh    Packard-Bell
  7768.  16h    DEC
  7769.  23h    Olivetti
  7770.  29h    Toshiba
  7771.  33h    Novell (Windows/386 device IDs only)
  7772.  34h    MS Multimedia Systems (Windows/386 device IDs only)
  7773.  35h    MS Multimedia Systems (Windows/386 device IDs only)
  7774.  4Dh    Hewlett-Packard
  7775.  66h    PhysTechSoft (PTS-DOS)
  7776.  99h    General Software's Embedded DOS
  7777.  EEh    DR-DOS
  7778.  EFh    Novell DOS
  7779.  FFh    Microsoft, Phoenix
  7780. --------E-2130-------------------------------
  7781. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  7782.     AH = 30h
  7783.     EAX = 00003000h
  7784.     EBX = 50484152h ("PHAR")
  7785. Return: AL = major DOS version
  7786.     AH = minor DOS version
  7787.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  7788.         BL = ASCII major version number
  7789.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  7790.         EDX = address of GDA
  7791. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  7792. --------v-2130--DXABCD-----------------------
  7793. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  7794.     AH = 30h
  7795.     DX = ABCDh
  7796. Return: DX = DCBAh if installed
  7797. SeeAlso: AX=0D20h,AX=30F1h
  7798. --------T-213000BX1234-----------------------
  7799. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  7800.     AX = 3000h
  7801.     BX = 1234h
  7802.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  7803. Return: AL = DOS major version
  7804.     AH = DOS minor version
  7805.     CX:BX -> Ctask global data block
  7806. Program: CTask is a multitasking kernel for C written by Thomas Wagner
  7807. Note:    if first eight bytes of returned data block equal eight bytes passed
  7808.       in, CTask is resident
  7809. --------O-213000BX3000-----------------------
  7810. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  7811.     AX = 3000h
  7812.     BX = 3000h
  7813.     CX = DX = 3000h
  7814. Return: AX = PC-MOS version
  7815. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  7816.       system by The Software Link, Inc.
  7817. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
  7818. --------G-213022-----------------------------
  7819. INT 21 - StopPrg v2.0 - INSTALLATION CHECK
  7820.     AX = 3022h
  7821. Return: AX = DOS version (see AH=30h)
  7822.     CX = 1112h if StopPrg installed
  7823.         BX = segment of resident code
  7824. Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet
  7825. Note:    StopPrg may be temporarily disabled by storing 9090h in the word at
  7826.       0000h:04FEh
  7827. --------v-2130F1-----------------------------
  7828. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  7829.     AX = 30F1h
  7830. Return: AL = 00h if resident
  7831. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  7832. ----------2130FFCX4445-----------------------
  7833. INT 21 - DESQ??? - INSTALLATION CHECK
  7834.     AX = 30FFh
  7835.     CX = 4445h ("DE")
  7836.     DX = 5351h ("SQ")
  7837. Return: BH = 05h if installed
  7838.     ???
  7839. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  7840.       DESQview, so it may be for DESQview's precursor DESQ.
  7841. SeeAlso: AX=4404h"DUBLDISK"
  7842. --------D-2131-------------------------------
  7843. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  7844.     AH = 31h
  7845.     AL = return code
  7846.     DX = number of paragraphs to keep resident
  7847. Return: never
  7848. Notes:    the value in DX only affects the memory block containing the PSP;
  7849.       additional memory allocated via AH=48h is not affected
  7850.     the minimum number of paragraphs which will remain resident is 11h
  7851.       for DOS 2.x and 06h for DOS 3+
  7852.     most TSRs can save some memory by releasing their environment block
  7853.       before terminating (see AH=26h,AH=49h)
  7854. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  7855. --------D-2132-------------------------------
  7856. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  7857.     AH = 32h
  7858.     DL = drive number (00h = default, 01h = A:, etc)
  7859. Return: AL = status
  7860.         00h successful
  7861.         DS:BX -> Drive Parameter Block (DPB) for specified drive
  7862.         FFh invalid or network drive
  7863. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  7864.       except for the DWORD at offset 12h
  7865.     this call updates the DPB by reading the disk; the DPB may be accessed
  7866.       via the DOS list of lists (see AH=52h) if disk access is not
  7867.       desirable.
  7868.     undocumented prior to the release of DOS 5.0; only the DOS 4+ version
  7869.       of the DPB has been documented, however
  7870.     supported by DR-DOS 3.41+; DR-DOS 3.41-6.0 return the same data as
  7871.       MS-DOS 3.31
  7872. SeeAlso: AH=1Fh,AH=52h
  7873.  
  7874. Format of DOS Drive Parameter Block:
  7875. Offset    Size    Description
  7876.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  7877.  01h    BYTE    unit number within device driver
  7878.  02h    WORD    bytes per sector
  7879.  04h    BYTE    highest sector number within a cluster
  7880.  05h    BYTE    shift count to convert clusters into sectors
  7881.  06h    WORD    number of reserved sectors at beginning of drive
  7882.  08h    BYTE    number of FATs
  7883.  09h    WORD    number of root directory entries
  7884.  0Bh    WORD    number of first sector containing user data
  7885.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  7886.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  7887.  0Fh    BYTE    number of sectors per FAT
  7888.  10h    WORD    sector number of first directory sector
  7889.  12h    DWORD    address of device driver header
  7890.  16h    BYTE    media ID byte
  7891.  17h    BYTE    00h if disk accessed, FFh if not
  7892.  18h    DWORD    pointer to next DPB
  7893. ---DOS 2.x---
  7894.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  7895.         FFFFh = unknown
  7896.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  7897. ---DOS 3.x---
  7898.  1Ch    WORD    cluster at which to start search for free space when writing
  7899.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  7900. ---DOS 4.0-6.0---
  7901.  0Fh    WORD    number of sectors per FAT
  7902.  11h    WORD    sector number of first directory sector
  7903.  13h    DWORD    address of device driver header
  7904.  17h    BYTE    media ID byte
  7905.  18h    BYTE    00h if disk accessed, FFh if not
  7906.  19h    DWORD    pointer to next DPB
  7907.  1Dh    WORD    cluster at which to start search for free space when writing,
  7908.         usually the last cluster allocated
  7909.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  7910. --------D-2133-------------------------------
  7911. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  7912.     AH = 33h
  7913.     AL = subfunction
  7914.         00h get current extended break state
  7915.         Return: DL = current state, 00h = off, 01h = on
  7916.         01h set state of extended ^C/^Break checking
  7917.         DL = 00h off, check only on character I/O functions
  7918.              01h on, check on all DOS functions
  7919. Note:    under DOS 3.1+ and DR-DOS, this function does not use any of the
  7920.       DOS-internal stacks and may thus be called at any time
  7921. SeeAlso: AX=3302h
  7922. --------D-213302-----------------------------
  7923. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  7924.     AX = 3302h
  7925.     DL = new state
  7926.          00h for OFF or 01h for ON
  7927. Return: DL = old state of extended BREAK checking
  7928. Notes:    this function does not use any of the DOS-internal stacks and may thus
  7929.       be called at any time; one possible use is modifying Control-Break
  7930.       checking from within an interrupt handler or TSR
  7931.     not supported by DR-DOS through at least version 6.0
  7932. SeeAlso: AH=33h
  7933. --------D-213305-----------------------------
  7934. INT 21 - DOS 4+ - GET BOOT DRIVE
  7935.     AX = 3305h
  7936. Return: DL = boot drive (1=A:,...)
  7937. Notes:    fully reentrant
  7938.     NEC 9800-series PCs always call the boot drive A: and assign the other
  7939.       drive letters sequentially to the other drives in the system
  7940. --------D-213306-----------------------------
  7941. INT 21 - DOS 5+ - GET TRUE VERSION NUMBER
  7942.     AX = 3306h
  7943. Return: BL = major version
  7944.     BH = minor version
  7945.     DL = revision (bits 2-0, all others 0)
  7946.     DH = version flags
  7947.         bit 3: DOS is in ROM
  7948.         bit 4: DOS is in HMA
  7949.     AL = FFh if true DOS version < 5.0
  7950. Notes:    this function always returns the true version number, unlike AH=30h,
  7951.       whose return value may be changed with SETVER
  7952.     because of the conflict from the CBIS PowerLAN redirector (see next
  7953.       entry), programs should check whether BH is less than 100 (64h)
  7954.       and BL is at least 5 before accepting the returned BX as the true
  7955.       version number; however, even this is not entirely reliable when
  7956.       that redirector is loaded
  7957.     fully reentrant
  7958.     OS/2 v2.1 will return BX=0A14h (version 20.10)
  7959.     the Windows NT DOS box returns BX=3205h (version 5.50)
  7960. BUG:    DR-DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  7961.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  7962.       for invalid subfunctions
  7963. SeeAlso: AH=30h,INT 2F/AX=122Fh
  7964. --------N-213306-----------------------------
  7965. INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
  7966.     AX = 3306h
  7967. Return: AX = 3306h
  7968.     BL = ??? (usually 00h)
  7969.     BH = ??? (usually 00h or FFh)
  7970. Note:    unknown function, is in conflict with DOS 5+ version call
  7971. SeeAlso: AX=3306h"DOS"
  7972. --------v-21330F-----------------------------
  7973. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  7974.     AX = 330Fh
  7975. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  7976. SeeAlso: AX=30F1h,AX=33E0h
  7977. --------k-213341-----------------------------
  7978. INT 21 - Diet Disk v1.0 - INSTALLATION CHECK
  7979.     AX = 3341h
  7980. Return: DX = 1234h if installed
  7981.         CX = resident code segment
  7982. Program: Diet Disk is a public domain transparent data file compressor by
  7983.       Barry Nance
  7984. --------v-2133E0-----------------------------
  7985. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  7986.     AX = 33E0h
  7987. Return: AL = E0h if resident (DOS returns AL=FFh)
  7988. SeeAlso: AX=330Fh,AX=357Fh
  7989. --------D-2134-------------------------------
  7990. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  7991.     AH = 34h
  7992. Return: ES:BX -> one-byte InDOS flag
  7993. Notes:    the value of InDOS is incremented whenever an INT 21 function begins
  7994.       and decremented whenever one completes
  7995.     during an INT 28 call, it is safe to call some INT 21 functions even
  7996.       though InDOS may be 01h instead of zero
  7997.     InDOS alone is not sufficient for determining when it is safe to
  7998.       enter DOS, as the critical error handling decrements InDOS and
  7999.       increments the critical error flag for the duration of the critical
  8000.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  8001.       busy.
  8002.     SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk,
  8003.       then zeros it on completion
  8004.     the critical error flag is the byte immediately following InDOS in
  8005.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ and
  8006.       DR-DOS 3.41+ (except COMPAQ DOS 3.0, where the critical error flag
  8007.       is located 1AAh bytes BEFORE the critical section flag)
  8008.     for DOS 3.1+, an undocumented call exists to get the address of the
  8009.       critical error flag (see AX=5D06h)
  8010.     this function was undocumented prior to the release of DOS 5.0.
  8011. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  8012. --------D-2135-------------------------------
  8013. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  8014.     AH = 35h
  8015.     AL = interrupt number
  8016. Return: ES:BX -> current interrupt handler
  8017. Note:    under DR-DOS 5.0+, this function does not use any of the DOS-internal
  8018.       stacks and may thus be called at any time
  8019. SeeAlso: AH=25h,AX=2503h
  8020. --------E-213501-----------------------------
  8021. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  8022.     AX = 3501h
  8023. Return: CF clear if successful
  8024.         BX = new selector
  8025.     CF set on error (no more selectors available)
  8026. Note:    the new selector will be an expand-up read/write data selector with
  8027.       undefined base and limit
  8028. SeeAlso: AX=3502h,INT 31/AX=0000h
  8029. --------E-213502-----------------------------
  8030. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  8031.     AX = 3502h
  8032.     BX = selector
  8033. Return: CF clear if successful
  8034.     CF set on error (invalid selector)
  8035. Note:    only selectors allocated via AX=3501h should be deallocated
  8036. SeeAlso: AX=3501h,INT 31/AX=0001h
  8037. --------E-213503-----------------------------
  8038. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  8039.     AX = 3503h
  8040.     BX = selector
  8041.     ECX = base address
  8042. Return: CF clear if successful
  8043.     CF set on error (invalid selector)
  8044. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  8045. --------E-213504-----------------------------
  8046. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  8047.     AX = 3504h
  8048.     BX = selector
  8049. Return: CF clear if successful
  8050.         ECX = absolute base address of selector
  8051.     CF set on error (invalid selector)
  8052. SeeAlso: AX=3503h,INT 31/AX=0006h
  8053. --------E-213505-----------------------------
  8054. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  8055.     AX = 3505h
  8056.     BX = selector
  8057.     ECX = desired limit
  8058. Return: CF clear if successful
  8059.         ECX = actual limit set
  8060.     CF set on error (no more selectors available)
  8061. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  8062.       limit is greater than 1MB
  8063. SeeAlso: AX=3503h,INT 31/AX=0008h
  8064. --------E-21350A-----------------------------
  8065. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  8066.     AX = 350Ah
  8067.     EBX = absolute physical address
  8068.     ECX = size in bytes of area to map
  8069. Return: CF clear if successful
  8070.     CF set on error (insufficient memory or service refused by DPMI host)
  8071. Notes:    should not make repeated calls for the same physical address
  8072.     there is no provision for unmapping memory
  8073. --------E-21350B-----------------------------
  8074. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  8075.     AX = 350Bh
  8076.     DS = default selector for DS
  8077. Return: CF clear
  8078.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  8079. SeeAlso: AX=350Ch
  8080. --------E-21350C-----------------------------
  8081. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  8082.     AX = 350Ch
  8083.     ECX = size of block in bytes
  8084.     DS = default DS
  8085. Return: CF clear if successful
  8086.         EAX = near pointer to new block
  8087.         EDX = new lowest legal value for stack
  8088.     CF set on error (requested size not multiple of 4K)
  8089. SeeAlso: AX=350Bh,AX=350Dh
  8090. --------E-21350D-----------------------------
  8091. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  8092.     AX = 350Dh
  8093.     EBX = current ESP value
  8094.     ECX = size of block in bytes
  8095.     DS = default DS
  8096. Return: CF clear if successful
  8097.         EBX = new value for ESP
  8098.         EDX = suggested new limit for SS
  8099.     CF set on error
  8100. Note:    this function should only be called once during initialization
  8101. SeeAlso: AX=350Bh,AX=350Ch
  8102. --------v-21357F-----------------------------
  8103. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  8104.     AX = 357Fh
  8105. Return: DX = FFFFh if installed
  8106. SeeAlso: AX=33E0h,AX=3DFFh
  8107. --------D-2136-------------------------------
  8108. INT 21 - DOS 2+ - GET FREE DISK SPACE
  8109.     AH = 36h
  8110.     DL = drive number (00h = default, 01h = A:, etc)
  8111. Return: AX = FFFFh if invalid drive
  8112.     else
  8113.         AX = sectors per cluster
  8114.         BX = number of free clusters
  8115.         CX = bytes per sector
  8116.         DX = total clusters on drive
  8117. Notes:    free space on drive in bytes is AX * BX * CX
  8118.     total space on drive in bytes is AX * CX * DX
  8119.     "lost clusters" are considered to be in use
  8120.     according to Dave Williams' MS-DOS reference, the value in DX is
  8121.       incorrect for non-default drives after ASSIGN is run
  8122. SeeAlso: AH=1Bh,AH=1Ch
  8123. --------D-213700-----------------------------
  8124. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  8125.     AX = 3700h
  8126. Return: AL = status
  8127.         00h successful
  8128.         DL = current switch character
  8129.         FFh unsupported subfunction
  8130. Desc:    Determine the character which is used to introduce command switches.
  8131.       This setting is ignored by DOS commands in version 4.0 and higher,
  8132.       but is honored by many third-party programs.
  8133. Notes:    documented in some OEM versions of some releases of DOS
  8134.     supported by OS/2 compatibility box
  8135.     always returns AL=00h/DL=2Fh for MS-DOS 5+ and DR-DOS 3.41+
  8136. SeeAlso: AX=3701h
  8137. --------D-213701-----------------------------
  8138. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  8139.     AX = 3701h
  8140.     DL = new switch character
  8141. Return: AL = status
  8142.         00h successful
  8143.         FFh unsupported subfunction
  8144. Notes:    documented in some OEM versions of some releases of DOS
  8145.     supported by OS/2 compatibility box
  8146.     ignored by MS-DOS 5+ and DR-DOS 3.41+; DR-DOS 6.0 leaves AX unchanged
  8147. SeeAlso: AX=3700h
  8148. --------D-2137-------------------------------
  8149. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  8150.     AH = 37h
  8151.     AL = subfunction
  8152.         02h get availdev flag
  8153.         Return: DL = 00h \DEV\ must precede character device names
  8154.                = nonzero \DEV\ is optional
  8155.         03h set availdev flag
  8156.         DL = 00h    \DEV\ is mandatory
  8157.            = nonzero    \DEV\ is optional
  8158. Return: AL = status
  8159.         00h successful
  8160.         FFh unsupported subfunction
  8161. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  8162.       names without generating an error even if the directory \DEV does
  8163.       not actually exist (other paths generate an error if they do not
  8164.       exist).
  8165.     although MS-DOS 3.3+ and DR-DOS 3.41+ accept these calls, they have no
  8166.       effect, and AL=02h always returns DL=FFh
  8167. --------k-2137D0BX899D-----------------------
  8168. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  8169.     AX = 37D0h
  8170.     BX = 899Dh ('DI' + 'ET')
  8171. Return: AL = FFh if not present as TSR (default return value from DOS)
  8172.     AX = 0000h if installed as a TSR
  8173.         CX = 899Dh
  8174.         DX = version ID
  8175. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  8176. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  8177. --------k-2137D1BX899D-----------------------
  8178. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  8179.     AX = 37D1h
  8180.     BX = 899Dh ('DI' + 'ET')
  8181. Return: AX = 0000h
  8182.     CX = code segment of TSR part of DIET.EXE
  8183.     DX = memory block segment of TSR DIET.EXE
  8184.         (0000h if installed as device driver)
  8185. SeeAlso: AX=37D0h,AX=37DFh
  8186. --------k-2137D2BX899D-----------------------
  8187. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  8188.     AX = 37D2h
  8189.     BX = 899Dh ('DI' + 'ET')
  8190. Return: AX = 0000h
  8191.     DL = control flag (00h active, else disabled)
  8192.     DH = skip flag (nonzero while TSR active)
  8193. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  8194. --------k-2137D3BX899D-----------------------
  8195. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  8196.     AX = 37D3h
  8197.     BX = 899Dh ('DI' + 'ET')
  8198.     DL = control flag (00h active, else disabled)
  8199.     DH = skip flag (00h)
  8200. Return: AX = 0000h
  8201. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  8202. --------k-2137D4BX899D-----------------------
  8203. INT 21 - DIET v1.43e - GET TSR OPTIONS
  8204.     AX = 37D4h
  8205.     BX = 899Dh ('DI' + 'ET')
  8206. Return: AX = 0000h
  8207.     DX = TSR options (see below)
  8208. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  8209.  
  8210. Bitfields for TSR options:
  8211.  bit 0    automated compression of DIETed file
  8212.  bit 1    automated compression of newly-created file
  8213.  bit 2    suppress DIET message
  8214.  bit 3    display original file size
  8215.  bits 4-15 reserved (0)
  8216. --------k-2137D5BX899D-----------------------
  8217. INT 21 - DIET v1.43e - SET TSR OPTIONS
  8218.     AX = 37D5h
  8219.     BX = 899Dh ('DI' + 'ET')
  8220.     DX = TSR options (see AX=37D4h)
  8221. Return: AX = 0000h
  8222. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  8223. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  8224. --------k-2137D6BX899D-----------------------
  8225. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  8226.     AX = 37D6h
  8227.     BX = 899Dh ('DI' + 'ET')
  8228. Return: AX = 0000h
  8229.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  8230. SeeAlso: AX=37D0h,AX=37D7h
  8231. --------k-2137D7BX899D-----------------------
  8232. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  8233.     AX = 37D7h
  8234.     BX = 899Dh ('DI' + 'ET')
  8235.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  8236.         0000h:0000h for current directory
  8237. Return: AX = 0000h
  8238. Note:    the specified directory name must include a drive letter and end with
  8239.       a backslash
  8240. SeeAlso: AX=37D0h,AX=37D6h
  8241. --------k-2137DCBX899D-----------------------
  8242. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  8243.     AX = 37DCh
  8244.     BX = 899Dh ('DI' + 'ET')
  8245.     DS:DX -> external procedure
  8246. Return: AX = 0000h
  8247. Note:    the resident code will call the specified external procedure at the
  8248.       beginning of decompression and when compression is exited on failure
  8249. SeeAlso: AX=37DDh
  8250.  
  8251. External procedure called with:
  8252.     STACK:    WORD    class
  8253.             FFFDh creation failed for unknown reasons
  8254.             FFFEh creation failed due to lack of space
  8255.             FFFFh file creation error
  8256.             else file handle of DIETed file to be decompressed
  8257.         DWORD    -> compressed filename
  8258.         DWORD    -> decompressed or temporary filename
  8259. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  8260. --------k-2137DDBX899D-----------------------
  8261. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  8262.     AX = 37DDh
  8263.     BX = 899Dh ('DI' + 'ET')
  8264. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  8265. Note:    unlinks the external procedure specified by AX=37DCh
  8266. SeeAlso: AX=37DCh
  8267. --------k-2137DEBX899D-----------------------
  8268. INT 21 - DIET v1.43e - READ EMS STATUS
  8269.     AX = 37DEh
  8270.     BX = 899Dh ('DI' + 'ET')
  8271. Return: AX = 0000h
  8272.     CX = EMS status
  8273.         0000h not used
  8274.         0001h used as work area
  8275.         0002h used for code and as work area
  8276.     DX = EMM handle when EMS is in use
  8277. --------k-2137DFBX899D-----------------------
  8278. INT 21 - DIET v1.43e - UNLOAD TSR
  8279.     AX = 37DFh
  8280.     BX = 899Dh ('DI' + 'ET')
  8281. Return: AX = status
  8282.         0000h successful
  8283.         00FFh failed
  8284. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  8285. SeeAlso: AX=37D0h
  8286. Index:    uninstall;DIET
  8287. --------D-2138-------------------------------
  8288. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  8289.     AH = 38h
  8290. --DOS 2.x--
  8291.     AL = 00h get current-country info
  8292.     DS:DX -> buffer for returned info (see below)
  8293. Return: CF set on error
  8294.         AX = error code (02h)
  8295.     CF clear if successful
  8296.         AX = country code (MS-DOS 2.11 only)
  8297.         buffer at DS:DX filled
  8298. --DOS 3+--
  8299.     AL = 00h for current country
  8300.     AL = 01h thru 0FEh for specific country with code <255
  8301.     AL = 0FFh for specific country with code >= 255
  8302.        BX = 16-bit country code
  8303.     DS:DX -> buffer for returned info (see below)
  8304. Return: CF set on error
  8305.         AX = error code (02h)
  8306.     CF clear if successful
  8307.         BX = country code
  8308.         DS:DX buffer filled
  8309. Note:    this function is not supported by the Borland DPMI host, but no error
  8310.       is returned; as a workaround, one should allocate a buffer in
  8311.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  8312.       INT 31/AX=0300h
  8313. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  8314.  
  8315. Format of DOS 2.00-2.10 country info:
  8316. Offset    Size    Description
  8317.  00h    WORD    date format  0 = USA    mm dd yy
  8318.                  1 = Europe dd mm yy
  8319.                  2 = Japan    yy mm dd
  8320.  02h    BYTE    currency symbol
  8321.  03h    BYTE    00h
  8322.  04h    BYTE    thousands separator char
  8323.  05h    BYTE    00h
  8324.  06h    BYTE    decimal separator char
  8325.  07h    BYTE    00h
  8326.  08h 24 BYTEs    reserved
  8327.  
  8328. Format of DOS 2.11+ country info:
  8329. Offset    Size    Description
  8330.  00h    WORD    date format (see above)
  8331.  02h  5 BYTEs    ASCIZ currency symbol string
  8332.  07h  2 BYTEs    ASCIZ thousands separator
  8333.  09h  2 BYTEs    ASCIZ decimal separator
  8334.  0Bh  2 BYTEs    ASCIZ date separator
  8335.  0Dh  2 BYTEs    ASCIZ time separator
  8336.  0Fh    BYTE    currency format
  8337.         bit 2 = set if currency symbol replaces decimal point
  8338.         bit 1 = number of spaces between value and currency symbol
  8339.         bit 0 = 0 if currency symbol precedes value
  8340.             1 if currency symbol follows value
  8341.  10h    BYTE    number of digits after decimal in currency
  8342.  11h    BYTE    time format
  8343.         bit 0 = 0 if 12-hour clock
  8344.             1 if 24-hour clock
  8345.  12h    DWORD    address of case map routine
  8346.         (FAR CALL, AL = character to map to upper case [>= 80h])
  8347.  16h  2 BYTEs    ASCIZ data-list separator
  8348.  18h 10 BYTEs    reserved
  8349.  
  8350. Values for country code:
  8351.  001h    United States
  8352.  002h    Canadian-French
  8353.  003h    Latin America
  8354.  01Fh    Netherlands
  8355.  020h    Belgium
  8356.  021h    France
  8357.  022h    Spain
  8358.  024h    Hungary (not supported by DR-DOS 5.0)
  8359.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  8360.  027h    Italy
  8361.  029h    Switzerland
  8362.  02Ah    Czechoslovakia/Tjekia (not supported by DR-DOS 5.0)
  8363.  02Bh    Austria (DR-DOS 5.0)
  8364.  02Ch    United Kingdom
  8365.  02Dh    Denmark
  8366.  02Eh    Sweden
  8367.  02Fh    Norway
  8368.  030h    Poland (not supported by DR-DOS 5.0)
  8369.  031h    Germany
  8370.  037h    Brazil (not supported by DR-DOS 5.0)
  8371.  03Dh    International English [Australia in DR-DOS 5.0]
  8372.  051h    Japan (DR-DOS 5.0, MS-DOS 5.0+)
  8373.  052h    Korea (DR-DOS 5.0)
  8374.  056h    China (MS-DOS 5.0+)
  8375.  058h    Taiwan (MS-DOS 5.0+)
  8376.  05Ah    Turkey (MS-DOS 5.0+)
  8377.  15Fh    Portugal
  8378.  162h    Iceland
  8379.  166h    Finland
  8380.  311h    Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+)
  8381.  3CCh    Israel (DR-DOS 5.0,MS-DOS 5.0+)
  8382. --------D-2138--DXFFFF-----------------------
  8383. INT 21 - DOS 3+ - SET COUNTRY CODE
  8384.     AH = 38h
  8385.     DX = FFFFh
  8386.     AL = 01h thru FEh for specific country with code <255
  8387.     AL = FFh for specific country with code >= 255
  8388.        BX = 16-bit country code (see AH=38h)
  8389. Return: CF set on error
  8390.         AX = error code (see AH=59h)
  8391.     CF clear if successful
  8392. Note:    not supported by OS/2
  8393. SeeAlso: INT 2F/AX=1403h
  8394. --------D-2139-------------------------------
  8395. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  8396.     AH = 39h
  8397.     DS:DX -> ASCIZ pathname
  8398. Return: CF clear if successful
  8399.         AX destroyed
  8400.     CF set on error
  8401.         AX = error code (03h,05h) (see AH=59h)
  8402. Notes:    all directories in the given path except the last must exist
  8403.     fails if the parent directory is the root and is full
  8404.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  8405.       it is not possible to make that directory the current directory
  8406.       because the path would exceed 64 characters
  8407.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8408. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  8409. --------D-213A-------------------------------
  8410. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  8411.     AH = 3Ah
  8412.     DS:DX -> ASCIZ pathname of directory to be removed
  8413. Return: CF clear if successful
  8414.         AX destroyed
  8415.     CF set on error
  8416.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  8417. Notes:    directory must be empty (contain only '.' and '..' entries)
  8418.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8419. SeeAlso: AH=39h,AH=3Bh,AH=E2h/SF=0Bh,INT 2F/AX=1101h
  8420. --------D-213B-------------------------------
  8421. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  8422.     AH = 3Bh
  8423.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  8424. Return: CF clear if successful
  8425.         AX destroyed
  8426.     CF set on error
  8427.         AX = error code (03h) (see AH=59h)
  8428. Notes:    if new directory name includes a drive letter, the default drive is
  8429.       not changed, only the current directory on that drive
  8430.     changing the current directory also changes the directory in which
  8431.       FCB file calls operate
  8432.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8433. SeeAlso: AH=47h,INT 2F/AX=1105h
  8434. --------D-213C-------------------------------
  8435. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  8436.     AH = 3Ch
  8437.     CX = file attributes (see below)
  8438.     DS:DX -> ASCIZ filename
  8439. Return: CF clear if successful
  8440.         AX = file handle
  8441.     CF set on error
  8442.         AX = error code (03h,04h,05h) (see AH=59h)
  8443. Notes:    if a file with the given name exists, it is truncated to zero length
  8444.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8445.     DR-DOS checks the system password or explicitly supplied password at
  8446.       the end of the filename against the reserved field in the directory
  8447.       entry before allowing access
  8448. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  8449.  
  8450. Bitfields for file attributes:
  8451.  bit 0    read-only
  8452.  bit 1    hidden
  8453.  bit 2    system
  8454.  bit 3    volume label (ignored)
  8455.  bit 4    reserved, must be zero (directory)
  8456.  bit 5    archive bit
  8457.  bit 7    if set, file is shareable under Novell NetWare
  8458. --------D-213D-------------------------------
  8459. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  8460.     AH = 3Dh
  8461.     AL = access and sharing modes (see below)
  8462.     DS:DX -> ASCIZ filename
  8463.     CL = attribute mask of files to look for (server call only)
  8464. Return: CF clear if successful
  8465.         AX = file handle
  8466.     CF set on error
  8467.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see AH=59h)
  8468. Notes:    file pointer is set to start of file
  8469.     file handles which are inherited from a parent also inherit sharing
  8470.       and access restrictions
  8471.     files may be opened even if given the hidden or system attributes
  8472.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8473.     DR-DOS checks the system password or explicitly supplied password at
  8474.       the end of the filename against the reserved field in the directory
  8475.       entry before allowing access
  8476.     sharing modes are only effective on local drives if SHARE is loaded
  8477. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  8478.  
  8479. Bitfields for access and sharing modes:
  8480.  bits 2-0 access mode
  8481.     000 read only
  8482.     001 write only
  8483.     010 read/write
  8484.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  8485.         case-sensitive filenames
  8486.  bit 3    reserved (0)
  8487.  bits 6-4 sharing mode (DOS 3+)
  8488.     000 compatibility mode
  8489.     001 "DENYALL" prohibit both read and write access by others
  8490.     010 "DENYWRITE" prohibit write access by others
  8491.     011 "DENYREAD" prohibit read access by others
  8492.     100 "DENYNONE" allow full access by others
  8493.     111 network FCB (only available during server call)
  8494.  bit 7    inheritance
  8495.     if set, file is private to current process and will not be inherited
  8496.       by child processes
  8497.  
  8498. File sharing behavior:
  8499.       |    Second and subsequent Opens
  8500.  First      |Compat  Deny      Deny     Deny    Deny
  8501.  Open      |       All      Write     Read    None
  8502.       |R W RW R W RW R W RW R W RW R W RW
  8503.  - - - - -| - - - - - - - - - - - - - - - - -
  8504.  Compat R |Y Y Y  N N N     1 N N    N N N  1 N N
  8505.     W |Y Y Y  N N N     N N N    N N N  N N N
  8506.     RW|Y Y Y  N N N     N N N    N N N  N N N
  8507.  - - - - -|
  8508.  Deny    R |C C C  N N N     N N N    N N N  N N N
  8509.  All    W |C C C  N N N     N N N    N N N  N N N
  8510.     RW|C C C  N N N     N N N    N N N  N N N
  8511.  - - - - -|
  8512.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N
  8513.  Write    W |C C C  N N N     N N N    Y N N  Y N N
  8514.     RW|C C C  N N N     N N N    N N N  Y N N
  8515.  - - - - -|
  8516.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  8517.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  8518.     RW|C C C  N N N     N N N    N N N  N Y N
  8519.  - - - - -|
  8520.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  8521.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  8522.     RW|C C C  N N N     N N N    N N N  Y Y Y
  8523. Legend: Y = open succeeds, N = open fails with error code 05h
  8524.     C = open fails, INT 24 generated
  8525.     1 = open succeeds if file read-only, else fails with error code
  8526.     2 = open succeeds if file read-only, else fails with INT 24
  8527. --------v-213DFF-----------------------------
  8528. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  8529.     AX = 3DFFh
  8530. Return: AX = 4A44h if resident
  8531. SeeAlso: AX=357Fh,AX=4203h
  8532. --------D-213E-------------------------------
  8533. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  8534.     AH = 3Eh
  8535.     BX = file handle
  8536. Return: CF clear if successful
  8537.         AX destroyed
  8538.     CF set on error
  8539.         AX = error code (06h) (see AH=59h)
  8540. Note:    if the file was written to, any pending disk writes are performed, the
  8541.       time and date stamps are set to the current time, and the directory
  8542.       entry is updated
  8543. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  8544. --------D-213F-------------------------------
  8545. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  8546.     AH = 3Fh
  8547.     BX = file handle
  8548.     CX = number of bytes to read
  8549.     DS:DX -> buffer for data
  8550. Return: CF clear if successful
  8551.         AX = number of bytes actually read (0 if at EOF before call)
  8552.     CF set on error
  8553.         AX = error code (05h,06h) (see AH=59h)
  8554. Notes:    data is read beginning at current file position, and the file position
  8555.       is updated after a successful read
  8556.     the returned AX may be smaller than the request in CX if a partial
  8557.       read occurred
  8558.     if reading from CON, read stops at first CR
  8559.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8560. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  8561. --------G-213F-------------------------------
  8562. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  8563.     AH = 3Fh
  8564.     BX = handle for character device "TDHDEBUG"
  8565.     CX = number of bytes to read
  8566.     DS:DX -> buffer for status block (see below)
  8567. Return: CF clear if successful
  8568.         AX = number of bytes actually read
  8569.     CF set on error
  8570.         AX = error code (05h,06h) (see AH=59h)
  8571. SeeAlso: AH=40h"Turbo Debug"
  8572.  
  8573. Values for status of command:
  8574.  00h    successful
  8575.  01h    invalid handle
  8576.  02h    no more breakpoints available
  8577.  03h    hardware does not support specified breakpoint type
  8578.  04h    previous command prevents execution
  8579.  05h    debugger hardware not found
  8580.  06h    hardware failure
  8581.  07h    invalid command
  8582.  08h    driver not initialized yet
  8583.  FEh    recursive entry (hardware breakpoint inside hw bp handler)
  8584.  
  8585. Format of status block:
  8586. Offset    Size    Description
  8587.  00h    BYTE    status of command (see above)
  8588. ---status for command 01h---
  8589.  01h    WORD    device driver interface version number (currently 1)
  8590.  03h    WORD    device driver software version
  8591.  05h    BYTE    maximum simultaneous hardware breakpoints
  8592.  06h    BYTE    configuration bits (see below)
  8593.  07h    BYTE    supported breakpoint types (see below)
  8594.  08h    WORD    supported addressing match modes (see below)
  8595.  0Ah    WORD    supported data matches (see below)
  8596.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  8597.  0Dh    WORD    size of onboard memory (in KB)
  8598.  0Fh    WORD    maximum number of trace-back events
  8599.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  8600.         supported)
  8601. ---status for command 04h---
  8602.  01h    BYTE    handle to use when referring to the just-set breakpoint
  8603.  
  8604. Bitfields for configuration bits:
  8605.  bit 0    CPU and DMA accesses are distinct
  8606.  bit 1    can detect DMA transfers
  8607.  bit 2    supports data mask
  8608.  bit 3    hardware pass counter on breakpoints
  8609.  bit 4    can match on data as well as addresses
  8610.  
  8611. Bitfields for supported breakpoint types:
  8612.  bit 0    memory read
  8613.  bit 1    memory write
  8614.  bit 2    memory read/write
  8615.  bit 3    I/O read
  8616.  bit 4    I/O write
  8617.  bit 5    I/O read/write
  8618.  bit 6    instruction fetch
  8619.  
  8620. Bitfields for supported addressing match modes:
  8621.  bit 0    any address
  8622.  bit 1    equal to test value
  8623.  bit 2    not equal
  8624.  bit 3    above test value
  8625.  bit 4    below test value
  8626.  bit 5    below or equal
  8627.  bit 6    above or equal
  8628.  bit 7    within range
  8629.  bit 8    outside range
  8630.  
  8631. Bitfields for supported data matches:
  8632.  bit 0    any data
  8633.  bit 1    equal to test value
  8634.  bit 2    not equal
  8635.  bit 3    above test value
  8636.  bit 4    below test value
  8637.  bit 5    below or equal
  8638.  bit 6    above or equal
  8639.  bit 7    within range
  8640.  bit 8    outside range
  8641. --------N-213F-------------------------------
  8642. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  8643.     AH = 3Fh
  8644.     BX = handle for character device "$IPCUST"
  8645.     CX = number of bytes to read
  8646.     DS:DX -> buffer for configuration data (see below)
  8647. Return: CF clear if successful
  8648.         AX = number of bytes actually read
  8649.     CF set on error
  8650.         AX = error code (05h,06h) (see AH=59h)
  8651. Notes:    if less than the entire data is read or written, the next read/write
  8652.       continues where the previous one ended; IOCTL calls AX=4402h and
  8653.       AX=4403h both reset the location at which the next operation starts
  8654.       to zero
  8655.     the data pointer is also reset to zero if the previous read or write
  8656.       reached or exceeded the end of the data, when the current function
  8657.       is read and the previous was write, or vice versa
  8658.     v2.1+ uses a new configuration method, but allows the installation
  8659.       of IPCUST.SYS for backward compatibility with other software which
  8660.       must read the PC/TCP configuration
  8661. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT"
  8662.  
  8663. Format of configuration data:
  8664. Offset    Size    Description
  8665.  00h 12 BYTEs    IPCUST.SYS device driver header
  8666.  12h    BYTE    ???
  8667.  13h    BYTE    ???
  8668.  14h    WORD    ???
  8669.  16h    BYTE    bit flags
  8670.         bit 0: send BS rather than DEL for BackSpace key
  8671.         bit 1: wrap long lines
  8672.  17h    BYTE    ???
  8673.  18h 64 BYTEs    ASCIZ hostname
  8674.  58h 64 BYTEs    ASCIZ domain name
  8675.         (fully qualified domain name is hostname.domain-name)
  8676.  98h 16 BYTEs    ASCIZ username
  8677.  A8h 64 BYTEs    ASCIZ full name
  8678.  E8h 64 BYTEs    ASCIZ office address
  8679. 128h 32 BYTEs    ASCIZ phone number
  8680. 148h    WORD    offset from GMT in minutes
  8681. 14Ah  4 BYTEs    ASCIZ timezone name
  8682. 14Eh    WORD    number of time servers
  8683. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  8684.     ???
  8685. 164h    WORD    number of old-style name servers
  8686. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  8687. 172h    WORD    number of domain name servers
  8688. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  8689. 180h    DWORD    (big-endian) IP address of default gateway
  8690. 184h    DWORD    (big-endian) IP address of log server
  8691. 188h    DWORD    (big-endian) IP address of cookie server
  8692. 18Ch    DWORD    (big-endian) IP address of lpr server
  8693. 190h    DWORD    (big-endian) IP address of imagen print server
  8694. 194h 54 BYTEs    ???
  8695. 1E8h    WORD    TCP default window size in bytes
  8696. 1EAh    WORD    TCP low window size
  8697. 1ECh 64 BYTEs    ASCIZ host tabel filename
  8698. 22Ch  2 BYTEs    ???
  8699. 22Eh 80 BYTEs    ASCIZ mail relay host name
  8700. 27Eh    BYTE    ???
  8701. 27Fh    BYTE    ??? bit flags
  8702. 280h 44 BYTEs    ???
  8703. 2ACh    WORD    ???
  8704. 2AEh 202 BYTEs    ???
  8705. --------N-213F-------------------------------
  8706. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  8707.     AH = 3Fh
  8708.     BX = file handle for device "NET$HLP$"
  8709.     CX = 0008h
  8710.     DS:DX -> buffer for entry point record (see AX=4402h"WORKGRP.SYS")
  8711. Return: CF clear if successful
  8712.         AX = number of bytes actually read (0 if at EOF before call)
  8713.     CF set on error
  8714.         AX = error code (05h,06h) (see AH=59h)
  8715. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  8716.       permits communication with PCs running Windows for Workgroups or
  8717.       LAN Manager
  8718. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  8719. --------N-213F-------------------------------
  8720. INT 21 - BW-TCP - GET DRIVER INFO
  8721.     AH = 3Fh
  8722.     BX = file handle for device "ETHDEV27"
  8723.     CX = 002Bh
  8724.     DS:DX -> buffer for driver info (see below)
  8725. Return: CF clear if successful
  8726.         AX = number of bytes actually read (0 if at EOF before call)
  8727.     CF set on error
  8728.         AX = error code (05h,06h) (see AH=59h)
  8729. Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software
  8730. Notes:    the B&W socket library performs an INT 21/AX=4401h with DX=0060h before
  8731.       making this call to retrieve the driver information; one should also
  8732.       call the private API interrupt with AH=15h
  8733.     the installation check for the TCP/IP stack is to test for the
  8734.       existence of the character device UDP-IP10
  8735. SeeAlso: INT 14/AH=56h,INT 62"BW-TCP",INT 63/AH=03h,INT 64/AH=00h
  8736. Index:    installation check;BW-TCP hardware driver
  8737. Index:    installation check;BW-TCP TCPIP.SYS
  8738.  
  8739. Format of driver info:
  8740. Offset    Size    Description
  8741.  00h    WORD    I/O base address
  8742.  02h    BYTE    shared memory page (01h = segment 0100h, etc.)
  8743.  03h    BYTE    interrupt vector for private API
  8744.  04h    BYTE    IRQ used by board
  8745.  05h    WORD    size of data buffer
  8746.  07h    WORD    maximum transfer window
  8747.  09h    WORD    time zone
  8748.  0Bh    BYTE    address type (01h user, 04h RARP, 05h BOOTP)
  8749.  0Ch    DWORD    internet address
  8750.  10h    WORD    "value" ???
  8751.  12h    BYTE    subnet mask
  8752.  13h    WORD    "ether_pointer" ???
  8753.  15h    WORD    offset in device driver of log server records
  8754.  17h    WORD    offset in device driver of name server records
  8755.  19h    WORD    offset in device driver of print server records
  8756.  1Bh    WORD    offset in device driver of time server records
  8757.  1Dh    WORD    offset in device driver of gateway records
  8758.  1Fh    WORD    segment address of device driver
  8759.  21h    BYTE    transfer size
  8760.  22h  9 BYTEs    network adapter board name
  8761. ---11/21/91+ ---
  8762.  23h    BYTE    ETHDEV version (major in high nybble, minor in low nybble)
  8763.  24h    BYTE    ETHDEV revision
  8764.  25h    BYTE    TCPIP version (major in high nybble, minor in low nybble)
  8765.  26h    BYTE    TCPIP revision
  8766.  27h    BYTE    BWRPC version (major in high nybble, minor in low nybble)
  8767.  28h    BYTE    BWRPC revision
  8768.  29h    BYTE    BWNFS version (major in high nybble, minor in low nybble)
  8769.  2Ah    BYTE    BWNFS revision
  8770.  2Bh    BYTE    Telnet version (major in high nybble, minor in low nybble)
  8771.  2Ch    BYTE    Telnet revision
  8772.  2Dh    BYTE    NETBIOS version (major in high nybble, minor in low nybble)
  8773.  2Eh    BYTE    NETBIOS revision
  8774. Note:    for each driver, if version=0, the driver is not installed or does
  8775.       not support the version check
  8776.  
  8777. Format of server records:
  8778. Offset    Size    Description
  8779.  00h    BYTE    number of server records following
  8780.  01h  N DWORDs    internet addresses of servers
  8781. --------y-213F-------------------------------
  8782. INT 21 - Trusted Access - NB.SYS - GET STATE
  8783.     AH = 3Fh
  8784.     BX = file handle for device "$$NB$$NB"
  8785.     CX = 0002h (size of state)
  8786.     DS:DX -> buffer for state record
  8787. Return: CF clear if successful
  8788.         AX = number of bytes actually read (0 if at EOF before call)
  8789.     CF set on error
  8790.         AX = error code (05h,06h) (see AH=59h)
  8791. Program: Trusted Access is a security and access-control package by Lassen
  8792.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  8793.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  8794. SeeAlso: AH=40h"NB.SYS",AX=4101h
  8795.  
  8796. Format of state record:
  8797. Offset    Size    Description
  8798.  00h    BYTE    00h off, 01h on
  8799.  01h    BYTE    keys being disabled
  8800.         bit 0: Ctrl-Break
  8801.         bit 1: SysRq
  8802.         bit 2: Ctrl and Alt
  8803.         bit 3: Ctrl-Alt-Del
  8804.         bit 7: all keys (overrides other bits)
  8805. --------D-2140-------------------------------
  8806. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  8807.     AH = 40h
  8808.     BX = file handle
  8809.     CX = number of bytes to write
  8810.     DS:DX -> data to write
  8811. Return: CF clear if successful
  8812.         AX = number of bytes actually written
  8813.     CF set on error
  8814.         AX = error code (05h,06h) (see AH=59h)
  8815. Notes:    if CX is zero, no data is written, and the file is truncated or
  8816.       extended to the current position
  8817.     data is written beginning at the current file position, and the file
  8818.       position is updated after a successful write
  8819.     the usual cause for AX < CX on return is a full disk
  8820. BUG:    a write of zero bytes will appear to succeed when it actually failed
  8821.       if the write is extending the file and there is not enough disk
  8822.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  8823.       whether the file was in fact extended by seeking to 0 bytes from
  8824.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  8825.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8826. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  8827. --------G-2140-------------------------------
  8828. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  8829.     AH = 40h
  8830.     BX = handle for character device "TDHDEBUG"
  8831.     CX = number of bytes to write
  8832.     DS:DX -> hardware breakpoint command (see below)
  8833. Return: CF clear if successful
  8834.         AX = number of bytes actually written
  8835.     CF set on error
  8836.         AX = error code (05h,06h) (see AH=59h)
  8837. Note:    results are retrieved by reading from the device
  8838. SeeAlso: AH=3Fh"Turbo Debug"
  8839.  
  8840. Format of hardware breakpoint commands:
  8841. Offset    Size    Description
  8842.  00h    BYTE    command code
  8843.         00h install interrupt vectors
  8844.         01h get hardware capabilities
  8845.         02h enable hardware breakpoints
  8846.         03h disable hardware breakpoints
  8847.         04h set hardware breakpoint
  8848.         05h clear hardware breakpoint
  8849.         06h set I/O base address and reset hardware
  8850.         07h restore interrupt vectors
  8851. ---command code 00h---
  8852.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  8853.         hardware breakpoint; call with CPU state the same as on
  8854.         the breakpoint except for pushing AX and placing an entry
  8855.         code (FFh if breakout button or breakpoint handle) in AH
  8856. ---command code 04h---
  8857.  01h    BYTE    breakpoint type
  8858.         00h memory read
  8859.         01h memory write
  8860.         02h memory read/write
  8861.         03h I/O read
  8862.         04h I/O write
  8863.         05h I/O read/write
  8864.         06h instruction fetch
  8865.  02h    BYTE    address matching mode
  8866.         00h any address
  8867.         01h equal to test value
  8868.         02h different from test value
  8869.         03h above test value
  8870.         04h below test value
  8871.         05h below or equal to test value
  8872.         06h above or equal to test value
  8873.         07h within inclusive range
  8874.         08h outside specified range
  8875.  03h    DWORD    32-bit linear low address
  8876.  07h    DWORD    32-bit linear high address
  8877.  0Bh    WORD    pass count
  8878.  0Dh    BYTE    data size (01h, 02h, or 04h)
  8879.  0Eh    BYTE    source of matched bus cycle
  8880.         01h CPU
  8881.         02h DMA
  8882.         03h either
  8883.  0Fh    BYTE    data-matching mode
  8884.         00h match any
  8885.         01h equal to test value
  8886.         02h different from test value
  8887.         03h above test value
  8888.         04h below test value
  8889.         05h below or equal to test value
  8890.         06h above or equal to test value
  8891.         07h within specified range
  8892.         08h outside specified range
  8893.  10h    DWORD    low data value
  8894.  14h    DWORD    high data value
  8895.  18h    DWORD    data mask specifying which bits of the data are tested
  8896. ---command code 05h---
  8897.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  8898.         04h)
  8899. ---command code 06h---
  8900.  01h    WORD    base address of hardware debugger board
  8901. --------N-2140-------------------------------
  8902. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  8903.     AH = 40h
  8904.     BX = handle for character device "$IPCUST"
  8905.     CX = number of bytes to write
  8906.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  8907. Return: CF clear if successful
  8908.         AX = number of bytes actually written
  8909.     CF set on error
  8910.         AX = error code (05h,06h) (see AH=59h)
  8911. Notes:    if less than the entire data is read or written, the next read/write
  8912.       continues where the previous one ended; IOCTL calls AX=4402h and
  8913.       AX=4403h both reset the location at which the next operation starts
  8914.       to zero
  8915.     the data pointer is also reset to zero if the previous read or write
  8916.       reached or exceeded the end of the data, when the current function
  8917.       is read and the previous was write, or vice versa
  8918.     v2.1+ uses a new configuration method, but allows the installation
  8919.       of IPCUST.SYS for backward compatibility with other software which
  8920.       must read the PC/TCP configuration
  8921. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  8922. --------y-2140-------------------------------
  8923. INT 21 U - Trusted Access - NB.SYS - SET STATE
  8924.     AH = 40h
  8925.     BX = handle for character device "$$NB$$NB"
  8926.     DS:DX -> state record (see AH=3Fh"NB.SYS")
  8927.     CX ignored
  8928. Return: CF clear if successful
  8929.         AX = number of bytes actually written
  8930.     CF set on error
  8931.         AX = error code (05h,06h) (see AH=59h)
  8932. Program: Trusted Access is a security and access-control package by Lassen
  8933.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  8934.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  8935. SeeAlso: AH=3Fh"NB.SYS"
  8936. --------j-214000BX0002-----------------------
  8937. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  8938.     AX = 4000h
  8939.     BX = 0002h
  8940.     CX = 0000h
  8941.     DS:DX = 0000h:0000h
  8942. Return: CF clear if installed
  8943.         AX = CS of resident code
  8944. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  8945.       noises when programs output a bell
  8946. SeeAlso: AX=4001h
  8947. --------j-214001BX0002-----------------------
  8948. INT 21 - FARTBELL.EXE - FORCE NOISE
  8949.     AX = 4001h
  8950.     BX = 0002h
  8951.     CX = 0000h
  8952.     DS:DX = 0000h:0000h
  8953. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  8954.       noises when programs output a bell
  8955. SeeAlso: AX=4000h
  8956. --------D-2141-------------------------------
  8957. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  8958.     AH = 41h
  8959.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  8960.     CL = attribute mask for deletion (server call only, see below)
  8961. Return: CF clear if successful
  8962.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  8963.     CF set on error
  8964.         AX = error code (02h,03h,05h) (see AH=59h)
  8965. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  8966.       the filespec must be canonical (as returned by AH=60h), and only
  8967.       files matching the attribute mask in CL are deleted
  8968.     DR-DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h
  8969.     DOS does not erase the file's data; it merely becomes inaccessible
  8970.       because the FAT chain for the file is cleared
  8971.     deleting a file which is currently open may lead to filesystem
  8972.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  8973.       referencing the deleted file, thus allowing writes to a nonexistant
  8974.       file.
  8975.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  8976.       is currently open
  8977.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8978. BUG:    DR-DOS 3.41 crashes if called via AX=5D00h
  8979. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AX=F244h,INT 2F/AX=1113h
  8980. --------y-214101DXFFFE-----------------------
  8981. INT 21 - SoftLogic Data Guardian - ???
  8982.     AX = 4101h
  8983.     DX = FFFEh
  8984. Return: AX = 0000h if installed
  8985. Note:    resident code sets several internal variables on this call
  8986. SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h
  8987. --------!------------------------------------
  8988.