home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / sys_util / inter37a.zip / INTERRUP.C < prev    next >
Text File  |  1993-10-03  |  319KB  |  8,668 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:    called by 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. ----------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. --------U-1655FF-----------------------------
  381. INT 16 - Swap Utilities - ???
  382.     AX = 55FFh
  383.     BX >= 0004h
  384.     CX = function
  385.         0000h set ??? flag
  386.         other clear ??? flag
  387. Note:    present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools v7, as
  388.       well as the Trusted Access SCRNBLNK.COM; this may be part of the
  389.       standard TesSeRact library
  390. SeeAlso: INT 2F/AX=5453h
  391. ----------165758BX4858-----------------------
  392. INT 16 U - Netroom CACHECLK - INSTALLATION CHECK
  393.     AX = 5758h
  394.     BX = 4858h ('HX')
  395.     DX = 4443h ('DC')
  396.     CX <> 5758h
  397. Return: BX = 6878h if installed
  398.     CX = 6463h if installed
  399.         AX = code segment of TSR
  400.         CX = internal version??? (v3.00 returns 0100h)
  401. Program: CACHECLK is a "cloaked" disk cache included with Netroom
  402. Notes:    if CX=5758h on entry, CACHECLK returns with all registers unchanged
  403.     the cache statistics are located early in the segment pointed at by
  404.       AX on return
  405. ----------165758BX5754-----------------------
  406. INT 16 U - Netroom ??? - ???
  407.     AX = 5758h
  408.     BX = 5754h
  409.     ???
  410. Return: ???
  411. ----------165758BX5754-----------------------
  412. INT 16 U - Netroom ??? - ???
  413.     AX = 5758h
  414.     BX = 5755h
  415.     DS:SI -> ???
  416. Return: ???
  417. ----------165758BX5756-----------------------
  418. INT 16 U - Netroom ??? - INSTALLATION CHECK
  419.     AX = 5758h
  420.     BX = 5756h
  421. Return: BX <> 5756h if installed
  422. ----------165758BX5858-----------------------
  423. INT 16 U - Netroom PRENET - GET OLD INTERRUPT VECTORS
  424.     AX = 5758h
  425.     BX = 5858h
  426. Return: CF clear
  427.     DX:BX -> saved copy of interrupt vector table
  428. Note:    the installation check consists of calling this function and comparing
  429.       BX against 5858h on return; if it has changed, PRENET is installed
  430. SeeAlso: AX=5758h/BX=5859h
  431. Index:    installation check;Netroom PRENET
  432. ----------165758BX5859-----------------------
  433. INT 16 U - Netroom POSTNET - GET OLD INTERRUPT VECTORS
  434.     AX = 5758h
  435.     BX = 5859h
  436. Return: CF clear
  437.     DX:BX -> saved copy of interrupt vector table
  438. Note:    the installation check consists of calling this function and comparing
  439.       BX against 5859h on return; if it has changed, POSTNET is installed
  440. SeeAlso: AX=5758h/BX=5858h
  441. Index:    installation check;Netroom POSTNET
  442. --------U-166969BX6968-----------------------
  443. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  444.     AX = 6969h
  445.     BX = 6968h
  446. Return: resident code unhooked, but not removed from memory
  447. Index:    uninstall;BACKTALK
  448. --------U-166969BX6969-----------------------
  449. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  450.     AX = 6969h
  451.     BX = 6969h
  452.     DX = 0000h
  453. Return: DX nonzero if installed
  454.         BX = CS of resident code
  455.         DX = PSP segment of resident code
  456.         DS:SI -> ASCIZ identification string "CPoint Talk"
  457. ----------166A6B-----------------------------
  458. INT 16 U - FastJuice - DISABLE/UNLOAD???
  459.     AX = 6A6Bh
  460. Return: ???
  461. Program: FastJuice is a resident battery-power monitor by SeaSide Software
  462. SeeAlso: AX=7463h
  463. Index:    uninstall;FastJuice
  464. --------G-166C63-----------------------------
  465. INT 16 U - TMED v1.6a - INSTALLATION CHECK
  466.     AX = 6C63h ('lc')
  467. Return: AX = 4C43h ('LC') if installed
  468. Program: TMED is a freeware resident memory editor by Liang Chen
  469. --------b-166F00BX0000-----------------------
  470. INT 16 - HP HIL Vectras - HP HIL Extended BIOS INSTALLATION CHECK
  471.     AX = 6F00h
  472.     BX = 0000h
  473. Return: BX = 4850h if present
  474. Notes:    called by recent MS Mouse drivers looking for an HP-HIL mouse
  475.     supported by ES, QS, and RS series HP Vectras
  476. SeeAlso: AX=6F0Dh
  477. --------b-166F0D-----------------------------
  478. INT 16 - HP HIL Vectras - GET HIL Extended BIOS INTERRUPT NUMBER
  479.     AX = 6F0Dh
  480. Return: AH = interrupt number (default 6Fh, 02h means 6Fh as well)
  481. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 to support the HP-HIL
  482.       input system
  483. SeeAlso: AX=6F0Eh,INT 6F"HP"
  484. --------b-166F0E-----------------------------
  485. INT 16 - HP HIL Vectras - SET HIL Extended BIOS INTERRUPT NUMBER
  486.     AX = 6F0Eh
  487.     BL = new interrupt number (60h-6Fh,78h-7Fh)
  488. Return: AH = status (00h = successful)
  489. Desc:    allows the HIL Extended BIOS software to use a non-default interrupt
  490.       number in case of an interrupt conflict with another application
  491. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 to support the HP-HIL
  492.       input system
  493. SeeAlso: AX=6F0Dh,INT 6F"HP"
  494. --------K-1670-------------------------------
  495. INT 16 - FAKEY.COM - INSTALLATION CHECK
  496.     AH = 70h
  497. Return: AX = 1954h if installed
  498. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  499. --------K-1671-------------------------------
  500. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  501.     AH = 71h
  502.     CX = number of keystrokes
  503.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  504. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  505. SeeAlso: AH=05h,AH=72h
  506. --------K-1672-------------------------------
  507. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  508.     AH = 72h
  509. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  510. SeeAlso: AH=71h
  511. --------K-1673-------------------------------
  512. INT 16 - FAKEY.COM - PLAY TONES
  513.     AH = 73h
  514.     CX = number of tones to play
  515.     DS:SI -> array of tones (see below)
  516. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  517. SeeAlso: INT 15/AX=1019h
  518.  
  519. Format of tone array entries:
  520. Offset    Size    Description
  521.  00h    WORD    divisor for timer channel 2
  522.  02h    WORD    duration in clock ticks
  523. ----------167463-----------------------------
  524. INT 16 U - FastJuice - INSTALLATION CHECK
  525.     AX = 7463h ("tc")
  526. Return: AX = 5443h ("TC") if installed
  527. Program: FastJuice is a resident battery-power monitor by SeaSide Software
  528. SeeAlso: AX=6A6Bh
  529. --------R-1675-------------------------------
  530. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  531.     AH = 75h
  532.     AL = number of ticks between checks for new screen changes
  533. --------R-1676-------------------------------
  534. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  535.     AH = 76h
  536.     AL = error checking type
  537.         00h none
  538.         01h fast
  539.         02h slow
  540. --------R-1677-------------------------------
  541. INT 16 - pcANYWHERE III - LOG OFF
  542.     AH = 77h
  543.     AL = mode
  544.         00h wait for another call
  545.         01h leave in Memory Resident Mode
  546.         02h leave in Automatic Mode
  547.         FFh leave in current operating mode
  548. --------U-167761-----------------------------
  549. INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
  550.     AX = 7761h ('wa')
  551. Return: AX = 5741h ('WA') if installed
  552. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  553. SeeAlso: INT 21/AX=7761h
  554. --------U-167788BX7789-----------------------
  555. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  556.     AX = 7788h
  557.     BX = 7789h
  558.     DS:SI -> signature "PUSHDIR VERSION 1.0"
  559. Return: AX = 7789h if installed and signature correct
  560.     BX = 7788h
  561.     SI destroyed
  562. --------R-1679-------------------------------
  563. INT 16 - pcANYWHERE III - CHECK STATUS
  564.     AH = 79h
  565. Return: AX = status
  566.         FFFFh if resident and active
  567.         FFFEh if resident but not active
  568.         FFFDh if in Memory Resident mode
  569.         FFFCh if in Automatic mode
  570.         other value if not resident
  571. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  572. --------R-167A-------------------------------
  573. INT 16 - pcANYWHERE III - CANCEL SESSION
  574.     AH = 7Ah
  575. --------R-167B00-----------------------------
  576. INT 16 - pcANYWHERE III - SUSPEND
  577.     AX = 7B00h
  578. SeeAlso: AH=79h,AX=7B01h
  579. --------R-167B01-----------------------------
  580. INT 16 - pcANYWHERE III - RESUME
  581.     AX = 7B01h
  582. SeeAlso: AH=79h,AX=7B00h
  583. --------R-167C-------------------------------
  584. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  585.     AH = 7Ch
  586. Return: AH = port number
  587.     AL = baud rate
  588.         00h = 50 baud
  589.         01h = 75 baud
  590.         02h = 110 baud
  591.         03h = 134.5 baud
  592.         04h = 150 baud
  593.         05h = 300 baud
  594.         06h = 600 baud
  595.         07h = 1200 baud
  596.         08h = 1800 baud
  597.         09h = 2000 baud
  598.         0Ah = 2400 baud
  599.         0Bh = 4800 baud
  600.         0Ch = 7200 baud
  601.         0Dh = 9600 baud
  602.         0Eh = 19200 baud
  603. --------R-167D-------------------------------
  604. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  605.     AH = 7Dh
  606.     AL = subfunction
  607.         00h set terminal parameters
  608.         01h get terminal parameters
  609.         02h get configuration header and terminal parameters
  610.     DS:CX -> terminal parameter block
  611. --------R-167E-------------------------------
  612. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  613.     AH = 7Eh
  614.     AL = subfunction
  615.         01h port input status
  616.         Return AX = 0 if no characer ready,
  617.                AX = 1 if character ready
  618.         02h port input character
  619.         Return AL = received character
  620.         03h port output character in CX
  621.         11h hang up phone
  622. --------R-167F-------------------------------
  623. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  624.     AH = 7Fh
  625.     AL = subfunction
  626.         00h enable remote keyboard only
  627.         01h enable host keyboard only
  628.         02h enable both keyboards
  629.         08h display top 24 lines
  630.         09h display bottom 24 lines
  631.         10h Hayes modem
  632.         11h other modem
  633.         12h direct connect
  634. --------U-1680-------------------------------
  635. INT 16 - MAKEY.COM - INSTALLATION CHECK
  636.     AH = 80h
  637. Return: AX = 1954h if installed
  638. Program: MAKEY is a utility by System Enhancement Associates
  639. --------U-168765BX4321-----------------------
  640. INT 16 - AT.COM version 8/26/87 - API
  641.     AX = 8765h
  642.     BX = 4321h
  643.     CX = ??? or FFFFh
  644.     if CX = FFFFh
  645.         DX = number of event to remove or FFFFh
  646. Return: ES:BX -> event record array
  647. Program: AT.COM is a resident scheduler by Bill Frolik
  648.  
  649. Format of event record:
  650. Offset    Size    Description
  651.  00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
  652.  01h    BYTE    day of date on which to trigger
  653.  02h    BYTE    month of date on which to trigger
  654.  03h    BYTE    trigger time, minute
  655.  04h    BYTE    trigger time, hour
  656.  05h    WORD    offset of command to be executed
  657. ----------1692-------------------------------
  658. INT 16 - ???
  659.     AH = 92h
  660. Return: AH <= 80h if ???
  661. Note:    called by DOS 3.2 KEYBxx.COM and DOS 5+ KEYB.COM
  662. SeeAlso: AH=05h"PCjr",AH=A2h
  663. --------U-1699-------------------------------
  664. INT 16 - SCOUT v5.4 - GET ???
  665.     AH = 99h
  666. Return: AX = ABCDh
  667.     BX:CX -> ??? (appears to be start of PSP for resident portion)
  668. Program: Scout is a memory-resident file manager by New-Ware
  669. SeeAlso: AH=9Eh
  670. --------U-169E-------------------------------
  671. INT 16 - SCOUT v5.4 - INSTALLATION CHECK
  672.     AH = 9Eh
  673. Return: AX = ABCDh if installed
  674. Program: Scout is a memory-resident file manager by New-Ware
  675. SeeAlso: AH=99h
  676. ----------16A2-------------------------------
  677. INT 16 - ???
  678.     AH = A2h
  679. Return: AH <= 80h if ???
  680. Note:    this function is called by DOS 5+ KEYB.COM
  681. SeeAlso: AH=92h
  682. --------V-16AA-------------------------------
  683. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  684.     AH = AAh
  685.     Various registers set up by high level language.
  686. Return: Graphics performed
  687. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  688.       Modula 2 and others from DataBiten in Sweden. The library is
  689.       installed as a memory resident driver.
  690. ----------16AABBBXEEFF-----------------------
  691. INT 16 U - JORJ v4.3 - INSTALLATION CHECK
  692.     AX = AABBh
  693.     BX = EEFFh
  694. Return: AX = EEFFh if installed
  695.     BX = AABBh if installed
  696.         CL = hotkey name (default 6Ah 'j' for Alt-J)
  697. Program: JORJ is a shareware dictionary with phonetic lookup by Jorj Software
  698.       Co.
  699. Index:    hotkeys;JORJ
  700. --------K-16CA--BX736B-----------------------
  701. INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
  702.     AH = CAh
  703.     BX = 736Bh ("sk")
  704.     CX = 736Bh
  705.     AL = function
  706.         00h installation check
  707.         Return: DX = words available in keyboard buffer
  708.         01h place keystroke in buffer
  709.         DX = keystroke (DH = scan code, DL = ASCII character)
  710.         Return: DX = words available in keyboard buffer
  711.                 FFFFh on error
  712.         02h flush STACKEY and BIOS keyboard buffers
  713. Return: AX = CAFFh if installed
  714.         BX = segment of resident code
  715.         CX = STACKEY version (CH = major, CL = minor)
  716. Program: STACKEY is a shareware keyboard-input faking TSR
  717. Index:    installation check;STACKEY
  718. --------V-16CA00BX6570-----------------------
  719. INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
  720.     AX = CA00h
  721.     BX = 6570h ("ep")
  722.     CX = 6570h
  723. Return: AX = CAFFh if installed
  724.         BX = segment of resident code
  725.         CX = ??? (0090h)
  726. Program: EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
  727.       permanent across mode switches
  728. SeeAlso: AX=CA00h/BX=7670h
  729. --------V-16CA00BX7670-----------------------
  730. INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
  731.     AX = CA00h
  732.     BX = 7670h ("vp")
  733.     CX = 7670h
  734. Return: AX = CAFFh if installed
  735.         BX = segment of resident code
  736.         CX = ??? (0090h)
  737. Program: VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
  738.       permanent across mode switches
  739. SeeAlso: AX=CA00h/BX=6570h
  740. ----------16D724CX00CB-----------------------
  741. INT 16 U - APCAL v3.20 - GET ???
  742.     AX = D724h
  743.     CX = 00CBh
  744. Return: AX = 0000h
  745.     BX = 0000h
  746.     DX:CX -> ??? or 0000h:0000h
  747. Program: APCAL is an optionally-resident shareware appointment calendar by
  748.       Gamma Software
  749. SeeAlso: AX=D724h/CX=00CCh,AX=D724h/CX=00CDh
  750. ----------16D724CX00CC-----------------------
  751. INT 16 U - APCAL v3.20 - GET ???
  752.     AX = D724h
  753.     CX = 00CCh
  754. Return: AX = 0000h
  755.     BX = 0000h
  756.     DX:CX -> ??? (apparently an internal data area)
  757. SeeAlso: AX=D724h/CX=00CBh,AX=D724h/CX=00CDh
  758. ----------16D724CX00CD-----------------------
  759. INT 16 U - APCAL v3.20 - GET ???
  760.     AX = D724h
  761.     CX = 00CDh
  762. Return: AX = ??? (5345h seen)
  763. SeeAlso: AX=D724h/CX=00CBh,AX=D724h/CX=00CCh
  764. --------t-16E0E0-----------------------------
  765. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  766.     AX = E0E0h
  767. Return: AX = 1F1Fh if installed
  768.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  769. Note:    the returned TSR list provides support for communication among TSRs
  770.       built with TurboPower's Turbo Professional and Object Professional
  771.       libraries for Turbo Pascal
  772. SeeAlso: AX=F0F0h
  773. --------U-16ED--BHED-------------------------
  774. INT 16 - BORLAND TURBO LIGHTNING - API
  775.     AH = EDh
  776.     BH = EDh
  777.     BL = function
  778.         00h installation check
  779.         Return: AX = 5205h
  780.             CH = major version
  781.             CL = minor version
  782.         01h ???
  783.         02h get resident CS
  784.         Return: AX = code segment of resident portion
  785.         03h get resident ???
  786.         Return: AX = offset of some buffer in resident code seg
  787.         04h ???
  788.         05h set ???
  789.         AL = 0 to 0Ch
  790.         Return: AX = status
  791.                 0000h if OK
  792.                 0001h if out of range.
  793.         06h ???
  794.         07h ???
  795.         08h ???
  796.         AL = char???
  797.         CX = ???
  798.         DX = ???
  799.         Return: AX = 0, 1 or 2
  800.         09h ???
  801.         0Ah ???
  802.         CX = ???
  803.         DX = ???
  804.         Return: AX = ???
  805.         0Bh ???
  806.         DS:SI -> ???
  807.         Return: AX = 0, 40h, 80h
  808.         0Ch ???
  809.         DS:SI -> ???
  810.         Return: AH = 0
  811.             AL = ???
  812.         0Dh set ???
  813.         (sets an internal flag)
  814.         0Eh ???
  815.         DS:SI -> ???
  816.         Return: AX = 0, 1 or 2.
  817.         0Fh ???
  818.         10h ???
  819. Notes:    AX in general returns an error code from most functions.
  820. Index:    installation check;Turbo Lightning
  821. ----------16EF-------------------------------
  822. INT 16 - CALCULATOR - INSTALLATION CHECK
  823.     AH = EFh
  824. Return: AX = 0088h if installed
  825. Program: CALCULATOR is a shareware popup calculator by Andrzej Brzezinski and
  826.       Marek Kosznik
  827. --------b-16F0-------------------------------
  828. INT 16 - Compaq 386 and newer - SET CPU SPEED
  829.     AH = F0h
  830.     AL = speed
  831.         00h equivalent to 6 MHz 80286 (COMMON)
  832.         01h equivalent to 8 MHz 80286 (FAST)
  833.         02h full 16 MHz (HIGH)
  834.         03h toggles between 8 MHz-equivalent and speed set by system board
  835.         switch (AUTO or HIGH)
  836.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  837.         09h specify speed directly
  838.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  839. SeeAlso: AH=F1h,AH=F3h
  840. --------t-16F0F0-----------------------------
  841. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  842.     AX = F0F0h
  843. Return: AX = 0F0Fh if installed
  844.         ES:DI -> last data block in TSR list
  845. Note:    the returned TSR list provides support for communication among TSRs
  846.       built with TurboPower's Turbo Professional and Object Professional
  847.       libraries for Turbo Pascal
  848. SeeAlso: AX=E0E0h
  849.  
  850. Format of data block:
  851. Offset    Size    Description
  852.  00h    DWORD    pointer to program tag (counted ASCII string)
  853.  04h    WORD    interface version number (0400h)
  854.  06h    DWORD    pointer to command entry point
  855.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  856.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  857. ---swappable TSRs only---
  858.  12h    DWORD    pointer to swapping data
  859.  16h    DWORD    pointer to user data
  860.     more???
  861. --------b-16F1-------------------------------
  862. INT 16 - Compaq 386 and newer - READ CURRENT CPU SPEED
  863.     AH = F1h
  864. Return: AL = speed code (see AH=F0h)
  865.          if AL = 09h, CX = speed code
  866. SeeAlso: AH=F0h,AH=F3h
  867. --------b-16F2-------------------------------
  868. INT 16 - Compaq 386 and newer - DETERMINE ATTACHED KEYBOARD TYPE
  869.     AH = F2h
  870. Return: AL = type
  871.         00h if 11-bit AT keyboard is in use
  872.         01h if 9-bit PC keyboard is in use
  873.     AH = 00h (04/08/93 system ROM)
  874. --------b-16F3-------------------------------
  875. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  876.     AH = F3h
  877.     AL = new limit
  878.         00h limit is 6 Mhz
  879.         01h limit is 8 Mhz/6 Mhz
  880. SeeAlso: AH=F0h,AH=F1h
  881. --------U-16F398-----------------------------
  882. INT 16 U - NORTON GUIDES - INSTALLATION CHECK
  883.     AX = F398h
  884. Return: AX = 6A73h ("js")
  885.     BH = scan code of current hot key
  886.     BL = ASCII code of current hot key
  887. Note:    NG.EXE was written by John Socha
  888. --------b-16F400-----------------------------
  889. INT 16 - Compaq Systempro and higher - CACHE CONTROLLER STATUS
  890.     AX = F400h
  891. Return: AH = E2h
  892.     AL = status
  893.         00h not present
  894.         01h enabled
  895.         02h disabled
  896. SeeAlso: AX=F401h,AX=F402h
  897. --------b-16F401-----------------------------
  898. INT 16 - Compaq Systempro and higher - ENABLE CACHE CONTROLLER
  899.     AX = F401h
  900. Return: AX = E201h
  901. SeeAlso: AX=F400h,AX=F402h
  902. --------b-16F402-----------------------------
  903. INT 16 - Compaq Systempro and higher - DISABLE CACHE CONTROLLER
  904.     AX = F402h
  905. Return: AX = E202h
  906. SeeAlso: AX=F400h,AX=F401h
  907. --------v-16FA00DX5945-----------------------
  908. INT 16 U - PC Tools v8+ VSAFE, VWATCH - INSTALLATION CHECK???
  909.     AX = FA00h
  910.     DX = 5945h
  911. Return: CF clear
  912.     DI = 4559h
  913.     BX = ??? (2F00h or FFFFh) (VSAFE only)
  914. SeeAlso: INT 13/AH=FAh,INT 21/AH=FAh"VDEFEND",INT 2F/AX=6282h
  915. --------v-16FA01DX5945-----------------------
  916. INT 16 U - PC Tools v8+ VSAFE, VWATCH - UNINSTALL
  917.     AX = FA01h
  918.     DX = 5945h
  919. Return: CF clear if successful
  920.     DI = 4559h
  921. SeeAlso: AX=FA00h
  922. --------v-16FA02DX5945-----------------------
  923. INT 16 U - PC Tools v8+ VSAFE, VWATCH - ???
  924.     AX = FA02h
  925.     DX = 5945h
  926.     BL = ???
  927. Return: CF clear
  928.     DI = 4559h
  929.     CL = old value of ???
  930. --------v-16FA03DX5945-----------------------
  931. INT 16 U - PC Tools v8+ VSAFE, VWATCH - ???
  932.     AX = FA03h
  933.     DX = 5945h
  934. Return: CF clear
  935.     DI = 4559h
  936.     AX = 0002h
  937. --------v-16FA04DX5945-----------------------
  938. INT 16 U - PC Tools v8+ VSAFE - GET ???
  939.     AX = FA04h
  940.     DX = 5945h
  941. Return: CF clear
  942.     DI = 4559h
  943.     BL = ???
  944. Note:    this function is a NOP under VWATCH
  945. SeeAlso: AX=FA05h
  946. --------v-16FA05DX5945-----------------------
  947. INT 16 U - PC Tools v8+ VSAFE - SET ???
  948.     AX = FA05h
  949.     DX = 5945h
  950.     BL = ???
  951. Return: CF clear
  952.     DI = 4559h
  953. Note:    this function is a NOP under VWATCH
  954. SeeAlso: AX=FA04h
  955. --------v-16FA06DX5945-----------------------
  956. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET ???
  957.     AX = FA06h
  958.     DX = 5945h
  959. Return: CF clear
  960.     DI = 4559h
  961.     BL = ???
  962. SeeAlso: AX=FA07h
  963. --------v-16FA07DX5945-----------------------
  964. INT 16 U - PC Tools v8+ VSAFE, VWATCH - SET ???
  965.     AX = FA07h
  966.     DX = 5945h
  967.     BL = ???
  968. Return: CF clear
  969.     DI = 4559h
  970. SeeAlso: AX=FA00h,AX=FA06h
  971. --------U-16FE55-----------------------------
  972. INT 16 U - PC Tools v8+ DATAMON, DRIVEMAP, CPSCHED, CPTASK - ???
  973.     AX = FE55h
  974.     CX = segment of resident CPTASK or 0000h???
  975.     DX = ???
  976.     ???
  977. Return: DX:AX -> ???
  978. --------U-16FEA4-----------------------------
  979. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - RESET ???
  980.     AX = FEA4h
  981. Return: nothing
  982. Note:    this function is identical to AX=FFA4h, and is implemented by the same
  983.       code in DESKTOP
  984. SeeAlso: AX=FFA4h
  985. --------U-16FEC6-----------------------------
  986. INT 16 U - PC Tools v7+ CPSCHED - ENABLE/DISABLE CPSCHED API
  987.     AX = FEC6h
  988.     BL = new state (00h enabled, nonzero disabled)
  989. Return: nothing
  990. Desc:    specify whether CPSCHED API calls other than this one and AX=FE55h will
  991.       be honored
  992. --------U-16FED3-----------------------------
  993. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  994.     AX = FED3h
  995.     DS:SI -> 92-byte data record for ???
  996. Return: ???
  997. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  998.       code in DESKTOP
  999. SeeAlso: AX=FFD3h
  1000. --------U-16FEDC-----------------------------
  1001. INT 16 U - PC Tools v7+ CPSCHED - UNHOOK INTERRUPTS
  1002.     AX = FEDCh
  1003. Return: AX,DX destroyed
  1004. Index:    uninstall;CPSCHED
  1005. --------U-16FEEFCX0000-----------------------
  1006. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - INSTALLATION CHECK
  1007.     AX = FEEFh
  1008.     CX = 0000h
  1009. Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
  1010.         BX = segment of resident portion
  1011.         DX = (CPSCHED v8.0) resident CS
  1012. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  1013.       code in DESKTOP
  1014. SeeAlso: AX=FFEFh
  1015. --------U-16FEF1-----------------------------
  1016. INT 16 U - PC Tools v7 only CPSCHED/DESKTOP - ALTERNATE INSTALLATION CHECK
  1017.     AX = FEF1h
  1018.     BX = ???
  1019. Return: CX = 5555h if PC Tools scheduler (CPSCHED or DESKTOP) installed
  1020.     DX = 5555h
  1021. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  1022.       code in DESKTOP
  1023. SeeAlso: AX=FFF1h
  1024. --------K-16FF-------------------------------
  1025. INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
  1026.     AH = FFh
  1027.     DX = scan code
  1028. Return: AL = status
  1029.         00h success
  1030.         01h failure
  1031. Program: KBUF is a keyboard buffer expander by Mark Adler
  1032. SeeAlso: AH=05h
  1033. --------V-16FF-------------------------------
  1034. INT 16 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - QUERY ZOOM INTERRUPT
  1035.     AH = FFh
  1036. Return: AL = interrupt number to which BIOS keyboard handler has been relocated
  1037.     AL+1 = Zoom interrupt number
  1038.     BX = hotkey
  1039. Notes:    the default interrupts are 60h for keyboard and 61h for Zoom interrupt;
  1040.       the default hot key is F10
  1041.     not all vendors include the Tseng TSR which supports these functions
  1042. SeeAlso: INT 60"OPTIMA"
  1043. Index:    hotkeys;OPTIMA 1024 VGA
  1044. --------d-16FF70-----------------------------
  1045. INT 16 U - PC Tools v8+ DRIVEMAP - API
  1046.     AX = FF70h
  1047.     BX = function (0000h-0002h)
  1048.         0000h installation check
  1049.         CX = 4C69h ('Li')
  1050.         DX = 6E6Bh ('nk')
  1051.         Return: AX = 0000h
  1052.             CX = 4350h ('CP')
  1053.             DH = major version
  1054.             DL = minor version
  1055.         0001h ???
  1056.         DL = ???
  1057.         Return: AX = ???
  1058.             DH = ???
  1059.         0002h ???
  1060.         BX = ???
  1061.         DX = ???
  1062.         Return: AX = ??? or FFFEh/FFFFh on error
  1063.             DL = ???
  1064. BUG:    this call will branch to random locations for BX values other than
  1065.       those listed above for v8.0 because a) the incorrect register is
  1066.       range-tested, resulting in BX=0003h-5CD6h being accepted as valid
  1067.       function numbers, and b) the conditional which branches on invalid
  1068.       function numbers jumps to the following instruction, becoming a NOP
  1069. SeeAlso: INT 2F/AX=9203h"DRIVEMAP"
  1070. Index:    installation check;DRIVEMAP
  1071. --------T-16FF80BX0000-----------------------
  1072. INT 16 U - PC Tools v8+ CPTASK - INSTALLATION CHECK
  1073.     AX = FF80h
  1074.     BX = 0000h
  1075.     CX = 0000h
  1076.     DX = 0000h
  1077. Return: CX = 5555h if installed
  1078. Program: CPTASK is a task switcher by Central Point Software
  1079. --------T-16FF80BX0001-----------------------
  1080. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1081.     AX = FF80h
  1082.     BX = 0001h
  1083.     ???
  1084. Return: DX:SI -> task list???
  1085.     BX = ??? (PSP segment of resident code???)
  1086. --------T-16FF80BX0002-----------------------
  1087. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1088.     AX = FF80h
  1089.     BX = 0002h
  1090. Return: DX:SI -> ???
  1091. --------T-16FF80BX0003-----------------------
  1092. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1093.     AX = FF80h
  1094.     BX = 0003h
  1095. Return: AX = ???
  1096. --------T-16FF80BX0004-----------------------
  1097. INT 16 U - PC Tools v8+ CPTASK - SET ???
  1098.     AX = FF80h
  1099.     BX = 0004h
  1100.     CX = new value of ???
  1101. Return: ???
  1102. Note:    this function also sets the ??? flag
  1103. --------T-16FF80BX0005-----------------------
  1104. INT 16 U - PC Tools v8+ CPTASK - GET NUMBER OF ACTIVE TASKS???
  1105.     AX = FF80h
  1106.     BX = 0005h
  1107. Return: AX = number of active tasks???
  1108. --------T-16FF80BX0006-----------------------
  1109. INT 16 U - PC Tools v8+ CPTASK - GET AND CLEAR ??? FLAG
  1110.     AX = FF80h
  1111.     BX = 0006h
  1112. Return: AX = old state (0000h clear, 0001h set)
  1113. --------T-16FF80BX0007-----------------------
  1114. INT 16 U - PC Tools v8+ CPTASK - ???
  1115.     AX = FF80h
  1116.     BX = 0007h
  1117.     ES:DI -> ???
  1118.     ???
  1119. Return: ???
  1120. --------T-16FF80BX0008-----------------------
  1121. INT 16 U - PC Tools v8+ CPTASK - ???
  1122.     AX = FF80h
  1123.     BX = 0008h
  1124.     ???
  1125. Return: ???
  1126. --------T-16FF80BX0009-----------------------
  1127. INT 16 U - PC Tools v8+ CPTASK - GET ???
  1128.     AX = FF80h
  1129.     BX = 0009h
  1130. Return: CL = ???
  1131.     CH = ??? (01h or 02h)
  1132. --------T-16FF80BX4350-----------------------
  1133. INT 16 U - PC Tools v8+ CPTASK - ???
  1134.     AX = FF80h
  1135.     BX = 4350h ('CP')
  1136.     CX = 5354h ('ST')
  1137.     ???
  1138. Return: ???
  1139. --------U-16FF90-----------------------------
  1140. INT 16 U - PC Tools v8+ DESKTOP - ???
  1141.     AX = FF90h
  1142.     ???
  1143. Return: ???
  1144. Note:    available only when popped up
  1145. --------U-16FF91-----------------------------
  1146. INT 16 U - PC Tools v7+ DESKTOP - ???
  1147.     AX = FF91h
  1148.     ???
  1149. Return: AX = 0000h
  1150. Note:    calls AX=FFFDh after ???
  1151. SeeAlso: AX=FF92h,AX=FFFDh
  1152. --------U-16FF92-----------------------------
  1153. INT 16 U - PC Tools v7+ DESKTOP - ???
  1154.     AX = FF92h
  1155.     ???
  1156. Return: AX = 0000h
  1157. Note:    like AX=FF91h, but temporarily sets ??? to 3
  1158. SeeAlso: AX=FF91h,AX=FFFDh
  1159. --------U-16FF93-----------------------------
  1160. INT 16 U - PC Tools v7+ DESKTOP - SET ??? FLAG
  1161.     AX = FF93h
  1162. --------U-16FF94-----------------------------
  1163. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  1164.     AX = FF94h
  1165.     CX = ??? (default 0017h)
  1166. --------U-16FF95-----------------------------
  1167. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  1168.     AX = FF95h
  1169.     BX = ???
  1170. --------U-16FF96-----------------------------
  1171. INT 16 U - PC Tools v7+ DESKTOP - ???
  1172.     AX = FF96h
  1173.     CL = ???
  1174. Return: AX = ???
  1175. --------U-16FF97-----------------------------
  1176. INT 16 U - PC Tools v7+ DESKTOP - ???
  1177.     AX = FF97h
  1178.     DS:DX -> buffer for ??? (see below)
  1179. Return: ???
  1180.  
  1181. Format of buffer:
  1182. Offset    Size    Description
  1183.  00h 48 BYTEs    ???
  1184.  30h 128 BYTEs    ???
  1185. --------U-16FF98-----------------------------
  1186. INT 16 U - PC Tools v7+ DESKTOP - OPEN \DESK.OVL FILE AND SEEK TO OVERLAY
  1187.     AX = FF98h
  1188.     DX = byte offset in file of overlay header
  1189. Return: BX = file handle for DESK.OVL file
  1190. Desc:    open the DESK.OVL file, seek to the specified offset, read in the
  1191.       overlay header, and seek to the offset specified by the header
  1192.  
  1193. Format of overlay header:
  1194. Offset    Size    Description
  1195.  00h 12 BYTEs    NUL-padded ASCII overlay filename
  1196.  0Ch    DWORD    offset within DESK.OVL file of actual overlay
  1197. --------U-16FF99-----------------------------
  1198. INT 16 U - PC Tools v7+ DESKTOP - ???
  1199.     AX = FF99h
  1200.     ???
  1201. Return: ???
  1202. --------U-16FF9A-----------------------------
  1203. INT 16 U - PC Tools v7+ DESKTOP - GET NAME OF COLOR SCHEME
  1204.     AX = FF9Ah
  1205. Return: ES:BX -> name of current color scheme
  1206. Note:    available even if not popped up
  1207. --------U-16FF9B-----------------------------
  1208. INT 16 U - PC Tools v7+ DESKTOP - UNUSED
  1209.     AX = FF9Bh
  1210. Return: ???
  1211. Note:    sounds triple-length beep
  1212. --------T-16FF9C-----------------------------
  1213. INT 16 U - PC Tools v8+ CPTASK - ???
  1214.     AX = FF9Ch
  1215.     BL = ??? (00h,01h,02h)
  1216.     ???
  1217. Return: ???
  1218. Note:    sounds triple-length beep
  1219. ----------16FF9D-----------------------------
  1220. INT 16 U - PC Tools v8+ CPTASK, VSAFE - ???
  1221.     AX = FF9Dh
  1222.     ES:BX -> ??? word
  1223. Return: ???
  1224. Note:    if ES is non-zero, the word pointed at by ES:BX determines whether the
  1225.       ??? flag is cleared (word = 0000h) or set (word is nonzero).    The
  1226.       flag is always cleared if ES=0000h.
  1227. --------U-16FF9E-----------------------------
  1228. INT 16 U - PC Tools v7+ DESKTOP - ???
  1229.     AX = FF9Eh
  1230.     DL = ???
  1231.         bit 7: ???
  1232.         bits 6-0: function number??? (00h,01h,other)
  1233.     ???
  1234. Return: ???
  1235. --------U-16FFA1-----------------------------
  1236. INT 16 U - PC Tools v7+ DESKTOP - ???
  1237.     AX = FFA1h
  1238.     ???
  1239. Return: ???
  1240. Note:    same as AX=FFA2h, except ??? set to FFh
  1241. SeeAlso: AX=FFA2h
  1242. --------U-16FFA2-----------------------------
  1243. INT 16 U - PC Tools v7+ DESKTOP - ???
  1244.     AX = FFA2h
  1245.     ???
  1246. Return: ???
  1247. Note:    calls AX=FFC7h (remove window) and AX=FFFDh
  1248. SeeAlso: AX=FFA1h,AX=FFC7h,AX=FFFDh
  1249. --------y-16FFA3BX0000-----------------------
  1250. INT 16 U - PC Tools v7+ DATAMON - INSTALLATION CHECK
  1251.     AX = FFA3h
  1252.     BX = 0000h
  1253.     CX = 0000h
  1254. Return: AX = segment of resident code
  1255.     BX = 5555h
  1256.     CX = 5555h
  1257. SeeAlso: INT 21/AH=3Fh"NB.SYS",INT 21/AX=4101h
  1258. --------y-16FFA3BX0001-----------------------
  1259. INT 16 U - PC Tools v7+ DATAMON - GET ???
  1260.     AX = FFA3h
  1261.     BX = 0001h
  1262.     CX = 0001h
  1263. Return: AX:BX -> ???
  1264.     CX = BX
  1265. --------y-16FFA3BX0002-----------------------
  1266. INT 16 U - PC Tools v7+ DATAMON - GET ???
  1267.     AX = FFA3h
  1268.     BX = 0002h
  1269.     CX = 0002h
  1270. Return: AX = ??? (0 or 1)
  1271.     CX = BX = AX
  1272. --------y-16FFA3BX0003-----------------------
  1273. INT 16 U - PC Tools v7+ DATAMON - GET ???
  1274.     AX = FFA3h
  1275.     BX = 0003h
  1276.     CX = 0003h
  1277. Return: AX = ??? (0 or 1)
  1278.     CX = BX = AX
  1279. --------y-16FFA3BX0004-----------------------
  1280. INT 16 U - PC Tools v7+ DATAMON - SET ??? FLAG
  1281.     AX = FFA3h
  1282.     BX = 0004h
  1283.     CX = 0004h
  1284. SeeAlso: AX=FFA3h/BX=0005h
  1285. --------y-16FFA3BX0005-----------------------
  1286. INT 16 U - PC Tools v7+ DATAMON - CLEAR ??? FLAG
  1287.     AX = FFA3h
  1288.     BX = 0005h
  1289.     CX = 0005h
  1290. SeeAlso: AX=FFA3h/BX=0004h
  1291. --------y-16FFA3BX0006-----------------------
  1292. INT 16 U - PC Tools v7+ DATAMON - SET PSP SEGMENT ???
  1293.     AX = FFA3h
  1294.     BX = 0006h
  1295.     CX = 0006h
  1296.     DX = current PSP segment as known to DOS??? or 0000h
  1297. --------U-16FFA4-----------------------------
  1298. INT 16 U - PC Tools v7+ DESKTOP - ???
  1299.     AX = FFA4h
  1300. Return: ???
  1301. Notes:    available even when not popped up
  1302.     sets unknown flag if ??? conditions met
  1303. SeeAlso: AX=FEA4h
  1304. --------c-16FFA5CX1111-----------------------
  1305. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  1306.     AX = FFA5h
  1307.     CX = 1111h
  1308. Return: CH = 00h if installed
  1309.         ES:DI -> internal data (see below)
  1310.         CL = cache state
  1311.         01h enabled
  1312.         02h disabled
  1313. SeeAlso: INT 13/AH=27h,INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  1314.  
  1315. Format of internal data:
  1316. Offset    Size    Description
  1317. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  1318.         each byte is either blank (20h) or drive letter (41h-54h)
  1319.  -8    BYTE    ???
  1320.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  1321.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  1322.  -3   3 BYTEs    ???
  1323. --------c-16FFA5CXAAAA-----------------------
  1324. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  1325.     AX = FFA5h
  1326.     CX = AAAAh
  1327. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  1328. SeeAlso: AX=FFA5h/CX=CCCCh
  1329. --------c-16FFA5CXCCCC-----------------------
  1330. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  1331.     AX = FFA5h
  1332.     CX = CCCCh
  1333. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  1334. Note:    delayed writes are automatically disabled on EXECing
  1335.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  1336.       however, delayed writes are not automatically reenabled upon the
  1337.       program's termination in v6.
  1338. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  1339. --------c-16FFA5CXDDDD-----------------------
  1340. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  1341.     AX = FFA5h
  1342.     CX = DDDDh
  1343. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  1344. --------c-16FFA5CXEEEE-----------------------
  1345. INT 16 - PC-Cache v6+ - ENABLE CACHE
  1346.     AX = FFA5h
  1347.     CX = EEEEh
  1348. SeeAlso: AX=FFA5h/CX=DDDDh
  1349. --------c-16FFA5CXFFFF-----------------------
  1350. INT 16 - PC-Cache v6+ - FLUSH CACHE
  1351.     AX = FFA5h
  1352.     CX = FFFFh
  1353. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  1354. --------U-16FFA6-----------------------------
  1355. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ???
  1356.     AX = FFA6h
  1357. Return: DS:SI -> ???
  1358. Note:    available only when popped up
  1359. --------U-16FFA7-----------------------------
  1360. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ??? PATH
  1361.     AX = FFA7h
  1362. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  1363. --------U-16FFA8-----------------------------
  1364. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  1365.     AX = FFA8h
  1366.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  1367.     ???
  1368. Return: ???
  1369. Notes:    available only when popped up
  1370.     strings copied into internal buffer, among other actions
  1371. --------U-16FFA9-----------------------------
  1372. INT 16 U - PC Tools v6.0+ DESKTOP API - GET VERSION STRING
  1373.     AX = FFA9h
  1374. Return: DS:SI -> version string
  1375. --------U-16FFAA-----------------------------
  1376. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  1377.     AX = FFAAh
  1378.     ???
  1379. Return: ???
  1380. Note:    available only when popped up
  1381. --------U-16FFAB-----------------------------
  1382. INT 16 U - PC Tools v6.0+ DESKTOP API - GET EDITOR SETTINGS???
  1383.     AX = FFABh
  1384. Return: DS:SI -> editor setting strings???
  1385. --------U-16FFAC-----------------------------
  1386. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  1387.     AX = FFACh
  1388.     DL = ???
  1389. Note:    available only when popped up
  1390. --------U-16FFAD-----------------------------
  1391. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  1392.     AX = FFADh
  1393.     DL = ???
  1394. --------U-16FFAE-----------------------------
  1395. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ???
  1396.     AX = FFAEh
  1397. Return: AL = ???
  1398. --------U-16FFAF-----------------------------
  1399. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  1400.     AX = FFAFh
  1401.     DL = ???
  1402. --------U-16FFB0-----------------------------
  1403. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  1404.     AX = FFB0h
  1405.     BL = ???
  1406. --------U-16FFB1-----------------------------
  1407. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  1408.     AX = FFB1h
  1409.     ???
  1410. Return: ???
  1411. --------U-16FFB2-----------------------------
  1412. INT 16 U - PC Tools v5.5+ DESKTOP API - GET ???
  1413.     AX = FFB2h
  1414. Return: DS:SI -> ???
  1415. --------U-16FFB3-----------------------------
  1416. INT 16 U - PC Tools v5.5+ DESKTOP API - ???
  1417.     AX = FFB3h
  1418.     ???
  1419. Return: ???
  1420. Note:    available only when popped up
  1421. --------U-16FFB4-----------------------------
  1422. INT 16 U - PC Tools v5.5+ DESKTOP API - SET ??? FLAG
  1423.     AX = FFB4h
  1424. Note:    available only when popped up
  1425. SeeAlso: AX=FFBBh
  1426. --------U-16FFB5-----------------------------
  1427. INT 16 U - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS
  1428.     AX = FFB5h
  1429.     BX = window specifier (000Fh to 0019h) (see below)
  1430.     DX = 0000h get, nonzero = set
  1431.     ES:DI -> window parameter buffer (see below)
  1432. SeeAlso: AX=FFCBh
  1433.  
  1434. Values for window specifier:
  1435.  000Fh    comm/FAX
  1436.  0014h    hotkey selection
  1437.  0015h    ASCII table
  1438.  0016h    system colors menu
  1439.  
  1440. Format of window parameters:
  1441. Offset    Size    Description
  1442.  00h    BYTE    rows in window, not counting frame
  1443.  01h    BYTE    columns in window, not counting frame
  1444.  02h    BYTE    row number of top of window
  1445.  03h    BYTE    2*column number of left of window
  1446.  04h    BYTE    character attribute for ???
  1447.  05h    BYTE    character attribute for background/border
  1448.  06h    BYTE    character attribute for ???
  1449.  07h    DWORD    pointer to ??? on screen
  1450.  0Bh  4 BYTEs    ???
  1451.  0Fh    BYTE    nonzero if window may be resized
  1452. Note:    if running in monochrome mode, character attributes at offsets 04h to
  1453.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  1454.       are changed to 07h on reading
  1455. --------U-16FFB6-----------------------------
  1456. INT 16 U - PC Tools v5.5+ DESKTOP API - GET ???
  1457.     AX = FFB6h
  1458. Return: AH = ???
  1459.     AL = ???
  1460. --------U-16FFB7-----------------------------
  1461. INT 16 U - PC Tools v5.5+ DESKTOP API - GET/SET ???
  1462.     AX = FFB7h
  1463.     BX = direction
  1464.         0000h copy to buffer
  1465.         else  copy from buffer
  1466.     DS:SI -> 70-byte buffer with ???
  1467. Return: data copied
  1468. Note:    available only when popped up under v6.0+
  1469. --------U-16FFB8-----------------------------
  1470. INT 16 U - PC Tools v5.1+ DESKTOP API - GET/SET???
  1471.     AX = FFB8h
  1472.     BH = subfunction
  1473.         00h get
  1474.         Return: BL = old value of ???
  1475.             CL = old value of ??? (v6.0+)
  1476.             CH = old value of ??? (v6.0+)
  1477.         nonzero set
  1478.         BL = new value for ???
  1479.         CL = new value for ??? (v6.0+)
  1480.         CH = new value for ??? (v6.0+)
  1481.         DH = ???
  1482.         Return: AL = old value replaced by CL (v6.0+)
  1483.             AH = old value replaced by CH (v6.0+)
  1484. --------U-16FFB9-----------------------------
  1485. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1486.     AX = FFB9h
  1487.     ???
  1488. Return: AX = ???
  1489.     CX = ???
  1490.     DS:SI -> ???
  1491.     ES:DI -> ???
  1492. --------U-16FFBA-----------------------------
  1493. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1494.     AX = FFBAh
  1495.     ???
  1496. Return: AX = ???
  1497. Note:    available only when popped up
  1498. --------U-16FFBB-----------------------------
  1499. INT 16 U - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG
  1500.     AX = FFBBh
  1501. Note:    available only when popped up
  1502. SeeAlso: AX=FFB4h
  1503. --------U-16FFBC-----------------------------
  1504. INT 16 U - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN???
  1505.     AX = FFBCh
  1506. --------U-16FFBD-----------------------------
  1507. INT 16 U - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES
  1508.     AX = FFBDh
  1509.     ???
  1510. Return: ???
  1511. --------U-16FFBE-----------------------------
  1512. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1513.     AX = FFBEh
  1514.     ???
  1515. Return: ???
  1516. Note:    available only when popped up
  1517. --------U-16FFBF-----------------------------
  1518. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1519.     AX = FFBFh
  1520.     BX = DOS file handle to write on
  1521.     ???
  1522. Return: ???
  1523. Note:    available only when popped up
  1524. --------U-16FFC0-----------------------------
  1525. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1526.     AX = FFC0h
  1527.     ???
  1528. Return: AX = 0000h if successful
  1529.     AX = FFFFh on error
  1530. Note:    available only when popped up
  1531. --------U-16FFC1-----------------------------
  1532. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1533.     AX = FFC1h
  1534.     BL = ???
  1535.     ES:DI -> data structure (see below)
  1536.     ???
  1537. Return: AX = ???
  1538. Note:    available only when popped up
  1539. SeeAlso: AX=FFC2h,AX=FFC3h
  1540.  
  1541. Format of data structure:
  1542. Offset    Size    Description
  1543.  00h    WORD    ???
  1544.  02h    WORD    ???
  1545.  04h    WORD    ???
  1546.  06h    WORD    ???
  1547.  08h    WORD    ???
  1548.  0Ah    BYTE    ???
  1549.  0Bh    BYTE    ??? (zero/nonzero)
  1550. ---v7.1---
  1551.  0Ch    WORD    ???
  1552.  0Eh    BYTE    ???
  1553.  0Fh    WORD    ???
  1554.  11h    WORD    ???
  1555.     ???
  1556. --------U-16FFC2-----------------------------
  1557. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1558.     AX = FFC2h
  1559.     BL = ???
  1560.     ES:DI -> data structure (see AX=FFC1h)
  1561.     ???
  1562. Return: AH = ???
  1563.     CX = ???
  1564.     DH = ???
  1565.     DL = ???
  1566. Note:    available only when popped up
  1567. SeeAlso: AX=FFC1h,AX=FFC3h
  1568. --------U-16FFC3-----------------------------
  1569. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1570.     AX = FFC3h
  1571.     BL = ???
  1572.     ES:DI -> data structure (see AX=FFC1h)
  1573.     ???
  1574. Return: AH = ???
  1575.     CX = ???
  1576.     DH = ???
  1577.     DL = ???
  1578. Note:    available only when popped up
  1579. SeeAlso: AX=FFC1h,AX=FFC2h
  1580. --------U-16FFC4-----------------------------
  1581. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  1582.     AX = FFC4h
  1583. Return: AL = ???
  1584.     BX = segment of scratch space???
  1585.     CX = segment of stored screen data (section covered by window???)
  1586.     DX = segment of window parameters for ???
  1587.     ES:BP -> ???
  1588. Note:    available only when popped up in versions prior to 6.0
  1589. --------U-16FFC5-----------------------------
  1590. INT 16 U - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
  1591.     AX = FFC5h
  1592. Return: BL = nonzero if loaded resident
  1593.        = 00h if nonresident
  1594. Note:    available only when popped up; should call AX=FFEFh first to ensure
  1595.       that DESKTOP is active
  1596. SeeAlso: AX=FFEFh,AX=FFF3h
  1597. --------U-16FFC6-----------------------------
  1598. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  1599.     AX = FFC6h
  1600.     BL = new value for ???
  1601. --------U-16FFC7-----------------------------
  1602. INT 16 U - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW
  1603.     AX = FFC7h
  1604.     ???
  1605. Return: ???
  1606. --------U-16FFC8-----------------------------
  1607. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  1608.     AX = FFC8h
  1609. Return: DS:SI -> ???
  1610. Note:    valid only while popped up
  1611. --------U-16FFC9-----------------------------
  1612. INT 16 U - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD
  1613.     AX = FFC9h
  1614.     DS:SI -> characters to store in clipboard
  1615.     CX = size in bytes
  1616. Return: CF set on error
  1617. Notes:    available only when popped up
  1618.     while copying, bytes of 00h and 0Ah are skipped
  1619. --------U-16FFCA-----------------------------
  1620. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  1621.     AX = FFCAh
  1622.     DX = ???
  1623. Return: AX destroyed
  1624. Note:    available only when popped up
  1625. --------U-16FFCB-----------------------------
  1626. INT 16 U - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS???
  1627.     AX = FFCBh
  1628.     DX = window specifier???
  1629. Return: AX destroyed
  1630. Note:    available only when popped up
  1631. SeeAlso: AX=FFB5h
  1632. --------U-16FFCC-----------------------------
  1633. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  1634.     AX = FFCCh
  1635.     DS:SI -> ASCIZ string
  1636. Return: AX = ???
  1637.     CX = ???
  1638.     ES:DI -> address past last character displayed (v5.1/5.5)
  1639.           -> ??? on menu bar (v6.0)
  1640. --------U-16FFCD-----------------------------
  1641. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1642.     AX = FFCDh
  1643.     DS:DX -> ???
  1644. Return: ???
  1645. Note:    available only when popped up
  1646. --------U-16FFCE-----------------------------
  1647. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS
  1648.     AX = FFCEh
  1649.     CX = ???
  1650. Return: nothing???
  1651. --------U-16FFCF-----------------------------
  1652. INT 16 U - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE
  1653.     AX = FFCFh
  1654. Note:    available only when popped up
  1655. --------U-16FFD0-----------------------------
  1656. INT 16 U - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT???
  1657.     AX = FFD0h
  1658.     ???
  1659. Return: ???
  1660. Note:    available only when popped up
  1661. --------U-16FFD1-----------------------------
  1662. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU
  1663.     AX = FFD1h
  1664. Return: BX = number of copies
  1665.     DX = destination
  1666.         00h cancel
  1667.         01h LPT1
  1668.         02h LPT2
  1669.         03h LPT3
  1670.         04h COM1
  1671.         05h COM2
  1672.         06h disk file
  1673. Note:    available only when popped up
  1674. --------U-16FFD2-----------------------------
  1675. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1676.     AX = FFD2h
  1677.     BX = ???
  1678. Return: BL = ???
  1679. Note:    available only when popped up
  1680. --------U-16FFD3-----------------------------
  1681. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1682.     AX = FFD3h
  1683.     DS:SI -> 92-byte data record for ???
  1684. Return: ???
  1685. SeeAlso: AX=FED3h
  1686. --------U-16FFD4BH3C-------------------------
  1687. INT 16 U - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE
  1688.     AX = FFD4h
  1689.     BH = 3Ch create file (with no attributes)
  1690.          3Dh open file
  1691.          41h delete file
  1692.     BL = access mode
  1693.          00h read only
  1694.          01h write only
  1695.          02h read/write
  1696.     DS:SI -> ASCIZ filename
  1697. Return: BX = file handle
  1698.         0000h on error
  1699. Note:    operation is attempted in (in order) the directory from which the
  1700.       desktop was started/run???, the directory specified with the
  1701.       filename, X:\PCTOOLS\, and X:\
  1702. --------U-16FFD5-----------------------------
  1703. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1704.     AX = FFD5h
  1705.     ???
  1706. Return: ???
  1707. Note:    available only when popped up
  1708. --------U-16FFD6-----------------------------
  1709. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1710.     AX = FFD6h
  1711.     BX = ???
  1712.     CX = ???
  1713.     DX = offset in ???
  1714.     ???
  1715. Return: ???
  1716. Note:    available only when popped up
  1717. --------U-16FFD7-----------------------------
  1718. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1719.     AX = FFD7h
  1720.     ???
  1721. Return: BL = ???
  1722. Note:    available only when popped up
  1723. --------U-16FFD8-----------------------------
  1724. INT 16 U - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE
  1725.     AX = FFD8h
  1726.     DS:BX -> ASCIZ filename
  1727. Return: BX = file handle
  1728.         0000h on error
  1729. Note:    pops up confirmation menu if file already exists
  1730.     only available when popped up???
  1731. --------U-16FFD9-----------------------------
  1732. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  1733.     AX = FFD9h
  1734. Return: AX = ???
  1735. Note:    available only when popped up
  1736. --------U-16FFDA-----------------------------
  1737. INT 16 U - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED
  1738.     AX = FFDAh
  1739.     DS:SI -> ??? (v5.1/5.5 only)
  1740. Return: DS:SI -> filename
  1741. --------U-16FFDB-----------------------------
  1742. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  1743.     AX = FFDBh
  1744.     BL = ???
  1745. Note:    available only when popped up
  1746. --------U-16FFDC-----------------------------
  1747. INT 16 U - PC Tools v5.1+ DESKTOP API - UNHOOK
  1748.     AX = FFDCh
  1749. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  1750.       original values
  1751. Index:    uninstall;PC Tools DESKTOP
  1752. --------U-16FFDDBX0000-----------------------
  1753. INT 16 U - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  1754.     AX = FFDDh
  1755.     BX = 0000h
  1756. Return: CX = 5555h
  1757.     DX = 5555h if PCShell installed in resident mode
  1758. --------U-16FFDDBX0001-----------------------
  1759. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  1760.     AX = FFDDh
  1761.     BX = 0001h
  1762. Return: CF clear if request successful (PCShell will pop up)
  1763.     CF set on error
  1764. SeeAlso: AX=FFDDh/BX=0003h
  1765. --------U-16FFDDBX0002-----------------------
  1766. INT 16 U - PC Tools v5.1-5.5 PCShell API - GET ???
  1767.     AX = FFDDh
  1768.     BX = 0002h
  1769. Return: AL =
  1770.         00h ???
  1771.         01h ???
  1772. Note:    PCShell v6.0+ displays the error message "Incorrect PCRUN version",
  1773.       awaits a keystroke, and aborts the current process
  1774. --------U-16FFDDBX0003-----------------------
  1775. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  1776.     AX = FFDDh
  1777.     BX = 0003h
  1778. SeeAlso: AX=FFDDh/BX=0001h
  1779. --------U-16FFDDBX0004-----------------------
  1780. INT 16 U - PC Tools v5.1+ PCShell API - GET ???
  1781.     AX = FFDDh
  1782.     BX = 0004h
  1783. Return: CF clear if successful
  1784.         DS:SI -> ???
  1785. --------U-16FFDDBX0005-----------------------
  1786. INT 16 U - PC Tools v5.1+ PCShell API - ???
  1787.     AX = FFDDh
  1788.     BX = 0005h
  1789.     ???
  1790. Return: ???
  1791. Note:    resets various variables if certain conditions are met
  1792. --------U-16FFDDBX0006-----------------------
  1793. INT 16 U - PC Tools v5.1+ PCShell API - ???
  1794.     AX = FFDDh
  1795.     BX = 0006h
  1796.     ???
  1797. Return: ???
  1798. Note:    resets various variables if certain conditions are met
  1799. --------U-16FFDDBX0007-----------------------
  1800. INT 16 U - PC Tools v5.1+ PCShell API - SET ??? FLAG
  1801.     AX = FFDDh
  1802.     BX = 0007h
  1803. Return: CF clear if successful
  1804. SeeAlso: AX=FFDDh/BX=0008h
  1805. --------U-16FFDDBX0008-----------------------
  1806. INT 16 U - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  1807.     AX = FFDDh
  1808.     BX = 0008h
  1809. Return: CF undefined
  1810. SeeAlso: AX=FFDDh/BX=0007h
  1811. --------U-16FFDDBX0009-----------------------
  1812. INT 16 U - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
  1813.     AX = FFDDh
  1814.     BX = 0009h
  1815. Return: CF clear if successful
  1816.         DS:SI -> list of pointers (see below)
  1817.  
  1818. Format of returned pointer list:
  1819. Offset    Size    Description
  1820.  00h    WORD    offset of WORD containing ???
  1821.  02h    WORD    offset of name of program to execute
  1822.  04h    WORD    offset of 80-byte buffer for ???
  1823.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  1824.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  1825. --------U-16FFDDBX000A-----------------------
  1826. INT 16 U - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
  1827.     AX = FFDDh
  1828.     BX = 000Ah
  1829. Return: CX = 5555h if running
  1830.     DX = 5555h
  1831. Note:    also sets a flag
  1832. --------U-16FFDDBX000B-----------------------
  1833. INT 16 U - PC Tools v6.0+ PCRUN API - ???
  1834.     AX = FFDDh
  1835.     BX = 000Bh
  1836.     ???
  1837. Return: CX = 5555h if PCRUN active
  1838.     DX = 5555h
  1839. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  1840. --------U-16FFDE-----------------------------
  1841. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU
  1842.     AX = FFDEh
  1843.     DS:DX -> menu description (must be on a paragraph boundary)
  1844. Return: AX = ???
  1845.         AL seems to be the number of the selected button
  1846. Note:    available only when popped up
  1847. SeeAlso: AX=FFEEh
  1848. --------U-16FFDF-----------------------------
  1849. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1850.     AX = FFDFh
  1851.     ???
  1852. Return: ???
  1853. --------U-16FFE0-----------------------------
  1854. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1855.     AX = FFE0h
  1856.     CX = ???
  1857.     DX = ???
  1858. Note:    available only when popped up
  1859. --------U-16FFE1-----------------------------
  1860. INT 16 U - PC Tools v5.1+ DESKTOP API - BEEP
  1861.     AX = FFE1h
  1862. --------U-16FFE2-----------------------------
  1863. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1864.     AX = FFE2h
  1865.     DX = ???
  1866. Return: ???
  1867. Note:    available only when popped up
  1868. --------U-16FFE3-----------------------------
  1869. INT 16 U - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER
  1870.     AX = FFE3h
  1871.     BL = character to print to currently open printer or print file
  1872. Return: CF set on error
  1873. Note:    available only when popped up
  1874. SeeAlso: INT 17/AH=00h
  1875. --------U-16FFE4-----------------------------
  1876. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1877.     AX = FFE4h
  1878.     DX = segment of ???
  1879. Return: ???
  1880. Note:    available only when popped up
  1881. --------U-16FFE5-----------------------------
  1882. INT 16 U - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU
  1883.     AX = FFE5h
  1884.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  1885.     DX = segment of window parameters???
  1886. Return: AX = DOS file handle for file
  1887.         DS:DX -> filename???
  1888.        = FFFFh if cancelled by user
  1889. Note:    available only when popped up
  1890. SeeAlso: AX=FFDAh
  1891. --------U-16FFE6-----------------------------
  1892. INT 16 U - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE
  1893.     AX = FFE6h
  1894. Return: AX = 0000h if no key available
  1895.          else  BIOS keycode
  1896. Notes:    available only when popped up
  1897.     invokes INT 28 idle interrupt before checking for key
  1898. --------U-16FFE7-----------------------------
  1899. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1900.     AX = FFE7h
  1901.     BX = segment of ???
  1902. Return: ???
  1903. Note:    available only when popped up
  1904. --------U-16FFE8-----------------------------
  1905. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER
  1906.     AX = FFE8h
  1907.     CX = number
  1908.     DH = attribute
  1909.     DS:SI -> destination for ASCII number
  1910. Return: DS:SI buffer filled in with alternating characters and attributes
  1911. --------U-16FFE9-----------------------------
  1912. INT 16 U - PC Tools v5.1+ DESKTOP API - GET FILE LIST???
  1913.     AX = FFE9h
  1914. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  1915. Note:    available only when popped up
  1916. --------U-16FFEA-----------------------------
  1917. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING
  1918.     AX = FFEAh
  1919.     DS:SI -> counted string (count byte followed by string)
  1920. Return: ???
  1921. Note:    available only when popped up
  1922. --------U-16FFEB-----------------------------
  1923. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  1924.     AX = FFEBh
  1925.     ???
  1926. Return: ???
  1927. --------U-16FFEC-----------------------------
  1928. INT 16 U - PC Tools v5.1+ DESKTOP API - GET KEY
  1929.     AX = FFECh
  1930.     DS:SI -> FAR routine to ???
  1931.     BX = ???
  1932.     ???
  1933. Return: AX = keystroke
  1934.         FFFFh if F10 pressed to go to menu
  1935. Notes:    available only when popped up
  1936.     invokes INT 28 while waiting for keystroke
  1937.     F10 is hotkey to Desktop menu
  1938. Index:    hotkeys;PC Tools DESKTOP
  1939. --------U-16FFED-----------------------------
  1940. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  1941.     AX = FFEDh
  1942. Return: AX = ???
  1943. Note:    available only when popped up
  1944. --------U-16FFEE-----------------------------
  1945. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS
  1946.     AX = FFEEh
  1947.     DS:SI -> pulldown menu system description (see below)
  1948. Return: AX destroyed
  1949. Notes:    available only when popped up
  1950.     if the accessory does not need any menu items of its own, it should
  1951.       call AX=FFFAh instead
  1952. SeeAlso: AX=FFF7h,AX=FFFAh
  1953.  
  1954. Format of pulldown menu system description:
  1955. Offset    Size    Description
  1956.  00h    WORD    offset of menu bar contents (counted string)
  1957.  02h    WORD    number of items on menu bar
  1958.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  1959.  0Eh 10 BYTEs    which character to highlight in each menu item (01h=first)
  1960.  18h    WORD    offset of first menu definition (see below)
  1961.  1Ah    WORD    offset of second menu definition
  1962.     ...
  1963.  
  1964. Format of menu definition:
  1965. Offset    Size    Description
  1966.  00h    WORD    offset of menu contents (see below)
  1967.  02h    WORD    number of entries in menu
  1968.  04h    for each entry:
  1969.         Offset    Size    Description
  1970.          00h    BYTE    scancode of Alt-key to invoke entry
  1971.          01h    BYTE    character to highlight (01h=first, etc)
  1972.          02h    WORD    offset of FAR routine to handle selection
  1973.  
  1974. Format of menu contents:
  1975. Offset    Size    Description
  1976.  00h    BYTE    number of lines in menu
  1977.  01h    BYTE    width of menu
  1978.  02h  N BYTEs    counted strings, one for each line in menu
  1979. --------U-16FFEFCX0000-----------------------
  1980. INT 16 U - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK
  1981.     AX = FFEFh
  1982.     CX = 0000h
  1983. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  1984.         BX = segment of resident portion
  1985.         AX = ??? (v5.1/5.5 only)
  1986. SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
  1987. --------U-16FFF0-----------------------------
  1988. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  1989.     AX = FFF0h
  1990.     DX = ???
  1991. Return: AX destroyed
  1992. Note:    available only when popped up
  1993. --------U-16FFF1BX0000-----------------------
  1994. INT 16 U - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK
  1995.     AX = FFF1h
  1996.     BX = 0000h  leave ??? flag as is
  1997.         nonzero set ??? flag
  1998. Return: CX = 5555h if installed
  1999.     DX = 5555h
  2000. --------U-16FFF2-----------------------------
  2001. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE
  2002.     AX = FFF2h
  2003.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  2004.         or help text
  2005. Return: AX destroyed
  2006. Notes:    available only when popped up
  2007.     if the specified string does not start with '[', it is displayed
  2008.       centered on the bottom line, else the function key labels are shown
  2009. --------U-16FFF3-----------------------------
  2010. INT 16 U - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP
  2011.     AX = FFF3h
  2012. Note:    releases any EMS being used; restores video mode, page, and cursor
  2013.       shape; and restores interrupt vectors
  2014. SeeAlso: AX=FFC5h,AX=FFEFh
  2015. Index:    uninstall;PC Tools DESKTOP
  2016. --------U-16FFF4-----------------------------
  2017. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  2018.     AX = FFF4h
  2019.     ???
  2020. Return: ???
  2021. Note:    available only when popped up
  2022. SeeAlso: AX=FFF6h
  2023. --------U-16FFF5-----------------------------
  2024. INT 16 U - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
  2025.     AX = FFF5h
  2026. Return: ES:BX -> screen attributes data structure (see below)
  2027.     AL = ??? (v6.0+)
  2028.  
  2029. Format of attribute data structure:
  2030. Offset    Size    Description
  2031.  -1    BYTE    attribute for desktop background
  2032.  00h    BYTE    attribute for normal characters on desktop menu
  2033.  01h    BYTE    attribute for highlighted characters on desktop menu
  2034.  02h  5 BYTEs    ???
  2035.  07h    BYTE    attribute for dialog boxes
  2036.  08h 15 BYTEs    ???
  2037.  17h    BYTE    attribute for message boxes
  2038. --------U-16FFF6-----------------------------
  2039. INT 16 U - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR
  2040.     AX = FFF6h
  2041.     DS = segment of editor buffer structure (see below)
  2042.     BX = ???
  2043.     DX = segment of window parameters structure (see AX=FFB5h)
  2044. Return: ???
  2045. Note:    available only when popped up
  2046. SeeAlso: AX=FFF4h
  2047.  
  2048. Format of editor buffer structure:
  2049. Offset    Size    Description
  2050.  00h    WORD    offset of current cursor position in buffer segment
  2051.  02h  2 BYTEs    ???
  2052.  04h    WORD    offset of beginning of file data in buffer segment
  2053.  06h 10 BYTEs    ???
  2054.  10h  N BYTEs    ASCIZ name of file being edited
  2055. --------U-16FFF7-----------------------------
  2056. INT 16 U - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY???
  2057.     AX = FFF7h
  2058.     DS:SI -> ???
  2059.     ???
  2060. Return: ???
  2061. Notes:    available only when popped up
  2062.     performs input processing on the menu bar set up with AX=FFEEh
  2063. SeeAlso: AX=FFEEh,AX=FFFBh
  2064. --------U-16FFF8-----------------------------
  2065. INT 16 U - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW
  2066.     AX = FFF8h
  2067.     DS:0000h -> window parameters structure (see AX=FFB5h)
  2068.     DS:BX -> DWORD to store address of ??? on screen
  2069. Return: ???
  2070. --------U-16FFF9-----------------------------
  2071. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE
  2072.     AX = FFF9h
  2073.     ES:BX -> FAR routine to redisplay the utility's window
  2074. Note:    available only when popped up
  2075. --------U-16FFFA-----------------------------
  2076. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS
  2077.     AX = FFFAh
  2078. Notes:    available only when popped up
  2079.     adds the "Window" option to the "Desktop" option which is the only one
  2080.       available when no accessories are active.  Unlike AX=FFEEh, no
  2081.       additional menu items are added between "Desktop" and "Window"
  2082. SeeAlso: AX=FFEEh,AX=FFFBh
  2083. --------U-16FFFB-----------------------------
  2084. INT 16 U - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR
  2085.     AX = FFFBh
  2086. Return: ???
  2087. Notes:    available only when popped up
  2088.     performs input processing on the standard menu bar set up with AX=FFFAh
  2089. SeeAlso: AX=FFF7h
  2090. --------U-16FFFC-----------------------------
  2091. INT 16 U - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR
  2092.     AX = FFFCh
  2093. Return: ES:BX -> hotkey table (see below)
  2094.     DS:DX = original INT 09 vector
  2095.  
  2096. Format of hotkey table:
  2097. Offset    Size    Description
  2098.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  2099.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  2100.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  2101.  06h  2 BYTEs    scancode/shift state for screen autodial key
  2102. --------U-16FFFD-----------------------------
  2103. INT 16 U - PC Tools v5.1+ DESKTOP API - COPY ???
  2104.     AX = FFFDh
  2105. Return: AX destroyed
  2106. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  2107. SeeAlso: AX=FF91h,AX=FF92h
  2108. --------M-16FFFE-----------------------------
  2109. INT 16 U - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR
  2110.     AX = FFFEh
  2111. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  2112. --------M-16FFFF-----------------------------
  2113. INT 16 U - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR
  2114.     AX = FFFFh
  2115. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  2116. --------P-17----DX0ABC-----------------------
  2117. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  2118.     DX = 0ABCh
  2119. Return: AX = AAAAh
  2120.     DX = BAAAh
  2121.     ES = code segment of resident portion
  2122. --------P-17----DX0B90-----------------------
  2123. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  2124.     DX = 0B90h
  2125. Return: DX = ABBBh
  2126.     ES = code segment of resident portion
  2127. --------P-17----DX0B91-----------------------
  2128. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  2129.     DX = 0B91h
  2130. Return: DX = ABCBh
  2131.     ES = code segment of resident portion
  2132. --------P-17----DX0F5F-----------------------
  2133. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  2134.     DX = 0F5Fh
  2135. Return: AX = AAAAh
  2136.     DX = F555h
  2137.     ES = code segment of resident portion
  2138. --------B-1700-------------------------------
  2139. INT 17 - PRINTER - WRITE CHARACTER
  2140.     AH = 00h
  2141.     AL = character to write
  2142.     DX = printer number (00h-02h)
  2143. Return: AH = printer status (see below)
  2144. SeeAlso: AH=02h,AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
  2145.  
  2146. Bitfields for printer status:
  2147.  bit 7    not busy
  2148.  bit 6    acknowledge
  2149.  bit 5    out of paper
  2150.  bit 4    selected
  2151.  bit 3    I/O error
  2152.  bits 2,1 unused
  2153.  bit 0    timeout
  2154. --------B-1701-------------------------------
  2155. INT 17 - PRINTER - INITIALIZE PORT
  2156.     AH = 01h
  2157.     DX = printer number (00h-02h)
  2158. Return: AH = printer status (see AH=00h)
  2159. Note:    some printers report that they are ready immediately after
  2160.       initialization when they actually are not; a more reliable result may
  2161.       be obtained by calling AH=02h after a brief delay
  2162. SeeAlso: AH=02h,AH=FFh"PC-MOS",INT 1A/AH=10h"NEC"
  2163. --------B-1702-------------------------------
  2164. INT 17 - PRINTER - GET STATUS
  2165.     AH = 02h
  2166.     DX = printer number (00h-02h)
  2167. Return: AH = printer status (see AH=00h)
  2168. Note:    PRINTFIX from MS-DOS 5.0 hooks this function and always returns AH=90h
  2169. SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
  2170. --------P-1702--DX0000-----------------------
  2171. INT 17 - INSET - INSTALLATION CHECK
  2172.     AH = 02h
  2173.     DX = 0000h
  2174.     CX = 07C3h (1987d)
  2175. Return: CX = 07C2h (1986d) if installed
  2176. Program: INSET is a text/graphics integration program
  2177. --------P-1703-------------------------------
  2178. INT 17 U - Emulaser ELTSR - INSTALL INTERRUPT HANDLERS
  2179.     AH = 03h
  2180. Return: BX = ???
  2181.     CX = ???
  2182. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2183.       Vertisoft Systems, Inc.
  2184. SeeAlso: AH=04h"Emulaser",AH=0Eh,INT 1A/AH=E5h
  2185. --------c-1703-------------------------------
  2186. INT 17 - PC-MOS/386 v5.01 - PRINT SPOOLER - PRINT STRING
  2187.     AH = 03h
  2188.     DX = printer port number
  2189.     CX = number of characters to print
  2190.     DS:SI -> string
  2191. Return: AH = printer status (see AH=00h)
  2192.     CX = number of characters actually printed
  2193. Desc:    send an entire string of chars to the print spooler with a single call
  2194. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  2195.       operating system by The Software Link, Inc.
  2196. SeeAlso: AH=00h,AH=01h,AH=02h,AH=FFh"PC-MOS"
  2197. --------P-1704-------------------------------
  2198. INT 17 U - Emulaser ELTSR - BEGIN CAPTURING OUTPUT
  2199.     AH = 04h
  2200. Note:    has no effect unless ELTSR is deactivated (see AX=0503h)
  2201. SeeAlso: AH=03h"Emulaser",AX=0503h,INT 1A/AH=E5h
  2202. --------P-170500-----------------------------
  2203. INT 17 U - Emulaser ELTSR - ???
  2204.     AX = 0500h
  2205.     ???
  2206. Return: AX = unload status (0001h safe to unload, 0002h not safe)
  2207.     BX = ???
  2208.     CX = PSP segment of ELTSR
  2209.     DX = activity flag (0000h disabled, 0001h capturing, 0002h ???printing)
  2210.     SI = ???
  2211.     DI = ???
  2212. SeeAlso: AH=04h,INT 1A/AH=E5h
  2213. --------P-170501-----------------------------
  2214. INT 17 U - Emulaser ELTSR - UNHOOK INTERRUPTS
  2215.     AX = 0501h
  2216. Return: (see AX=0500h)
  2217. Note:    restores interrupt vectors without checking whether they have been
  2218.       hooked by later programs; should only be called if ELTSR reports
  2219.       that it is safe to unload
  2220. SeeAlso: AH=04h,AX=0500h,AX=0503h,INT 1A/AH=E5h
  2221. Index:    uninstall;Emulaser ELTSR
  2222. --------P-170502-----------------------------
  2223. INT 17 U - Emulaser ELTSR - SET ???
  2224.     AX = 0502h
  2225.     BL = Emulaser port (31h = LPT1, 32h = LPT2, 33h = LPT3)
  2226.     CL = ???
  2227.     DL = ???
  2228. Return: (see AX=0500h)
  2229. SeeAlso: AH=04h,AX=0500h,INT 1A/AH=E5h
  2230. --------P-170503-----------------------------
  2231. INT 17 U - Emulaser ELTSR - DEACTIVATE???
  2232.     AX = 0503h
  2233. Return: (see AX=0500h)
  2234. SeeAlso: AH=04h,AX=0500h,AX=0501h,INT 1A/AH=E5h
  2235. --------P-1706-------------------------------
  2236. INT 17 U - Emulaser ELTSR - ???
  2237.     AH = 06h
  2238.     ???
  2239. Return: ???
  2240. SeeAlso: AH=05h,INT 1A/AH=E5h
  2241. --------P-1707-------------------------------
  2242. INT 17 U - Emulaser ELTSR - OPEN CAPTURE FILE
  2243.     AH = 07h
  2244.     ES:DX -> ASCIZ filename to be opened
  2245. Return: ???
  2246. Note:    new output will be appended to the specified file
  2247. SeeAlso: AH=08h,INT 1A/AH=E5h
  2248. --------P-1708-------------------------------
  2249. INT 17 U - Emulaser ELTSR - CLOSE CAPTURE FILE
  2250.     AH = 08h
  2251.     ???
  2252. Return: ???
  2253. Desc:    close the file previously opened by function 07h
  2254. SeeAlso: AH=07h,INT 1A/AH=E5h
  2255. --------P-1709-------------------------------
  2256. INT 17 U - Emulaser ELTSR - PRINT CAPTURE FILE???
  2257.     AH = 09h
  2258.     BX = ???
  2259.     CX = ???
  2260.     DX = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  2261. Return: AX = status
  2262.         00h successful
  2263.         FFh failed
  2264. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2265.       Vertisoft Systems, Inc.
  2266. Note:    this function calls through to INT 1A/AX=E401h, and thus requires
  2267.       that either ELSPL or Disk Spool II be installed
  2268. SeeAlso: AH=0Ah,INT 1A/AX=E401h,INT 1A/AH=E5h
  2269. --------P-170A-------------------------------
  2270. INT 17 U - Emulaser ELTSR - SET ??? FILENAME
  2271.     AH = 0Ah
  2272.     ES:BX -> ??? buffer
  2273.     CX = length of ??? buffer
  2274. Return: ???
  2275. Note:    copies the specified name into the buffer passed to ELSPL as the
  2276.       filename by AH=09h
  2277. SeeAlso: AH=09h,INT 1A/AH=E5h
  2278. --------P-170B-------------------------------
  2279. INT 17 U - Emulaser ELTSR - GET ???
  2280.     AH = 0Bh
  2281. Return: AX:BX -> ???
  2282. SeeAlso: AH=0Ah,INT 1A/AH=E5h
  2283. --------P-170C-------------------------------
  2284. INT 17 U - Emulaser ELTSR - SET ??? FLAG
  2285.     AH = 0Ch
  2286.     ???
  2287. Return: ???
  2288. SeeAlso: AH=0Bh,INT 1A/AH=E5h
  2289. --------P-170D-------------------------------
  2290. INT 17 U - Emulaser ELTSR - GET TRUE ScrlLk STATE
  2291.     AH = 0Dh
  2292. Return: AX = state (0000h off, 0010h on)
  2293. Desc:    determine the actual state of ScrlLk even when Emulaser is controlling
  2294.       the ScrlLk light as its activity indicator
  2295. SeeAlso: AH=0Ch,INT 16/AH=02h,INT 1A/AH=E5h
  2296. --------P-170E-------------------------------
  2297. INT 17 U - Emulaser ELTSR - BACKGROUND PROCESSING
  2298.     AH = 0Eh
  2299. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  2300.       Vertisoft Systems, Inc.
  2301. Note:    this function is called by ELTSR on every INT 08 to allow data to be
  2302.       processed in the background, but may also be called by applications
  2303.       to give Emulaser additional CPU time
  2304. SeeAlso: AH=0Dh,INT 1A/AH=E5h
  2305. --------P-172000-----------------------------
  2306. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - INSTALLATION CHECK
  2307.     AX = 2000h
  2308.     BL = printer number???
  2309. Return:    AX = status (see below)
  2310.     BX = driver version number (BH=major,BL=minor)
  2311.     CH = ??? (00h)
  2312.     CL = ???
  2313.     DX = ??? (0100h)
  2314. Note:    also enables the remaining printer driver functions (2001h-2007h)
  2315. SeeAlso: AX=2001h,AX=2002h,AX=2003h,AX=2004h,AX=2005h,AX=2006h,AX=2007h
  2316.  
  2317. Values for status:
  2318.  0000h    successful
  2319.  0001h    invalid printer???
  2320.  0002h    ???
  2321.  0003h    invalid subfunction
  2322.  0005h    driver disabled, must call function 00h first
  2323.  0009h    unknown printer error
  2324.  000Bh    printer not selected
  2325.  000Ch    printer out of paper
  2326.  000Eh    error while writing to serial printer
  2327.  000Fh    ???
  2328.  0010h    invalid function number
  2329.  0011h    value out of range
  2330. --------P-172001-----------------------------
  2331. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - SET ??? FLAG
  2332.     AX = 2001h
  2333.     BL = printer number???
  2334. Return: AX = status (see AX=2000h)
  2335. --------P-172002-----------------------------
  2336. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - GET INFORMATION
  2337.     AX = 2002h
  2338.     BL = printer number???
  2339.     CL = desired information
  2340.         00h printer type
  2341.         Return: ES:DI -> ASCIZ printer name
  2342.         01h paper size
  2343.         DX = size index
  2344.         Return: ES:DI -> ASCIZ paper size description
  2345.         02h ???
  2346.         Return: BX = ???
  2347.         03h printer information???
  2348.         DX = ???
  2349.         ES:BX -> buffer for ??? (min 134 bytes)
  2350. Return: AX = status (see AX=2000h)
  2351. SeeAlso: AX=2000h,AX=2004h
  2352. --------P-172003-----------------------------
  2353. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ???
  2354.     AX = 2003h
  2355.     ES:BX -> ???
  2356. Return: AX = status (see AX=2000h)
  2357. SeeAlso: AX=2000h,AX=2004h
  2358. --------P-172004-----------------------------
  2359. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - GET ???
  2360.     AX = 2004h
  2361.     BL = printer number???
  2362. Return: AX = status (see AX=2000h)
  2363.     ES:DI -> ???
  2364. SeeAlso: AX=2000h,AX=2003h
  2365. --------P-172005-----------------------------
  2366. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ADVANCE PRINTER TO NEXT PAGE
  2367.     AX = 2005h
  2368.     BL = printer number???
  2369. Return: AX = status (see AX=2000h)
  2370. Note:    this function also clears the flag set by AX=2001h
  2371. SeeAlso: AX=2000h,AX=2001h,AX=2006h
  2372. --------P-172006-----------------------------
  2373. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - ADVANCE TO NEXT PAGE & SHUT DOWN
  2374.     AX = 2006h
  2375.     BL = printer number???
  2376. Return: AX = status (see AX=2000h)
  2377. Note:    this function also clears the flag set by AX=2001h and disables
  2378.       functions other than AX=2000h
  2379. SeeAlso: AX=2000h,AX=2001h,AX=2005h
  2380. --------P-172007-----------------------------
  2381. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER - UNIMPLEMENTED
  2382.     AX = 2007h
  2383. Return: AX unchanged
  2384. SeeAlso: AX=2000h
  2385. --------N-172400-----------------------------
  2386. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  2387.     AX = 2400h
  2388.     DL = new state
  2389.         00h disabled
  2390.         01h enabled
  2391. Return: DL = 24h if installed
  2392.     DH = minor version number
  2393.     CX = network address of this machine
  2394.     AL = status
  2395.         00h successful
  2396.         01h timeout
  2397.         02h header error
  2398.         03h data error
  2399.         04h busy
  2400.         05h invalid parameters
  2401. SeeAlso: AX=2403h,INT 16/AX=4500h
  2402. --------N-172401-----------------------------
  2403. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  2404.     AX = 2401h
  2405.     BL = timeout in clock ticks
  2406. Return: AL = status (see AX=2400h)
  2407.     DX:BX -> receive buffer
  2408. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  2409. --------N-172402-----------------------------
  2410. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  2411.     AX = 2402h
  2412.     transmit buffer filled (see AX=2403h)
  2413. Return: AL = status (see AX=2400h)
  2414. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  2415. --------N-172403-----------------------------
  2416. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  2417.     AX = 2403h
  2418. Return: AL = status (see AX=2400h)
  2419.     CX = number of characters in receive ring buffer
  2420.     DX:BX -> transmit buffer
  2421. SeeAlso: AX=2400h,AX=2402h
  2422. --------N-172404-----------------------------
  2423. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  2424.     AX = 2404h
  2425.     BX = target address
  2426. Return: AL = status (see AX=2400h)
  2427. SeeAlso: AX=2402h,AX=2405h
  2428. --------N-172405-----------------------------
  2429. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  2430.     AX = 2405h
  2431.     BX = target address
  2432. Return: AL = status (see AX=2400h)
  2433. SeeAlso: AX=2402h,AX=2404h
  2434. --------N-172406-----------------------------
  2435. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  2436.     AX = 2406h
  2437. Return: AL = status (see AX=2400h)
  2438. SeeAlso: AX=2407h,AX=240Ah
  2439. --------N-172407-----------------------------
  2440. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  2441.     AX = 2407h
  2442. Return: AL = status (see also AX=2400h)
  2443.         06h end of data
  2444.     DL = received character
  2445. SeeAlso: AX=2406h
  2446. --------N-172408-----------------------------
  2447. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  2448.     AX = 2408h
  2449. Return: AL = status (see also AX=2400h)
  2450.         06h end of data
  2451.     CX = number of bytes in receive buffer
  2452.     DX:SI -> receive buffer
  2453. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  2454. --------N-172409-----------------------------
  2455. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  2456.     AX = 2409h
  2457.     BX = target address
  2458.     CX = number of data bytes
  2459.     DL = command code to send
  2460.     DS:SI -> data bytes for command
  2461. Return: AL = status (see also AX=2400h)
  2462.         03h no response
  2463.         06h remote currently unable to perform command
  2464. SeeAlso: AX=2405h,AX=2408h
  2465. --------N-17240A-----------------------------
  2466. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  2467.     AX = 240Ah
  2468. Return: AL = status (see AX=2400h)
  2469. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  2470. --------N-17240B-----------------------------
  2471. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  2472.     AX = 240Bh
  2473.     DL = character to send
  2474. Return: AL = status (see also AX=2400h)
  2475.         03h transmission error
  2476.         06h write error
  2477. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  2478. --------N-17240C-----------------------------
  2479. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  2480.     AX = 240Ch
  2481. Return: AL = status (see also AX=2400h)
  2482.         03h transmission error
  2483.         06h remote breaks connection
  2484. SeeAlso: AX=240Ah,AX=240Bh
  2485. --------J-175000-----------------------------
  2486. INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
  2487.     AX = 5000h
  2488.     BX = country code
  2489.         0001h USA (English), 0051h Japan
  2490. Return: AL = status
  2491.         00h successful
  2492.         01h bad country code
  2493.         02h other error
  2494. SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
  2495. --------J-175001-----------------------------
  2496. INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
  2497.     AX = 5001h
  2498. Return: AL = status
  2499.         00h successful
  2500.         BX = country code
  2501.         02h error
  2502. SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
  2503. --------J-1751-------------------------------
  2504. INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
  2505.     AH = 51h
  2506.     DX = 2-byte JIS code
  2507. Return: DX = shift-JIS value or 0000h on error
  2508. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  2509.       characters to Shift-JIS characters, and the other performs the
  2510.       opposite conversion
  2511. SeeAlso: AX=5000h,AH=52h
  2512. --------J-1752-------------------------------
  2513. INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
  2514.     AH = 52h
  2515.     DX = 2-byte shift-JIS code
  2516. Return: DX = JIS code or 0000h on error
  2517. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  2518.       characters to Shift-JIS characters, and the other performs the
  2519.       opposite conversion
  2520. SeeAlso: AH=51h
  2521. --------V-1760-------------------------------
  2522. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  2523.     AH = 60h
  2524. Return: AL = 60h
  2525.     DX = CS of resident code
  2526. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  2527.     FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
  2528.       consisting of an 80h followed by the actual command
  2529. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  2530. --------V-1761-------------------------------
  2531. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  2532.     AH = 61h
  2533. Return: AL = 61h
  2534.     DX = CS of resident code
  2535. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  2536. --------P-1762-------------------------------
  2537. INT 17 U - T2PS v1.0 - UNINSTALL
  2538.     AH = 62h
  2539. Return: nothing
  2540. SeeAlso: AH=63h,AH=64h,INT 05/AX=554Eh
  2541. --------P-1763-------------------------------
  2542. INT 17 U - T2PS v1.0 - SET PARAMETERS
  2543.     AH = 63h
  2544.     ES:SI -> settings (see below)
  2545. Program: T2PS is a shareware ASCII-to-PostScript converter by A.N.D.
  2546.       Technologies
  2547. SeeAlso: AH=62h,AH=64h,INT 05/AX=4E57h
  2548.  
  2549. Format of settings:
  2550. Offset    Size    Description
  2551.  00h    WORD    LPT port number (0=LPT1, etc.)
  2552.  02h    WORD    page heigh in points
  2553.  04h    WORD    page width in points
  2554.  06h    WORD    top margin in points
  2555.  08h    WORD    bottom margin in points
  2556.  0Ah    WORD    left margin in points
  2557.  0Ch    WORD    right margin in points
  2558.  0Eh    WORD    font size in points
  2559.  10h    WORD    tab size
  2560.  12h    WORD    timeout in clock ticks
  2561. --------P-1764-------------------------------
  2562. INT 17 U - T2PS v1.0 - GET PARAMETERS
  2563.     AH = 64h
  2564.     ES:SI -> buffer for settings (see AH=63h)
  2565. Return: ES:SI buffer filled
  2566. SeeAlso: AH=62h,AH=63h,INT 05/AX=5053h
  2567. --------N-1781-------------------------------
  2568. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  2569.     AH = 81h
  2570.     AL = 00h (NTNX compatibility mode)
  2571.     CL = number of jobs to cancel
  2572. Return: AL = status
  2573.         00h success
  2574.         01h..7Fh warning
  2575.         80h general failure
  2576.         81h host overloaded (NTNX only)
  2577.         82h module busy (NTNX only)
  2578.         83h host busy (NTNX only)
  2579.         84h re-entry flag set
  2580.         85h invalid request
  2581.         86h invalid printer
  2582.         87h invalid process ID
  2583.         89h access denied
  2584.         8Ah option not available for given port type
  2585.         8Bh option not available for given task type
  2586.         91h printer busy
  2587.         C2h file not found
  2588.         C3h path not found
  2589.         C4h file access failure
  2590. Note:    cancels the last CL printouts for the current task
  2591. SeeAlso: AH=82h
  2592. --------N-1782-------------------------------
  2593. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  2594.     AH = 82h
  2595.     AL = 00h (NTNX compatibility mode)
  2596. Return: AL = status (see AH=81h)
  2597. SeeAlso: AH=81h
  2598. --------N-1783-------------------------------
  2599. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  2600.     AH = 83h
  2601.     AL = mode
  2602.         00h NTNX compatibility
  2603.         CL = number of copies (max 99, default 1)
  2604.         02h MW386 v2+
  2605.         BX = logical device number
  2606.             00h-03h = LPT1-LPT4
  2607.             04h-07h = COM1-COM4
  2608.         CX = number of copies
  2609. Return: AL = status (see AH=81h)
  2610. Note:    in NTNX compatibility mode, this function only affects LPT1
  2611. --------N-1784-------------------------------
  2612. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  2613.     AH = 84h
  2614.     AL = mode
  2615.         00h NTNX compatibility
  2616.         02h MW386 v2+
  2617.         BX = logical device number
  2618.             00h-03h = LPT1-LPT4
  2619.             04h-07h = COM1-COM4
  2620. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  2621.       under MW386 in NTNX compatibility mode)
  2622. --------J-1784-------------------------------
  2623. INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
  2624.     AH = 84h
  2625.     AL = character
  2626.     DX = printer number
  2627. Return: AH = printer status (see AH=00h)
  2628. SeeAlso: AH=00h,AH=85h
  2629. --------J-1785-------------------------------
  2630. INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
  2631.     AH = 85h
  2632.     AL = new state (00h enabled, 01h disabled)
  2633. SeeAlso: AH=84h"AX"
  2634. --------N-1787-------------------------------
  2635. INT 17 - Alloy NTNX - SET INDOS POINTER
  2636.     AH = 87h
  2637.     AL = 00h
  2638.     CX:BX -> buffer for user-written printer drivers
  2639. Return: BX,CX destroyed
  2640. Note:    must be executed before the printer is enabled
  2641. SeeAlso: AH=8Ah
  2642. --------N-1788-------------------------------
  2643. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  2644.     AH = 88h
  2645.     AL = mode
  2646.         00h NTNX compatibility
  2647.         DX = NTNX printer number
  2648.             00h host LPT1
  2649.             01h host LPT2
  2650.             02h host LPT3
  2651.             03h host LPT4
  2652.             04h host COM1
  2653.             05h host COM2
  2654.             06h user's logical COM2
  2655.             07h user's terminal AUX port
  2656.             08h user's logical COM1 (MW386 only)
  2657.         01h MW386
  2658.         DX = MW386 printer number
  2659. Return: AH = status (see AH=81h)
  2660. Note:    removes specified printer from the spooler's list of printers
  2661. SeeAlso: AH=89h,AH=8Bh
  2662. --------N-1789-------------------------------
  2663. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  2664.     AH = 89h
  2665.     AL = mode
  2666.         00h NTNX compatibility
  2667.         DX = NTNX printer number (see AH=88h)
  2668.         01h MW386
  2669.         DX = MW386 printer number
  2670. Return: AL = status (see AH=81h)
  2671. Note:    the specified printer is added to the spooler's list of available
  2672.       printers
  2673. SeeAlso: AH=88h,AH=8Bh
  2674. --------N-178A-------------------------------
  2675. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  2676.     AH = 8Ah
  2677.     ???
  2678. SeeAlso: AH=92h
  2679. --------N-178B-------------------------------
  2680. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  2681.     AH = 8Bh
  2682.     DS:DX -> ASCIZ printer name
  2683. Return: AL = status (see also AH=81h)
  2684.         00h successful
  2685.         DX = physical device number
  2686. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  2687. --------N-178C-------------------------------
  2688. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  2689.     AH = 8Ch
  2690.     DX = physical device number
  2691.     ES:DI -> 17-byte buffer for ASCIZ device name
  2692. Return: AL = status (see also AH=81h)
  2693.         00h successful
  2694.         ES:DI buffer filled
  2695. SeeAlso: AH=88h,AH=8Bh
  2696. --------N-178D-------------------------------
  2697. INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
  2698.     AH = 8Dh
  2699.     AL = 00h
  2700. Notes:    clears all buffers and resets spooler to boot-up values
  2701.     MW386 supports this function for compatibility only; it is a NOP
  2702. Return: AL = status (see AH=81h)
  2703. --------N-178E-------------------------------
  2704. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  2705.     AH = 8Eh
  2706.     AL = 00h
  2707. Return: CX:BX -> INT 28 entry point
  2708. SeeAlso: AH=8Fh
  2709. --------N-178F-------------------------------
  2710. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  2711.     AH = 8Fh
  2712.     AL = 00h
  2713. Return: CX:BX -> DOS intercept routine
  2714. SeeAlso: AH=8Eh
  2715. --------N-1790-------------------------------
  2716. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  2717.     AH = 90h
  2718.     AL = mode
  2719.         00h NTNX compatibility
  2720.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  2721.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  2722.         02h MW386 v2+
  2723.         BX = logical device number
  2724.             00h-03h = LPT1-LPT4
  2725.             04h-07h = COM1-COM4
  2726.     CX:SI -> ASCIZ pathname
  2727. Return: AL = status (see AH=81h)
  2728. Note:    in mode 00h, the file is always sent to logical LPT1
  2729. SeeAlso: AH=A0h
  2730. --------N-1791-------------------------------
  2731. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  2732.     AH = 91h
  2733.     AL = mode
  2734.         00h NTNX compatibility
  2735.         Return: CX = user number (00h = host)
  2736.             DX = currently selected printer number (00h-08h)
  2737.         01h MW386
  2738.         Return: CX = user number
  2739.             DX = physical dev number of currently selected printer
  2740.         02h MW386 v2+
  2741.         BX = logical device number
  2742.             00h-03h = LPT1-LPT4
  2743.             04h-07h = COM1-COM4
  2744.         Return: CX = user number
  2745.             DX = physical device number
  2746. Return: AL = status (see AH=81h)
  2747. SeeAlso: AH=8Ch
  2748. --------N-1792-------------------------------
  2749. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  2750.     AH = 92h
  2751.     AL = 00h
  2752.     CL = 00h
  2753. Return: CL = driver state
  2754.         01h initialized
  2755.         80h not initialized
  2756.     AX = status (see AH=81h)
  2757. SeeAlso: AH=8Ah
  2758. --------N-1794-------------------------------
  2759. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  2760.     AH = 94h
  2761.     AL = mode
  2762.         00h NTNX compatibility
  2763.         DX = NTNX printer number (see AH=88h)
  2764.         01h MW386
  2765.         DX = MW386 printer number
  2766.         02h MW386 v2+
  2767.         BX = logical printer number
  2768.         DX = MW386 printer number
  2769. Return: AL = status (see AH=81h)
  2770. Note:    modes 00h and 01h affect only logical LPT1
  2771. SeeAlso: AH=8Bh,AH=95h
  2772. --------N-1795-------------------------------
  2773. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  2774.     AH = 95h
  2775.     AL = mode
  2776.         00h NTNX compatibility
  2777.         Return: DX = NTNX printer number (see AH=88h)
  2778.                 (FFFFh if current printer not compatible with NTNX)
  2779.         01h MW386
  2780.         Return: DX = MW386 printer number
  2781.         02h MW386 v2+
  2782.         BX = logical device number
  2783.             00h-03h = LPT1-LPT4
  2784.             04h-07h = COM1-COM4
  2785.         Return: DX = MW386 printer number (FFFFh = none)
  2786. Return: AL = status (see AH=81h)
  2787. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  2788. SeeAlso: AH=94h
  2789. --------N-1796-------------------------------
  2790. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  2791.     AH = 96h
  2792.     AL = 00h
  2793. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  2794.       returning
  2795. SeeAlso: INT 14/AH=24h
  2796. --------N-1797-------------------------------
  2797. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  2798.     AH = 97h
  2799.     AL = mode
  2800.         00h NTNX compatibility
  2801.         02h MW386 v2+
  2802.         BX = logical device number
  2803.             00h-03h = LPT1-LPT4
  2804.             04h-07h = COM1-COM4
  2805.     CH,CL,DH = three character break sequence
  2806.     DL = subfunction
  2807.         00h set break string
  2808.         else reset break
  2809. Return: AL = status (see AH=81h)
  2810. Notes:    mode 00h affects only logical LPT1
  2811.     when the break string is encountered, the spool file will be closed and
  2812.       queued for printing automatically
  2813.     the break string is not permanently saved, and will be reset each time
  2814.       MW386 or the user is rebooted
  2815. SeeAlso: AH=9Bh
  2816. --------N-1798-------------------------------
  2817. INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
  2818.     AH = 98h
  2819.     AL = 00h
  2820.     DL = printer number (FFh=current)
  2821. Return: AL = status
  2822.         00h successful
  2823.         01h incorrect printer
  2824.         02h task not found
  2825. Note:    MW386 supports this function for compatibility only; it is a NOP
  2826. --------N-1799-------------------------------
  2827. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  2828.     AH = 99h
  2829.     AL = mode
  2830.         00h NTNX compatibility
  2831.         DL = NTNX printer number (see AH=88h)
  2832.             (FFh = task's current logical LPT1)
  2833.         DH = mode
  2834.             bit 0: get mode if 1, set mode if 0
  2835.             bit 1: private ("attached")
  2836.             bit 2: direct instead of spooled
  2837.             bits 3-7 reserved (0)
  2838.         01h MW386
  2839.         DX = MW386 printer number
  2840.         CL = mode (as for DH above)
  2841. Return: AL = status (see AH=81h)
  2842.     DH = mode (bits 1 and 2 set as above)
  2843.     DL = printer owner's user number if not spooled
  2844. --------N-179A-------------------------------
  2845. INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
  2846.     AH = 9Ah
  2847.     AL = mode
  2848.         00h NTNX compatibility
  2849.         DX = NTNX printer number (see AH=88h)
  2850.             (FFFFh = current logical LPT1)
  2851.         01h MW386
  2852.         DX = MW386 printer number
  2853.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  2854. Return: AL = status (see AH=81h)
  2855. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  2856.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  2857. SeeAlso: AH=A4h
  2858. --------N-179B-------------------------------
  2859. INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
  2860.     AH = 9Bh
  2861.     AL = mode
  2862.         00h NTNX compatibility
  2863.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  2864.         01h MW386
  2865.         CX = timeout value in seconds (00h = never)
  2866.         02h MW386 v2+
  2867.         BX = logical device number
  2868.             00h-03h = LPT1-LPT4
  2869.             04h-07h = COM1-COM4
  2870.         CX = timeout value in seconds (00h = never)
  2871. Return: AL = status (see AH=81h)
  2872. Notes:    modes 00h and 01h affect only the current logical LPT1
  2873.     if no data is sent to a printer for the specified amount of time, the
  2874.       spool file will be closed and queued for printing automatically
  2875. SeeAlso: AH=97h
  2876. --------N-17A0-------------------------------
  2877. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  2878.     AH = A0h
  2879.     AL = mode
  2880.         00h NTNX compatibility
  2881.         DX = ??? (NTNX, MW386 v1.x only)
  2882.         02h MW386 v2+
  2883.         BX = logical device number
  2884.             00h-03h = LPT1-LPT4
  2885.             04h-07h = COM1-COM4
  2886.     CX:SI -> ASCIZ pathname
  2887. Return: AL = status (see AH=81h)
  2888. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  2889.       the original file to be modified or deleted while the copy is printed
  2890.     in mode 00h, the file is printed on logical LPT1
  2891. SeeAlso: AH=90h
  2892. --------N-17A4-------------------------------
  2893. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  2894.     AH = A4h
  2895.     AL = new state
  2896.         00h form feed after end of print job disabled
  2897.         01h form feed enabled
  2898. Return: AL = status (see AH=81h)
  2899. Note:    only affects the current logical LPT1
  2900. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  2901. --------N-17A6-------------------------------
  2902. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  2903.     AH = A6h
  2904.     AL = new state
  2905.         00h banner page before print job disabled
  2906.         01h banner page enabled
  2907. Return: AL = status (see AH=81h)
  2908. Note:    only affects the current logical LPT1
  2909. SeeAlso: AH=A4h
  2910. --------N-17A7-------------------------------
  2911. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  2912.     AH = A7h
  2913.     AL = spool flags
  2914.         bit 0: banner page enabled (see AH=A4h)
  2915.         bit 1: form feed enabled (see AH=A6h)
  2916.         bits 2-6: reserved (0)
  2917.         bit 7: set flags if 1, get flags if 0
  2918.     BX = logical device number
  2919.         00h-03h = LPT1-LPT4
  2920.         04h-07h = COM1-COM4
  2921. Return: AL = status (see AH=81h)
  2922. Note:    the documentation does not state which register contains the result of
  2923.       a GET
  2924. SeeAlso: AH=A4h,AH=A6h
  2925. --------N-17A8-------------------------------
  2926. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  2927.     AH = A8h
  2928.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  2929. Return: AL = status (see AH=81h)
  2930. Note:    allows application to specify banner page filename for spool files
  2931.       collected from the application's printer output
  2932. SeeAlso: AH=A9h
  2933. --------N-17A9-------------------------------
  2934. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  2935.     AH = A9h
  2936.     AL = new spool drive (2=C:,3=D:,etc)
  2937. Return: AL = status (see AH=81h)
  2938. Note:    does not remove previous spooling directory since jobs may be pending
  2939. SeeAlso: AH=A8h
  2940. --------N-17AA-------------------------------
  2941. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  2942.     AH = AAh
  2943.     AL = mode
  2944.         00h NTNX
  2945.         DX = NTNX printer number (see AH=88h)
  2946.         01h MW386
  2947.         DX = MW386 printer number
  2948. Return: AH = instantaneous printer status
  2949.         00h printer ready
  2950.         01h not ready
  2951.         12h off line
  2952.         13h out of paper
  2953.         14h general device failure
  2954.         15h device timeout
  2955.         16h bad device number
  2956. --------N-17AF-------------------------------
  2957. INT 17 - Alloy MW386 - CHECK SPOOLER
  2958.     AH = AFh
  2959. Return: AX = 55AAh if spooler available
  2960. --------c-17C0-------------------------------
  2961. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  2962.     AH = C0h
  2963.     DX = printer port (0-3)
  2964. Return: ES:BX -> control block (see below)
  2965. SeeAlso: AH=C1h
  2966.  
  2967. Format of control block:
  2968. Offset    Size    Description
  2969.  00h    WORD    printer number
  2970.  02h    WORD    address of printer status port
  2971.  04h    WORD    number of first record in queue
  2972.  06h    WORD    number of last record in queue
  2973.  08h    DWORD    characters already printed
  2974.  0Ch    DWORD    number of characters remaining
  2975.  10h    DWORD    pointer to dequeue buffer
  2976.  14h    DWORD    previous count of characters printed
  2977.  18h    DWORD    number of clock ticks taken to print them
  2978.  1Ch    WORD    offset of next character to output
  2979.  1Eh    WORD    offset of next character to print
  2980.  20h    WORD    pointer to spooling queue record
  2981.  22h    BYTE    current spooling status
  2982.  23h    BYTE    current printer status:
  2983.         00h OK
  2984.         01h not ready
  2985.         02h paused with message
  2986.         03h paused
  2987.         04h initializing
  2988.         FEh non-existent port
  2989.         FFh not spooled
  2990.  24h    BYTE    current control record type
  2991.  25h    WORD    observed printer speed
  2992.  27h    WORD    characters to print per service
  2993.  29h    BYTE    01h if disk write needed
  2994.  2Ah    BYTE    01h if queued data should be flushed
  2995.  2Bh    BYTE    01h to update cps status
  2996. --------c-17C1--------------------------------
  2997. INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
  2998.     AH = C1h
  2999.     DX = printer port (0-3)
  3000.     DS:SI -> ASCIZ string to save for display
  3001. Note:    flushes pending writes
  3002. SeeAlso: AH=C0h,AH=C2h
  3003. --------c-17C2-------------------------------
  3004. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  3005.     AH = C2h
  3006.     DX = printer port (0-3)
  3007. SeeAlso: AH=C3h
  3008. --------c-17C3-------------------------------
  3009. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  3010.     AH = C3h
  3011.     DX = printer port (0-3)
  3012. SeeAlso: AH=C2h,AH=C7h
  3013. --------c-17C4-------------------------------
  3014. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  3015.     AH = C4h
  3016. Return: DI = B0BFh
  3017.     SI = segment
  3018. --------c-17C5-------------------------------
  3019. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  3020.     AH = C5h
  3021.     DX = printer port (0-3)
  3022. Note:    cancels up to the pause record
  3023. --------c-17C6-------------------------------
  3024. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  3025.     AH = C6h
  3026.     DX = printer port (0-3)
  3027. Return: AX = 0 printer not active or at pause
  3028.        = 1 printer busy
  3029. --------c-17C7-------------------------------
  3030. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  3031.     AH = C7h
  3032.     DX = printer port (0-3)
  3033. SeeAlso: AH=C3h
  3034. --------P-17CD00-----------------------------
  3035. INT 17 - INSET - EXECUTE COMMAND STRING
  3036.     AX = CD00h
  3037.     DS:DX -> ASCIZ command string (max 80 bytes)
  3038. Return: CX = 07C2h (1986d)
  3039. Note:    user interface menus pop up after last command, unless that command
  3040.     exits INSET
  3041. --------P-17CD01-----------------------------
  3042. INT 17 - INSET - GET IMAGE SIZE
  3043.     AX = CD01h
  3044.     DS:DX -> ASCIZ name of image file
  3045. Return: AX = height in 1/720th inch
  3046.     BX = width in 1/720th inch
  3047.     CX = 07C2h (1986d)
  3048. --------P-17CD02-----------------------------
  3049. INT 17 - INSET - INITIALIZE
  3050.     AX = CD02h
  3051. Return: CX = 07C2h (1986d)
  3052. Note:    all open files are closed and the printer is reset
  3053. SeeAlso: AX=CD04h
  3054. --------P-17CD03-----------------------------
  3055. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  3056.     AX = CD03h
  3057. Return: CX = 07C2h (1986d)
  3058. --------P-17CD04-----------------------------
  3059. INT 17 - INSET - INITIALIZE LINKED MODE
  3060.     AX = CD04h
  3061.     ES:SI -> FAR routine for linked mode
  3062. Return: CX = 07C2h
  3063. Note:    calling sequence for linked-mode routine
  3064.     AL = 00h send character in BL to printer
  3065.        = 01h send CX bytes from DS:DX to printer
  3066.        = 02h move print head to horizontal starting position of image
  3067.     return code for linked-mode routine:
  3068.     AX = 0000h success
  3069.        = 0001h failure
  3070. SeeAlso: AX=CD02h,AX=CD08h
  3071. --------P-17CD05-----------------------------
  3072. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  3073.     AX = CD05h
  3074.     DS:DX -> ASCIZ name of PIX file
  3075.     CX = left margin of text in 1/720th inch
  3076. Return: AH = printer type
  3077.         00h page-oriented (multiple images may be placed side-by-side)
  3078.         01h line-oriented (use AX=CD06h for vertical paper movement)
  3079.     CX = 07C2h (1986d)
  3080. SeeAlso: AX=CD07h
  3081. --------P-17CD06-----------------------------
  3082. INT 17 - INSET - GRAPHICS LINE FEED
  3083.     AX = CD06h
  3084. Return: AH = completion status
  3085.         00h image complete
  3086.         01h image incomplete
  3087.     CX = 07C2h (1986d)
  3088. SeeAlso: AX=CD09h
  3089. --------P-17CD07-----------------------------
  3090. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  3091.     AX = CD07h
  3092. Return: CX = 07C2h
  3093. SeeAlso: AX=CD05h
  3094. --------P-17CD08-----------------------------
  3095. INT 17 - INSET - CANCEL LINK MODE
  3096.     AX = CD08h
  3097. Return: CX = 07C2h
  3098. SeeAlso: AX=CD04h
  3099. --------P-17CD09-----------------------------
  3100. INT 17 - INSET - ALTER TEXT LINE SPACING
  3101.     AX = CD09h
  3102.     CX = line spacing in 1/720th inch
  3103. Return: CX = 07C2h
  3104. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  3105. SeeAlso: AX=CD06h
  3106. --------P-17CD0A-----------------------------
  3107. INT 17 - INSET - GET SETUP
  3108.     AX = CD0Ah
  3109.     DS:DX -> buffer for IN.SET data
  3110. Return: CX = 07C2h
  3111. --------P-17CD0B-----------------------------
  3112. INT 17 - INSET - START GETTING SCALED IMAGE
  3113.     AX = CD0Bh
  3114.     DS:SI -> ASCIZ pathname of .PIX file
  3115.     BX = number of bitplanes
  3116.     CX = number of rows in output bitmap
  3117.     DX = number of columns in output bitmap
  3118. Return: AX = status
  3119.         0000h OK
  3120.         FFFFh error
  3121. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  3122. --------P-17CD0C-----------------------------
  3123. INT 17 - INSET - GET NEXT IMAGE STRIP
  3124.     AX = CD0Ch
  3125. Return: AX = status
  3126.         0000h OK but not complete
  3127.         0001h OK and image complete
  3128.         FFFFh error
  3129.     DS:SI -> buffer (max 4K) for bit map strip
  3130.     CX = start row
  3131.     DX = number of rows
  3132.     BX = offset in bytes between bit planes
  3133. Note:    buffer may be overwritten by subsequent calls
  3134. SeeAlso: AX=CD0Bh
  3135. --------P-17F0-------------------------------
  3136. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  3137.     AH = F0h
  3138.     DX = printer port (0-3)
  3139. Return: AX = 0001h Jetstream present
  3140.          else  non-Jetstream port
  3141. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  3142.       to drive printers at up to 80000 characters per second
  3143. --------P-17F1-------------------------------
  3144. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  3145.     AH = F1h
  3146.     CX = data buffer length
  3147.     DX = printer port (0-3)
  3148.     DS:SI -> data buffer
  3149. Return: AX = status
  3150.         0000h printer not ready (see also AH=02h)
  3151.         other printing started
  3152. SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
  3153. --------P-17F2-------------------------------
  3154. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  3155.     AH = F2h
  3156.     DX = printer port (0-3)
  3157. Return: AX = status
  3158.         0000h prior print request finished
  3159.         other number of characters left to print
  3160. SeeAlso: AH=02h,AH=F1h,AH=F3h
  3161. --------P-17F3-------------------------------
  3162. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  3163.     AH = F3h
  3164.     DX = printer port (0-3)
  3165. Return: AX = number of unprinted characters due to abort
  3166. SeeAlso: AH=F1h,AH=F4h
  3167. --------P-17F4-------------------------------
  3168. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  3169.     AH = F4h
  3170.     DX = printer port (0-3)
  3171.     DS:DS -> FAR post address (called with interrupts on)
  3172. SeeAlso: AH=F1h,AH=F3h
  3173. --------P-17F5-------------------------------
  3174. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  3175.     AH = F5h
  3176.     CX = data buffer length
  3177.     DX = printer port (0-3)
  3178.     DS:SI -> data buffer (32-bit physical address)
  3179. Return: AX = status
  3180.         0000h printer not ready (see also AH=02h)
  3181.         other printing started
  3182. SeeAlso: AH=F1h
  3183. ----------17FF--BX0000-----------------------
  3184. INT 17 U - PC-MOS/386 v5.01 - PRINT SPOOLER - CLOSE SPOOL FILE
  3185.     AH = FFh
  3186.     BX = 0000h
  3187.     CX = 0000h
  3188.     DX = printer port number
  3189. Return: AH = printer status (see AH=00h)
  3190. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  3191.       operating system by The Software Link, Inc.
  3192. Desc:    close the spool file immediately instead of waiting for the close time
  3193.       to elapse
  3194. SeeAlso: AH=01h,AH=03h"PC-MOS"
  3195. --------B-18---------------------------------
  3196. INT 18 - DISKLESS BOOT HOOK (START CASSETTE BASIC)
  3197. Desc:    called when there is no bootable disk available to the system
  3198. Notes:    only PCs produced by IBM contain BASIC in ROM, so the action is
  3199.       unpredicatable on compatibles; this interrupt often reboots the
  3200.       system, and often has no effect at all
  3201.     network cards with their own BIOS can hook this interrupt to allow
  3202.       a diskless boot off the network (even when a hard disk is present
  3203.       if none of the partitions is marked as the boot partition)
  3204. SeeAlso: INT 86"NetBIOS"
  3205. --------J-1800-------------------------------
  3206. INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
  3207.     AH = 00h
  3208. Return: AX = keystroke
  3209. SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
  3210. --------J-1801-------------------------------
  3211. INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
  3212.     AH = 01h
  3213. Return: ZF set if no keystroke available
  3214.     ZF clear if keystroke available
  3215.         AX = keystroke
  3216. SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
  3217. --------J-1802-------------------------------
  3218. INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
  3219.     AH = 02h
  3220. Return: AL = shift flags
  3221. SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
  3222. --------J-1803-------------------------------
  3223. INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
  3224.     AH = 03h
  3225.     ???
  3226. Return: ???
  3227. SeeAlso: AH=00h,AH=04h
  3228. --------J-1804-------------------------------
  3229. INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
  3230.     AH = 04h
  3231.     ???
  3232. Return: ???
  3233. Note:    details are not available at this time
  3234. SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
  3235. --------J-18---------------------------------
  3236. INT 18 - NEC PC-9800 series - VIDEO
  3237.     AH = function
  3238.         0Ah set video mode
  3239.         0Bh get video mode
  3240.         0Ch start text screen display
  3241.         0Dh end text screen display
  3242.         0Eh set single display area
  3243.         0Fh set multiple display area
  3244.         10h set cursor shape
  3245.         11h display cursor
  3246.         12h terminate cursor
  3247.         13h set cursor position
  3248.         14h read font patter
  3249.         16h initialize text video RAM
  3250.         1Ah define user character
  3251.     ???
  3252. Return: ???
  3253. Notes:    details are not available at this time
  3254.     text video RAM is located at segments A000h (characters) and A200h
  3255.       (attributes)
  3256. --------B-19---------------------------------
  3257. INT 19 - SYSTEM - BOOTSTRAP LOADER
  3258. Desc:    This interrupt reboots the system without clearing memory or restoring
  3259.       interrupt vectors.  Because interrupt vectors are preserved, this
  3260.       interrupt usually causes a system hang if any TSRs have hooked
  3261.       vectors from 00h through 1Ch, particularly INT 08.
  3262. Notes:    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive
  3263.       A: to 0000h:7C00h.  If this fails, and a hard disk is installed, the
  3264.       BIOS will read sector 1, head 0, track 0 of the first hard disk.
  3265.       This sector should contain a master bootstrap loader and a partition
  3266.       table.  After loading the master boot sector at 0000h:7C00h, the
  3267.       master bootstrap loader is given control.  It will scan the partition
  3268.       table for an active partition, and will then load the operating
  3269.       system's bootstrap loader (contained in the first sector of the
  3270.       active partition) and give it control.
  3271.     true IBM PCs and most clones issue an INT 18 if neither floppy nor hard
  3272.       disk have a valid boot sector
  3273.     to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  3274.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  3275.       a reset, store 0000h at 0040h:0072h before jumping.
  3276.     VDISK.SYS hooks this interrupt to allow applications to find out how
  3277.       much extended memory has been used by VDISKs (see below).  DOS 3.3+
  3278.       PRINT hooks INT 19 but does not set up a correct VDISK header block
  3279.       at the beginning of its INT 19 handler segment, thus causing some
  3280.       programs to overwrite extended memory which is already in use.
  3281.     the default handler is at F000h:E6F2h for 100% compatible BIOSes
  3282.     MS-DOS 3.2+ hangs on booting (even from floppy) if the hard disk
  3283.       contains extended partitions which point at each other in a loop,
  3284.       since it will never find the end of the linked list of extended
  3285.       partitions
  3286. SeeAlso: INT 14/AH=17h,INT 18
  3287.  
  3288. Format of VDISK header block (at beginning of INT 19 handler's segment):
  3289. Offset    Size    Description
  3290.  00h 18 BYTEs    n/a (for VDISK.SYS, the device driver header)
  3291.  12h 11 BYTEs    signature string "VDISK     Vn.m" for VDISK.SYS version n.m
  3292.  1Dh 15 BYTEs    n/a
  3293.  2Ch  3 BYTEs    linear address of first byte of available extended memory
  3294.  
  3295. Format of hard disk master boot sector:
  3296. Offset    Size    Description
  3297.  00h 446 BYTEs    Master bootstrap loader code
  3298. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  3299. 1CEh 16 BYTEs    partition record for partition 2
  3300. 1DEh 16 BYTEs    partition record for partition 3
  3301. 1EEh 16 BYTEs    partition record for partition 4
  3302. 1FEh    WORD    signature, AA55h indicates valid boot block
  3303.  
  3304. Format of partition record:
  3305. Offset    Size    Description
  3306.  00h    BYTE    boot indicator (80h = active partition)
  3307.  01h    BYTE    partition start head
  3308.  02h    BYTE    partition start sector (bits 0-5)
  3309.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  3310.  04h    BYTE    operating system indicator (see below)
  3311.  05h    BYTE    partition end head
  3312.  06h    BYTE    partition end sector (bits 0-5)
  3313.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  3314.  08h    DWORD    sectors preceding partition
  3315.  0Ch    DWORD    length of partition in sectors
  3316.  
  3317. Values for operating system indicator:
  3318.  00h    empty
  3319.  01h    DOS 12-bit FAT
  3320.  02h    XENIX root file system
  3321.  03h    XENIX /usr file system (obsolete)
  3322.  04h    DOS 16-bit FAT
  3323.  05h    DOS 3.3+ extended partition
  3324.  06h    DOS 3.31+ Large File System
  3325.  07h    QNX
  3326.  07h    OS/2 HPFS
  3327.  07h    Advanced Unix
  3328.  08h    AIX bootable partition, SplitDrive
  3329.  09h    AIX data partition
  3330.  09h    Coherent filesystem
  3331.  0Ah    OS/2 Boot Manager
  3332.  0Ah    OPUS
  3333.  0Ah    Coherent swap partition
  3334.  10h    OPUS
  3335.  24h    NEC MS-DOS 3.x
  3336.  40h    VENIX 80286
  3337.  50h    Disk Manager, read-only partition
  3338.  51h    Disk Manager, read/write partition
  3339.  51h    Novell???
  3340.  52h    CP/M
  3341.  52h    Microport System V/386
  3342.  56h    GoldenBow VFeature
  3343.  61h    SpeedStor
  3344.  63h    Unix SysV/386, 386/ix
  3345.  63h    Mach, MtXinu BSD 4.3 on Mach
  3346.  63h    GNU HURD
  3347.  64h    Novell NetWare
  3348.  65h    Novell NetWare (3.11)
  3349.  70h    DiskSecure Multi-Boot
  3350.  75h    PC/IX
  3351.  80h    Minix v1.1 - 1.4a
  3352.  81h    Minix v1.4b+
  3353.  81h    Linux
  3354.  81h    Mitac Advanced Disk Manager
  3355.  82h    Linux Swap partition (planned)
  3356.  84h    OS/2-renumbered type 04h partition (related to hiding DOS C: drive)
  3357.  93h    Amoeba file system
  3358.  94h    Amoeba bad block table
  3359.  B7h    BSDI file system (secondarily swap)
  3360.  B8h    BSDI swap partition (secondarily file system)
  3361.  C1h    DR-DOS 6.0 LOGIN.EXE-secured 12-bit FAT partition
  3362.  C4h    DR-DOS 6.0 LOGIN.EXE-secured 16-bit FAT partition
  3363.  C6h    DR-DOS 6.0 LOGIN.EXE-secured Huge partition
  3364.  DBh    CP/M, Concurrent CP/M, Concurrent DOS
  3365.  DBh    CTOS (Convergent Technologies OS)
  3366.  E1h    SpeedStor 12-bit FAT extended partition
  3367.  E4h    SpeedStor 16-bit FAT extended partition
  3368.  F2h    DOS 3.3+ secondary
  3369.  FEh    LANstep
  3370.  FFh    Xenix bad block table
  3371. --------B-1A00-------------------------------
  3372. INT 1A - TIME - GET SYSTEM TIME
  3373.     AH = 00h
  3374. Return: CX:DX = number of clock ticks since midnight
  3375.     AL = midnight flag, nonzero if midnight passed since time last read
  3376. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  3377.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  3378.       it, leading to loss of a day if two consecutive midnights pass
  3379.       without a request for the time (e.g. if the system is on but idle)
  3380. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch,INT 62/AX=0099h
  3381. --------B-1A01-------------------------------
  3382. INT 1A - TIME - SET SYSTEM TIME
  3383.     AH = 01h
  3384.     CX:DX = number of clock ticks since midnight
  3385. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  3386. --------B-1A02-------------------------------
  3387. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  3388.     AH = 02h
  3389. Return: CF clear if successful
  3390.         CH = hour (BCD)
  3391.         CL = minutes (BCD)
  3392.         DH = seconds (BCD)
  3393.         DL = daylight savings flag (00h standard time, 01h daylight time)
  3394.     CF set on error (i.e. clock not running or in middle of update)
  3395. SeeAlso: AH=00h
  3396. --------B-1A03-------------------------------
  3397. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  3398.     AH = 03h
  3399.     CH = hour (BCD)
  3400.     CL = minutes (BCD)
  3401.     DH = seconds (BCD)
  3402.     DL = daylight savings flag (00h standard time, 01h daylight time)
  3403. SeeAlso: AH=01h
  3404. --------B-1A04-------------------------------
  3405. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  3406.     AH = 04h
  3407. Return: CF clear if successful
  3408.         CH = century (BCD)
  3409.         CL = year (BCD)
  3410.         DH = month (BCD)
  3411.         DL = day (BCD)
  3412.     CF set on error
  3413. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  3414. --------B-1A05-------------------------------
  3415. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  3416.     AH = 05h
  3417.     CH = century (BCD)
  3418.     CL = year (BCD)
  3419.     DH = month (BCD)
  3420.     DL = day (BCD)
  3421. SeeAlso: AH=04h,INT 21/AH=2Bh
  3422. --------B-1A06-------------------------------
  3423. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  3424.     AH = 06h
  3425.     CH = hour (BCD)
  3426.     CL = minutes (BCD)
  3427.     DH = seconds (BCD)
  3428. Return: CF set on error (alarm already set or clock stopped for update)
  3429.     CF clear if successful
  3430. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  3431.       time
  3432. SeeAlso: AH=07h,INT 4A
  3433. --------B-1A07-------------------------------
  3434. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  3435.     AH = 07h
  3436. Return: alarm disabled
  3437. Note:    does not disable the real-time clock's IRQ
  3438. SeeAlso: AH=06h,INT 70
  3439. --------B-1A08-------------------------------
  3440. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  3441.     AH = 08h
  3442.     CH = hours in BCD
  3443.     CL = minutes in BCD
  3444.     DH = seconds in BCD
  3445. SeeAlso: AH=09h
  3446. --------B-1A09-------------------------------
  3447. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  3448.     AH = 09h
  3449. Return: CH = hours in BCD
  3450.     CL = minutes in BCD
  3451.     DH = seconds in BCD
  3452.     DL = alarm status
  3453.         00h alarm not enabled
  3454.         01h alarm enabled but will not power up system
  3455.         02h alarm will power up system
  3456. SeeAlso: AH=08h
  3457. --------B-1A0A-------------------------------
  3458. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  3459.     AH = 0Ah
  3460. Return: CF set on error
  3461.     CF clear if successful
  3462.         CX = count of days since Jan 1,1980
  3463. SeeAlso: AH=04h,AH=0Bh
  3464. --------B-1A0B-------------------------------
  3465. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  3466.     AH = 0Bh
  3467.     CX = count of days since Jan 1,1980
  3468. Return: CF set on error
  3469.     CF clear if successful
  3470. SeeAlso: AH=05h,AH=0Ah
  3471. --------J-1A10-------------------------------
  3472. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  3473.     AH = 10h
  3474.     ???
  3475. Return: ???
  3476. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  3477. --------J-1A11-------------------------------
  3478. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  3479.     AH = 11h
  3480.     ???
  3481. Return: ???
  3482. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  3483. --------J-1A12-------------------------------
  3484. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  3485.     AH = 12h
  3486.     ???
  3487. Return: ???
  3488. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  3489. --------A-1A3601-----------------------------
  3490. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  3491.     AX = 3601h
  3492. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  3493.         ASCIZ string "WPCORP\0"
  3494. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  3495.       third party product wants to interface with it.  The third party
  3496.       product must intercept this interrupt and return the address of a
  3497.       keyboard monitor routine.
  3498.     Before checking for keyboard input, and after every key entered by the
  3499.       user, Word Perfect will call the routine whose address was provided
  3500.       in DS:SI with the following parameters:
  3501.         Entry:    AX = key code or 0
  3502.             BX = WordPerfect state flag
  3503.         Exit:    AX = 0 or key code
  3504.             BX = 0 or segment address of buffer with key codes
  3505.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  3506. SeeAlso: INT 16/AX=5500h
  3507. --------N-1A6108-----------------------------
  3508. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  3509.     AX = 6108h
  3510.     STACK:    WORD    conversation ID (0000h-0009h)
  3511.         DWORD    pointer to message buffer
  3512.         WORD    length of message
  3513.         DWORD    pointer to reply buffer
  3514.         WORD    length of reply buffer
  3515.         WORD    0000h (use default "Cparams" structure)
  3516. Return: AX = status (see below)
  3517.     STACK unchanged
  3518. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3519.       which implements the Simple Network Application Protocol
  3520. SeeAlso: AX=6205h
  3521.  
  3522. Values for status:
  3523.  0000h    successful
  3524.  F830h    "SNAP_ABORTED"
  3525.  FC04h    "SNAP_SERVERDIED"
  3526.  FC05h    "SNAP_RESEND"
  3527.  FC06h    "SNAP_SELECTFAILED"
  3528.  FC07h    "SNAP_WRONGVERSION"
  3529.  FC08h    "SNAP_INVALIDACK"
  3530.  FC09h    "SNAP_TIMEOUT"
  3531.  FC0Ah    "SNAP_SERVERREJECT"
  3532.  FC0Bh    "SNAP_NOREPLYDUE"
  3533.  FC0Ch    "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  3534.  FC0Dh    "SNAP_NOINIT"
  3535.  FC0Eh    "SNAP_SOCKETERROR"
  3536.  FC0Fh    "SNAP_BUFFERLIMIT"
  3537.  FC10h    "SNAP_INVALIDCID"
  3538.  FC11h    "SNAP_INVALIDOP"
  3539.  FC12h    "SNAP_XMITFAIL"
  3540.  FC13h    "SNAP_NOMORERETRIES"
  3541.  FC14h    "SNAP_BADPARMS"
  3542.  FC15h    "SNAP_NOMEMORY"
  3543.  FC16h    "SNAP_NOMORECONVS"
  3544.  FFFFh    failed (invalid function/parameter)
  3545. --------N-1A6205-----------------------------
  3546. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  3547.     AX = 6205h
  3548.     STACK:    WORD    conversation ID (0000h-0009h)
  3549.         DWORD    pointer to message
  3550.         WORD    length of message
  3551.         WORD    0000h (use default "Cparms" structure)
  3552. Return: AX = status (see AX=6108h)
  3553.     STACK unchanged
  3554. SeeAlso: AX=6108h
  3555. --------N-1A6308-----------------------------
  3556. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  3557.     AX = 6308h
  3558.     STACK:    WORD    offset of ASCIZ "guardian"
  3559.         WORD    offset of ASCIZ hostname
  3560.         WORD    offset of ASCIZ server name
  3561.         WORD    offset of ASCIZ userid
  3562.         WORD    offset of ASCIZ password
  3563.         WORD    offset of password length
  3564.         WORD    offset of password type
  3565.         WORD    offset of "Cparms" structure (see below)
  3566. Return: ???
  3567.     STACK unchanged
  3568. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  3569.       to allocate a buffer)
  3570. SeeAlso: AX=6405h,AX=7202h
  3571.  
  3572. Format of Cparms structure:
  3573. Offset    Size    Description
  3574.  00h    WORD    retry delay in seconds
  3575.  02h    WORD    timeout delay in seconds
  3576.  04h    WORD    maximum buffer size
  3577.  06h    WORD    encryption level
  3578. --------N-1A6405-----------------------------
  3579. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  3580.     AX = 6405h
  3581.     STACK:    WORD    conversation ID (0000h-0009h)
  3582.         DWORD    pointer to message buffer
  3583.         WORD    length of message
  3584.         WORD    0000h (use default "Cparms" structure)
  3585. Return: AX = status (see AX=6108h)
  3586.     STACK unchanged
  3587. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3588.       which implements the Simple Network Application Protocol
  3589. SeeAlso: AX=6308h
  3590. --------N-1A6900-----------------------------
  3591. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  3592.     AX = 6900h
  3593. Return: AX = value used for DS by resident code
  3594. SeeAlso: AX=6A01h,AX=6F01h
  3595. --------N-1A6A01-----------------------------
  3596. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  3597.     AX = 6A01h
  3598.     STACK:    WORD    number of bytes to allocate
  3599. Return: AX = offset of allocated buffer or 0000h if out of memory
  3600.     STACK unchanged
  3601. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3602.       which implements the Simple Network Application Protocol
  3603. SeeAlso: AX=6B01h
  3604. --------N-1A6B01-----------------------------
  3605. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  3606.     AX = 6B01h
  3607.     STACK:    WORD    offset within SNAP data segment of previously allocated
  3608.             buffer
  3609. Return: STACK unchanged
  3610. Note:    this call is a NOP if the specified offset is 0000h
  3611. SeeAlso: AX=6A01h
  3612. --------N-1A6C04-----------------------------
  3613. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  3614.     AX = 6C04h
  3615.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  3616.         WORD    segment of source buffer
  3617.         WORD    offset of source buffer
  3618.         WORD    number of bytes to copy
  3619. Return: AX = offset of byte after last one copied to destination
  3620.     STACK unchanged
  3621. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3622.       which implements the Simple Network Application Protocol
  3623. SeeAlso: AX=6D04h
  3624. --------N-1A6D04-----------------------------
  3625. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  3626.     AX = 6D04h
  3627.     STACK:    WORD    offset within SNAP data segment of source buffer
  3628.         WORD    segment of destination buffer
  3629.         WORD    offset of destination buffer
  3630.         WORD    number of bytes to copy
  3631. Return: AX = offset of byte after last one copied from source
  3632.     buffer filled
  3633.     STACK unchanged
  3634. SeeAlso: AX=6C04h
  3635. --------N-1A6E01-----------------------------
  3636. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  3637.     AX = 6E01h
  3638.     STACK:    WORD    new value for ???
  3639. Return: AX = old value of ???
  3640.     STACK unchanged
  3641. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3642.       which implements the Simple Network Application Protocol
  3643. --------N-1A6F01-----------------------------
  3644. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  3645.     AX = 6F01h
  3646.     STACK: WORD 0000h
  3647. Return: AX = status
  3648.         0000h SNAP is resident
  3649.         other SNAP not present
  3650.     STACK unchanged
  3651. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3652.       which implements the Simple Network Application Protocol, and is
  3653.       required by PCVENUS (a network shell).  The combination of SNAP and
  3654.       PCVENUS allows the use of the Andrew File System as one or more
  3655.       networked drives.
  3656. SeeAlso: AX=6900h,AX=7400h
  3657. --------N-1A7002-----------------------------
  3658. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  3659.     AX = 7002h
  3660.     STACK:    WORD    anchor number (0000h-0009h)
  3661.         WORD    new value for the anchor
  3662. Return: AX = status
  3663.         0000h successful
  3664.         FFFFh failed (top word on stack not in range 00h-09h)
  3665.     STACK unchanged
  3666. SeeAlso: AX=7101h
  3667. --------N-1A7101-----------------------------
  3668. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  3669.     AX = 7101h
  3670.     STACK:    WORD    anchor number (0000h-0009h)
  3671. Return: AX = anchor's value
  3672.     STACK unchanged
  3673. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3674.       which implements the Simple Network Application Protocol
  3675. SeeAlso: AX=7002h
  3676. --------N-1A7202-----------------------------
  3677. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  3678.     AX = 7202h
  3679.     STACK:    WORD    conversation ID (0000h-0009h)
  3680.         WORD    offset within resident data segment of "Cparms"
  3681.             structure (see AX=6308h)
  3682. Return: AX = status???
  3683.     STACK unchanged
  3684. SeeAlso: AX=6308h
  3685. --------N-1A7302-----------------------------
  3686. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  3687.     AX = 7302h
  3688.     STACK:    WORD    conversation ID (0000h-0009h)
  3689.         WORD    offset within resident data segment of ???
  3690. Return: AX = ???
  3691.     ???
  3692.     STACK unchanged
  3693. SeeAlso: AX=7400h
  3694. --------N-1A7400-----------------------------
  3695. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  3696.     AX = 7400h
  3697. Return: AX = version (AH=major, AL=minor)
  3698. Note:    this call is only valid if SNAP is installed
  3699. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  3700. --------N-1A75-------------------------------
  3701. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  3702.     AH = 75h
  3703.     AL = ???
  3704. Return: AX = ??? (0000h)
  3705. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3706.       which implements the Simple Network Application Protocol
  3707. --------N-1A76-------------------------------
  3708. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  3709.     AH = 76h
  3710.     AL = ???
  3711. Return: AX = ???
  3712. --------N-1A77-------------------------------
  3713. INT 1A - SNAP.EXE 3.4 - ???
  3714.     AH = 77h
  3715.     AL = ??? (at least 01h)
  3716.     STACK:    WORD    ???
  3717.         ???
  3718. Return: ???
  3719.     STACK unchanged
  3720. --------N-1A7802-----------------------------
  3721. INT 1A - SNAP.EXE 3.4 - ???
  3722.     AX = 7802h
  3723.     STACK:    WORD    ???
  3724.         WORD    ???
  3725. Return: ???
  3726.     STACK unchanged
  3727. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  3728.       which implements the Simple Network Application Protocol
  3729. --------s-1A7F-------------------------------
  3730. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  3731.     AH = 7Fh
  3732.     ???
  3733. Return: ???
  3734. SeeAlso: AH=80h,AH=83h,AH=85h
  3735. --------s-1A80-------------------------------
  3736. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  3737.     AH = 80h
  3738.     AL = 00h source is 8253 channel 2
  3739.          01h source is cassette input
  3740.          02h source is I/O channel "Audio IN"
  3741.          03h source is sound generator chip
  3742. SeeAlso: AH=7Fh,AH=83h
  3743. --------X-1A80-------------------------------
  3744. INT 1A - PCMCIA Socket Services - GET NUMBER OF ADAPTERS
  3745.     AH = 80h
  3746. Return: CF clear if successful
  3747.         CX = 5353h ('SS') if Socket Services installed
  3748.         AL = number of adapters present (0-16)
  3749.         AH destroyed
  3750.     CF set on error
  3751.         AH = error code (see below)
  3752. SeeAlso: AH=83h"PCMCIA"
  3753.  
  3754. Values for PCMCIA error codes:
  3755.  01h    "BAD_ADAPTER" nonexistent adapter
  3756.  02h    "BAD_ATTRIBUTE" invalid attribute specified
  3757.  03h    "BAD_BASE" invalid system memory base address
  3758.  04h    "BAD_EDC" invalid EDC generator specified
  3759.  05h    "BAD_INDICATOR" invalid indicator specified
  3760.  06h    "BAD_IRQ" invalid IRQ channel specified
  3761.  07h    "BAD_OFFSET" invalid PCMCIA card offset specified
  3762.  08h    "BAD_PAGE" invalid page specified
  3763.  09h    "BAD_READ" unable to complete request
  3764.  0Ah    "BAD_SIZE" invalid window size specified
  3765.  0Bh    "BAD_SOCKET" nonexistent socket specified
  3766.  0Ch    "BAD_TECHNOLOGY" unsupported Card Technology for writes
  3767.  0Dh    "BAD_TYPE" unavailable window type specified
  3768.  0Eh    "BAD_VCC" invalid Vcc power level index specified
  3769.  0Fh    "BAD_VPP" invalid Vpp1 or Vpp2 power level index specified
  3770.  10h    "BAD_WAIT" invalid number of wait states specified
  3771.  11h    "BAD_WINDOW" nonexistent window specified
  3772.  12h    "BAD_WRITE" unable to complete request
  3773.  13h    "NO_ADAPTERS" no adapters installed, but Socket Services is present
  3774.  14h    "NO_CARD" no card in socket
  3775. --------X-1A81-------------------------------
  3776. INT 1A - PCMCIA Socket Services - REGISTER STATUS CHANGE CALLBACK
  3777.     AH = 81h
  3778.     DS:DX -> callback routine (see below) or 0000h:0000h to disable
  3779. Return: CF clear if successful
  3780.         AH destroyed
  3781.     CF set on error
  3782.         AH = error code (see AH=80h"PCMCIA")
  3783. Note:    the callback will be invoked on any socket changes whose notification
  3784.       has not been disabled with the status change enable mask; it may be
  3785.       invoked either while processing a hardware interrupt from the adapter
  3786.       or while processing the following Socket Services request
  3787. SeeAlso: AH=80h"PCMCIA",AH=82h"PCMCIA"
  3788.  
  3789. Callback routine invoked with:
  3790.     AL = adapter number
  3791.     BH = status change interrupt enable mask (see below)
  3792.     BL = socket number
  3793.     DH = current socket status (see below)
  3794.     DL = current card status (see below)
  3795. Return: all registers preserved
  3796. Notes:    the callback may be invoked during a hardware interrupt, and may not
  3797.       call on Socket Services
  3798.     the callback will be invoked once for each socket with a status change
  3799.  
  3800. Bitfields for status change enable mask:
  3801.  bits 0,1 reserved (0)
  3802.  bit 2    ejection request
  3803.  bit 3    insertion request
  3804.  bit 4    battery dead change
  3805.  bit 5    battery warning change
  3806.  bit 6    ready change
  3807.  bit 7    card detect change
  3808.  
  3809. Bitfields for current socket status:
  3810.  bit 0    reserved (0)
  3811.  bit 1    card locked
  3812.  bit 2    card ejection request pending
  3813.  bit 3    card insertion request pending
  3814.  bit 4    card ejection complete
  3815.  bit 5    card insertion complete
  3816.  bit 6    reserved (0)
  3817.  bit 7    card changed
  3818.  
  3819. Bitfields for current card status:
  3820.  bit 0    write protected
  3821.  bits 1-3 reserved (0)
  3822.  bit 4    battery voltage detect 1 (battery dead)
  3823.  bit 5    battery voltage detect 2 (battery warning)
  3824.  bit 6    ready
  3825.  bit 7    card detect
  3826. --------s-1A8100-----------------------------
  3827. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  3828.     AX = 8100h
  3829. Return: AH > 80h if supported
  3830. --------X-1A82-------------------------------
  3831. INT 1A - PCMCIA Socket Services - REGISTER CARD TECHNOLOGY CALLBACK
  3832.     AH = 82h
  3833.     DS:DX -> callback routine (see below) or 0000h:0000h
  3834. Return: CF clear if successful
  3835.         AH destroyed
  3836.     CF set on error
  3837.         AH = error code (see AH=80h"PCMCIA")
  3838. Note:    the callback is invoked on a Write Multiple request with an unsupported
  3839.       card technology type
  3840. SeeAlso: AH=81h"PCMCIA",AH=94h
  3841.  
  3842. Callback routine invoked with:
  3843.     ES:AX -> Low-Level Socket Services Routines (see below)
  3844.     BH = socket attributes (see below)
  3845.     CX = number of bytes or words to write
  3846.     DS:SI -> data buffer to be written
  3847.     DX:DI -> 26-bit linear card address
  3848.     BP = card technology type
  3849. Return: CF clear if successful
  3850.     CF set on error
  3851.         AH = error code (07h,0Ch,12h,14h) (see AH=80h"PCMCIA")
  3852.  
  3853. Bitfields for socket attributes:
  3854.  bit 0    memory type (clear = common, set = attribute)
  3855.  bit 1    data width (clear = byte, set = word)
  3856.  bit 2    even bytes only (only valid if bit 1 set)
  3857.  bit 3    packed buffer
  3858.  bits 4-7 reserved (0)
  3859.  
  3860. Format of Low-Level Socket Services Routines:
  3861. Offset    Size    Description
  3862.  00h    WORD    offset of Write Many routine (see below)
  3863.  02h    WORD    offset of Write One routine (see below)
  3864.  04h    WORD    offset of Read One routine (see below)
  3865.  06h    WORD    offset of Increment Offset routine (see below)
  3866.  08h    WORD    offset of Set Offset routine (see below)
  3867.  0Ah    WORD    offset of Get Status routine (see below)
  3868.  
  3869. Call Write Many routine with:
  3870.     BH = socket attributes (see above)
  3871.     CX = number of bytes or words to write
  3872.     DS:SI -> data to be written
  3873. Return: CF clear if successful
  3874.     CF set on error
  3875.  
  3876. Call Write One routine with:
  3877.     AL/AX = data to be written
  3878.     BH = socket attributes (see above)
  3879. Return: CF clear if successful
  3880.     CF set on error
  3881.  
  3882. Call Read One routine with:
  3883.     BH = socket attributes (see above)
  3884. Return: CF clear if successful
  3885.         AL/AX = data read
  3886.     CF set on error
  3887.  
  3888. Call Increment Offset routine with:
  3889.     BH = socket attributes (see above)
  3890. Return: CF clear if successful
  3891.     CF set on error
  3892.  
  3893. Call Set Offset routine with:
  3894.     DX:DI = new offset address
  3895. Return: CF clear if successful
  3896.     CF set on error
  3897.  
  3898. Call Get Status routine with:
  3899.     nothing
  3900. Return: AL = current card status (see AH=81h"PCMCIA")
  3901. --------s-1A83-------------------------------
  3902. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  3903.     AH = 83h
  3904.     AL = volume (0=lowest, 7=highest)
  3905.     CX = number of bytes to play
  3906.     DX = time between sound samples (multiples of 273 nanoseconds)
  3907.     ES:BX -> sound data (array of 8-bit PCM samples)
  3908. Return: ???
  3909. Notes:    this call returns immediately while the sound plays in the
  3910.       background
  3911.     The sound data pointed to by ES:BX probably shouldn't cross a 64k
  3912.       boundary.  The BIOS appears to call INT 15/AX=91FBh when the sound
  3913.       device underflows to allow another INT 1A/AH=83h for seamless
  3914.       playing of long sounds.
  3915. SeeAlso: AH=84h,INT 15/AH=91h
  3916. --------X-1A83-------------------------------
  3917. INT 1A - PCMCIA Socket Services - GET SOCKET SERVICES VERSION NUMBER
  3918.     AH = 83h
  3919.     AL = adapter number
  3920. Return: CF clear if successful
  3921.         AX = Socket Services version (BCD)
  3922.         BX = implementation version (BCD)
  3923.         CX = 5353h ("SS")
  3924.         DS:SI -> ASCIZ implementor description
  3925.     CF set on error
  3926.         AH = error code (01h) (see AH=80h"PCMCIA")
  3927. Note:    the current version (from the Revision A.00 documentation) of Socket
  3928.       Services is 1.00 (AX=0100h)
  3929. SeeAlso: AH=80h"PCMCIA"
  3930. --------s-1A84-------------------------------
  3931. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  3932.     AH = 84h
  3933. Return: ???
  3934. SeeAlso: AH=83h,AH=85h
  3935. --------X-1A84-------------------------------
  3936. INT 1A - PCMCIA Socket Services - INQUIRE ADAPTER
  3937.     AH = 84h
  3938.     AL = adapter number
  3939. Return: CF clear if successful
  3940.         AH destroyed
  3941.         BH = number of windows
  3942.         BL = number of sockets (1-16)
  3943.         CX = number of EDCs
  3944.         DH = capabilities (see below)
  3945.         DL = status change interrupt used (only if DH bit 3 set)(see below)
  3946.     CF set on error
  3947.         AH = error code (01h) (see AH=80h"PCMCIA")
  3948. SeeAlso: AH=80h"PCMCIA",AH=85h"PCMCIA",AH=87h
  3949.  
  3950. Bitfields for capabilities:
  3951.  bit 0    indicators are per-adapter rather than per-socket
  3952.  bit 1    power management is per-adapter rather than per-socket
  3953.  bit 2    data bus width is per-socket rather than per-window
  3954.  bit 3    status change interrupt
  3955.  bit 4    status change interrupt is software shareable
  3956.  bit 5    status change interrupt is hardware shareable
  3957.  bits 6-7 reserved (0)
  3958.  
  3959. Values for status change interrupt usage:
  3960.  00h-0Fh IRQ level
  3961.  10h    NMI
  3962.  11h    I/O check
  3963.  12h    bus error
  3964.  13h    vendor specific
  3965.  14h-FFh reserved
  3966. --------s-1A85-------------------------------
  3967. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  3968.     AH = 85h
  3969.     ???
  3970. Return: ???
  3971. SeeAlso: AH=7Fh,AH=83h
  3972. --------X-1A85-------------------------------
  3973. INT 1A - PCMCIA Socket Services - GET ADAPTER
  3974.     AH = 85h
  3975.     AL = adapter number
  3976. Return: CF clear if successful
  3977.         AH destroyed
  3978.         DH = adapter attributes (see below)
  3979.     CF set on error
  3980.         AH = error code (01h) (see AH=80h"PCMCIA")
  3981. SeeAlso: AH=84h"PCMCIA",AH=86h
  3982.  
  3983. Bitfields for adapter attributes:
  3984.  bit 0    attempting to reduce power consumption
  3985.  bit 1    adapter preserves state information during reduced power consumption
  3986.  bit 2    enable status change interrupts
  3987.  bit 3    software share status change
  3988.  bit 4    hardware share status change
  3989.  bits 5-7 reserved (0)
  3990. --------X-1A86-------------------------------
  3991. INT 1A - PCMCIA Socket Services - SET ADAPTER
  3992.     AH = 86h
  3993.     AL = adapter number
  3994.     DH = new adapter attributes (see AH=85h"PCMCIA")
  3995. Return: CF clear if successful
  3996.         AH destroyed
  3997.     CF set on error
  3998.         AH = error code (01h) (see AH=80h"PCMCIA")
  3999. SeeAlso: AH=84h"PCMCIA",AH=85h"PCMCIA"
  4000. --------X-1A87-------------------------------
  4001. INT 1A - PCMCIA Socket Services - INQUIRE WINDOW
  4002.     AH = 87h
  4003.     AL = adapter number
  4004.     BH = window number
  4005. Return: CF clear if successful
  4006.         AH destroyed
  4007.         BL = capabilities (see below)
  4008.         CX = bitmap of assignable sockets
  4009.         DH = EISA A15-A12 address lines (in bits 7-4, bits 3-0 = 0)
  4010.         DL = supported access speeds (see below)
  4011.         DS:SI -> Memory Window Characteristics table (see below)
  4012.         DS:DI -> I/O Window Characteristics table (see below)
  4013.     CF set on error
  4014.         AH = error code (01h,11h) (see AH=80h"PCMCIA")
  4015. SeeAlso: AH=84h"PCMCIA",AH=88h,AH=89h,AH=8Ch
  4016.  
  4017. Bitfields for window capabilities:
  4018.  bit 0    common memory
  4019.  bit 1    attribute memory
  4020.  bit 2    I/O space
  4021.  bit 3    EISA I/O mappable
  4022.  bit 4    separate enable for EISA comon space
  4023.  bits 5-7 reserved (0)
  4024.  
  4025. Values for supported access speeds:
  4026.  bit 0    WAIT line monitoring
  4027.  bit 1    100 ns
  4028.  bit 2    150 ns
  4029.  bit 3    200 ns
  4030.  bit 4    250 ns
  4031.  bit 5    300 ns
  4032.  bit 6    600 ns
  4033.  bit 7    reserved (0)
  4034.  
  4035. Format of Memory Window Characteristics table:
  4036. Offset    Size    Description
  4037.  00h    WORD    window capabilities (see below)
  4038.  02h    WORD    minimum base address in 4K pages
  4039.  04h    WORD    maximum base address in 4K pages
  4040.  06h    WORD    minimum window size in 4K pages
  4041.  08h    WORD    maximum window size in 4K pages
  4042.  0Ah    WORD    window size granularity (4K units)
  4043.  0Ch    WORD    required base address alignment (4K units)
  4044.  0Eh    WORD    required card offset alignment (4K units)
  4045.  
  4046. Format of I/O Window Characteristics table:
  4047. Offset    Size    Description
  4048.  00h    WORD    window capabilities (see below)
  4049.  02h    WORD    minimum base address in bytes
  4050.  04h    WORD    maximum base address in bytes
  4051.  06h    WORD    minimum window size in bytes
  4052.  08h    WORD    maximum window size in bytes
  4053.  0Ah    WORD    window size granularity (bytes)
  4054.  
  4055. Bitfields for window capabilities:
  4056.  bit 0    programmable base address
  4057.  bit 1    programmable window size
  4058.  bit 2    window disable/enable supported
  4059.  bit 3    8-bit data bus
  4060.  bit 4    16-bit data bus
  4061.  bit 5    base address alignment on size boundary required
  4062.  bit 6    power-of-two size granularity
  4063. ---memory windows---
  4064.  bit 7    card offset must be aligned on size boundary
  4065.  bit 8    paging hardware available
  4066.  bit 9    paging hardware shared
  4067.  bit 10    page disable/enable supported
  4068.  bits 11-15 reserved (0)
  4069. ---I/O windows---
  4070.  bits 7-15 reserved (0)
  4071. --------X-1A88-------------------------------
  4072. INT 1A - PCMCIA Socket Services - GET WINDOW
  4073.     AH = 88h
  4074.     AL = adapter number
  4075.     BH = window number
  4076. Return: CF clear if successful
  4077.         AH destroyed
  4078.         BL = socket number (0-16) (0 = not assigned)
  4079.         CX = window size (bytes for I/O window, 4K units for memory window)
  4080.         DH = window attributes (see below)
  4081.         DL = access speed (only one bit set) (see AH=87h)
  4082.         SI = window base address (bytes if I/O, 4K units if memory)
  4083.         DI = card offset address (memory only, 4K units)
  4084.     CF set on error
  4085.         AH = error code (01h,11h) (see AH=80h"PCMCIA")
  4086. SeeAlso: AH=87h,AH=89h,AH=8Ah
  4087.  
  4088. Bitfields for window attributes:
  4089.  bit 0    memory-mapped rather than I/O-mapped
  4090.  bit 1    attribute memory rather than common (memory-mapped)
  4091.     EISA mapped (I/O)
  4092.  bit 2    enabled
  4093.  bit 3    16-bit data path
  4094.  bit 4    subdivided into pages (memory-mapped only)
  4095.  bit 5    non-specific access slot enable (EISA-mapped only)
  4096.  bits 6-7 reserved (0)
  4097. --------X-1A89-------------------------------
  4098. INT 1A - PCMCIA Socket Services - SET WINDOW
  4099.     AH = 89h
  4100.     AL = adapter number
  4101.     BH = window number
  4102.     BL = socket number
  4103.     CX = window size (bytes if I/O window, 4K units if memory window)
  4104.     DH = window attributes (see AH=88h)
  4105.     DL = access speed (only one bit set) (see AH=87h)
  4106.     SI = window base address (bytes if I/O, 4K units if memory window)
  4107.     DI = card offset addrress (memory only, 4K units)
  4108. Return: CF clear if successful
  4109.         AH destroyed
  4110.     CF set on error
  4111.         AH = error code (01h,03h,07h,08h,0Ah,0Bh,0Dh,10h,11h)
  4112.         (see AH=80h"PCMCIA")
  4113. SeeAlso: AH=87h,AH=88h,AH=8Bh
  4114. --------X-1A8A-------------------------------
  4115. INT 1A - PCMCIA Socket Services - GET PAGE
  4116.     AH = 8Ah
  4117.     AL = adapter number
  4118.     BH = window number
  4119.     BL = page number
  4120. Return: CF clear if successful
  4121.         AH destroyed
  4122.         DX = page attributes
  4123.         bit 0: page enabled
  4124.         bits 15-1 reserved (0)
  4125.         DI = memory card offset (4K units)
  4126.     CF set on error
  4127.         AH = error code (01h,08h,11h) (see AH=80h"PCMCIA")
  4128. Notes:    this function is only valid for memory-mapped windows
  4129.     the socket being operated on is implied by the previous AH=89h call
  4130. SeeAlso: AH=88h,AH=8Bh
  4131. --------X-1A8B-------------------------------
  4132. INT 1A - PCMCIA Socket Services - SET PAGE
  4133.     AH = 8Bh
  4134.     AL = adapter number
  4135.     BH = window number
  4136.     BL = page number
  4137.     DX = page attributes
  4138.         bit 0: page enabled
  4139.         bits 15-1 reserved (0)
  4140.     DI = memory card offset (4K units)
  4141. Return: CF clear if successful
  4142.         AH destroyed
  4143.     CF set on error
  4144.         AH = error code (01h,02h,07h,08h,11h) (see AH=80h"PCMCIA")
  4145. Notes:    this function is only valid for memory-mapped windows
  4146.     the socket being operated on is implied by the previous AH=89h call
  4147. SeeAlso: AH=89h,AH=8Ah
  4148. --------X-1A8C-------------------------------
  4149. INT 1A - PCMCIA Socket Services - INQUIRE SOCKET
  4150.     AH = 8Ch
  4151.     AL = adapter number
  4152.     BL = socket number (01h to maximum supported by adapter)
  4153. Return: CF clear if successful
  4154.         AH destroyed
  4155.         DH = capabilities (see below)
  4156.         DL = hardware indicators (see below)
  4157.         DS:SI -> Socket Characteristics table (see below)
  4158.         DS:DI -> Power Management table (see below)
  4159.     CF set on error
  4160.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4161. SeeAlso: AH=87h,AH=8Dh,AH=8Eh
  4162.  
  4163. Bitfields for socket capabilities:
  4164.  bit 0    card change
  4165.  bit 1    card lock
  4166.  bit 2    insert card (motor control)
  4167.  bit 3    eject card (motor control)
  4168.  bits 4-7 reserved (0)
  4169.  
  4170. Bitfields for socket hardware indicators:
  4171.  bit 0    busy status
  4172.  bit 1    write-protected
  4173.  bit 2    battery status
  4174.  bit 3    card lock status
  4175.  bit 4    XIP status (eXecute-In-Place)
  4176.  bits 5-7 reserved (0)
  4177.  
  4178. Format of Socket Characteristics table:
  4179. Offset    Size    Description
  4180.  00h    WORD    supported card types
  4181.         bit 0: memory card
  4182.         bit 1: I/O card
  4183.         bits 2-7 reserved (0)
  4184.  02h    WORD    steerable IRQ levels (bit 0 = IRQ0 to bit 15 = IRQ15)
  4185.  04h    WORD    additional steerable IRQ levels
  4186.         bit 0: NMI
  4187.         bit 1: I/O check
  4188.         bit 2: bus error
  4189.         bit 3: vendor-unique
  4190.         bits 4-7 reserved (0)
  4191.  
  4192. Format of Power Management table:
  4193. Offset    Size    Description
  4194.  00h    WORD    number of entries in table (0 if power management not avail)
  4195.  02h 2N BYTEs    power levels
  4196.         byte 0: voltage in 0.1V units
  4197.         byte 1: power supply
  4198.             bit 7: Vcc
  4199.             bit 6: Vpp1
  4200.             bit 5: Vpp2
  4201. --------X-1A8D-------------------------------
  4202. INT 1A - PCMCIA Socket Services - GET SOCKET
  4203.     AH = 8Dh
  4204.     AL = adapter number
  4205.     BL = socket number (01h to maximum supported by adapter)
  4206. Return: CF clear if successful
  4207.         AH destroyed
  4208.         BH = status change interrupt enable mask (see AH=81h"PCMCIA")
  4209.         CH = Vcc level (lower nybble)
  4210.         CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  4211.         DH = current socket status (see AH=81h"PCMCIA")
  4212.         DL = indicators (see AH=8Ch)
  4213.         SI = card type (see below)
  4214.         DI = IRQ level steering (I/O only) (see below)
  4215.     CF set on error
  4216.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4217. SeeAlso: AH=8Ch,AH=8Eh
  4218.  
  4219. Bitfields for card type:
  4220.  bit 0    memory
  4221.  bit 1    I/O
  4222.  bits 2-15 reserved (0)
  4223.  
  4224. Bitfields for I/O level steering:
  4225.  bits 0-4    IRQ level (0-15=IRQ,16=NMI,17=I/O check,18=bus error,19=vendor)
  4226.  bits 5-14    reserved (0)
  4227.  bit 15        interrupt steering enabled
  4228. --------X-1A8E-------------------------------
  4229. INT 1A - PCMCIA Socket Services - SET SOCKET
  4230.     AH = 8Eh
  4231.     AL = adapter number
  4232.     BL = socket number (01h to maximum supported by adapter)
  4233.     BH = status change interrupt enable mask (see AH=81h"PCMCIA")
  4234.     CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  4235.     DH = current socket status (see AH=81h"PCMCIA")
  4236.     DL = indicators (see AH=8Ch)
  4237.     SI = card type (see AH=8Dh)
  4238.     DI = IRQ level steering (I/O only) (see AH=8Dh)
  4239. Return: CF clear if successful
  4240.         AH destroyed
  4241.     CF set on error
  4242.         AH = error code (01h,02h,05h,06h,0Bh,0Eh,0Fh) (see AH=80h"PCMCIA")
  4243. SeeAlso: AH=8Ch,AH=8Dh
  4244. --------X-1A8F-------------------------------
  4245. INT 1A - PCMCIA Socket Services - GET CARD
  4246.     AH = 8Fh
  4247.     AL = adapter number
  4248.     BL = socket number (01h to maximum supported by adapter)
  4249. Return: CF clear if successful
  4250.         AH destroyed
  4251.         DL = current card status (see AH=81h"PCMCIA")
  4252.     CF set on error
  4253.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  4254. SeeAlso: AH=8Dh,AH=90h
  4255. --------X-1A90-------------------------------
  4256. INT 1A - PCMCIA Socket Services - RESET CARD
  4257.     AH = 90h
  4258.     AL = adapter number
  4259.     BL = socket number (01h to maximum supported by adapter)
  4260. Return: CF clear if successful
  4261.         AH destroyed
  4262.     CF set on error
  4263.         AH = error code (01h,0Bh,14h) (see AH=80h"PCMCIA")
  4264. Note:    toggles RESET pin of the specified card, but does not wait after
  4265.       toggling the pin; it is the caller's responsibility to avoid
  4266.       accessing the card before it is ready again
  4267. --------X-1A91-------------------------------
  4268. INT 1A - PCMCIA Socket Services - READ ONE
  4269.     AH = 91h
  4270.     AL = adapter number
  4271.     BL = socket number (01h to maximum supported by adapter)
  4272.     BH = attributes (see below)
  4273.     DX:SI = card address
  4274. Return: CF clear if successful
  4275.         AH destroyed
  4276.         CL/CX = value read
  4277.     CF set on error
  4278.         AH = error code (01h,07h,09h,0Bh,14h) (see AH=80h"PCMCIA")
  4279.         CX may be destroyed
  4280. Note:    this function is only valid for I/O-mapped sockets
  4281. SeeAlso: AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  4282.  
  4283. Bitfields for attributes:
  4284.  bit 0    attribute memory instead of common memory
  4285.  bit 1    word rather than byte
  4286.  bit 2    even bytes only
  4287. --------X-1A92-------------------------------
  4288. INT 1A - PCMCIA Socket Services - WRITE ONE
  4289.     AH = 92h
  4290.     AL = adapter number
  4291.     BL = socket number (01h to maximum supported by adapter)
  4292.     BH = attributes (see AH=91h)
  4293.     CL/CX = value to write
  4294.     DX:SI = card address
  4295. Return: CF clear if successful
  4296.         AH destroyed
  4297.     CF set on error
  4298.         AH = error code (01h,07h,0Bh,12h,14h) (see AH=80h"PCMCIA")
  4299. Note:    this function is only valid for I/O-mapped sockets; it also does not
  4300.       implement Card Technology handling--use AH=94h when writing to
  4301.       non-RAM technologies
  4302. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  4303. --------X-1A93-------------------------------
  4304. INT 1A - PCMCIA Socket Services - READ MULTIPLE
  4305.     AH = 93h
  4306.     AL = adapter number
  4307.     BL = socket number (01h to maximum supported by adapter)
  4308.     BH = attributes (see AH=91h)
  4309.     CX = number of bytes or words to read
  4310.     DX:SI = card address
  4311.     DS:DI -> data buffer to be filled
  4312. Return: CF clear if successful
  4313.         AH destroyed
  4314.     CF set on error
  4315.         AH = error code (01h,07h,09h,0Bh,14h) (see AH=80h"PCMCIA")
  4316. Note:    this function is only available on I/O-mapped sockets
  4317. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  4318. --------X-1A94-------------------------------
  4319. INT 1A - PCMCIA Socket Services - WRITE MULTIPLE
  4320.     AH = 94h
  4321.     AL = adapter number
  4322.     BL = socket number (01h to maximum supported by adapter)
  4323.     BH = attributes (see AH=91h)
  4324.     CX = number of bytes or words to read
  4325.     DX:DI = card address
  4326.     DS:SI -> buffer containing data
  4327.     BP = Card Technology type (0000h = RAM)
  4328. Return: CF clear if successful
  4329.         AH destroyed
  4330.     CF set on error
  4331.         AH = error code (01h,07h,0Bh,0Ch,12h,14h) (see AH=80h"PCMCIA")
  4332. Notes:    this function is only available on I/O-mapped sockets
  4333.     Socket Services calls the Card Technology callback (see AH=82h"PCMCIA")
  4334.       for any card technology it does not directly support
  4335. SeeAlso: AH=82h"PCMCIA",AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  4336. --------X-1A95-------------------------------
  4337. INT 1A - PCMCIA Socket Services - INQUIRE ERROR DETECTION CODE
  4338.     AH = 95h
  4339.     AL = adapter number
  4340.     BH = EDC generator number
  4341. Return: CF clear if successful
  4342.         AH destroyed
  4343.         CX = bitmap of assignable sockets
  4344.         DH = EDC capabilities (see below)
  4345.         DL = supported EDC types (see below)
  4346.     CF set on error
  4347.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4348. SeeAlso: AH=96h,AH=9Ch
  4349.  
  4350. Bitfields for EDC capabilities:
  4351.  bit 0    unidirectional only generation
  4352.  bit 1    bidirectional only generation
  4353.  bit 2    register-based (I/O-mapped) support
  4354.  bit 3    memory-mapped support
  4355.  bit 4    pausable
  4356.  bits 5-7 reserved (0)
  4357.  
  4358. Bitfields for supported EDC types:
  4359.  bit 0    8-bit checksum
  4360.  bit 1    16-bit CRC-SDLC
  4361.  bits 2-7 reserved (0)
  4362. --------X-1A96-------------------------------
  4363. INT 1A - PCMCIA Socket Services - GET ERROR DETECTION CODE
  4364.     AH = 96h
  4365.     AL = adapter number
  4366.     BH = EDC generator number
  4367. Return: CF clear if successful
  4368.         AH destroyed
  4369.         BL = socket number
  4370.         DH = EDC attributes (see below)
  4371.         DL = EDC type (see AH=95h) (only one bit set)
  4372.     CF set on error
  4373.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4374. SeeAlso: AH=95h,AH=97h,AH=9Ch
  4375.  
  4376. Bitfields for EDC attributes:
  4377.  bit 0    unidirectional only
  4378.  bit 1    (if bit 0 set) clear=read, set=write
  4379.  bits 2-7 reserved (0)
  4380. --------X-1A97-------------------------------
  4381. INT 1A - PCMCIA Socket Services - SET ERROR DETECTION CODE
  4382.     AH = 97h
  4383.     AL = adapter number
  4384.     BH = EDC generator
  4385.     BL = socket number
  4386.     DH = EDC attributes (see AH=96h)
  4387.     DL = EDC type (see AH=95h) (only one bit may be set)
  4388. Return: CF clear if successful
  4389.         AH destroyed
  4390.     CF set on error
  4391.         AH = error code (01h,02h,04h,0Bh) (see AH=80h"PCMCIA")
  4392. SeeAlso: AH=96h,AH=9Ch
  4393. --------X-1A98-------------------------------
  4394. INT 1A - PCMCIA Socket Services - START ERROR DETECTION CODE
  4395.     AH = 98h
  4396.     AL = adapter number
  4397.     BH = EDC generator
  4398. Return: CF clear if successful
  4399.         AH destroyed
  4400.     CF set on error
  4401.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4402. SeeAlso: AH=96h,AH=99h,AH=9Bh,AH=9Ch
  4403. --------X-1A99-------------------------------
  4404. INT 1A - PCMCIA Socket Services - PAUSE ERROR DETECTION CODE
  4405.     AH = 99h
  4406.     AL = adapter number
  4407.     BH = EDC generator
  4408. Return: CF clear if successful
  4409.         AH destroyed
  4410.     CF set on error
  4411.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4412. SeeAlso: AH=9Ah
  4413. --------X-1A9A-------------------------------
  4414. INT 1A - PCMCIA Socket Services - RESUME ERROR DETECTION CODE
  4415.     AH = 9Ah
  4416.     AL = adapter number
  4417.     BH = EDC generator
  4418. Return: CF clear if successful
  4419.         AH destroyed
  4420.     CF set on error
  4421.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4422. SeeAlso: AH=99h,AH=98h
  4423. --------X-1A9B-------------------------------
  4424. INT 1A - PCMCIA Socket Services - STOP ERROR DETECTION CODE
  4425.     AH = 9Bh
  4426.     AL = adapter number
  4427.     BH = EDC generator
  4428. Return: CF clear if successful
  4429.         AH destroyed
  4430.     CF set on error
  4431.         AH = error code (see AH=80h"PCMCIA")
  4432. SeeAlso: AH=98h,AH=99h,AH=9Ch
  4433. --------X-1A9C-------------------------------
  4434. INT 1A - PCMCIA Socket Services - READ ERROR DETECTION CODE
  4435.     AH = 9Ch
  4436.     AL = adapter number
  4437.     BH = EDC generator
  4438. Return: CF clear if successful
  4439.         AH destroyed
  4440.         DL/DX = computed checksum or CRC
  4441.     CF set on error
  4442.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  4443. SeeAlso: AH=95h,AH=96h,AH=98h,AH=99h,AH=9Bh
  4444. --------c-1AA0-------------------------------
  4445. INT 1A U - Disk Spool II v2.07+ - INSTALLATION CHECK
  4446.     AH = A0h
  4447. Return: AH = B0h if installed
  4448.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  4449.         ES = code segment
  4450.         ES:BX -> name of current spool file
  4451.         ES:SI -> current despool file
  4452.         CL = despooler state (00h disabled, 41h enabled)
  4453.         CH = spooler state (00h disabled, 41h enabled)
  4454.         DL = 00h despooler is currently active printing a file
  4455.            = 41h despooler is standing by
  4456.         DH = 00h ???
  4457.            = 41h ???
  4458.         DI = 0000h ???
  4459.          0001h ???
  4460. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  4461.       Software Company
  4462. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4463.       as that is a licensed version of Disk Spool II
  4464. SeeAlso: AH=ABh,AH=C0h,AH=D0h,AH=E1h
  4465. --------c-1AAB-------------------------------
  4466. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  4467.     AH = ABh
  4468. Return: AH = BAh if installed
  4469.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  4470.         ES = code segment
  4471.         ES:BX -> name of current spool file
  4472.         ES:SI -> current despool file
  4473.         CL = 00h despooler is disabled
  4474.            = 41h despooler is enabled
  4475.         CH = 00h spooler is disabled
  4476.            = 41h spooler is enabled
  4477.         DL = 00h despooler is currently active printing a file
  4478.            = 41h despooler is standing by
  4479.         DH = 00h ???
  4480.            = 41h ???
  4481.         DI = 0000h ???
  4482.          0001h ???
  4483. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  4484.       Software Company
  4485. SeeAlso: AH=A0h,AH=ACh,AH=ADh,AH=E1h
  4486. --------c-1AAC-------------------------------
  4487. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  4488.     AH = ACh
  4489. Return: (see AH=ABh)
  4490. Note:    this function is identical to AH=ABh
  4491. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  4492. --------c-1AAD-------------------------------
  4493. INT 1A U - Disk Spool II v1.83 - FUNCTION CALLS
  4494.     AH = ADh
  4495.     AL = function code
  4496.         02h enable spooler only
  4497.         03h enable the despooler
  4498.         04h disable the despooler
  4499.         08h inhibit popup menu
  4500.         09h enable popup menu
  4501.         0Ah ???
  4502.         0Bh disable the spooler
  4503.         0Ch start despooler after last successfully printed document???
  4504.         0Dh start despooler at the exact point where it last left off???
  4505.         0Eh pop up the menu
  4506.         0Fh ???
  4507.         11h ???
  4508.         14h ???
  4509.         15h ???
  4510.         16h ???
  4511.         17h ???
  4512.         18h ???
  4513.         19h ???
  4514.         20h clear file pointed to by the despooler???
  4515.         21h ???
  4516.         22h ???
  4517.         23h ???
  4518.         30h ???
  4519. Return: AH = 00h if successful
  4520. SeeAlso: AH=ABh
  4521. --------d-1AB001CX4D52-----------------------
  4522. INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
  4523.     AX = B001h
  4524.     CX = 4D52h ("MR")
  4525.     DX = 4349h ("CI")
  4526. Return: CX = 4943h ("IC") if installed
  4527.     DX = 524Dh ("RM") if installed
  4528.         ES:DI -> MRCINFO structure (see below)
  4529. Note:    this call is functionally identical to INT 2F/AX=4A12h, which should
  4530.       be called first, as this call is used for the first, ROM-based
  4531.       MRCI server, while the other call is used for RAM-based servers
  4532.       which may be partially or entirely replacing a prior server
  4533. SeeAlso: INT 2F/AX=4A12h
  4534.  
  4535. Format of MRCINFO structure:
  4536. Offset    Size    Description
  4537.  00h  4 BYTEs    vendor signature
  4538.         "MSFT" Microsoft
  4539.  04h    WORD    server version (high=major)
  4540.  06h    WORD    MRCI specification version
  4541.  08h    DWORD    address of server entry point
  4542.  0Ch    WORD    bit flags: server capabilities (see below)
  4543.  0Eh    WORD    bit flags: hardware assisted capabilities (see below)
  4544.  10h    WORD    maximum block size supported by server (at least 8192 bytes)
  4545.  
  4546. Bitfields for capabilities:
  4547.  bit 0    standard compress
  4548.  bit 1    standard decompress
  4549.  bit 2    update compress
  4550.  bit 3    MaxCompress
  4551.  bit 4    reserved
  4552.  bit 5    incremental decompress
  4553.  bits 6-14 reserved
  4554.  bit 15 this structure is in ROM and can't be modified
  4555.     (server capabilities only)
  4556.  
  4557. Call MRCI entry point with:
  4558.     DS:SI -> MRCREQUEST structure (see below)
  4559.     CX = type of client (0000h application, 0001h file system)
  4560.     AX = operation
  4561.         0001h perform standard compression
  4562.         0002h perform standard decompression
  4563.         0004h perform update compression
  4564.         0008h perform MaxCompress
  4565.         0020h perform incremental decompression
  4566.     AX = FFFFh clear flags
  4567.         BX = bitmask of flags to clear (set bits in BX are flags to clear)
  4568. Return: AX = status
  4569.         0000h successful
  4570.         0001h invalid function
  4571.         0002h server busy, try again
  4572.         0003h destination buffer too small
  4573.         0004h incompressible data
  4574.         0005h bad compressed data format
  4575. Note:    MRCI driver may chain to a previous driver
  4576.  
  4577. Format of MRCREQUEST structure:
  4578. Offset    Size    Description
  4579.  00h    DWORD    pointer to source buffer
  4580.  04h    WORD    size of source buffer (0000h = 64K)
  4581.  06h    WORD    (UpdateCompress only)
  4582.         (call) offset in source buffer of beginning of changed data
  4583.         (return) offset in destination buffer of beginning of changed
  4584.             compressed data
  4585.  08h    DWORD    pointer to destination buffer
  4586.         must contain original compressed data for UpdateCompress
  4587.  0Ch    WORD    size of destination buffer (0000h = 64K)
  4588.         any compression: size of buffer for compressed data
  4589.         standard decompression: number of bytes to be decompressed
  4590.         incremental decompression: number of byte to decompress now
  4591.         (return) actual size of resulting data
  4592.  0Eh    WORD    client compressed data storage allocation size
  4593.  10h    DWORD    incremental decompression state data
  4594.         set to 00000000h before first incremental decompression call
  4595. Notes:    the source and destination buffers may not overlap
  4596.     the source and destination buffer sizes should normally be the same
  4597.     application should not update the contents of the MRCREQUEST structure
  4598.       between incremental decompression calls
  4599. --------X-1AB101-----------------------------
  4600. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK
  4601.     AX = B101h
  4602. Return: AH = 00h if installed
  4603.         CF clear
  4604.         EDX = 20494350h (' ICP')
  4605.         EDI = physical address of protected-mode entry point (see below)
  4606.         AL = PCI hardware characteristics
  4607.         bit 0: configuration space access mechanism 1 supported
  4608.         bit 1: configuration space access mechanism 2 supported
  4609.         bits 2-3 reserved
  4610.         bit 4: Special Cycle generation mechanism 1 supported
  4611.         bit 5: Special Cycle generation mechanism 2 supported
  4612.         bits 6-7 reserved
  4613.         BH = PCI interface level major version (BCD)
  4614.         BL = PCI interface level minor version (BCD)
  4615.         CL = number of last PCI bus in system
  4616.     EAX, EBX, ECX, and EDX may be modified
  4617.     all other flags (except IF) may be modified
  4618. Note:    this function may require up to 1024 byte of stack; it will not enable
  4619.       interrupts if they were disabled before making the call
  4620. SeeAlso: AX=B181h
  4621.  
  4622. Call protected-mode entry point with:
  4623.     registers as for real/V86-mode INT call
  4624.     CS = ring 0 descriptor with access to full address space
  4625. Return: as for real/V86-mode call
  4626. --------X-1AB102-----------------------------
  4627. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE
  4628.     AX = B102h
  4629.     CX = device ID
  4630.     DX = vendor ID
  4631.     SI = device index (0-n)
  4632. Return: CF clear if successful
  4633.     CF set on error
  4634.     AH = status
  4635.         00h successful
  4636.         BL = bus number
  4637.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  4638.         83h bad vendor ID
  4639.         86h device not found
  4640.     EAX, EBX, ECX, and EDX may be modified
  4641.     all other flags (except IF) may be modified
  4642. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4643.       interrupts if they were disabled before making the call
  4644.     device ID FFFFh may be reserved as a wildcard in future implementations
  4645.     the meanings of BL and BH on return may be exchanged in future
  4646.       implementations
  4647.     all devices sharing a single vendor ID and device ID may be enumerated
  4648.       by incrementing SI from 0 until error 86h is returned
  4649. SeeAlso: AX=B182h
  4650. --------X-1AB103-----------------------------
  4651. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE
  4652.     AX = B103h
  4653.     ECX = class code (bits 23-0)
  4654.     SI = device index (0-n)
  4655. Return: CF clear if successful
  4656.     CF set on error
  4657.     AH = status
  4658.         00h successful
  4659.         BL = bus number
  4660.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  4661.         86h device not found
  4662.     EAX, EBX, ECX, and EDX may be modified
  4663.     all other flags (except IF) may be modified
  4664. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4665.       interrupts if they were disabled before making the call
  4666.     the meanings of BL and BH on return may be exchanged in future
  4667.       implementations
  4668.     all devices sharing the same Class Code may be enumerated by
  4669.       incrementing SI from 0 until error 86h is returned
  4670. SeeAlso: AX=B183h
  4671. --------X-1AB102-----------------------------
  4672. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS
  4673.     AX = B106h
  4674.     BL = bus number
  4675.     EDX = Special Cycle data
  4676. Return: CF clear if successful
  4677.     CF set on error
  4678.     AH = status
  4679.         00h successful
  4680.         81h unsupported function
  4681.     EAX, EBX, ECX, and EDX may be modified
  4682.     all other flags (except IF) may be modified
  4683. Note:    this function may require up to 1024 byte of stack; it will not enable
  4684.       interrupts if they were disabled before making the call
  4685. SeeAlso: AX=B186h
  4686. --------X-1AB108-----------------------------
  4687. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE
  4688.     AX = B108h
  4689.     BL = bus number
  4690.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4691.     DI = register number (0000h-00FFh)
  4692. Return: CF clear if successful
  4693.         CL = byte read
  4694.     CF set on error
  4695.     AH = status
  4696.         00h successful
  4697.         87h bad register number
  4698.     EAX, EBX, ECX, and EDX may be modified
  4699.     all other flags (except IF) may be modified
  4700. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4701.       interrupts if they were disabled before making the call
  4702.     the meanings of BL and BH on entry may be exchanged in future
  4703.       implementations
  4704. SeeAlso: AX=B188h
  4705. --------X-1AB109-----------------------------
  4706. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD
  4707.     AX = B109h
  4708.     BL = bus number
  4709.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4710.     DI = register number (0000h-00FFh)
  4711. Return: CF clear if successful
  4712.         CX = word read
  4713.     CF set on error
  4714.     AH = status
  4715.         00h successful
  4716.         87h bad register number
  4717.     EAX, EBX, ECX, and EDX may be modified
  4718.     all other flags (except IF) may be modified
  4719. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4720.       interrupts if they were disabled before making the call
  4721.     the meanings of BL and BH on entry may be exchanged in future
  4722.       implementations
  4723. SeeAlso: AX=B189h
  4724. --------X-1AB10A-----------------------------
  4725. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD
  4726.     AX = B10Ah
  4727.     BL = bus number
  4728.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4729.     DI = register number (0000h-00FFh)
  4730. Return: CF clear if successful
  4731.         ECX = dword read
  4732.     CF set on error
  4733.     AH = status
  4734.         00h successful
  4735.         87h bad register number
  4736.     EAX, EBX, ECX, and EDX may be modified
  4737.     all other flags (except IF) may be modified
  4738. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4739.       interrupts if they were disabled before making the call
  4740.     the meanings of BL and BH on entry may be exchanged in future
  4741.       implementations
  4742. SeeAlso: AX=B18Ah
  4743. --------X-1AB10B-----------------------------
  4744. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE
  4745.     AX = B10Bh
  4746.     BL = bus number
  4747.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4748.     DI = register number (0000h-00FFh)
  4749.     CL = byte to write
  4750. Return: CF clear if successful
  4751.     CF set on error
  4752.     AH = status
  4753.         00h successful
  4754.         87h bad register number
  4755.     EAX, EBX, ECX, and EDX may be modified
  4756.     all other flags (except IF) may be modified
  4757. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4758.       interrupts if they were disabled before making the call
  4759.     the meanings of BL and BH on entry may be exchanged in future
  4760.       implementations
  4761. SeeAlso: AX=B18Bh
  4762. --------X-1AB10C-----------------------------
  4763. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD
  4764.     AX = B10Ch
  4765.     BL = bus number
  4766.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4767.     DI = register number (multiple of 2 less than 0100h)
  4768.     CX = word to write
  4769. Return: CF clear if successful
  4770.     CF set on error
  4771.     AH = status
  4772.         00h successful
  4773.         87h bad register number
  4774.     EAX, EBX, ECX, and EDX may be modified
  4775.     all other flags (except IF) may be modified
  4776. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4777.       interrupts if they were disabled before making the call
  4778.     the meanings of BL and BH on entry may be exchanged in future
  4779.       implementations
  4780. SeeAlso: AX=B18Ch
  4781. --------X-1AB10D-----------------------------
  4782. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD
  4783.     AX = B10Dh
  4784.     BL = bus number
  4785.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4786.     DI = register number (multiple of 4 less than 0100h)
  4787.     ECX = dword to write
  4788. Return: CF clear if successful
  4789.     CF set on error
  4790.     AH = status
  4791.         00h successful
  4792.         87h bad register number
  4793.     EAX, EBX, ECX, and EDX may be modified
  4794.     all other flags (except IF) may be modified
  4795. Notes:    this function may require up to 1024 byte of stack; it will not enable
  4796.       interrupts if they were disabled before making the call
  4797.     the meanings of BL and BH on entry may be exchanged in future
  4798.       implementations
  4799. SeeAlso: AX=B18Dh
  4800. --------X-1AB181-----------------------------
  4801. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK (32-bit)
  4802.     AX = B181h
  4803. Return: as for AX=B101h
  4804. SeeAlso: AX=B101h
  4805. --------X-1AB182-----------------------------
  4806. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE (32-bit)
  4807.     AX = B182h
  4808.     CX = device ID
  4809.     DX = vendor ID
  4810.     SI = device index (0-n)
  4811. Return: as for AX=B102h
  4812. SeeAlso: AX=B102h
  4813. --------X-1AB183-----------------------------
  4814. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE (32-bit)
  4815.     AX = B183h
  4816.     ECX = class code (bits 23-0)
  4817.     SI = device index (0-n)
  4818. Return: as for AX=B103h
  4819. SeeAlso: AX=B103h
  4820. --------X-1AB186-----------------------------
  4821. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS (32-bit)
  4822.     AX = B186h
  4823.     BL = bus number
  4824.     EDX = Special Cycle data
  4825. Return: as for AX=B106h
  4826. SeeAlso: AX=B106h
  4827. --------X-1AB188-----------------------------
  4828. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE (32-bit)
  4829.     AX = B188h
  4830.     BL = bus number
  4831.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4832.     DI = register number (0000h-00FFh)
  4833. Return: as for AX=B108h
  4834. SeeAlso: AX=B108h
  4835. --------X-1AB189-----------------------------
  4836. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD (32-bit)
  4837.     AX = B189h
  4838.     BL = bus number
  4839.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4840.     DI = register number (0000h-00FFh)
  4841. Return: as for AX=B109h
  4842. SeeAlso: AX=B109h
  4843. --------X-1AB18A-----------------------------
  4844. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD (32-bit)
  4845.     AX = B18Ah
  4846.     BL = bus number
  4847.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4848.     DI = register number (0000h-00FFh)
  4849. Return: as for AX=B10Ah
  4850. SeeAlso: AX=B10Ah
  4851. --------X-1AB18B-----------------------------
  4852. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE (32-bit)
  4853.     AX = B18Bh
  4854.     BL = bus number
  4855.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4856.     DI = register number (0000h-00FFh)
  4857.     CL = byte to write
  4858. Return: as for AX=B10Bh
  4859. SeeAlso: AX=B10Bh
  4860. --------X-1AB18C-----------------------------
  4861. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD (32-bit)
  4862.     AX = B18Ch
  4863.     BL = bus number
  4864.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4865.     DI = register number (multiple of 2 less than 0100h)
  4866.     CX = word to write
  4867. Return: as for AX=B10Ch
  4868. SeeAlso: AX=B10Ch
  4869. --------X-1AB18D-----------------------------
  4870. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD (32-bit)
  4871.     AX = B18Dh
  4872.     BL = bus number
  4873.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  4874.     DI = register number (multiple of 4 less than 0100h)
  4875.     ECX = dword to write
  4876. Return: as for AX=B10Dh
  4877. SeeAlso: AX=B10Dh
  4878. --------c-1AC0-------------------------------
  4879. INT 1A U - Disk Spool II v2.07+ - ALTERNATE INSTALLATION CHECK
  4880.     AH = C0h
  4881. Return: (see AH=A0h)
  4882. Notes:    this call is identical to AH=A0h
  4883.     this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4884.       as that is a licensed version of Disk Spool II
  4885. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  4886. ----------1ACCCCBXCCCC-----------------------
  4887. INT 1A U - DATEFIX - INSTALLATION CHECK
  4888.     AX = CCCCh
  4889.     BX = CCCCh
  4890.     CX = 0000h
  4891. Return: CX = CCCCh if installed
  4892.         ES:BX -> original interrupt handler
  4893. Program: DATEFIX is a public-domain TSR to correct the date on AT&T 6300
  4894.       machines, where the realtime clock's calendar wraps after 1991
  4895. SeeAlso: AH=FEh,AH=FFh"AT&T"
  4896. --------c-1AD0-------------------------------
  4897. INT 1A U - Disk Spool II v2.07+ - FUNCTION CALLS
  4898.     AH = D0h
  4899.     AL = function code
  4900.         01h enable spooler and despooler
  4901.         02h enable spooler only
  4902.         03h enable despooler at beginning of file
  4903.         04h disable the despooler
  4904.         05h disable the despooler and spooler
  4905.         06h clear the spool file
  4906.         08h inhibit the popup menu
  4907.         09h enable the popup menu
  4908.         0Ah ??? (called by Disk Spool's INT 21 handler)
  4909.         0Bh disable the spooler
  4910.         0Ch start despooler after last successfully printed document
  4911.         0Dh start despooler at the exact point where it last left off
  4912.         0Eh pop up the menu
  4913.         0Fh ???
  4914.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  4915.             when a program terminates)
  4916.         14h ???
  4917.         15h delete despool file and reset ???
  4918.         16h ??? (writes something to unknown file)
  4919.         17h ??? (writes something to despool file, then reads something
  4920.             else and ???)
  4921.         18h ??? (reads something from despool file, and then ???)
  4922.         19h ??? (creates/truncates spool file)
  4923.         20h clear file pointed to by the despooler
  4924.         21h ??? (writes something to unknown file)
  4925.         22h ??? (writes something to spool file if spooler/despooler using
  4926.             same file)
  4927.         23h ??? (opens/creates unknown file, then ???)
  4928.         30h ???
  4929.         31h ???
  4930.         32h beep
  4931.         33h append CRLF to spool file???
  4932.         34h ???
  4933.         35h ???
  4934.         36h ???
  4935.         37h append CRLF to spool file and start a new spool file???
  4936.         38h ???
  4937.         40h ??? (v4.05)
  4938.         41h ??? (v4.05)
  4939.         51h ??? (called by Disk Spool's INT 21 handler)
  4940.         52h ??? (called by Disk Spool's INT 21 handler)
  4941.         57h ???
  4942.         5Ah ??? (v4.05)
  4943.         5Bh ??? (v4.05)
  4944.         5Ch ??? (v4.05)
  4945. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4946.       as that is a licensed version of Disk Spool II
  4947. SeeAlso: AH=A0h,AH=ADh
  4948. --------c-1AE0-------------------------------
  4949. INT 1A - Disk Spool II v4.0x - ENABLE/DISABLE
  4950.     AH = E0h
  4951.     AL = subfunction
  4952.         01h enable spooler
  4953.         02h disable spooler
  4954.         03h enable despooler
  4955.         04h disable despooler
  4956.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  4957. Return: AH = status
  4958.         00h successful
  4959.         F0h printer port not managed by Disk Spool II
  4960.         FFH failed
  4961. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4962.       as that is a licensed version of Disk Spool II
  4963. SeeAlso: AH=A0h,AH=E1h,AX=E301h,AX=E401h
  4964. --------c-1AE1-------------------------------
  4965. INT 1A - Disk Spool II v4.0x - GET STATUS
  4966.     AH = E1h
  4967.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  4968. Return: AH = status
  4969.         00h successful
  4970.         CL = despooler state (00h disabled, 41h enabled)
  4971.         CH = spooler state (00h disabled, 41h enabled)
  4972.         DL = despooler activity (00h standing by, 41h printing)
  4973.         ES:BX -> ASCIZ name of current spool file (or next if AutoSpool
  4974.             or AutoDespool enabled)
  4975.         ES:SI -> ASCIZ name of current despool file
  4976.         ES:DI -> 3-byte file extension used by Disk Spool II
  4977.         F0h printer port not managed by Disk Spool II
  4978. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4979.       as that is a licensed version of Disk Spool II
  4980. SeeAlso: AH=A0h,AH=E0h,AH=E2h
  4981. --------c-1AE2-------------------------------
  4982. INT 1A - Disk Spool II v4.0x - GET SPOOL FILES
  4983.     AH = E2h
  4984.     AL = which
  4985.         01h first
  4986.         02h next (can only call after "first")
  4987.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  4988. Return: AH = status
  4989.         00h successful
  4990.         ES:BX -> ASCIZ filename
  4991.         F0h no (more) spool files
  4992.         FFh failed
  4993. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  4994.       as that is a licensed version of Disk Spool II
  4995. SeeAlso: AH=E0h,AH=E1h
  4996. --------c-1AE301-----------------------------
  4997. INT 1A - Disk Spool II v4.0x - GET SPOOL FILE STATUS
  4998.     AX = E301h
  4999.     ES:BX -> ASCIZ filename (max 32 chars)
  5000. Return: AH = status
  5001.         00h successful
  5002.         ES:SI -> spool file status record (see below)
  5003.         F0h not a spool file
  5004.         FFh failed
  5005. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5006.       as that is a licensed version of Disk Spool II
  5007. SeeAlso: AH=E0h,AX=E302h,AX=E401h
  5008.  
  5009. Format of spool file status record:
  5010. Offset    Size    Description
  5011.  00h    BYTE    hour of creation or last update
  5012.  01h    BYTE    minute of creation or last update
  5013.  02h    BYTE    year-1980 of creation or last update
  5014.  03h    BYTE    month of creation or last update
  5015.  04h    BYTE    day of creation or last update
  5016.  05h    BYTE    total number of copies to print
  5017.  06h    BYTE    number of copies already printed
  5018.  07h    BYTE    printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5019.  08h    BYTE    save status (00h delete after printing, 01h save)
  5020.  09h    BYTE    file status
  5021.         01h done printing, but being saved
  5022.         02h on hold
  5023.         03h queued for printing
  5024.         04h being spooled
  5025.         05h being despooled (i.e. printed)
  5026.  0Ah 16 BYTEs    ASCIZ description
  5027.  1Ah  2 WORDs    file size in bytes (high,low)
  5028.  1Eh  2 WORDs    bytes left to print (high,low)
  5029. --------c-1AE302-----------------------------
  5030. INT 1A - Disk Spool II v4.0x - UPDATE SPOOL FILE
  5031.     AX = E302h
  5032.     ES:BX -> ASCIZ filename (max 32 chars)
  5033.     ES:SI -> spool file status record (see AX=E301h)
  5034. Return: AH = status
  5035.         00h successful
  5036.         F0h not a spool file
  5037.         FFh failed
  5038. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5039.       as that is a licensed version of Disk Spool II
  5040. SeeAlso: AH=E0h,AX=E301h,AX=E401h
  5041. --------c-1AE401-----------------------------
  5042. INT 1A - Disk Spool II v4.0x - SPOOL EXISTING FILE
  5043.     AX = E401h
  5044.     ES:BX -> ASCIZ filename (max 32 chars)
  5045.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5046. Return: AH = status
  5047.         00h successful
  5048.         FFh failed
  5049. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5050.       as that is a licensed version of Disk Spool II
  5051. SeeAlso: AH=E1h,AX=E302h,AX=E402h
  5052. --------c-1AE402-----------------------------
  5053. INT 1A U - Disk Spool II v4.0x - SPOOL EXISTING FILE???
  5054.     AX = E402h
  5055.     ES:BX -> ASCIZ filename (max 32 chars)
  5056.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  5057. Return: AH = status
  5058.         00h successful
  5059.         FFh failed
  5060. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5061.       as that is a licensed version of Disk Spool II
  5062. SeeAlso: AH=E1h,AX=E302h,AX=E401h
  5063. --------c-1AE5-------------------------------
  5064. INT 1A U - Emulaser ELSPL.COM - ???
  5065.     AH = E5h
  5066.     ???
  5067. Return: ???
  5068. Program: ELSPL.COM is a licensed version of Disk Spool II which is distributed
  5069.       as part of Vertisoft's Emulaser PostScript emulator
  5070. SeeAlso: AH=A0h,INT 17/AH=03h
  5071. --------c-1AEE-------------------------------
  5072. INT 1A U - Disk Spool II v4.05 - ???
  5073.     AH = EEh
  5074.     AL = printer port???
  5075.     ???
  5076. Return: ???
  5077. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  5078.       as that is a licensed version of Disk Spool II
  5079. SeeAlso: AH=E1h
  5080. --------U-1AF7-------------------------------
  5081. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  5082.     AH = F7h
  5083. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5084.       time to correct for clock drift
  5085. Note:    any AH value from F0h-F7h or F9h-FEh will perform this function in
  5086.       version 1.1, but F7h is the function called by transient portion
  5087. SeeAlso: AH=F8h,AH=FFh"RighTime"
  5088. --------U-1AF8-------------------------------
  5089. INT 1A - RighTime v1.1 - ENABLE
  5090.     AH = F8h
  5091. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5092.       time to correct for clock drift
  5093. Note:    RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  5094.       TeSseRact program identifier based on its current state: "RighTime"
  5095.       when enabled, "RighTim"F7h when disabled.
  5096. SeeAlso: AH=F7h,AH=FFh"RighTime"
  5097. --------b-1AFE-------------------------------
  5098. INT 1A - AT&T 6300 - READ TIME AND DATE
  5099.     AH = FEh
  5100. Return: BX = day count (0 = Jan 1, 1984)
  5101.     CH = hour
  5102.     CL = minute
  5103.     DH = second
  5104.     DL = hundredths
  5105. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  5106. --------b-1AFF-------------------------------
  5107. INT 1A - AT&T 6300 - SET TIME AND DATE
  5108.     AH = FFh
  5109.     BX = day count (0 = Jan 1, 1984)
  5110.     CH = hour
  5111.     CL = minute
  5112.     DH = second
  5113.     DL = hundredths
  5114. Return: ???
  5115. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  5116. --------U-1AFF-------------------------------
  5117. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  5118.     AH = FFh
  5119. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  5120.       time to correct for clock drift
  5121. Note:    upon being permanently disabled, RighTime closes the file handle
  5122.       referencing its executable (which is updated with time correction
  5123.       information every two minutes while RighTime is enabled).
  5124. --------s-1AFF00-----------------------------
  5125. INT 1A - SND - INSTALLATION CHECK???
  5126.     AX = FF00h
  5127. Return: AL = version??? (02h)
  5128.     AH = busy flag (00h if not in a SND call, 01h if SND currently active)
  5129. Note:    the SND API is also supported by IC (Internal Commands) v2.0, a
  5130.       shareware TSR by Geoff Friesen which extends COMMAND.COM's internal
  5131.       command set
  5132. SeeAlso: AX=FF01h,AX=FF02h,AX=FF04h,AX=FF05h
  5133. --------s-1AFF01-----------------------------
  5134. INT 1A - SND - PAUSE
  5135.     AX = FF01h
  5136.     DX = number of clock ticks to delay
  5137. Return: AH = status
  5138.         00h successful
  5139.         01h SND busy
  5140. Notes:    if successful, execution returns to the caller after the delay expires;
  5141.       if SND is busy, execution returns immediately
  5142.     the IC v2.0 implementation of this API makes no special allowance for
  5143.       time rollover at midnight, which can cause the delay to be over one
  5144.       hour if this function is called just before the BIOS time count
  5145.       rolls over and the delay extends into the next day
  5146. SeeAlso: AX=FF00h,INT 15/AH=86h,INT 62/AX=0096h,INT 7F/AH=E8h,INT 80/BX=0009h
  5147. SeeAlso: INT E0/CL=BDh
  5148. --------s-1AFF02-----------------------------
  5149. INT 1A - SND - START SOUND
  5150.     AX = FF02h
  5151.     DX = frequency in Hertz (14h-FFFFh)
  5152. Return: AH = status
  5153.         00h successful
  5154.         01h SND busy
  5155. SeeAlso: AX=FF00h,AX=FF01h,AX=FF03h
  5156. --------s-1AFF03-----------------------------
  5157. INT 1A - SND - STOP SOUND
  5158.     AX = FF03h
  5159. Return: AH = status
  5160.         00h successful
  5161.         01h busy
  5162. Note:    turns off any sound currently being emitted by the PC's speaker unless
  5163.       SND is currently busy processing an API call (this includes
  5164.       background music).  Use AX=FF05h to stop the sound even if an API
  5165.       call is in progress.
  5166. SeeAlso: AX=FF00h,AX=FF02h,AX=FF05h
  5167. --------s-1AFF04-----------------------------
  5168. INT 1A - SND - PLAY MUSIC STRING IN BACKGROUND
  5169.     AX = FF04h
  5170.     DS:DX -> ASCIZ music string
  5171. Return: AH = status
  5172.         00h successful (music begins playing in background)
  5173.         01h busy
  5174. Note:    the music string accepted by SND is not the same as that accepted by
  5175.       BASIC and other programs which process music strings
  5176. SeeAlso: AX=FF00h,AX=FF05h,INT 80/BX=0006h
  5177. --------s-1AFF05-----------------------------
  5178. INT 1A - SND - UNCONDITIONALLY STOP SOUND
  5179.     AX = FF05h
  5180. Return: AH = 00h (successful)
  5181. Note:    this function is the same as AX=FF03h, but will stop the sound even if
  5182.       SND is currently busy, such as playing background music
  5183. SeeAlso: AX=FF00h,AX=FF03h,INT 80/BX=0007h
  5184. --------B-1B---------------------------------
  5185. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  5186. Desc:    this interrupt is automatically called when INT 09 determines that
  5187.       Control-Break has been pressed
  5188. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  5189.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  5190. SeeAlso: INT 23
  5191. --------B-1C---------------------------------
  5192. INT 1C - TIME - SYSTEM TIMER TICK
  5193. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  5194.       handler
  5195. Notes:    this is the preferred interrupt to chain when a program needs to be
  5196.       invoked regularly
  5197.     not available on NEC 9800-series PCs
  5198. SeeAlso: INT 08
  5199. --------B-1D---------------------------------
  5200. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  5201. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  5202. SeeAlso: INT 10/AH=00h
  5203.  
  5204. Format of video parameters:
  5205. Offset    Size    Description
  5206.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  5207.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  5208.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  5209.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  5210.  40h    WORD    bytes in video buffer for modes 00h and 01h
  5211.  42h    WORD    bytes in video buffer for modes 02h and 03h
  5212.  44h    WORD    bytes in video buffer for modes 04h and 05h
  5213.  46h    WORD    bytes in video buffer for modes 06h and 07h
  5214.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  5215.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  5216. --------B-1E---------------------------------
  5217. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  5218. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  5219. SeeAlso: INT 13/AH=0Fh,INT 41
  5220.  
  5221. Format of diskette parameter table:
  5222. Offset    Size    Description
  5223.  00h    BYTE    first specify byte
  5224.         bits 7-4: step rate
  5225.         bits 3-0: head unload time (0Fh = 240 ms)
  5226.  01h    BYTE    second specify byte
  5227.         bits 7-1: head load time (01h = 4 ms)
  5228.         bit    0: non-DMA mode (always 0)
  5229.  02h    BYTE    delay until motor turned off (in clock ticks)
  5230.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  5231.  04h    BYTE    sectors per track
  5232.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  5233.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  5234.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  5235.  08h    BYTE    format filler byte (default F6h)
  5236.  09h    BYTE    head settle time in milliseconds
  5237.  0Ah    BYTE    motor start time in 1/8 seconds
  5238. --------B-1F---------------------------------
  5239. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  5240. Desc:    this vector points at 1024 bytes of graphics data, 8 bytes for each
  5241.       character 80h-FFh
  5242. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  5243.       compatible BIOSes
  5244. SeeAlso: INT 10/AX=5000h,INT 43
  5245. --------O-20---------------------------------
  5246. INT 20 - Minix - SEND/RECEIVE MESSAGE
  5247.     AX = process ID of other process
  5248.     BX -> message
  5249.     CX = operation (1 send, 2 receive, 3 send&receive)
  5250. Program: Minix is a Version 7 Unix-compatible operating system by Andrew
  5251.       Tanenbaum
  5252. Note:    the message contains the system call number (numbered as in V7
  5253.       Unix(tm)) and the call parameters
  5254. --------D-20---------------------------------
  5255. INT 20 - DOS 1+ - TERMINATE PROGRAM
  5256.     CS = PSP segment
  5257. Return: never
  5258. Note:    (see INT 21/AH=00h)
  5259. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  5260. --------G-20---------------------------------
  5261. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  5262.     ???
  5263. Return: ???
  5264. SeeAlso: INT 21"COMTROL"
  5265. --------G-21---------------------------------
  5266. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  5267.     ???
  5268. Return: AX = first segment available for control program use
  5269. SeeAlso: INT 20"COMTROL",INT 22"COMTROL"
  5270. --------D-2100-------------------------------
  5271. INT 21 - DOS 1+ - TERMINATE PROGRAM
  5272.     AH = 00h
  5273.     CS = PSP segment
  5274. Notes:    Microsoft recommends using INT 21/AH=4Ch for DOS 2+
  5275.     execution continues at the address stored in INT 22 after DOS performs
  5276.       whatever cleanup it needs to do
  5277.     if the PSP is its own parent, the process's memory is not freed; if
  5278.       INT 22 additionally points into the terminating program, the
  5279.       process is effectively NOT terminated
  5280.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5281. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  5282. --------D-2101-------------------------------
  5283. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  5284.     AH = 01h
  5285. Return: AL = character read
  5286. Notes:    ^C/^Break are checked, and INT 23 executed if read
  5287.     character is echoed to standard output
  5288.     standard input is always the keyboard and standard output the screen
  5289.       under DOS 1.x, but they may be redirected under DOS 2+
  5290. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  5291. --------D-2102-------------------------------
  5292. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  5293.     AH = 02h
  5294.     DL = character to write
  5295. Return: AL = last character output (despite the official docs which state
  5296.         nothing is returned) (at least DOS 3.3-5.0)
  5297. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  5298.     standard output is always the screen under DOS 1.x, but may be
  5299.       redirected under DOS 2+
  5300.     the last character output will be the character in DL unless DL=09h
  5301.       on entry, in which case AL=20h as tabs are expanded to blanks
  5302. SeeAlso: AH=06h,AH=09h
  5303. --------D-2103-------------------------------
  5304. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  5305.     AH = 03h
  5306. Return: AL = character read
  5307. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5308.     STDAUX is usually the first serial port
  5309. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  5310. --------D-2104-------------------------------
  5311. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  5312.     AH = 04h
  5313.     DL = character to write
  5314. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5315.     STDAUX is usually the first serial port
  5316.     if STDAUX is busy, this function will wait until it becomes free
  5317. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  5318. --------D-2105-------------------------------
  5319. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  5320.     AH = 05h
  5321.     DL = character to print
  5322. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  5323.     STDPRN is usually the first parallel port, but may be redirected under
  5324.       DOS 2+
  5325.     if the printer is busy, this function will wait
  5326. SeeAlso: INT 17/AH=00h
  5327. --------D-2106-------------------------------
  5328. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  5329.     AH = 06h
  5330.     DL = character (except FFh)
  5331. Return: AL = character output (despite official docs which state nothing is
  5332.         returned) (at least DOS 3.3-5.0)
  5333. Notes:    does not check ^C/^Break
  5334.     writes to standard output, which is always the screen under DOS 1.x,
  5335.       but may be redirected under DOS 2+
  5336. SeeAlso: AH=02h,AH=09h
  5337. --------D-2106--DLFF-------------------------
  5338. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  5339.     AH = 06h
  5340.     DL = FFh
  5341. Return: ZF set if no character available
  5342.     ZF clear if character available
  5343.         AL = character read
  5344. Notes:    ^C/^Break are NOT checked
  5345.     if the returned character is 00h, the user pressed a key with an
  5346.       extended keycode, which will be returned by the next call of this
  5347.       function
  5348.     reads from standard input, which is always the keyboard under DOS 1.x,
  5349.       but may be redirected under DOS 2+
  5350. SeeAlso: AH=0Bh
  5351. --------D-2107-------------------------------
  5352. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  5353.     AH = 07h
  5354. Return: AL = character read from standard input
  5355. Notes:    does not check ^C/^Break
  5356.     standard input is always the keyboard under DOS 1.x, but may be
  5357.       redirected under DOS 2+
  5358.     if the interim console flag is set (see AX=6301h), partially-formed
  5359.       double-byte characters may be returned
  5360. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  5361. --------D-2108-------------------------------
  5362. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  5363.     AH = 08h
  5364. Return: AL = character read from standard input
  5365. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  5366.     standard input is always the keyboard under DOS 1.x, but may be
  5367.       redirected under DOS 2+
  5368.     if the interim console flag is set (see AX=6301h), partially-formed
  5369.       double-byte characters may be returned
  5370. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  5371. --------D-2109-------------------------------
  5372. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  5373.     AH = 09h
  5374.     DS:DX -> '$'-terminated string
  5375. Return: AL = 24h (the '$' terminating the string, despite official docs which
  5376.         state that nothing is returned) (at least DOS 3.3-5.0)
  5377. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  5378.     standard output is always the screen under DOS 1.x, but may be
  5379.       redirected under DOS 2+
  5380.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5381. SeeAlso: AH=02h,AH=06h"OUTPUT"
  5382. --------D-210A-------------------------------
  5383. INT 21 - DOS 1+ - BUFFERED INPUT
  5384.     AH = 0Ah
  5385.     DS:DX -> buffer (see below)
  5386. Return: buffer filled with user input
  5387. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  5388.     reads from standard input, which may be redirected under DOS 2+
  5389.     if the maximum buffer size (see below) is set to 00h, this call returns
  5390.       immediately without reading any input
  5391. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  5392.  
  5393. Format of input buffer:
  5394. Offset    Size    Description
  5395.  00h    BYTE    maximum characters buffer can hold
  5396.  01h    BYTE    (input) number of chars from last input which may be recalled
  5397.         (return) number of characters actually read, excluding CR
  5398.  02h  N BYTEs    actual characters read, including the final carriage return
  5399. --------K-210A00-----------------------------
  5400. INT 21 - WCED v1.6+ - INSTALLATION CHECK
  5401.     AX = 0A00h
  5402.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  5403. Return: buffer offset 02h-05h filled with "Wced" if installed
  5404. Program: WCED is a free command-line editor and history utility by Stuart
  5405.       Russell
  5406. SeeAlso: AH=FFh"CED"
  5407. --------D-210B-------------------------------
  5408. INT 21 - DOS 1+ - GET STDIN STATUS
  5409.     AH = 0Bh
  5410. Return: AL = 00h if no character available
  5411.        = FFh if character is available
  5412. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  5413.     standard input is always the keyboard under DOS 1.x, but may be
  5414.       redirected under DOS 2+
  5415.     if the interim console flag is set (see AX=6301h), this function
  5416.       returns AL=FFh if a partially-formed double-byte character is
  5417.       available
  5418. SeeAlso: AH=06h"INPUT",AX=4406h
  5419. --------v-210B56-----------------------------
  5420. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  5421.     AX = 0B56h
  5422. Return: AX = 4952h if resident
  5423. SeeAlso: AX=0D20h
  5424. --------D-210C-------------------------------
  5425. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  5426.     AH = 0Ch
  5427.     AL = STDIN input function to execute after flushing buffer
  5428.     other registers as appropriate for the input function
  5429. Return: as appropriate for the specified input function
  5430. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  5431.       no input is attempted
  5432. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  5433. --------D-210D-------------------------------
  5434. INT 21 - DOS 1+ - DISK RESET
  5435.     AH = 0Dh
  5436. Notes:    writes all modified disk buffers to disk, but does not update directory
  5437.       information (that is only done when files are closed or a SYNC call
  5438.       is issued)
  5439. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  5440. --------v-210D20-----------------------------
  5441. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  5442.     AX = 0D20h
  5443. Return: AX = 1971h if resident
  5444. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  5445. --------D-210E-------------------------------
  5446. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  5447.     AH = 0Eh
  5448.     DL = new default drive (00h = A:, 01h = B:, etc)
  5449. Return: AL = number of potentially valid drive letters
  5450. Notes:    under Novell NetWare, the return value is always 32, the number of
  5451.       drives that NetWare supports
  5452.     under DOS 3+, the return value is the greatest of 5, the value of
  5453.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  5454.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  5455.       may be accessed as either A: or B:
  5456.     otherwise, the return value is the highest drive actually present
  5457.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  5458.       and 3+ a maximum of 26 drives
  5459. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  5460. --------D-210F-------------------------------
  5461. INT 21 - DOS 1+ - OPEN FILE USING FCB
  5462.     AH = 0Fh
  5463.     DS:DX -> unopened File Control Block (see below)
  5464. Return: AL = status
  5465.         00h successful
  5466.         FFh file not found or access denied
  5467. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  5468.     an unopened FCB has the drive, filename, and extension fields filled
  5469.       in and all other bytes cleared
  5470.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5471.     DR-DOS checks password attached with AX=4303h
  5472. SeeAlso: AH=10h,AH=16h,AH=3Dh,4303h
  5473.  
  5474. Format of File Control Block:
  5475. Offset    Size    Description
  5476.  -7    BYTE    extended FCB if FFh
  5477.  -6   5 BYTEs    reserved
  5478.  -1    BYTE    file attribute if extended FCB
  5479.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  5480.  01h  8 BYTEs    blank-padded file name
  5481.  09h  3 BYTEs    blank-padded file extension
  5482.  0Ch    WORD    current block number
  5483.  0Eh    WORD    logical record size
  5484.  10h    DWORD    file size
  5485.  14h    WORD    date of last write (see AX=5700h)
  5486.  16h    WORD    time of last write (see AX=5700h) (DOS 1.1+)
  5487.  18h  8 BYTEs    reserved (see below)
  5488.  20h    BYTE    record within current block
  5489.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  5490.         byte is omitted)
  5491. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  5492.       offset -7, rather than the address of the drive number field
  5493.  
  5494. Format of reserved field for DOS 1.0:
  5495. Offset    Size    Description
  5496.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  5497.         ID)
  5498.  18h    WORD    number of first cluster in file
  5499.  1Ah    WORD    current absolute cluster number on disk
  5500.  1Ch    WORD    current relative cluster number within file
  5501.         (0 = first cluster of file, 1 = second cluster, etc.)
  5502.  1Eh    BYTE    dirty flag (00h = not dirty)
  5503.  1Fh    BYTE    unused
  5504.  
  5505. Format of reserved field for DOS 1.10-1.25:
  5506. Offset    Size    Description
  5507.  18h    BYTE    bit 7: set if logical device
  5508.         bit 6: not dirty
  5509.         bits 5-0: disk number or logical device ID
  5510.  19h    WORD    starting cluster number on disk
  5511.  1Bh    WORD    current absolute cluster number on disk
  5512.  1Dh    WORD    current relative cluster number within file
  5513.  1Fh    BYTE    unused
  5514.  
  5515. Format of reserved field for DOS 2.x:
  5516. Offset    Size    Description
  5517.  18h    BYTE    bit 7: set if logical device
  5518.         bit 6: set if open???
  5519.         bits 5-0: ???
  5520.  19h    WORD    starting cluster number on disk
  5521.  1Bh    WORD    ???
  5522.  1Dh    BYTE    ???
  5523.  1Eh    BYTE    ???
  5524.  1Fh    BYTE    ???
  5525.  
  5526. Format of reserved field for DOS 3.x:
  5527. Offset    Size    Description
  5528.  18h    BYTE    number of system file table entry for file
  5529.  19h    BYTE    attributes
  5530.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  5531.               01 = SHARE.EXE not loaded, character device
  5532.               10 = SHARE.EXE loaded, remote file
  5533.               11 = SHARE.EXE loaded, local file or device
  5534.         bits 5-0: low six bits of device attribute word
  5535. ---SHARE.EXE loaded, local file---
  5536.  1Ah    WORD    starting cluster of file on disk
  5537.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record (see AH=52h)
  5538.  1Eh    BYTE    file attribute
  5539.  1Fh    BYTE    ???
  5540. ---SHARE.EXE loaded, remote file---
  5541.  1Ah    WORD    number of sector containing directory entry
  5542.  1Ch    WORD    relative cluster within file of last cluster accessed
  5543.  1Eh    BYTE    absolute cluster number of last cluster accessed
  5544.  1Fh    BYTE    ???
  5545. ---SHARE.EXE not loaded---
  5546.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  5547.  1Bh    WORD    starting cluster of file
  5548.  1Dh    WORD    number of sector containing directory entry
  5549.  1Fh    BYTE    number of directory entry within sector
  5550. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  5551.       of the device driver header, then the BYTE at 1Ah is overwritten.
  5552.  
  5553. Format of reserved field for DOS 5.0:
  5554. Offset    Size    Description
  5555.  18h    BYTE    number of system file table entry for file
  5556.  19h    BYTE    attributes
  5557.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  5558.               01 = SHARE.EXE not loaded, character device
  5559.               10 = SHARE.EXE loaded, remote file
  5560.               11 = SHARE.EXE loaded, local file or device
  5561.         bits 5-0: low six bits of device attribute word
  5562. ---SHARE.EXE loaded, local file---
  5563.  1Ah    WORD    starting cluster of file on disk
  5564.  1Ch    WORD    unique sequence number of sharing record
  5565.  1Eh    BYTE    file attributes
  5566.  1Fh    BYTE    unused???
  5567. ---SHARE.EXE loaded, remote file---
  5568.  1Ah    WORD    network handle
  5569.  1Ch    DWORD    network ID
  5570. ---SHARE not loaded, local device---
  5571.  1Ah    DWORD    pointer to device driver header
  5572.  1Eh  2 BYTEs    unused???
  5573. ---SHARE not loaded, local file---
  5574.  1Ah    BYTE    extra info
  5575.         bit 7: read-only attribute from SFT
  5576.         bit 6: archive attribute from SFT
  5577.         bits 5-0: high bits of sector number
  5578.  1Bh    WORD    starting cluster of file
  5579.  1Dh    WORD    low word of sector number containing directory entry
  5580.  1Fh    BYTE    number of directory entry within sector
  5581. --------D-2110-------------------------------
  5582. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  5583.     AH = 10h
  5584.     DS:DX -> File Control Block (see AH=0Fh)
  5585. Return: AL = status
  5586.         00h successful
  5587.         FFh failed
  5588. Notes:    a successful close forces all disk buffers used by the file to be
  5589.       written and the directory entry to be updated
  5590.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5591. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  5592. --------D-2111-------------------------------
  5593. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  5594.     AH = 11h
  5595.     DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
  5596. Return: AL = status
  5597.         00h successful
  5598.         [DTA] unopened FCB for first matching file
  5599.         FFh no matching filename, or bad FCB
  5600. Notes:    the type of the returned FCB depends on whether the input FCB was a
  5601.       normal or an extended FCB
  5602.     the data returned in the DTA is actually the drive number (or extended
  5603.       FCB header and drive number) followed by the file's directory entry
  5604.       (see below); this format happens to be compatible with an unopened
  5605.       FCB
  5606.     for extended FCBs with search attribute 08h, the volume label (if any)
  5607.       will be returned even if the current directory is not the root dir.
  5608.     DOS 3+ also allows the '*' wildcard
  5609.     the search FCB must not be modified if AH=12h will be used to continue
  5610.       searching; DOS 3.3 has set the following parts of the FCB:
  5611.          0Ch    BYTE    ???
  5612.          0Dh    WORD    directory entry number of matching file
  5613.          0Fh    WORD    cluster number of current directory
  5614.          11h  4 BYTEs    ???
  5615.          15h    BYTE    drive number (1=A:)
  5616.     this function is used by many copy protection schemes to obtain the
  5617.       starting cluster of a file
  5618. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  5619.  
  5620. Format of directory entry:
  5621. Offset    Size    Description
  5622.  00h  8 BYTEs    blank-padded filename
  5623.  08h  3 BYTEs    blank-padded file extension
  5624.  0Bh    BYTE    attributes
  5625.  0Ch 10 BYTEs    reserved
  5626.         used by DR-DOS to store file password
  5627.  16h    WORD    time of creation or last update (see AX=5700h)
  5628.  18h    WORD    date of creation or last update (see AX=5700h)
  5629.  1Ah    WORD    starting cluster number
  5630.  1Ch    DWORD    file size
  5631. --------D-2112-------------------------------
  5632. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  5633.     AH = 12h
  5634.     DS:DX -> unopened FCB (see AH=0Fh)
  5635. Return: AL = status
  5636.         00h successful
  5637.         [DTA] = unopened FCB
  5638.         FFh no more matching filenames
  5639. Note:    (see AH=11h)
  5640.     assumes that successful FindFirst executed on search FCB before call
  5641. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  5642. --------D-2113-------------------------------
  5643. INT 21 - DOS 1+ - DELETE FILE USING FCB
  5644.     AH = 13h
  5645.     DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for
  5646.         deletion ('?' wildcards allowed)
  5647. Return: AL = status
  5648.         00h one or more files successfully deleted
  5649.         FFh no matching files or all were read-only or locked
  5650. Notes:    DOS 1.25+ deletes everything in the current directory (including
  5651.       subdirectories) and sets the first byte of the name to 00h (entry
  5652.       never used) instead of E5h if called on an extended FCB with
  5653.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  5654.       2 for DOS 1.x).  This may have originally been an optimization to
  5655.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  5656.       the directory search upon encountering a never-used entry), but can
  5657.       corrupt the filesystem under DOS 2+ because subdirectories are
  5658.       removed without deleting the files they contain.
  5659.     currently-open files should not be deleted
  5660.     MS-DOS allows deletion of read-only files with an extended FCB, whereas
  5661.       Novell NetWare does not
  5662. SeeAlso: AH=41h,INT 2F/AX=1113h
  5663. --------D-2114-------------------------------
  5664. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  5665.     AH = 14h
  5666.     DS:DX -> opened FCB (see AH=0Fh)
  5667. Return: AL = status
  5668.         00h successful
  5669.         01h end of file (no data)
  5670.         02h segment wrap in DTA
  5671.         03h end of file, partial record read
  5672.     [DTA] = record read from file
  5673. Notes:    reads a record of the size specified in the FCB beginning at the
  5674.       current file position, then updates the current block and current
  5675.       record fields in the FCB
  5676.     if a partial record was read, it is zero-padded to the full size
  5677.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5678. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  5679. --------D-2115-------------------------------
  5680. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  5681.     AH = 15h
  5682.     DS:DX -> opened FCB (see AH=0Fh)
  5683.     [DTA] = record to write
  5684. Return: AL = status
  5685.         00h successful
  5686.         01h disk full
  5687.         02h segment wrap in DTA
  5688. Notes:    writes a record of the size specified in the FCB beginning at the
  5689.       current file position, then updates the current block and current
  5690.       record fields in the FCB
  5691.     if less than a full sector is written, the data is placed in a DOS
  5692.       buffer to be written out at a later time
  5693.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5694. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  5695. --------D-2116-------------------------------
  5696. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  5697.     AH = 16h
  5698.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  5699. Return: AL = status
  5700.         00h successful
  5701.         FFh directory full or file exists and is read-only or locked
  5702. Notes:    if file already exists, it is truncated to zero length
  5703.     if an extended FCB is used, the file is given the attribute in the
  5704.       FCB; this is how to create a volume label in the disk's root dir
  5705.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5706. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  5707. --------D-2117-------------------------------
  5708. INT 21 - DOS 1+ - RENAME FILE USING FCB
  5709.     AH = 17h
  5710.     DS:DX -> modified FCB (see also AH=0Fh)
  5711.         the old filename ('?' wildcards OK) is in the standard location
  5712.         while the new filename ('?' wildcards OK) is stored in the 11
  5713.         bytes beginning at offset 11h
  5714. Return: AL = status
  5715.         00h successfully renamed
  5716.         FFh no matching files,file is read-only, or new name already exists
  5717. Notes:    subdirectories may be renamed using an extended FCB with the
  5718.       appropriate attribute, as may volume labels
  5719.     DR-DOS checks password attached with AX=4303h before permitting rename
  5720. SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h
  5721. --------D-2118-------------------------------
  5722. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  5723.     AH = 18h
  5724. Return: AL = 00h
  5725. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  5726.       which is meaningless under MS-DOS
  5727. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
  5728. --------D-2119-------------------------------
  5729. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  5730.     AH = 19h
  5731. Return: AL = drive (00h = A:, 01h = B:, etc)
  5732. Note:    Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
  5733.       from a particular location every time it starts a command to
  5734.       determine when to issue an automatic EOJ
  5735. SeeAlso: AH=0Eh,AH=47h,AH=BBh
  5736. --------D-211A-------------------------------
  5737. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  5738.     AH = 1Ah
  5739.     DS:DX -> Disk Transfer Area (DTA)
  5740. Notes:    the DTA is set to PSP:0080h when a program is started
  5741.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5742. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  5743. --------D-211B-------------------------------
  5744. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  5745.     AH = 1Bh
  5746. Return: AL = sectors per cluster (allocation unit)
  5747.     CX = bytes per sector
  5748.     DX = total number of clusters
  5749.     DS:BX -> media ID byte (see below)
  5750. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  5751.       versions return a pointer to a copy of the FAT's ID byte
  5752. SeeAlso: AH=1Ch,AH=36h
  5753.  
  5754. Values for media ID byte:
  5755.  FFh    floppy, double-sided, 8 sectors per track (320K)
  5756.  FEh    floppy, single-sided, 8 sectors per track (160K)
  5757.  FDh    floppy, double-sided, 9 sectors per track (360K)
  5758.  FCh    floppy, single-sided, 9 sectors per track (180K)
  5759.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  5760.  F8h    hard disk
  5761.  F0h    other
  5762. --------D-211C-------------------------------
  5763. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  5764.     AH = 1Ch
  5765.     DL = drive (00h = default, 01h = A:, etc)
  5766. Return: AL = sectors per cluster (allocation unit), or FFh if invalid drive
  5767.     CX = bytes per sector
  5768.     DX = total number of clusters
  5769.     DS:BX -> media ID byte (see AH=1Bh)
  5770. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  5771.       versions return a pointer to a copy of the FAT's ID byte
  5772.     on a DBLSPACE drive, the total number of clusters is based on the
  5773.       estimated compression ratio
  5774. SeeAlso: AH=1Bh,AH=36h
  5775. --------D-211D-------------------------------
  5776. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  5777.     AH = 1Dh
  5778. Return: AL = 00h
  5779. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  5780.       drives", which is meaningless under MS-DOS
  5781. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  5782. --------D-211E-------------------------------
  5783. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  5784.     AH = 1Eh
  5785. Return: AL = 00h
  5786. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  5787.      meaningless under MS-DOS 1.x
  5788. SeeAlso: AH=18h,AH=1Dh,AH=20h
  5789. --------D-211F-------------------------------
  5790. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  5791.     AH = 1Fh
  5792. Return: AL = status
  5793.         00h successful
  5794.         DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x,
  5795.             AH=32h for DOS 2+)
  5796.         FFh invalid drive
  5797. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  5798.       only the DOS 4+ version of the DPB has been documented
  5799. SeeAlso: AH=32h
  5800.  
  5801. Format of DOS 1.1 and MS-DOS 1.25 drive parameter block:
  5802. Offset    Size    Description
  5803.  00h    BYTE    sequential device ID
  5804.  01h    BYTE    logical drive number (0=A:)
  5805.  02h    WORD    bytes per sector
  5806.  04h    BYTE    highest sector number within a cluster
  5807.  05h    BYTE    shift count to convert clusters into sectors
  5808.  06h    WORD    starting sector number of first FAT
  5809.  08h    BYTE    number of copies of FAT
  5810.  09h    WORD    number of directory entries
  5811.  0Bh    WORD    number of first data sector
  5812.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  5813.  0Fh    BYTE    sectors per FAT
  5814.  10h    WORD    starting sector of directory
  5815.  12h    WORD    address of allocation table
  5816. Note:    the DOS 1.0 table is the same except that the first and last fields
  5817.       are missing; see INT 21/AH=32h for the DOS 2+ version
  5818. --------D-2120-------------------------------
  5819. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  5820.     AH = 20h
  5821. Return: AL = 00h
  5822. Note:    corresponds to the CP/M BDOS function "get/set default user
  5823.       (sublibrary) number", which is meaningless under MS-DOS
  5824. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  5825. --------D-2121-------------------------------
  5826. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  5827.     AH = 21h
  5828.     DS:DX -> opened FCB (see AH=0Fh)
  5829. Return: AL = status
  5830.         00h successful
  5831.         01h end of file, no data read
  5832.         02h segment wrap in DTA, no data read
  5833.         03h end of file, partial record read
  5834.     [DTA] = record read from file
  5835. Notes:    the record is read from the current file position as specified by the
  5836.       random record and record size fields of the FCB
  5837.     the file position is not updated after reading the record
  5838.     if a partial record is read, it is zero-padded to the full size
  5839.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5840. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  5841. --------D-2122-------------------------------
  5842. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  5843.     AH = 22h
  5844.     DS:DX -> opened FCB (see AH=0Fh)
  5845.     [DTA] = record to write
  5846. Return: AL = status
  5847.         00h successful
  5848.         01h disk full
  5849.         02h segment wrap in DTA
  5850. Notes:    the record is written to the current file position as specified by the
  5851.       random record and record size fields of the FCB
  5852.     the file position is not updated after writing the record
  5853.     if the record is located beyond the end of the file, the file is
  5854.       extended but the intervening data remains uninitialized
  5855.     if the record only partially fills a disk sector, it is copied to a
  5856.       DOS disk buffer to be written out to disk at a later time
  5857.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5858. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  5859. --------D-2123-------------------------------
  5860. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  5861.     AH = 23h
  5862.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  5863. Return: AL = status
  5864.         00h successful (matching file found)
  5865.         FCB random record field filled with size in records, rounded up
  5866.         to next full record
  5867.         FFh failed (no matching file found)
  5868. Notes:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5869.     MS-DOS returns nonsense if the FCB record number field is set to a very
  5870.       large positive number, and status FFh if negative; DR-DOS returns the
  5871.       correct file size in both cases
  5872. SeeAlso: AH=42h
  5873. --------D-2124-------------------------------
  5874. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  5875.     AH = 24h
  5876.     DS:DX -> opened FCB (see AH=0Fh)
  5877. Notes:    computes the random record number corresponding to the current record
  5878.       number and record size, then stores the result in the FCB
  5879.     normally used when switching from sequential to random access
  5880.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5881. SeeAlso: AH=21h,AH=27h,AH=42h
  5882. --------D-2125-------------------------------
  5883. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  5884.     AH = 25h
  5885.     AL = interrupt number
  5886.     DS:DX -> new interrupt handler
  5887. Notes:    this function is preferred over direct modification of the interrupt
  5888.       vector table
  5889.     some DOS extenders place an API on this function, as it is not
  5890.       directly meaningful in protected mode
  5891.     under DR-DOS 5.0+, this function does not use any of the DOS-internal
  5892.       stacks and may thus be called at any time
  5893.     Novell NetWare (except the new DOS Requester) monitors the offset of
  5894.       any INT 24 set, and if equal to the value at startup, substitutes
  5895.       its own handler to allow handling of network errors; this introduces
  5896.       the potential bug that any program whose INT 24 handler offset
  5897.       happens to be the same as COMMAND.COM's will not have its INT 24
  5898.       handler installed
  5899. SeeAlso: AX=2501h,AH=35h
  5900. --------E-212501-----------------------------
  5901. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
  5902.     AX = 2501h
  5903.     SS = application's original SS or DS (FlashTek X-32VM)
  5904. Return: CF clear if successful
  5905.     CF set on error
  5906.         caller is operating on X-32 stack (FlashTek X-32VM)
  5907. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  5908.       system calls.     Only available when directly using 386/DOS-Extender or
  5909.       a compatible DOS extender, or when using a product that was created
  5910.       using 386-DOS/Extender or a compatible
  5911.     this function is also supported by FlashTek X-32VM
  5912. SeeAlso: AH=30h"Phar Lap"
  5913. --------E-212502-----------------------------
  5914. INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  5915.     AX = 2502h
  5916.     CL = interrupt number
  5917. Return: CF clear
  5918.     ES:EBX = CS:EIP of protected-mode interrupt handler
  5919. Note:    this function is also supported by FlashTek X-32VM
  5920. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  5921. --------E-212503-----------------------------
  5922. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  5923.     AX = 2503h
  5924.     CL = interrupt number
  5925. Return: CF clear
  5926.     EBX = CS:IP of real-mode interrupt handler
  5927. Note:    this function is also supported by FlashTek X-32VM
  5928. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  5929. --------E-212504-----------------------------
  5930. INT 21 P - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  5931.     AX = 2504h
  5932.     CL = interrupt number
  5933.     DS:EDX = CS:EIP of protected-mode interrupt handler
  5934. Return: CF clear
  5935. Note:    this function is also supported by FlashTek X-32VM
  5936. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  5937. --------E-212505-----------------------------
  5938. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  5939.     AX = 2505h
  5940.     CL = interrupt number
  5941.     EBX = CS:IP of real-mode interrupt handler
  5942. Return: CF clear
  5943. Note:    this function is also supported by FlashTek X-32VM
  5944. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  5945. --------E-212506-----------------------------
  5946. INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. MODE
  5947.     AX = 2506h
  5948.     CL = interrupt number
  5949.     DS:EDX = CS:EIP of protected-mode interrupt handler
  5950. Return: CF clear
  5951. Notes:    this function modifies both the real-mode low-memory interrupt
  5952.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  5953.     interrupts occurring in real mode are resignaled in protected mode
  5954.     this function is also supported by FlashTek X-32VM
  5955. --------E-212507-----------------------------
  5956. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  5957.     AX = 2507h
  5958.     CL = interrupt numbern
  5959.     DS:EDX = CS:EIP of protected-mode interrupt handler
  5960.     EBX = CS:IP of real-mode interrupt handler
  5961. Return: CF clear
  5962. Notes:    interrupts are disabled until both vectors have been modified
  5963.     this function is also supported by FlashTek X-32VM
  5964. SeeAlso: AX=2504h,AX=2505h
  5965. --------E-212508-----------------------------
  5966. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  5967.     AX = 2508h
  5968.     BX = segment selector
  5969. Return: CF clear if successful
  5970.         ECX = linear base address of segment
  5971.     CF set if invalid segment selector
  5972. Note:    this function is also supported by FlashTek X-32VM
  5973. SeeAlso: AX=2509h
  5974. --------E-212509-----------------------------
  5975. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  5976.     AX = 2509h
  5977.     EBX = linear address to convert
  5978. Return: CF clear if successful
  5979.         ECX = physical address (carry flag clear)
  5980.     CF set if linear address not mapped in page tables
  5981. SeeAlso: AX=2508h
  5982. --------E-212509-----------------------------
  5983. INT 21 P - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  5984.     AX = 2509h
  5985. Return: CF clear
  5986.     EAX high word = default DS
  5987.     AX = alias for 16-bit data segment
  5988.     BX = real mode code segment
  5989.     EDX high word = selector covering full 4GB address space
  5990.     DX = default SS
  5991.     ESI high word = PSP selector
  5992.     SI = environment selector
  5993. --------E-21250A-----------------------------
  5994. INT 21 P - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  5995.     AX = 250Ah
  5996.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  5997.          to modify
  5998.     EBX = physical base address of memory to map (multiple of 4K)
  5999.     ECX = number of physical 4K pages to map
  6000. Return: CF clear if successful
  6001.         EAX = 32-bit offset in segment of mapped memory
  6002.     CF set on error
  6003.         EAX = error code
  6004.         08h insufficient memory to create page tables
  6005.         09h invalid segment selector
  6006. SeeAlso: INT 31/AX=0800h
  6007. --------E-21250C-----------------------------
  6008. INT 21 P - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  6009.     AX = 250Ch
  6010. Return: CF clear
  6011.     AL = base interrupt vector for IRQ0-IRQ7
  6012.     AH = base interrupt vector for IRQ8-IRQ15
  6013.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  6014. Note:    this function is also supported by FlashTek X-32VM
  6015. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  6016. --------E-21250D-----------------------------
  6017. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  6018.     AX = 250Dh
  6019. Return: CF clear
  6020.     EAX = CS:IP of real-mode callback procedure that will call through
  6021.         from real mode to a protected-mode routine
  6022.     EBX = 32-bit real-mode address of intermode call data buffer
  6023.     ECX = size in bytes of intermode call data buffer
  6024.     ES:EDX = protected-mode address of intermode call data buffer
  6025. Notes:    this function is also supported by FlashTek X-32VM
  6026.     X-32VM guarantees the intermode buffer to be at least 4 KB
  6027. SeeAlso: AX=250Eh
  6028.  
  6029. Call real-mode callback with:
  6030.     STACK:    DWORD    offset to protected-mode code
  6031.         WORD    placeholder for protected-mode CS
  6032.         DWORD    pointer to selector structure (see below)
  6033.             or 0000h:0000h for defaults
  6034.         var    parameters for protected-mode procedure
  6035. Return: via FAR return
  6036.  
  6037. Format of selector structure:
  6038. Offset    Size    Description
  6039.  00h    WORD    protected-mode GS selector
  6040.  02h    WORD    protected-mode FS selector
  6041.  04h    WORD    protected-mode ES selector
  6042.  06h    WORD    protected-mode DS selector
  6043. --------E-21250E-----------------------------
  6044. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  6045.     AX = 250Eh
  6046.     EBX = CS:IP of real-mode procedure to call
  6047.     ECX = number of two-byte words to copy from protected-mode stack
  6048.           to real-mode stack
  6049. Return: CF clear if successful
  6050.         all segment registers unchanged
  6051.         all general registers contain values set by real-mode procedure
  6052.         all other flags set as they were left by real-mode procedure
  6053.         stack unchanged
  6054.     CF set on error
  6055.         EAX = error code
  6056.         01h not enough real-mode stack space
  6057. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  6058.       call will fail if ECX > 0000003Fh
  6059. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  6060. --------E-21250F-----------------------------
  6061. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  6062.     AX = 250Fh
  6063.     ES:EBX = 48-bit protected-mode address to convert
  6064.     ECX = 00000000h or length of data in bytes
  6065. Return: CF clear if successful (address < 1MB and contiguous)
  6066.         ECX = 32-bit real-mode MS-DOS address
  6067.     CF set on error (address >= 1MB or not contiguous)
  6068.         ECX = linear address
  6069. Note:    this function is also supported by FlashTek X-32VM
  6070. SeeAlso: AX=2510h
  6071. --------E-212510-----------------------------
  6072. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  6073.     AX = 2510h
  6074.     EBX = CS:IP of real-mode procedure to call
  6075.     ECX = number of two-byte words to copy to protected-mode stack to
  6076.           real-mode stack
  6077.     DS:EDX -> pointer to parameter block (see below)
  6078. Return: CF clear if successful
  6079.         all segment registers unchanged,
  6080.         EDX unchanged
  6081.         all other general registers contain values set by real-mode proc
  6082.         all other flags are set as they were left by real-mode procedure
  6083.         real-mode register values are returned in the parameter block
  6084.     CF set on error
  6085.         EAX = error code
  6086.         01h not enough real-mode stack space
  6087. Note:    unlike most of the preceding 25xxh functions, this one is not
  6088.       supported by FlashTek X-32VM
  6089. SeeAlso: AX=250Eh,AX=250Fh
  6090.  
  6091. Format of parameter block:
  6092. Offset    Size    Description
  6093.  00h    WORD    real-mode DS value
  6094.  02h    WORD    real-mode ES value
  6095.  04h    WORD    real-mode FS value
  6096.  06h    WORD    real-mode GS value
  6097.  08h    DWORD    real-mode EAX value
  6098.  0Ch    DWORD    real-mode EBX value
  6099.  10h    DWORD    real-mode ECX value
  6100.  14h    DWORD    real-mode EDX value
  6101. --------E-212511-----------------------------
  6102. INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  6103.     AX = 2511h
  6104.     DS:EDX -> parameter block (see below)
  6105. Return: all segment registers unchanged
  6106.     EDX unchanged
  6107.     all other registers contain values set by the real-mode int handler
  6108.     the flags are set as they were left by the real-mode interrupt handler
  6109.     real-mode register values are returned in the parameter block
  6110. Note:    this function is also supported by FlashTek X-32VM
  6111. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  6112.  
  6113. Format of parameter block:
  6114. Offset    Size    Description
  6115.  00h    WORD    interrupt number
  6116.  02h    WORD    real-mode DS value
  6117.  04h    WORD    real-mode ES value
  6118.  06h    WORD    real-mode FS value
  6119.  08h    WORD    real-mode GS value
  6120.  0Ah    DWORD    real-mode EAX value
  6121.  0Eh    DWORD    real-mode EDX value
  6122. Note: all other real-mode values set from protected-mode registers
  6123. --------E-212512-----------------------------
  6124. INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  6125.     AX = 2512h
  6126.     DS:EDX -> pointer to ASCIZ program name
  6127.     ES:EBX -> pointer to parameter block (see below)
  6128.     ECX = size in bytes of LDT buffer
  6129. Return: CF clear if successful
  6130.         EAX = number of segment descriptors in LDT
  6131.     CF set on error
  6132.         EAX = error code
  6133.         02h file not found or path invalid
  6134.         05h access denied
  6135.         08h insufficient memory
  6136.         0Ah environment invalid
  6137.         0Bh invalid file format
  6138.         80h LDT too small
  6139. SeeAlso: AX=2517h
  6140.  
  6141. Format of parameter block:
  6142. Offset    Size    Description
  6143. Input:
  6144.  00h    DWORD    32-bit offset of environment string
  6145.  04h    WORD    segment of environment string
  6146.  06h    DWORD    32-bit offset of command-tail string
  6147.  0Ah    WORD    segment of command-tail string
  6148.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  6149.  10h    WORD    segment of LDT buffer
  6150. Output:
  6151.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  6152.  14h    WORD    real/protected mode flag
  6153.         0000h  real mode
  6154.         0001h  protected mode
  6155.  16h    DWORD    initial EIP value
  6156.  1Ah    WORD    initial CS value
  6157.  1Ch    DWORD    initial ESP value
  6158.  20h    WORD    initial SS value
  6159.  22h    WORD    initial DS value
  6160.  24h    WORD    initial ES value
  6161.  26h    WORD    initial FS value
  6162.  28h    WORD    initial GS value
  6163. --------E-212513-----------------------------
  6164. INT 21 P - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  6165.     AX = 2513h
  6166.     BX = segment selector of descriptor in GDT or LDT
  6167.     CL = access-rights byte for alias descriptor
  6168.     CH = use-type bit (USE16 or USE32) for alias descriptor
  6169. Return: CF clear if successful
  6170.         AX = segment selector for created alias
  6171.     CF set on error
  6172.         EAX = error code
  6173.         08h insufficient memory (can't grow LDT)
  6174.         09h invalid segment selector in BX
  6175. --------E-212514-----------------------------
  6176. INT 21 P - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  6177.     AX = 2514h
  6178.     BX = segment selector of descriptor in GDT or LDT
  6179.     CL = new access-rights byte
  6180.     CH = new use-type bit (USE16 or USE32)
  6181. Return: CF clear if successful
  6182.     CF set on error
  6183.         EAX = error code
  6184.         09h invalid selector in BX
  6185. SeeAlso: AX=2515h,INT 31/AX=0009h
  6186. --------E-212515-----------------------------
  6187. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  6188.     AX = 2515h
  6189.     BX = segment selector of descriptor in GDT or LDT
  6190. Return: CF clear if successful
  6191.         CL = access-rights byte for segment
  6192.         CH = use-type bit (USE16 or USE32)
  6193.     ECX<16-31> destroyed
  6194.     CF set on error
  6195.         EAX = error code
  6196.         09h invalid segment selector in BX
  6197. SeeAlso: AX=2514h
  6198. --------E-212516-----------------------------
  6199. INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT
  6200.     AX = 2516h
  6201. Return: CF clear
  6202. Note:    this function must be called from Ring 0 or the CS descriptor is freed
  6203. --------E-212517-----------------------------
  6204. INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER
  6205.     AX = 2517h
  6206. Return: CF clear
  6207.     ES:EBX -> data buffer (protected mode address)
  6208.     ECX -> data buffer (real mode address)
  6209.     EDX = size of data buffer in bytes
  6210. Note:    the data buffer's address changes after calls to AX=2512h and AX=252Ah
  6211. SeeAlso: AX=2512h,AX=252Ah,AX=2530h
  6212. --------E-212518-----------------------------
  6213. INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS
  6214.     AX = 2518h
  6215.     ES:EBX -> function to call when a segment is moved
  6216. Return: CF clear
  6217.     ES:EBX -> previous handler
  6218. --------E-212519-----------------------------
  6219. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  6220.     AX = 2519h
  6221. Return: CF clear
  6222.     EAX = error code
  6223.         0000h  no error
  6224.         0001h  out of physical memory
  6225.         0002h  out of swap space (unable to grow swap file)
  6226.         0003h  out of LDT entries and unable to grow LDT
  6227.         0004h  unable to change extended memory allocation mark
  6228.         FFFFFFFFh    paging disabled
  6229. Note:    VMM is the Virtual Memory Manager option
  6230. --------E-21251A-----------------------------
  6231. INT 21 P - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  6232.     AX = 251Ah
  6233.     EDX = number of 4k pages to lock
  6234.     if BL = 00h
  6235.         ECX = linear address of first page to lock
  6236.     if BL = 01h
  6237.         ES:ECX -> pointer to first page to lock
  6238. Return: CF clear if successful
  6239.     CF set on error
  6240.         EAX = error code
  6241.         08h insufficient memory
  6242.         09h invalid address range
  6243. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  6244. --------E-21251B-----------------------------
  6245. INT 21 P - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  6246.     AX = 251Bh
  6247.     EDX = number of pages to unlock
  6248.     if BL = 00h
  6249.         ECX = linear address of first page to unlock
  6250.     if BL = 01h
  6251.         ES:ECX -> pointer to first page to unlock
  6252. Return: CF clear if successful
  6253.     CF set on error
  6254.         EAX = error code
  6255.         09h invalid address range
  6256. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  6257. --------E-21251C-----------------------------
  6258. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES
  6259.     AX = 251Ch
  6260.     BH = preservation flag (00h preserve contents, 01h discard contents)
  6261.     EDX = number of pages to free
  6262.     BL = address type
  6263.         00h linear address
  6264.         ECX = linear address of first page to be freed
  6265.         01h pointer
  6266.         ES:ECX -> first page to be freed
  6267. Return: CF clear if successful
  6268.     CF set on error
  6269.         EAX = error code
  6270.         08h memory error, swap space full, no VMM or DPMI
  6271.         09h invalid address
  6272. --------E-21251D-----------------------------
  6273. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY
  6274.     AX = 251Dh
  6275.     BL = address type
  6276.         00h linear address
  6277.         ECX = linear address of page table entry to read
  6278.         01h pointer
  6279.         ES:ECX -> page table entry to read
  6280. Return: CF clear if successful
  6281.         EAX = contents of page table entry
  6282.     CF set on error
  6283.         EAX = error code
  6284.         09h invalid address or NOPAGE option set
  6285.         78h invalid under DPMI
  6286. Note:    this function is obsolete; use AX=252Bh/BH=09h instead
  6287. SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h
  6288. --------E-21251E-----------------------------
  6289. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY
  6290.     AX = 251Eh
  6291.     BL = address type
  6292.         00h linear address
  6293.         ECX = linear address of page table entry to read
  6294.         01h pointer
  6295.         ES:ECX -> page table entry to read
  6296.     EDX = new value for page table entry
  6297. Return: CF clear if successful
  6298.     CF set on error
  6299.         EAX = error code
  6300.         09h invalid address or NOPAGE option set
  6301.         82h not compatible with DPMI
  6302. Note:    this call is obsolete; use AX=252Bh/BH=0Ah instead
  6303. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h
  6304. --------E-21251F-----------------------------
  6305. INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  6306.     AX = 251Fh
  6307.     BL = address type
  6308.         00h linear address
  6309.         ECX = linear address of first page table entry
  6310.         EDX = linear address of second page table entry
  6311.         01h pointer
  6312.         ES:ECX -> first page table entry
  6313.         ES:EDX -> second page table entry
  6314. Return: CF clear if successful
  6315.     CF set on error
  6316.         EAX = error code
  6317.         09h invalid address or NOPAGE option set
  6318.         82h not compatible with DPMI
  6319. SeeAlso: AX=251Dh,AX=251Eh
  6320. --------E-212520-----------------------------
  6321. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  6322.     AX = 2520h
  6323.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  6324.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  6325. Return: carry flag clear
  6326.  
  6327. Format of VM stats buffer:
  6328. Offset    Size    Description
  6329.  00h    DWORD    VM status
  6330.         0001h VM subsystem is present
  6331.         0000h VM not present
  6332.  04h    DWORD    "nconvpg" number of conventional memory pages available
  6333.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  6334.  0Ch    DWORD    "nextpg" total number of extended memory pages
  6335.  10h    DWORD    "extlim" extender memory pages limit
  6336.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  6337.  18h    DWORD    "alockpg" number of locked pages owned by application
  6338.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  6339.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  6340.  24h    DWORD    linear address of beginning of application address space
  6341.  28h    DWORD    linear address of end of application address space
  6342.  2Ch    DWORD    number of seconds since last time VM stats were reset
  6343.  30h    DWORD    number of page faults since last time
  6344.  34h    DWORD    number of pages written to swap file since last time
  6345.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  6346.  3Ch    DWORD    number of virtual pages allocated to the application
  6347.  40h    DWORD    size in pages of swap file
  6348.  44h    DWORD    number of system pages allocated with EMS calls
  6349.  48h    DWORD    minimum number of conventional memory pages
  6350.  4Ch    DWORD    maximum size in bytes to which swap file can be increased
  6351.  50h    DWORD    "vmflags" bit 0 = 1 if page fault in progress
  6352. ---v4.0+ ---
  6353.  54h  8 BYTEs    ???
  6354.  5Ch    DWORD    size in pages of largest free block of memory (including disk
  6355.         swap space)
  6356.  60h  4 BYTEs    ???
  6357. --------E-212521-----------------------------
  6358. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM USAGE
  6359.     AX = 2521h
  6360.     EBX = max 4k pages of physical extended memory which program may use
  6361. Return: CF clear if successful
  6362.        EBX = maximum limit in pages
  6363.        ECX = minimum limit in pages
  6364.     CF set on error
  6365.         EAX = error code
  6366.         08h insufficient memory or -nopage switch used
  6367. SeeAlso: AX=2522h
  6368. --------E-212522-----------------------------
  6369. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
  6370.     AX = 2522h
  6371.     ES:EBX -> alternate handler for page faults
  6372. Return: CF clear
  6373.     ES:EBX -> previous page-fault handler
  6374. SeeAlso: AX=2523h
  6375. --------E-212523-----------------------------
  6376. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  6377.     AX = 2523h
  6378.     ???
  6379. Return: ???
  6380. SeeAlso: AX=2522h
  6381. --------E-212524-----------------------------
  6382. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS
  6383.     AX = 2524h
  6384.     ???
  6385. Return: ???
  6386. --------E-212525-----------------------------
  6387. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L MEM USAGE
  6388.     AX = 2525h
  6389.     EBX = limit in 4k pages of physical conventional memory which program
  6390.           may use
  6391. Return: CF clear if successful
  6392.         EBX = maximum limit in pages
  6393.         ECX = minimum limit in pages
  6394.     CF set on error
  6395.         EAX = error code
  6396.         08h insufficient memory or -nopage switch used
  6397. SeeAlso: AX=2521h
  6398. --------E-212526-----------------------------
  6399. INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  6400.     AX = 2526h
  6401.     ???
  6402. Return: ???
  6403. Note:    details not available at this time
  6404.  
  6405. Format of configuration buffer:
  6406. Offset    Size    Description
  6407.  00h    DWORD    flags 1
  6408.         bit 24: set if -NESTDPMI specified
  6409.         bit 25: set if -NONESTDPMI specified
  6410.         bit 26: set if -NODPMI specified
  6411.         bit 27: set if -NOPCDWEITEK specified
  6412. --------E-212527-----------------------------
  6413. INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS
  6414.     AX = 2527h
  6415.     EBX = new status (00h disabled, 01h enabled)
  6416. Return: CF clear
  6417.     EBX = previous state save flag
  6418. SeeAlso: AX=2528h
  6419. --------E-212528-----------------------------
  6420. INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT
  6421.     AX = 2528h
  6422.     DS:EBX -> buffer for registers (see below)
  6423. Return: CF clear if successful
  6424.         DS:EBX buffer filled
  6425.     CF set on error
  6426.         EAX = error code
  6427.         83h interrupt state save not enabled
  6428.         84h no active interrupt
  6429. SeeAlso: AX=2527h
  6430.  
  6431. Format of buffer for registers:
  6432. Offset    Size    Description
  6433.  00h  8 BYTEs    unused
  6434.  08h  4    DWORDs    EAX,EBX,ECX,EDX
  6435.  18h  4 DWORDs    ESI,EDI,EBP,ESP
  6436.  28h  6 WORDs    CS,DS,SS,ES,FS,GS
  6437.  34h    DWORD    EIP
  6438.  38h    DWORD    EFLAGS
  6439. --------E-212529-----------------------------
  6440. INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE
  6441.     AX = 2529h
  6442.     ???
  6443. Return: ES:EBX -> parameter block
  6444.     ???
  6445. Note:    details not available at this time
  6446. SeeAlso: AX=252Ah
  6447.  
  6448. Format of parameter block:
  6449. Offset    Size    Description
  6450.  00h 28 BYTEs    ???
  6451.  1Ch    DWORD    flags
  6452.         bit 0: child linked with -UNPRIVILEGED
  6453.         bits 1-31 reserved
  6454. --------E-21252A-----------------------------
  6455. INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG
  6456.     AX = 252Ah
  6457.     DS:EDX -> ASCIZ program name
  6458.     ES:EBX -> parameter block (see AX=2512h)
  6459.     ECX = size of LDT buffer in bytes
  6460.     ESI = bit flags
  6461.         bit 0: allow demand paging rather than loading entire program
  6462.         bit 1: demand page from swap file rather than from .EXP
  6463. Return: CF clear if successful
  6464.         EAX = VMM handle or FFFFFFFFh if none
  6465.         ECX = number of descriptors in LDT buffer
  6466.     CF set on error
  6467.         EAX = error code
  6468.         02h file error
  6469.             EBX = file error code (see below)
  6470.             ECX = DOS error code if EBX=1,2,3, or 8
  6471.         08h insufficient memory
  6472.             EBX = memory error code (see below)
  6473.         80h LDT buffer too small
  6474.         87h called twice without intervening call to AX=2531h
  6475. SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h
  6476.  
  6477. Values for file error code:
  6478.  01h    DOS open error
  6479.  02h    DOS seek error
  6480.  03h    DOS read error
  6481.  04h    not an .EXP or .REX file
  6482.  05h    invalid file format
  6483.  06h    -OFFSET is not a multiple of 64K
  6484.  07h    -NOPAGE incompatible with -REALBREAK/-OFFSET
  6485.  08h    DOS error loading .EXE file
  6486.  
  6487. Values for memory error code:
  6488.  01h    out of physical memory
  6489.  02h    out of swap space
  6490.  04h    unable to change extended memory allocation
  6491.  05h    -MAXPGMMEM exceeded
  6492.  06h    insufficient low memory to REALBREAK value
  6493.  07h    insufficient low memory for PSP and environment
  6494. --------E-21252B-----------------------------
  6495. INT 21 P - FlashTek X-32VM - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  6496.     AX = 252Bh
  6497.     BH = function
  6498.         05h lock pages
  6499.         06h unlock pages
  6500.     BL = address type
  6501.         00h linear address
  6502.         ECX = linear start address of memory region
  6503.         01h segmented address
  6504.         ES:ECX -> start of memory region
  6505.     EDX = size of memory region in bytes
  6506. Return: CF clear if successful
  6507.     CF set on error
  6508. Note:    if X-32 is not using virtual memory, this function always succeeds
  6509. --------E-21252BBH09-------------------------
  6510. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO
  6511.     AX = 252Bh
  6512.     BH = 09h
  6513.     BL = subfunction
  6514.         00h get page table entry by linear address
  6515.         ECX = linear address for which to get page table entry
  6516.         01h get page table entry by logical address
  6517.         ES:ECX = address for which to get page table entry
  6518. Return: CF clear if successful
  6519.         EAX = page table entry
  6520.         EBX = additional page table information
  6521.     CF set on error
  6522.         EAX = error code
  6523.         0009h invalid address
  6524.         0082h running under DPMI
  6525. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah
  6526. --------E-21252BBH0A-------------------------
  6527. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO
  6528.     AX = 252Bh
  6529.     BH = 0Ah
  6530.     BL = subfunction
  6531.         00h set page table entry for linear address
  6532.         ECX = linear address for which to get page table entry
  6533.         01h set page table entry for logical address
  6534.         ES:ECX = address for which to get page table entry
  6535.     ESI = page table entry
  6536.     EDI = additional page table information
  6537. Return: CF clear if successful
  6538.     CF set on error
  6539.         EAX = error code
  6540.         0009h invalid address
  6541.         0082h running under DPMI
  6542. SeeAlso: AX=252Bh/BH=09h
  6543. --------E-21252BBH0B-------------------------
  6544. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - MAP DATA FILE AT FILE OFFSET
  6545.     AX = 252Bh
  6546.     BH = 0Bh
  6547.     BL = subfunction
  6548.         00h by linear address
  6549.         ECX = linear address at which to map data file
  6550.         01h by logical address
  6551.         ES:ECX = logical address at which to map data file
  6552.     EDX = number of bytes to map
  6553.     DS:ESI -> mapping structure (see below)
  6554.     DS:EDI -> ASCIZ filename
  6555. Return: CF clear if successful
  6556.     CF set on error
  6557.         EAX = error code
  6558.         0002h file error
  6559.             ECX = phase (01h opening file, 02h seeking, 03h reading)
  6560.             EDX = error code returned by DOS
  6561.         0009h invalid address
  6562.         0081h invalid parameters or 386|VMM not present
  6563.         0086h all 386|VMM file handles already in use
  6564. SeeAlso: AX=252Bh/BH=09h
  6565.  
  6566. Format of mapping structure:
  6567. Offset    Size    Description
  6568.  00h    DWORD    starting file offset to be mapped
  6569.  04h    DWORD    DOS file access and sharing modes (see INT 21/AH=3Dh)
  6570. --------E-21252C-----------------------------
  6571. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT
  6572.     AX = 252Ch
  6573.     BX = segment selector
  6574.     ECX = number of 4K pages to add
  6575. Return: CF clear if successful
  6576.         EAX = offset in segment of beginning of unmapped pages
  6577.     CF set on error
  6578.         EAX = error code
  6579.         08h insufficent memory
  6580.         09h invalid selector
  6581.         82h not supported by current DPMI
  6582. --------E-21252D-----------------------------
  6583. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE
  6584.     AX = 252Dh
  6585.     EBX = VMM file handle
  6586. Return: CF clear if successful
  6587.     CF set on error
  6588.         EAX = error code (81h invalid VMM handle)
  6589. --------E-21252E-----------------------------
  6590. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS
  6591.     AX = 252Eh
  6592.     CL = direction (00h get parameters, 01h set parameters)
  6593.     DS:EBX -> parameter buffer (see below)
  6594. Return: CF clear if successful
  6595.     CF set on error
  6596.         EAX = error code (81h bad parameter value)
  6597.  
  6598. Format of VMM parameter buffer:
  6599. Offset    Size    Description
  6600.  00h    DWORD    flags
  6601.         bit 0: page fault logging enabled
  6602.         bit 1: SWAPEXEC switch
  6603.         bit 2: zero allocated memory
  6604.  04h    DWORD    scan period for page aging, in milliseconds
  6605.  08h    DWORD    maximum size (in bytes) to check on each page scan
  6606.  0Ch 52 BYTEs    unused
  6607. --------E-21252F-----------------------------
  6608. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE
  6609.     AX = 252Fh
  6610.     DS:EBX -> data to be written
  6611.     CX = size of data in bytes
  6612. Return: CF clear if successful
  6613.     CF set on error
  6614.         EAX = error code (85h no page log file or not 386/VMM)
  6615. --------E-212530-----------------------------
  6616. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS
  6617.     AX = 2530h
  6618.     ECX = size of data buffer in bytes (1024 to 65536)
  6619. Return: CF clear if successful
  6620.     CF set on error
  6621.         EAX = error code
  6622.         08h insufficient low memory
  6623.         81h invalid size
  6624. SeeAlso: AX=2517h
  6625. --------E-212531-----------------------------
  6626. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR
  6627.     AX = 2531h
  6628.     BX = segment selector
  6629.     ECX = direction (00h read, 01h write)
  6630.     DS:EDX -> 8-byte buffer for descriptor contents
  6631. Return: CF clear if successful
  6632.     CF set on error
  6633.         EAX = error code
  6634.         81h invalid selector
  6635.         82h DPMI running, or not a code or data segment
  6636. --------E-212532-----------------------------
  6637. INT 21 P - Phar Lap 386/DOS-Extender - GET EXCEPTION HANDLER VECTOR
  6638.     AX = 2532h
  6639.     CL = exception number (00h-0Fh)
  6640. Return: CF clear if successful
  6641.         ES:EBX = CS:EIP of current exception handler
  6642.     CF set on error (CL > 0Fh)
  6643. Notes:    this call is also supported by the FlashTek X-32VM extender
  6644.     this function is incompatible with 386|VMM; use AX=2522h instead
  6645. SeeAlso: AX=2522h,AX=2533h
  6646. --------E-212533-----------------------------
  6647. INT 21 P - Phar Lap 386/DOS-Extender - SET EXCEPTION HANDLER VECTOR
  6648.     AX = 2533h
  6649.     CL = exception number (00h-0Fh)
  6650.     DS:EDX = CS:EIP of new exception handler
  6651. Return: CF clear if successful
  6652.     CF set on error (CL > 0Fh)
  6653. Notes:    this call is also supported by the FlashTek X-32VM extender
  6654.     this function is incompatible with 386|VMM; use AX=2522h instead
  6655. SeeAlso: AX=2522h,AX=2532h
  6656. --------E-212534-----------------------------
  6657. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG
  6658.     AX = 2534h
  6659. Return: CF clear
  6660.     EAX = interrupt state (00h disabled, 01h enabled)
  6661. --------E-212535-----------------------------
  6662. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS
  6663.     AX = 2535h
  6664.     EBX = direction (00h read registers, 01h write)
  6665.     DS:EDX -> system register record (see below)
  6666. Return: CF clear
  6667. Note:    this call is only available under MS Windows if PHARLAP.386 VDD is
  6668.       installed
  6669.  
  6670. Format of system register record:
  6671. Offset    Size    Description
  6672.  00h    DWORD    CR0
  6673.  04h  4 DWORDs    DR0,DR1,DR2,DR3
  6674.  14h  2 DWORDs    reserved
  6675.  1Ch  2 DWORDs    DR6,DR7
  6676.  24h  3 DWORDs    reserved
  6677. --------E-212536----------------------------
  6678. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE
  6679.     AX = 2536h
  6680.     EBX = bit flags
  6681.         bit 0: modifying conventional memory rather than extended memory
  6682.         bit 1: setting maximum memory usage rather than minimum
  6683.     ECX = new limit in 4K pages
  6684. Return: CF clear if successful
  6685.         EAX = new limit
  6686.     CF set on error
  6687.         EAX = error code (08h memory error or -NOPAGE set)
  6688.         EBX = maximum limit in pages
  6689.         ECX = minimum limit in pages
  6690. --------E-212537----------------------------
  6691. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER
  6692.     AX = 2537h
  6693.     BX = number of paragraphs to allocate
  6694. Return: CF clear if successful
  6695.         AX = real-mode segment of allocated block
  6696.     CF set on error
  6697.         AX = error code
  6698.         07h MS-DOS memory chain corrupted
  6699.         08h insufficient low memory
  6700.         BX = size in paragraphs of largest free block
  6701. SeeAlso: AH=48h
  6702. --------E-212538----------------------------
  6703. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT
  6704.     AX = 2538h
  6705.     DS:EBX -> buffer for registers (see AX=2528h)
  6706.     ECX = register record to retrieve
  6707.         00h first interrupt state
  6708.         01h next interrupt state
  6709.         EDX = handle for current interrupt state
  6710. Return: CF clear if successful
  6711.         DS:EBX buffer filled
  6712.         EDX = handle of current interrupt state
  6713.         ESI = number of interrupt which occurred
  6714.     CF set on error
  6715.         EAX = error code
  6716.         81h invalid handle in EDX
  6717.         83h register saving not enabled
  6718.         84h no more interrupt states
  6719. SeeAlso: AX=2527h,AX=2528h
  6720. --------E-212539----------------------------
  6721. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER
  6722.     AX = 2539h
  6723.     BX = MS-DOS file handle for open file
  6724. Return: CF clear if successful
  6725.         EAX = offset of .EXP header in file
  6726.     CF set on error
  6727.         EAX = error code (02h file error)
  6728.         EBX = file error code
  6729.         02h DOS error seeking
  6730.         03h DOS error reading
  6731.         04h invalid file type    
  6732.         05h invalid file format
  6733.         ECX = DOS error code if EBX=02h or 03h
  6734.     current file position in file modified
  6735. --------E-21253A----------------------------
  6736. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER
  6737.     AX = 253Ah
  6738.     ES:EBX -> function to be called when INT 21/AH=4Ah is about to return
  6739.         an error
  6740. Return: CF clear
  6741.     ES:EBX -> previous handler
  6742. SeeAlso: AH=4Ah
  6743. --------E-21253B----------------------------
  6744. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT
  6745.     AX = 253Bh
  6746.     DS:EBX -> buffer containing register contents (see AX=2528h)
  6747. Return: never returns
  6748. SeeAlso: AX=2528h
  6749. --------E-21253C-----------------------------
  6750. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE
  6751.     AX = 253Ch
  6752. Return: CF clear
  6753.     EAX = old size of swap file in bytes
  6754.     EBX = new size of swap file in bytes
  6755. --------E-21253D-----------------------------
  6756. INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR
  6757.     AX = 253Dh
  6758.     BL = interrupt number
  6759.     ECX = direction (0 = read, 1 = write)
  6760.     DS:EDX -> 8-byte buffer for descriptor
  6761. Return: CF clear if successful
  6762.         DS:EDX filled if reading
  6763.     CF set on error
  6764.         EAX = error code (0082h if running under DPMI)
  6765. Desc:    access hardware-level IDT rather than the internal 386/DOS-Extender
  6766.       shadow IDT
  6767. Notes:    this call will always fail under DPMI because it is not possible to
  6768.       access the IDT
  6769.     the descriptor is not checked when writing
  6770.     this call can normally be used only by programs running in ring 0
  6771.       because the processor does not allow an interrupt to be vectored to
  6772.       a less privileged ring
  6773. --------E-2125C0-----------------------------
  6774. INT 21 P - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  6775.     AX = 25C0h
  6776.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  6777. Return: CF clear if successful
  6778.         AX = real-mode paragraph address of memory
  6779.     CF set on error
  6780.         AX = error code
  6781.         07h MS-DOS memory control blocks destroyed
  6782.         08h insufficient memory
  6783.         BX = size in paragraphs of largest available memory block
  6784. SeeAlso: AX=25C1h,AX=25C2h
  6785. --------E-2125C1-----------------------------
  6786. INT 21 P - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  6787.     AX = 25C1h
  6788.     CX = real-mode paragraph address of memory block to free
  6789. Return: CF clear if successful
  6790.         EAX destroyed
  6791.     CF set on error
  6792.         AX = error code
  6793.         07h MS-DOS memory control blocks destroyed
  6794.         09h invalid memory block address in CX
  6795. SeeAlso: AX=25C0h,AX=25C2h
  6796. --------E-2125C2-----------------------------
  6797. INT 21 P - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  6798.     AX = 25C2h
  6799.     BX = new requested block size in paragraphs
  6800.     CX = real-mode paragraph address of memory block to modify
  6801. Return: CF clear if successful
  6802.         EAX destroyed
  6803.     CF set on error
  6804.         AX = error code
  6805.         07h MS-DOS memory control blocks destroyed
  6806.         08h insufficient memory
  6807.         09h invalid memory block address in CX
  6808.         BX = size in paragraphs of largest available memory block
  6809. SeeAlso: AX=25C0h,AX=25C1h
  6810. --------E-2125C3-----------------------------
  6811. INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  6812.     AX = 25C3h
  6813.     ES:EBX -> pointer to parameter block (see below)
  6814.     DS:EDX -> pointer to ASCIZ program filename
  6815. Return: CF clear if successful
  6816.         all registers unchanged
  6817.     CF set on error
  6818.         EAX = error code
  6819.         01h function code in AL is invalid ???
  6820.         02h file not found or path invalid
  6821.         05h access denied
  6822.         08h insufficient memory to load program
  6823.         0Ah environment invalid
  6824.         0Bh invalid file format
  6825.  
  6826. Format of parameter block:
  6827. Offset    Size    Description
  6828.  00h    DWORD    32-bit offset of environment string
  6829.  04h    WORD    segment selector of environment string
  6830.  06h    DWORD    32-bit offset of command-tail string
  6831.  0Ah    WORD    segment selector of command-tail string
  6832. --------D-2126-------------------------------
  6833. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  6834.     AH = 26h
  6835.     DX = segment at which to create PSP (see below)
  6836. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  6837.       taken from interrupt vector table; the parent PSP field is set to 0
  6838.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  6839.       copy
  6840. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  6841.  
  6842. Format of PSP:
  6843. Offset    Size    Description
  6844.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  6845.         the CDh 20h here is often used as a signature for a valid PSP
  6846.  02h    WORD    segment of first byte beyond memory allocated to program
  6847.  04h    BYTE    unused filler
  6848.  05h    BYTE    CP/M CALL 5 service request (FAR JMP to 000C0h)
  6849.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  6850.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  6851.  08h  2 BYTEs    remainder of FAR JMP at 05h
  6852.  0Ah    DWORD    stored INT 22 termination address
  6853.  0Eh    DWORD    stored INT 23 control-Break handler address
  6854.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  6855.  16h    WORD    segment of parent PSP
  6856.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  6857.  2Ch    WORD    DOS 2+ segment of environment for process
  6858.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  6859.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  6860.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  6861.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  6862.         used by SHARE in DOS 3.3
  6863.  3Ch    BYTE    apparently unused by DOS versions <= 6.00
  6864.  3Dh    BYTE    apparently used by some versions of APPEND
  6865.  3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh
  6866.  3Fh    BYTE    (Novell Netware) Novell task number if previous byte is CEh
  6867.  40h  2 BYTEs    DOS 5+ version to return on INT 21/AH=30h
  6868.  42h    WORD    (MSWin3) selector of next PSP (PDB) in linked list
  6869.         Windows keeps a linked list of Windows programs only
  6870.  44h  4 BYTEs    unused by DOS versions <= 6.00
  6871.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  6872.  49h  7 BYTEs    unused by DOS versions <= 6.00
  6873.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  6874.  53h  2 BYTEs    unused in DOS versions <= 6.00
  6875.  55h  7 BYTEs    unused in DOS versions <= 6.00; can be used to make first FCB
  6876.         into an extended FCB
  6877.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  6878.         overwrites second FCB if opened
  6879.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  6880.         overwrites beginning of commandline if opened
  6881.  7Ch  4 BYTEs    unused
  6882.  80h 128 BYTEs    commandline / default DTA
  6883.         command tail is BYTE for length of tail, N BYTEs for the tail,
  6884.         followed by a BYTE containing 0Dh
  6885. Notes:    in DOS v3+, the limit on simultaneously open files may be increased by
  6886.       allocating memory for a new open file table, filling it with FFh,
  6887.       copying the first 20 bytes from the default table, and adjusting the
  6888.       pointer and count at 34h and 32h.  However, DOS will only copy the
  6889.       first 20 file handles into a child PSP (including the one created on
  6890.       EXEC).
  6891.     network redirectors based on the original MS-Net implementation use
  6892.       values of 80h-FEh in the open file table to indicate remote files;
  6893.       Novell NetWare reportedly also uses values of 80h-FEh
  6894.     MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  6895.       high; the first FCB is empty and the second contains the first
  6896.       parameter
  6897.     some DOS extenders place protected-mode values in various PSP fields
  6898.       such as the "parent" field, which can confuse PSP walkers.  Always
  6899.       check either for the CDh 20h signature or that the suspected PSP is
  6900.       at the beginning of a memory block which owns itself (the preceding
  6901.       paragraph should be a valid MCB with "owner" the same as the
  6902.       suspected PSP).
  6903.     Novell NetWare updates the fields at offsets 3Eh and 3Fh without
  6904.       checking that a legal PSP segment is current; see AH=50h for further
  6905.       discussion
  6906.  
  6907. Format of environment block:
  6908. Offset    Size    Description
  6909.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  6910.       N BYTEs    second environment variable, ASCIZ string
  6911.     ...
  6912.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  6913.     BYTE    00h
  6914. ---DOS 3+---
  6915.     WORD    number of strings following environment (normally 1)
  6916.       N BYTEs    ASCIZ full pathname of program owning this environment
  6917.         other strings may follow
  6918. --------D-2127-------------------------------
  6919. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  6920.     AH = 27h
  6921.     CX = number of records to read
  6922.     DS:DX -> opened FCB (see AH=0Fh)
  6923. Return: AL = status
  6924.         00h successful, all records read
  6925.         01h end of file, no data read
  6926.         02h segment wrap in DTA, no data read
  6927.         03h end of file, partial read
  6928.     [DTA] = records read from file
  6929.     CX = number of records read (return AL = 00h or 03h)
  6930. Notes:    read begins at current file position as specified in FCB; the file
  6931.       position is updated after reading
  6932.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6933. SeeAlso: AH=21h,AH=28h,AH=3Fh
  6934. --------D-2128-------------------------------
  6935. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  6936.     AH = 28h
  6937.     CX = number of records to write
  6938.     DS:DX -> opened FCB (see AH=0Fh)
  6939.     [DTA] = records to write
  6940. Return: AL = status
  6941.         00h successful
  6942.         01h disk full or file read-only
  6943.         02h segment wrap in DTA
  6944.     CX = number of records written
  6945. Notes:    write begins at current file position as specified in FCB; the file
  6946.       position is updated after writing
  6947.     if CX = 0000h on entry, no data is written; instead the file size is
  6948.       adjusted to be the same as the file position specified by the random
  6949.       record and record size fields of the FCB
  6950.     if the data to be written is less than a disk sector, it is copied into
  6951.       a DOS disk buffer, to be written out to disk at a later time
  6952.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  6953. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  6954. --------D-2129-------------------------------
  6955. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  6956.     AH = 29h
  6957.     AL = parsing options (see below)
  6958.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  6959.     ES:DI -> buffer for unopened FCB
  6960. Return: AL = result code
  6961.         00h successful parse, no wildcards encountered
  6962.         01h successful parse, wildcards present
  6963.         FFh failed (invalid drive specifier)
  6964.     DS:SI -> first unparsed character
  6965.     ES:DI buffer filled with unopened FCB (see AH=0Fh)
  6966. Notes:    asterisks expanded to question marks in the FCB
  6967.     all processing stops when a filename terminator is encountered
  6968.     cannot be used with filespecs which include a path (DOS 2+)
  6969.     Novell NetWare monitors the result code since an 'invalid drive' may
  6970.       signal an attempt to reconnect a network drive; if there are no
  6971.       connections to the specified drive, NetWare attempts to build a
  6972.       connection and map the drive to the SYS:LOGIN directory
  6973. SeeAlso: AH=0Fh,AH=16h,AH=26h
  6974.  
  6975. Bitfields for parsing options:
  6976.  bit 0    skip leading separators
  6977.  bit 1    use existing drive number in FCB if no drive is specified, instead of
  6978.         setting field to zero
  6979.  bit 2    use existing filename in FCB if no base name is specified, instead of
  6980.         filling field with blanks
  6981.  bit 3    use existing extension in FCB if no extension is specified, instead of
  6982.         filling field with blanks
  6983.  bits 4-7 reserved (0)
  6984. --------D-212A-------------------------------
  6985. INT 21 - DOS 1+ - GET SYSTEM DATE
  6986.     AH = 2Ah
  6987. Return: CX = year (1980-2099)
  6988.     DH = month
  6989.     DL = day
  6990. ---DOS 1.10+---
  6991.     AL = day of week (00h=Sunday)
  6992. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
  6993. --------D-212B-------------------------------
  6994. INT 21 - DOS 1+ - SET SYSTEM DATE
  6995.     AH = 2Bh
  6996.     CX = year (1980-2099)
  6997.     DH = month
  6998.     DL = day
  6999. Return: AL = status
  7000.         00h successful
  7001.         FFh invalid date, system date unchanged
  7002. Note:    DOS 3.3+ also sets CMOS clock
  7003. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  7004. --------E-212B--CX4149-----------------------
  7005. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  7006.     AH = 2Bh
  7007.     CX = 4149h ('AI')
  7008.     DX = 413Fh ('A?')
  7009. Return: AL <> FFh if installed
  7010. Note:    Borland's TKERNEL makes this call
  7011. --------c-212B--CX4358-----------------------
  7012. INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK
  7013.     AH = 2Bh
  7014.     CX = 4358h ('CX')
  7015. Return: AL = FFh if PC-Kwik/PC-Cache not installed
  7016.     AL = 00h if installed
  7017.         CF clear
  7018.         CX = 6378h ('cx')
  7019.         BX = ???
  7020.         DX = version (DH = major version, DL = binary minor version)
  7021. Note:    PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of
  7022.       Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds
  7023.       to PC-Kwik v3.20)
  7024. SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h
  7025. Index:    PC-Cache;installation check|Qualitas Qcache;installation check
  7026. Index:    installation check;PC-Cache 5.x|installation check;Qualitas Qcache
  7027. --------Q-212B--CX4445-----------------------
  7028. INT 21 - DESQview - INSTALLATION CHECK
  7029.     AH = 2Bh
  7030.     CX = 4445h ('DE')
  7031.     DX = 5351h ('SQ')
  7032.     AL = subfunction (DV v2.00+)
  7033.         01h get version
  7034.         Return: BX = version (BH = major, BL = minor)
  7035.         Note: early copies of v2.00 return 0002h
  7036.         02h get shadow buffer info, and start shadowing
  7037.         Return: BH = rows in shadow buffer
  7038.             BL = columns in shadow buffer
  7039.             DX = segment of shadow buffer
  7040.         04h get shadow buffer info
  7041.         Return: BH = rows in shadow buffer
  7042.             BL = columns in shadow buffer
  7043.             DX = segment of shadow buffer
  7044.         05h stop shadowing
  7045. Return: AL = FFh if DESQview not installed
  7046. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  7047.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  7048.       01h for all subfunction requests 0Ch and higher and appears to ignore
  7049.       all lower-numbered functions not listed here.
  7050.     DESQview versions 2.5x are part of DESQview/X v1.0x.
  7051. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  7052. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  7053. --------U-212B--CX454C-----------------------
  7054. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  7055.     AH = 2Bh
  7056.     CX = 454Ch ('EL')
  7057.     DX = 5253h ('RS')
  7058. Return: ES:BX -> ELRES history structure (see below)
  7059.     DX = DABEh (signature, DAve BEnnett)
  7060. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  7061.       Bennett which stores recent errorlevel values, allows them to be
  7062.       retrieved for use in batch files, and can place them in an
  7063.       environment variable
  7064. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  7065.  
  7066. Format of ELRES history structure:
  7067. Offset    Size    Description
  7068.  00h    WORD    number of return codes which can be stored by following buffer
  7069.  02h    WORD    current position in buffer (treated as a ring)
  7070.  04h  N BYTEs    ELRES buffer
  7071. ----------212B01CX444D-----------------------
  7072. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  7073.     AX = 2B01h
  7074.     CX = 444Dh ('DM')
  7075.     DX = 4158h ('AX')
  7076. Return: AX = 0000h if installed
  7077.         BX = version??? (0002h)
  7078.         CX = 4845h ('HE')
  7079.         DX = 5245h ('RE')
  7080.         ES = DOS-UP driver segment
  7081. --------T-212B01CX5441-----------------------
  7082. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  7083.     AX = 2B01h
  7084.     CX = 5441h ('TA')
  7085.     DX = 4D45h ('ME')
  7086. ---v2.60---
  7087.     BH = ???
  7088.         00h skip ???, else do
  7089. Return: AL = 02h if installed
  7090.     ES:DX -> data area in TAME-RES (see below)
  7091. Program: TAME is a shareware program by David G. Thomas which gives up CPU time
  7092.       to other partitions under a multitasker when the current partition's
  7093.       program incessantly polls the keyboard or system time
  7094.  
  7095. Format of TAME 2.10-2.20 data area:
  7096. Offset    Size    Description
  7097.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  7098.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  7099.  02h    DWORD    number of task switches
  7100.  06h    DWORD    number of keyboard polls
  7101.  0Ah    DWORD    number of time polls
  7102.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7103.  12h    DWORD    original INT 10h
  7104.  16h    DWORD    original INT 14h
  7105.  1Ah    DWORD    original INT 15h
  7106.  1Eh    DWORD    original INT 16h
  7107.  22h    DWORD    original INT 17h
  7108.  26h    DWORD    original INT 21h
  7109.  2Ah    DWORD    original INT 28h
  7110.  2Eh    WORD    offset of TAME INT 10h handler
  7111.  30h    WORD    offset of TAME INT 14h handler
  7112.  32h    WORD    offset of TAME INT 15h handler
  7113.  34h    WORD    offset of TAME INT 16h handler
  7114.  36h    WORD    offset of TAME INT 17h handler
  7115.  38h    WORD    offset of TAME INT 21h handler
  7116.  3Ah    WORD    offset of TAME INT 28h handler
  7117.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  7118.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  7119.  40h    WORD    number of polls remaining before next task switch
  7120.  42h    WORD    /KEYIDLE value
  7121.  44h    BYTE    interrupts already grabbed by TAME (see below)
  7122.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  7123.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  7124.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  7125.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  7126.  49h    BYTE    window or task number for this task
  7127.  4Ah    BYTE    multitasker type (see below)
  7128.  4Bh    BYTE    type of task switching selected
  7129.         bit 0: DESQview???
  7130.         bit 1: DoubleDOS???
  7131.         bit 2: TopView???
  7132.         bit 3: KeySwitch
  7133.         bit 4: HLT instruction
  7134.  4Ch    BYTE    ???
  7135.  4Dh    BYTE    flags
  7136.         bit 1: /FREQ instead of /MAX
  7137.  4Eh    BYTE    /FG: value
  7138.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  7139.  50h    BYTE    ???
  7140.  
  7141. Bitfields for interrupts already grabbed by TAME:
  7142.  bit 0    INT 10h
  7143.  bit 1    INT 14h
  7144.  bit 2    INT 15h
  7145.  bit 3    INT 16h
  7146.  bit 4    INT 17h
  7147.  bit 5    INT 21h
  7148.  bit 6    INT 28h
  7149.  
  7150. Values for multitasker type:
  7151.  01h    DESQview
  7152.  02h    DoubleDOS
  7153.  03h    TopView
  7154.  04h    OmniView
  7155.  05h    VM/386
  7156.  
  7157. Bitfields for type of task switching selected:
  7158.  bit 0    DESQview
  7159.  bit 1    DoubleDOS
  7160.  bit 2    TopView
  7161.  bit 3    OmniView
  7162.  bit 4    KeySwitch
  7163.  bit 5    HLT instruction
  7164.  
  7165. Format of TAME 2.30 data area:
  7166. Offset    Size    Description
  7167.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  7168.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  7169.  02h    DWORD    number of task switches
  7170.  06h    DWORD    number of keyboard polls
  7171.  0Ah    DWORD    number of time polls
  7172.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7173.  12h    DWORD    time of last /CLEAR or TAME-RES load
  7174.  16h    DWORD    time yielded
  7175.  1Ah    DWORD    time spent polling
  7176.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  7177.  22h    DWORD    original INT 10h
  7178.  26h    DWORD    original INT 14h
  7179.  2Ah    DWORD    original INT 15h
  7180.  2Eh    DWORD    original INT 16h
  7181.  32h    DWORD    original INT 17h
  7182.  36h    DWORD    original INT 21h
  7183.  3Ah    DWORD    original INT 28h
  7184.  3Eh    WORD    offset of TAME INT 10h handler
  7185.  40h    WORD    offset of TAME INT 14h handler
  7186.  42h    WORD    offset of TAME INT 15h handler
  7187.  44h    WORD    offset of TAME INT 16h handler
  7188.  46h    WORD    offset of TAME INT 17h handler
  7189.  48h    WORD    offset of TAME INT 21h handler
  7190.  4Ah    WORD    offset of TAME INT 28h handler
  7191.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  7192.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  7193.  50h    WORD    number of polls remaining before next task switch
  7194.  52h    WORD    /KEYIDLE value
  7195.  54h    WORD    /FG: value
  7196.  56h    WORD    task switches left until next FGONLY DESQview API call
  7197.  58h    WORD    multitasker version
  7198.  5Ah    WORD    virtual screen segment
  7199.  5Ch    BYTE    interrupts already grabbed by TAME (see above)
  7200.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  7201.  5Eh    BYTE    window or task number for this task
  7202.  5Fh    BYTE    multitasker type (see above)
  7203.  60h    BYTE    type of task switching selected (bit flags) (see above)
  7204.  61h    BYTE    watch_DOS
  7205.  62h    BYTE    bit flags
  7206.         bit 0: TAME enabled
  7207.         bit 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  7208.         bit 2: /TIMEPOLL
  7209.         bit 3: /KEYPOLL
  7210.         bit 4: inhibit timer
  7211.         bit 5: enable status monitoring
  7212.  63h    BYTE    old status
  7213.  64h    WORD    signature DA34h
  7214.  
  7215. Format of TAME 2.60 data area:
  7216. Offset    Size    Description
  7217.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  7218.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  7219.  02h    DWORD    number of task switches
  7220.  06h    DWORD    number of keyboard polls
  7221.  0Ah    DWORD    number of time polls
  7222.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  7223.  12h    DWORD    time of last /CLEAR or TAME-RES load
  7224.  16h    DWORD    time yielded
  7225.  1Ah    DWORD    time spent polling
  7226.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  7227.  22h  4 BYTEs    ???
  7228.  26h    DWORD    original INT 10h
  7229.  2Ah    DWORD    original INT 14h
  7230.  2Eh    DWORD    original INT 15h
  7231.  32h    DWORD    original INT 16h
  7232.  36h    DWORD    original INT 17h
  7233.  3Ah    DWORD    original INT 21h
  7234.  3Eh    DWORD    original INT 28h
  7235.  42h    WORD    offset of TAME INT 10h handler
  7236.  44h    WORD    offset of TAME INT 14h handler
  7237.  46h    WORD    offset of TAME INT 15h handler
  7238.  48h    WORD    offset of TAME INT 16h handler
  7239.  4Ah    WORD    offset of TAME INT 17h handler
  7240.  4Ch    WORD    offset of TAME INT 21h handler
  7241.  4Eh    WORD    offset of TAME INT 28h handler
  7242.  50h    WORD    X in /max:X,Y or /freq:X,Y
  7243.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  7244.  54h    WORD    number of polls remaining before next task switch
  7245.  56h    WORD    /KEYIDLE value
  7246.  58h  4 BYTEs    ???
  7247.  5Ch    WORD    X in /boost:X,Y
  7248.  5Eh    WORD    Y in /boost:X,Y
  7249.  60h    WORD    /FG: value
  7250.  62h    WORD    task switches remaining until next FGONLY DESQview API call
  7251.  64h    WORD    multitasker version ???
  7252.  66h    WORD    virtual screen segment
  7253.  68h    BYTE    interrupts already grabbed by TAME (see above)
  7254.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  7255.  6Ah    BYTE    window or task number for this task
  7256.  6Bh    BYTE    multitasker type (see above)
  7257.  6Ch    BYTE    type of task switching selected (bit flags) (see above)
  7258.  6Dh    BYTE    watch_DOS
  7259.  6Eh    BYTE    bit flags
  7260.         bit 0: TAME enabled
  7261.         bit 1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  7262.         bit 2: /TIMEPOLL
  7263.         bit 3: /KEYPOLL
  7264.         bit 4: inhibit timer
  7265.         bit 5: enable status monitoring
  7266.  6Fh    BYTE    old status
  7267.  70h    WORD    signature DA34h
  7268. --------R-212B44BX4D41-----------------------
  7269. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  7270.     AX = 2B44h ('D')
  7271.     BX = 4D41h ('MA')
  7272.     CX = 7063h ('pc')
  7273.     DX = 4157h ('AW')
  7274. Return: AX = 4F4Bh ('OK') if large host resident
  7275.        = 6F6Bh ('ok') if small host resident
  7276.     CX:DX -> API entry point
  7277. SeeAlso: INT 16/AH=79h
  7278.  
  7279. Call API entry point with:
  7280.     AX = 0000h get pcANYWHERE IV version
  7281.         DS:SI -> BYTE buffer for host type code
  7282.         Return: AH = version number
  7283.             AL = revision number
  7284.             DS:DI buffer byte filled with
  7285.             00h full-featured host
  7286.             01h limited-feature LAN host
  7287.             other API may not be supported
  7288.     AX = 0001h initialize operation
  7289.         DS:SI -> initialization request structure (see below)
  7290.         Return: AX = function status (see below)
  7291.     AX = 0002h get status
  7292.         Return: AH = current operating mode (see init req structure below)
  7293.             AL = current connection status
  7294.             bit 0: a physical connection is active
  7295.             bit 1: remove screen updating is active
  7296.             bit 2: connection checking is active
  7297.             bit 3: hot key detection is active
  7298.             bit 4: background file transfer is active
  7299.     AX = 0003h suspend remote screen updates
  7300.         Return: AX = function status (see below)
  7301.     AX = 0004h resume screen updates
  7302.         Return: AX = function status (see below)
  7303.     AX = 0005h end current remote access session
  7304.         DS:SI -> termination request structure (see below)
  7305.         Return: AX = function status (see below)
  7306.     AX = 0006h remove pcANYWHERE IV from memory
  7307.         Return: AX = status
  7308.             0000h successful
  7309.             FFD2h unable to release allocated memory
  7310.             FFD1h unable to release interrupt vectors
  7311.     AX = 8000h read data from communications channel
  7312.         DS:BX -> buffer
  7313.         CX = buffer size
  7314.         Return: AX >= number of characters read/available
  7315.             AX < 0 on error
  7316.     AX = 8001h write data to communications channel
  7317.         DS:BX -> buffer
  7318.         CX = buffer size
  7319.         Return: AX >= number of characters written
  7320.             AX < 0 on error
  7321.     AX = 8002h get connection status
  7322.         Return: AX = status
  7323.             > 0000h if connection active
  7324.             = 0000h if connection lost
  7325.             < 0000h on error
  7326.  
  7327. Format of initialization request structure:
  7328. Offset    Size    Description
  7329.  00h    BYTE    operating mode
  7330.         00h wait for a call
  7331.         01h hot key activates
  7332.         02h incoming call activates
  7333.         03h initiate a call
  7334.  01h  3 BYTEs    user ID to append to config file names
  7335.  04h    WORD    DS-relative pointer to path for config files
  7336.  06h    WORD    DS-relative pointer to path for program files
  7337.  
  7338. Format of termination request structure:
  7339. Offset    Size    Description
  7340.  00h    BYTE    operating mode after termination
  7341.         00h wait for a call
  7342.         01h hot key activates
  7343.         02h incoming call activates
  7344.         80h use current mode
  7345.         FFh remove from memory
  7346.  
  7347. Values for function status:
  7348.  0000h    function completed successfully
  7349.  FFF2h    unable to establish a connection when operating mode is
  7350.     "Initiate a call"
  7351.  FFF3h    modem configuration is invalid (corrupt config)
  7352.  FFF4h    modem initialization failed (no modem response)
  7353.  FFF5h    the communications device could not be initialized
  7354.  FFF6h    the host operator aborted the function
  7355.  FFF7h    the communications driver type specified in the configuration file is
  7356.     different than the one loaded when pcANYWHERE IV was initially started
  7357.  FFF9h    the configuration file is invalid
  7358.  FFFAh    the configuration file could not be found
  7359.  FFFBh    no session is active
  7360.  FFFCh    a remote access session is active
  7361.  FFFDh    the specified operating mode is invalid
  7362. --------D-212C-------------------------------
  7363. INT 21 - DOS 1+ - GET SYSTEM TIME
  7364.     AH = 2Ch
  7365. Return: CH = hour
  7366.     CL = minute
  7367.     DH = second
  7368.     DL = 1/100 seconds
  7369. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  7370.       so returned times generally do not increment by 1
  7371.     on some systems, DL may always return 00h
  7372. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  7373. SeeAlso: INT 2F/AX=120Dh
  7374. --------D-212D-------------------------------
  7375. INT 21 - DOS 1+ - SET SYSTEM TIME
  7376.     AH = 2Dh
  7377.     CH = hour
  7378.     CL = minute
  7379.     DH = second
  7380.     DL = 1/100 seconds
  7381. Return: AL = result
  7382.         00h successful
  7383.         FFh invalid time, system time unchanged
  7384. Note:    DOS 3.3+ also sets CMOS clock
  7385. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  7386. --------T-212D01CX7820-----------------------
  7387. INT 21 - PC-Mix - INSTALLATION CHECK
  7388.     AX = 2D01h
  7389.     CX = 7820h ('X ')
  7390.     DX = 6D69h ('MI')
  7391. Return: AL = 00h if installed
  7392. --------D-212E--DL00-------------------------
  7393. INT 21 - DOS 1+ - SET VERIFY FLAG
  7394.     AH = 2Eh
  7395.     DL = 00h (DOS 1.x/2.x only)
  7396.     AL = new state of verify flag
  7397.         00h off
  7398.         01h on
  7399. Notes:    default state at system boot is OFF
  7400.     when ON, all disk writes are verified provided the device driver
  7401.       supports read-after-write verification
  7402. SeeAlso: AH=54h
  7403. --------D-212F-------------------------------
  7404. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  7405.     AH = 2Fh
  7406. Return: ES:BX -> current DTA
  7407. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  7408. SeeAlso: AH=1Ah
  7409. --------D-2130-------------------------------
  7410. INT 21 - DOS 2+ - GET DOS VERSION
  7411.     AH = 30h
  7412. ---DOS 5+ ---
  7413.     AL = what to return in BH
  7414.         00h OEM number (as for DOS 2.0-4.0x)
  7415.         01h version flag
  7416. Return: AL = major version number (00h if DOS 1.x)
  7417.     AH = minor version number
  7418.     BL:CX = 24-bit user serial number (most versions do not use this)
  7419. ---if DOS <5 or AL=00h---
  7420.     BH = MS-DOS OEM number (see below)
  7421. ---if DOS 5+ and AL=01h---
  7422.     BH = version flag
  7423.         bit 3: DOS is in ROM
  7424.         other: reserved (0)
  7425. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  7426.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  7427.     the Windows/NT DOS box returns version 5.00, subject to SETVER
  7428.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  7429.       INT 21/AH=87h to distinguish between the original European MS-DOS 4.0
  7430.       and the later PC-DOS 4.0x and MS-DOS 4.0x
  7431.     IBM DOS 6.1 reports its version as 6.00; use the OEM number to
  7432.       distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an
  7433.       IBM DOS 6.0)
  7434.     generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves
  7435.       as PC-DOS by returning OEM number 00h
  7436.     the version returned under DOS 4.0x may be modified by entries in
  7437.       the special program list (see AH=52h); the version returned under
  7438.       DOS 5+ may be modified by SETVER--use AX=3306h to get the true
  7439.       version number
  7440. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  7441. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=E002h
  7442.  
  7443. Values for MS-DOS OEM number:
  7444.  00h    IBM
  7445.  01h    Compaq
  7446.  02h    MS Packaged Product
  7447.  04h    AT&T
  7448.  05h    Zenith
  7449.  06h    Hewlett-Packard
  7450.  0Dh    Packard-Bell
  7451.  16h    DEC
  7452.  23h    Olivetti
  7453.  29h    Toshiba
  7454.  33h    Novell (Windows/386 device IDs only)
  7455.  34h    MS Multimedia Systems (Windows/386 device IDs only)
  7456.  35h    MS Multimedia Systems (Windows/386 device IDs only)
  7457.  4Dh    Hewlett-Packard
  7458.  66h    PhysTechSoft (PTS-DOS)
  7459.  99h    General Software's Embedded DOS
  7460.  FFh    Microsoft, Phoenix
  7461. --------E-2130-------------------------------
  7462. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  7463.     AH = 30h
  7464.     EAX = 00003000h
  7465.     EBX = 50484152h ("PHAR")
  7466. Return: AL = major DOS version
  7467.     AH = minor DOS version
  7468.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  7469.         BL = ASCII major version number
  7470.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  7471.         EDX = address of GDA
  7472. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  7473. --------v-2130--DXABCD-----------------------
  7474. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  7475.     AH = 30h
  7476.     DX = ABCDh
  7477. Return: DX = DCBAh if installed
  7478. SeeAlso: AX=0D20h,AX=30F1h
  7479. --------T-213000BX1234-----------------------
  7480. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  7481.     AX = 3000h
  7482.     BX = 1234h
  7483.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  7484. Return: AL = DOS major version
  7485.     AH = DOS minor version
  7486.     CX:BX -> Ctask global data block
  7487. Program: CTask is a multitasking kernel for C written by Thomas Wagner
  7488. Note:    if first eight bytes of returned data block equal eight bytes passed
  7489.       in, CTask is resident
  7490. --------O-213000BX3000-----------------------
  7491. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  7492.     AX = 3000h
  7493.     BX = 3000h
  7494.     CX = DX = 3000h
  7495. Return: AX = PC-MOS version
  7496. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  7497.       system by The Software Link, Inc.
  7498. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
  7499. ----------213022-----------------------------
  7500. INT 21 - StopPrg v2.0 - INSTALLATION CHECK
  7501.     AX = 3022h
  7502. Return: AX = DOS version (see AH=30h)
  7503.     CX = 1112h if StopPrg installed
  7504.         BX = segment of resident code
  7505. Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet
  7506. Note:    StopPrg may be temporarily disabled by storing 9090h in the word at
  7507.       0000h:04FEh
  7508. --------v-2130F1-----------------------------
  7509. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  7510.     AX = 30F1h
  7511. Return: AL = 00h if resident
  7512. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  7513. ----------2130FFCX4445-----------------------
  7514. INT 21 - DESQ??? - INSTALLATION CHECK
  7515.     AX = 30FFh
  7516.     CX = 4445h ("DE")
  7517.     DX = 5351h ("SQ")
  7518. Return: BH = 05h if installed
  7519.     ???
  7520. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  7521.       DESQview, so it may be for DESQview's precursor DESQ.
  7522. SeeAlso: AX=4404h"DUBLDISK"
  7523. --------D-2131-------------------------------
  7524. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  7525.     AH = 31h
  7526.     AL = return code
  7527.     DX = number of paragraphs to keep resident
  7528. Return: never
  7529. Notes:    the value in DX only affects the memory block containing the PSP;
  7530.       additional memory allocated via AH=48h is not affected
  7531.     the minimum number of paragraphs which will remain resident is 11h
  7532.       for DOS 2.x and 06h for DOS 3+
  7533.     most TSRs can save some memory by releasing their environment block
  7534.       before terminating (see AH=26h,AH=49h)
  7535. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  7536. --------D-2132-------------------------------
  7537. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  7538.     AH = 32h
  7539.     DL = drive number (00h = default, 01h = A:, etc)
  7540. Return: AL = status
  7541.         00h successful
  7542.         DS:BX -> Drive Parameter Block (DPB) for specified drive
  7543.         FFh invalid or network drive
  7544. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  7545.       except for the DWORD at offset 12h
  7546.     this call updates the DPB by reading the disk; the DPB may be accessed
  7547.       via the DOS list of lists (see AH=52h) if disk access is not
  7548.       desirable.
  7549.     undocumented prior to the release of DOS 5.0; only the DOS 4+ version
  7550.       of the DPB has been documented, however
  7551.     supported by DR-DOS 3.41+; DR-DOS 3.41-6.0 return the same data as
  7552.       MS-DOS 3.31
  7553. SeeAlso: AH=1Fh,AH=52h
  7554.  
  7555. Format of DOS Drive Parameter Block:
  7556. Offset    Size    Description
  7557.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  7558.  01h    BYTE    unit number within device driver
  7559.  02h    WORD    bytes per sector
  7560.  04h    BYTE    highest sector number within a cluster
  7561.  05h    BYTE    shift count to convert clusters into sectors
  7562.  06h    WORD    number of reserved sectors at beginning of drive
  7563.  08h    BYTE    number of FATs
  7564.  09h    WORD    number of root directory entries
  7565.  0Bh    WORD    number of first sector containing user data
  7566.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  7567.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  7568.  0Fh    BYTE    number of sectors per FAT
  7569.  10h    WORD    sector number of first directory sector
  7570.  12h    DWORD    address of device driver header
  7571.  16h    BYTE    media ID byte
  7572.  17h    BYTE    00h if disk accessed, FFh if not
  7573.  18h    DWORD    pointer to next DPB
  7574. ---DOS 2.x---
  7575.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  7576.         FFFFh = unknown
  7577.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  7578. ---DOS 3.x---
  7579.  1Ch    WORD    cluster at which to start search for free space when writing
  7580.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  7581. ---DOS 4.0-6.0---
  7582.  0Fh    WORD    number of sectors per FAT
  7583.  11h    WORD    sector number of first directory sector
  7584.  13h    DWORD    address of device driver header
  7585.  17h    BYTE    media ID byte
  7586.  18h    BYTE    00h if disk accessed, FFh if not
  7587.  19h    DWORD    pointer to next DPB
  7588.  1Dh    WORD    cluster at which to start search for free space when writing,
  7589.         usually the last cluster allocated
  7590.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  7591. --------D-2133-------------------------------
  7592. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  7593.     AH = 33h
  7594.     AL = subfunction
  7595.         00h get current extended break state
  7596.         Return: DL = current state, 00h = off, 01h = on
  7597.         01h set state of extended ^C/^Break checking
  7598.         DL = 00h off, check only on character I/O functions
  7599.              01h on, check on all DOS functions
  7600. Note:    under DOS 3.1+ and DR-DOS, this function does not use any of the
  7601.       DOS-internal and may thus be called at any time
  7602. SeeAlso: AX=3302h
  7603. --------D-213302-----------------------------
  7604. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  7605.     AX = 3302h
  7606.     DL = new state
  7607.          00h for OFF or 01h for ON
  7608. Return: DL = old state of extended BREAK checking
  7609. Notes:    this function does not use any of the DOS-internal stacks and may thus
  7610.       be called at any time; one possible use is modifying Control-Break
  7611.       checking from within an interrupt handler or TSR
  7612.     not supported by DR-DOS through at least version 6.0
  7613. SeeAlso: AH=33h
  7614. --------D-213305-----------------------------
  7615. INT 21 - DOS 4+ - GET BOOT DRIVE
  7616.     AX = 3305h
  7617. Return: DL = boot drive (1=A:,...)
  7618. Notes:    fully reentrant
  7619.     NEC 9800-series PCs always call the boot drive A: and assign the other
  7620.       drive letters sequentially to the other drives in the system
  7621. --------D-213306-----------------------------
  7622. INT 21 - DOS 5+ - GET TRUE VERSION NUMBER
  7623.     AX = 3306h
  7624. Return: BL = major version
  7625.     BH = minor version
  7626.     DL = revision (bits 2-0, all others 0)
  7627.     DH = version flags
  7628.         bit 3: DOS is in ROM
  7629.         bit 4: DOS is in HMA
  7630.     AL = FFh if true DOS version < 5.0
  7631. Notes:    this function always returns the true version number, unlike AH=30h,
  7632.       whose return value may be changed with SETVER
  7633.     because of the conflict from the CBIS PowerLAN redirector (see next
  7634.       entry), programs should check whether BH is less than 100 (64h)
  7635.       and BL is at least 5 before accepting the returned BX as the true
  7636.       version number; however, even this is not entirely reliable when
  7637.       that redirector is loaded
  7638.     fully reentrant
  7639.     OS/2 v2.1 will return BX=0A14h (version 20.10)
  7640.     the Windows NT DOS box returns BX=3205h (version 5.50)
  7641. BUG:    DR-DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  7642.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  7643.       for invalid subfunctions
  7644. SeeAlso: AH=30h,INT 2F/AX=122Fh
  7645. --------N-213306-----------------------------
  7646. INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
  7647.     AX = 3306h
  7648. Return: AX = 3306h
  7649.     BL = ??? (usually 00h)
  7650.     BH = ??? (usually 00h or FFh)
  7651. Note:    unknown function, is in conflict with DOS 5+ version call
  7652. SeeAlso: AX=3306h"DOS"
  7653. --------v-21330F-----------------------------
  7654. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  7655.     AX = 330Fh
  7656. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  7657. SeeAlso: AX=30F1h,AX=33E0h
  7658. --------k-213341-----------------------------
  7659. INT 21 - Diet Disk v1.0 - INSTALLATION CHECK
  7660.     AX = 3341h
  7661. Return: DX = 1234h if installed
  7662.         CX = resident code segment
  7663. Program: Diet Disk is a public domain transparent data file compressor by
  7664.       Barry Nance
  7665. --------v-2133E0-----------------------------
  7666. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  7667.     AX = 33E0h
  7668. Return: AL = E0h if resident (DOS returns AL=FFh)
  7669. SeeAlso: AX=330Fh,AX=357Fh
  7670. --------D-2134-------------------------------
  7671. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  7672.     AH = 34h
  7673. Return: ES:BX -> one-byte InDOS flag
  7674. Notes:    the value of InDOS is incremented whenever an INT 21 function begins
  7675.       and decremented whenever one completes
  7676.     during an INT 28 call, it is safe to call some INT 21 functions even
  7677.       though InDOS may be 01h instead of zero
  7678.     InDOS alone is not sufficient for determining when it is safe to
  7679.       enter DOS, as the critical error handling decrements InDOS and
  7680.       increments the critical error flag for the duration of the critical
  7681.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  7682.       busy.
  7683.     SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk,
  7684.       then zeros it on completion
  7685.     the critical error flag is the byte immediately following InDOS in
  7686.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ and
  7687.       DR-DOS 3.41+ (except COMPAQ DOS 3.0, where the critical error flag
  7688.       is located 1AAh bytes BEFORE the critical section flag)
  7689.     for DOS 3.1+, an undocumented call exists to get the address of the
  7690.       critical error flag (see AX=5D06h)
  7691.     this function was undocumented prior to the release of DOS 5.0.
  7692. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  7693. --------D-2135-------------------------------
  7694. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  7695.     AH = 35h
  7696.     AL = interrupt number
  7697. Return: ES:BX -> current interrupt handler
  7698. Note:    under DR-DOS 5.0+, this function does not use any of the DOS-internal
  7699.       stacks and may thus be called at any time
  7700. SeeAlso: AH=25h,AX=2503h
  7701. --------E-213501-----------------------------
  7702. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  7703.     AX = 3501h
  7704. Return: CF clear if successful
  7705.         BX = new selector
  7706.     CF set on error (no more selectors available)
  7707. Note:    the new selector will be an expand-up read/write data selector with
  7708.       undefined base and limit
  7709. SeeAlso: AX=3502h,INT 31/AX=0000h
  7710. --------E-213502-----------------------------
  7711. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  7712.     AX = 3502h
  7713.     BX = selector
  7714. Return: CF clear if successful
  7715.     CF set on error (invalid selector)
  7716. Note:    only selectors allocated via AX=3501h should be deallocated
  7717. SeeAlso: AX=3501h,INT 31/AX=0001h
  7718. --------E-213503-----------------------------
  7719. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  7720.     AX = 3503h
  7721.     BX = selector
  7722.     ECX = base address
  7723. Return: CF clear if successful
  7724.     CF set on error (invalid selector)
  7725. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  7726. --------E-213504-----------------------------
  7727. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  7728.     AX = 3504h
  7729.     BX = selector
  7730. Return: CF clear if successful
  7731.         ECX = absolute base address of selector
  7732.     CF set on error (invalid selector)
  7733. SeeAlso: AX=3503h,INT 31/AX=0006h
  7734. --------E-213505-----------------------------
  7735. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  7736.     AX = 3505h
  7737.     BX = selector
  7738.     ECX = desired limit
  7739. Return: CF clear if successful
  7740.         ECX = actual limit set
  7741.     CF set on error (no more selectors available)
  7742. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  7743.       limit is greater than 1MB
  7744. SeeAlso: AX=3503h,INT 31/AX=0008h
  7745. --------E-21350A-----------------------------
  7746. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  7747.     AX = 350Ah
  7748.     EBX = absolute physical address
  7749.     ECX = size in bytes of area to map
  7750. Return: CF clear if successful
  7751.     CF set on error (insufficient memory or service refused by DPMI host)
  7752. Notes:    should not make repeated calls for the same physical address
  7753.     there is no provision for unmapping memory
  7754. --------E-21350B-----------------------------
  7755. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  7756.     AX = 350Bh
  7757.     DS = default selector for DS
  7758. Return: CF clear
  7759.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  7760. SeeAlso: AX=350Ch
  7761. --------E-21350C-----------------------------
  7762. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  7763.     AX = 350Ch
  7764.     ECX = size of block in bytes
  7765.     DS = default DS
  7766. Return: CF clear if successful
  7767.         EAX = near pointer to new block
  7768.         EDX = new lowest legal value for stack
  7769.     CF set on error (requested size not multiple of 4K)
  7770. SeeAlso: AX=350Bh,AX=350Dh
  7771. --------E-21350D-----------------------------
  7772. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  7773.     AX = 350Dh
  7774.     EBX = current ESP value
  7775.     ECX = size of block in bytes
  7776.     DS = default DS
  7777. Return: CF clear if successful
  7778.         EBX = new value for ESP
  7779.         EDX = suggested new limit for SS
  7780.     CF set on error
  7781. Note:    this function should only be called once during initialization
  7782. SeeAlso: AX=350Bh,AX=350Ch
  7783. --------v-21357F-----------------------------
  7784. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  7785.     AX = 357Fh
  7786. Return: DX = FFFFh if installed
  7787. SeeAlso: AX=33E0h,AX=3DFFh
  7788. --------D-2136-------------------------------
  7789. INT 21 - DOS 2+ - GET FREE DISK SPACE
  7790.     AH = 36h
  7791.     DL = drive number (00h = default, 01h = A:, etc)
  7792. Return: AX = FFFFh if invalid drive
  7793.     else
  7794.         AX = sectors per cluster
  7795.         BX = number of free clusters
  7796.         CX = bytes per sector
  7797.         DX = total clusters on drive
  7798. Notes:    free space on drive in bytes is AX * BX * CX
  7799.     total space on drive in bytes is AX * CX * DX
  7800.     "lost clusters" are considered to be in use
  7801.     according to Dave Williams' MS-DOS reference, the value in DX is
  7802.       incorrect for non-default drives after ASSIGN is run
  7803. SeeAlso: AH=1Bh,AH=1Ch
  7804. --------D-213700-----------------------------
  7805. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  7806.     AX = 3700h
  7807. Return: AL = status
  7808.         00h successful
  7809.         DL = current switch character
  7810.         FFh unsupported subfunction
  7811. Desc:    Determine the character which is used to introduce command switches.
  7812.       This setting is ignored by DOS commands in version 4.0 and higher,
  7813.       but is honored by many third-party programs.
  7814. Notes:    documented in some OEM versions of some releases of DOS
  7815.     supported by OS/2 compatibility box
  7816.     always returns AL=00h/DL=2Fh for MS-DOS 5+ and DR-DOS 3.41+
  7817. SeeAlso: AX=3701h
  7818. --------D-213701-----------------------------
  7819. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  7820.     AX = 3701h
  7821.     DL = new switch character
  7822. Return: AL = status
  7823.         00h successful
  7824.         FFh unsupported subfunction
  7825. Notes:    documented in some OEM versions of some releases of DOS
  7826.     supported by OS/2 compatibility box
  7827.     ignored by MS-DOS 5+ and DR-DOS 3.41+; DR-DOS 6.0 leaves AX unchanged
  7828. SeeAlso: AX=3700h
  7829. --------D-2137-------------------------------
  7830. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  7831.     AH = 37h
  7832.     AL = subfunction
  7833.         02h get availdev flag
  7834.         Return: DL = 00h \DEV\ must precede character device names
  7835.                = nonzero \DEV\ is optional
  7836.         03h set availdev flag
  7837.         DL = 00h    \DEV\ is mandatory
  7838.            = nonzero    \DEV\ is optional
  7839. Return: AL = status
  7840.         00h successful
  7841.         FFh unsupported subfunction
  7842. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  7843.       names without generating an error even if the directory \DEV does
  7844.       not actually exist (other paths generate an error if they do not
  7845.       exist).
  7846.     although MS-DOS 3.3+ and DR-DOS 3.41+ accept these calls, they have no
  7847.       effect, and AL=02h always returns DL=FFh
  7848. --------k-2137D0BX899D-----------------------
  7849. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  7850.     AX = 37D0h
  7851.     BX = 899Dh ('DI' + 'ET')
  7852. Return: AL = FFh if not present as TSR (default return value from DOS)
  7853.     AX = 0000h if installed as a TSR
  7854.         CX = 899Dh
  7855.         DX = version ID
  7856. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  7857. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  7858. --------k-2137D1BX899D-----------------------
  7859. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  7860.     AX = 37D1h
  7861.     BX = 899Dh ('DI' + 'ET')
  7862. Return: AX = 0000h
  7863.     CX = code segment of TSR part of DIET.EXE
  7864.     DX = memory block segment of TSR DIET.EXE
  7865.         (0000h if installed as device driver)
  7866. SeeAlso: AX=37D0h,AX=37DFh
  7867. --------k-2137D2BX899D-----------------------
  7868. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  7869.     AX = 37D2h
  7870.     BX = 899Dh ('DI' + 'ET')
  7871. Return: AX = 0000h
  7872.     DL = control flag (00h active, else disabled)
  7873.     DH = skip flag (nonzero while TSR active)
  7874. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  7875. --------k-2137D3BX899D-----------------------
  7876. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  7877.     AX = 37D3h
  7878.     BX = 899Dh ('DI' + 'ET')
  7879.     DL = control flag (00h active, else disabled)
  7880.     DH = skip flag (00h)
  7881. Return: AX = 0000h
  7882. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  7883. --------k-2137D4BX899D-----------------------
  7884. INT 21 - DIET v1.43e - GET TSR OPTIONS
  7885.     AX = 37D4h
  7886.     BX = 899Dh ('DI' + 'ET')
  7887. Return: AX = 0000h
  7888.     DX = TSR options (see below)
  7889. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  7890.  
  7891. Bitfields for TSR options:
  7892.  bit 0    automated compression of DIETed file
  7893.  bit 1    automated compression of newly-created file
  7894.  bit 2    suppress DIET message
  7895.  bit 3    display original file size
  7896.  bits 4-15 reserved (0)
  7897. --------k-2137D5BX899D-----------------------
  7898. INT 21 - DIET v1.43e - SET TSR OPTIONS
  7899.     AX = 37D5h
  7900.     BX = 899Dh ('DI' + 'ET')
  7901.     DX = TSR options (see AX=37D4h)
  7902. Return: AX = 0000h
  7903. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  7904. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  7905. --------k-2137D6BX899D-----------------------
  7906. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  7907.     AX = 37D6h
  7908.     BX = 899Dh ('DI' + 'ET')
  7909. Return: AX = 0000h
  7910.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  7911. SeeAlso: AX=37D0h,AX=37D7h
  7912. --------k-2137D7BX899D-----------------------
  7913. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  7914.     AX = 37D7h
  7915.     BX = 899Dh ('DI' + 'ET')
  7916.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  7917.         0000h:0000h for current directory
  7918. Return: AX = 0000h
  7919. Note:    the specified directory name must include a drive letter and end with
  7920.       a backslash
  7921. SeeAlso: AX=37D0h,AX=37D6h
  7922. --------k-2137DCBX899D-----------------------
  7923. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  7924.     AX = 37DCh
  7925.     BX = 899Dh ('DI' + 'ET')
  7926.     DS:DX -> external procedure
  7927. Return: AX = 0000h
  7928. Note:    the resident code will call the specified external procedure at the
  7929.       beginning of decompression and when compression is exited on failure
  7930. SeeAlso: AX=37DDh
  7931.  
  7932. External procedure called with:
  7933.     STACK:    WORD    class
  7934.             FFFDh creation failed for unknown reasons
  7935.             FFFEh creation failed due to lack of space
  7936.             FFFFh file creation error
  7937.             else file handle of DIETed file to be decompressed
  7938.         DWORD    -> compressed filename
  7939.         DWORD    -> decompressed or temporary filename
  7940. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  7941. --------k-2137DDBX899D-----------------------
  7942. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  7943.     AX = 37DDh
  7944.     BX = 899Dh ('DI' + 'ET')
  7945. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  7946. Note:    unlinks the external procedure specified by AX=37DCh
  7947. SeeAlso: AX=37DCh
  7948. --------k-2137DEBX899D-----------------------
  7949. INT 21 - DIET v1.43e - READ EMS STATUS
  7950.     AX = 37DEh
  7951.     BX = 899Dh ('DI' + 'ET')
  7952. Return: AX = 0000h
  7953.     CX = EMS status
  7954.         0000h not used
  7955.         0001h used as work area
  7956.         0002h used for code and as work area
  7957.     DX = EMM handle when EMS is in use
  7958. --------k-2137DFBX899D-----------------------
  7959. INT 21 - DIET v1.43e - UNLOAD TSR
  7960.     AX = 37DFh
  7961.     BX = 899Dh ('DI' + 'ET')
  7962. Return: AX = status
  7963.         0000h successful
  7964.         00FFh failed
  7965. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  7966. SeeAlso: AX=37D0h
  7967. Index:    uninstall;DIET
  7968. --------D-2138-------------------------------
  7969. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  7970.     AH = 38h
  7971. --DOS 2.x--
  7972.     AL = 00h get current-country info
  7973.     DS:DX -> buffer for returned info (see below)
  7974. Return: CF set on error
  7975.         AX = error code (02h)
  7976.     CF clear if successful
  7977.         AX = country code (MS-DOS 2.11 only)
  7978.         buffer at DS:DX filled
  7979. --DOS 3+--
  7980.     AL = 00h for current country
  7981.     AL = 01h thru 0FEh for specific country with code <255
  7982.     AL = 0FFh for specific country with code >= 255
  7983.        BX = 16-bit country code
  7984.     DS:DX -> buffer for returned info (see below)
  7985. Return: CF set on error
  7986.         AX = error code (02h)
  7987.     CF clear if successful
  7988.         BX = country code
  7989.         DS:DX buffer filled
  7990. Note:    this function is not supported by the Borland DPMI host, but no error
  7991.       is returned; as a workaround, one should allocate a buffer in
  7992.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  7993.       INT 31/AX=0300h
  7994. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  7995.  
  7996. Format of PC-DOS 2.x country info:
  7997. Offset    Size    Description
  7998.  00h    WORD    date format  0 = USA    mm dd yy
  7999.                  1 = Europe dd mm yy
  8000.                  2 = Japan    yy mm dd
  8001.  02h    BYTE    currency symbol
  8002.  03h    BYTE    00h
  8003.  04h    BYTE    thousands separator char
  8004.  05h    BYTE    00h
  8005.  06h    BYTE    decimal separator char
  8006.  07h    BYTE    00h
  8007.  08h 24 BYTEs    reserved
  8008.  
  8009. Format of MS-DOS 2.x,DOS 3+ country info:
  8010. Offset    Size    Description
  8011.  00h    WORD    date format (see above)
  8012.  02h  5 BYTEs    ASCIZ currency symbol string
  8013.  07h  2 BYTEs    ASCIZ thousands separator
  8014.  09h  2 BYTEs    ASCIZ decimal separator
  8015.  0Bh  2 BYTEs    ASCIZ date separator
  8016.  0Dh  2 BYTEs    ASCIZ time separator
  8017.  0Fh    BYTE    currency format
  8018.         bit 2 = set if currency symbol replaces decimal point
  8019.         bit 1 = number of spaces between value and currency symbol
  8020.         bit 0 = 0 if currency symbol precedes value
  8021.             1 if currency symbol follows value
  8022.  10h    BYTE    number of digits after decimal in currency
  8023.  11h    BYTE    time format
  8024.         bit 0 = 0 if 12-hour clock
  8025.             1 if 24-hour clock
  8026.  12h    DWORD    address of case map routine
  8027.         (FAR CALL, AL = character to map to upper case [>= 80h])
  8028.  16h  2 BYTEs    ASCIZ data-list separator
  8029.  18h 10 BYTEs    reserved
  8030.  
  8031. Values for country code:
  8032.  001h    United States
  8033.  002h    Canadian-French
  8034.  003h    Latin America
  8035.  01Fh    Netherlands
  8036.  020h    Belgium
  8037.  021h    France
  8038.  022h    Spain
  8039.  024h    Hungary (not supported by DR-DOS 5.0)
  8040.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  8041.  027h    Italy
  8042.  029h    Switzerland
  8043.  02Ah    Czechoslovakia/Tjekia (not supported by DR-DOS 5.0)
  8044.  02Bh    Austria (DR-DOS 5.0)
  8045.  02Ch    United Kingdom
  8046.  02Dh    Denmark
  8047.  02Eh    Sweden
  8048.  02Fh    Norway
  8049.  030h    Poland (not supported by DR-DOS 5.0)
  8050.  031h    Germany
  8051.  037h    Brazil (not supported by DR-DOS 5.0)
  8052.  03Dh    International English [Australia in DR-DOS 5.0]
  8053.  051h    Japan (DR-DOS 5.0, MS-DOS 5.0+)
  8054.  052h    Korea (DR-DOS 5.0)
  8055.  056h    China (MS-DOS 5.0+)
  8056.  058h    Taiwan (MS-DOS 5.0+)
  8057.  05Ah    Turkey (MS-DOS 5.0+)
  8058.  15Fh    Portugal
  8059.  162h    Iceland
  8060.  166h    Finland
  8061.  311h    Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+)
  8062.  3CCh    Israel (DR-DOS 5.0,MS-DOS 5.0+)
  8063. --------D-2138--DXFFFF-----------------------
  8064. INT 21 - DOS 3+ - SET COUNTRY CODE
  8065.     AH = 38h
  8066.     DX = FFFFh
  8067.     AL = 01h thru FEh for specific country with code <255
  8068.     AL = FFh for specific country with code >= 255
  8069.        BX = 16-bit country code (see AH=38h)
  8070. Return: CF set on error
  8071.         AX = error code (see AH=59h)
  8072.     CF clear if successful
  8073. Note:    not supported by OS/2
  8074. SeeAlso: INT 2F/AX=1403h
  8075. --------D-2139-------------------------------
  8076. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  8077.     AH = 39h
  8078.     DS:DX -> ASCIZ pathname
  8079. Return: CF clear if successful
  8080.         AX destroyed
  8081.     CF set on error
  8082.         AX = error code (03h,05h) (see AH=59h)
  8083. Notes:    all directories in the given path except the last must exist
  8084.     fails if the parent directory is the root and is full
  8085.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  8086.       it is not possible to make that directory the current directory
  8087.       because the path would exceed 64 characters
  8088.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8089. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  8090. --------D-213A-------------------------------
  8091. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  8092.     AH = 3Ah
  8093.     DS:DX -> ASCIZ pathname of directory to be removed
  8094. Return: CF clear if successful
  8095.         AX destroyed
  8096.     CF set on error
  8097.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  8098. Notes:    directory must be empty (contain only '.' and '..' entries)
  8099.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8100. SeeAlso: AH=39h,AH=3Bh,AH=E2h/SF=0Bh,INT 2F/AX=1101h
  8101. --------D-213B-------------------------------
  8102. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  8103.     AH = 3Bh
  8104.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  8105. Return: CF clear if successful
  8106.         AX destroyed
  8107.     CF set on error
  8108.         AX = error code (03h) (see AH=59h)
  8109. Notes:    if new directory name includes a drive letter, the default drive is
  8110.       not changed, only the current directory on that drive
  8111.     changing the current directory also changes the directory in which
  8112.       FCB file calls operate
  8113.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8114. SeeAlso: AH=47h,INT 2F/AX=1105h
  8115. --------D-213C-------------------------------
  8116. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  8117.     AH = 3Ch
  8118.     CX = file attributes (see below)
  8119.     DS:DX -> ASCIZ filename
  8120. Return: CF clear if successful
  8121.         AX = file handle
  8122.     CF set on error
  8123.         AX = error code (03h,04h,05h) (see AH=59h)
  8124. Notes:    if a file with the given name exists, it is truncated to zero length
  8125.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8126.     DR-DOS checks the system password or explicitly supplied password at
  8127.       the end of the filename against the reserved field in the directory
  8128.       entry before allowing access
  8129. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  8130.  
  8131. Bitfields for file attributes:
  8132.  bit 0    read-only
  8133.  bit 1    hidden
  8134.  bit 2    system
  8135.  bit 3    volume label (ignored)
  8136.  bit 4    reserved, must be zero (directory)
  8137.  bit 5    archive bit
  8138.  bit 7    if set, file is shareable under Novell NetWare
  8139. --------D-213D-------------------------------
  8140. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  8141.     AH = 3Dh
  8142.     AL = access and sharing modes (see below)
  8143.     DS:DX -> ASCIZ filename
  8144.     CL = attribute mask of files to look for (server call only)
  8145. Return: CF clear if successful
  8146.         AX = file handle
  8147.     CF set on error
  8148.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see AH=59h)
  8149. Notes:    file pointer is set to start of file
  8150.     file handles which are inherited from a parent also inherit sharing
  8151.       and access restrictions
  8152.     files may be opened even if given the hidden or system attributes
  8153.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8154.     DR-DOS checks the system password or explicitly supplied password at
  8155.       the end of the filename against the reserved field in the directory
  8156.       entry before allowing access
  8157.     sharing modes are only effective on local drives if SHARE is loaded
  8158. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  8159.  
  8160. Bitfields for access and sharing modes:
  8161.  bits 2-0 access mode
  8162.     000 read only
  8163.     001 write only
  8164.     010 read/write
  8165.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  8166.         case-sensitive filenames
  8167.  bit 3    reserved (0)
  8168.  bits 6-4 sharing mode (DOS 3+)
  8169.     000 compatibility mode
  8170.     001 "DENYALL" prohibit both read and write access by others
  8171.     010 "DENYWRITE" prohibit write access by others
  8172.     011 "DENYREAD" prohibit read access by others
  8173.     100 "DENYNONE" allow full access by others
  8174.     111 network FCB (only available during server call)
  8175.  bit 7    inheritance
  8176.     if set, file is private to current process and will not be inherited
  8177.       by child processes
  8178.  
  8179. File sharing behavior:
  8180.       |    Second and subsequent Opens
  8181.  First      |Compat  Deny      Deny     Deny    Deny
  8182.  Open      |       All      Write     Read    None
  8183.       |R W RW R W RW R W RW R W RW R W RW
  8184.  - - - - -| - - - - - - - - - - - - - - - - -
  8185.  Compat R |Y Y Y  N N N     1 N N    N N N  1 N N
  8186.     W |Y Y Y  N N N     N N N    N N N  N N N
  8187.     RW|Y Y Y  N N N     N N N    N N N  N N N
  8188.  - - - - -|
  8189.  Deny    R |C C C  N N N     N N N    N N N  N N N
  8190.  All    W |C C C  N N N     N N N    N N N  N N N
  8191.     RW|C C C  N N N     N N N    N N N  N N N
  8192.  - - - - -|
  8193.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N
  8194.  Write    W |C C C  N N N     N N N    Y N N  Y N N
  8195.     RW|C C C  N N N     N N N    N N N  Y N N
  8196.  - - - - -|
  8197.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  8198.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  8199.     RW|C C C  N N N     N N N    N N N  N Y N
  8200.  - - - - -|
  8201.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  8202.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  8203.     RW|C C C  N N N     N N N    N N N  Y Y Y
  8204. Legend: Y = open succeeds, N = open fails with error code 05h
  8205.     C = open fails, INT 24 generated
  8206.     1 = open succeeds if file read-only, else fails with error code
  8207.     2 = open succeeds if file read-only, else fails with INT 24
  8208. --------v-213DFF-----------------------------
  8209. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  8210.     AX = 3DFFh
  8211. Return: AX = 4A44h if resident
  8212. SeeAlso: AX=357Fh,AX=4203h
  8213. --------D-213E-------------------------------
  8214. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  8215.     AH = 3Eh
  8216.     BX = file handle
  8217. Return: CF clear if successful
  8218.         AX destroyed
  8219.     CF set on error
  8220.         AX = error code (06h) (see AH=59h)
  8221. Note:    if the file was written to, any pending disk writes are performed, the
  8222.       time and date stamps are set to the current time, and the directory
  8223.       entry is updated
  8224. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  8225. --------D-213F-------------------------------
  8226. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  8227.     AH = 3Fh
  8228.     BX = file handle
  8229.     CX = number of bytes to read
  8230.     DS:DX -> buffer for data
  8231. Return: CF clear if successful
  8232.         AX = number of bytes actually read (0 if at EOF before call)
  8233.     CF set on error
  8234.         AX = error code (05h,06h) (see AH=59h)
  8235. Notes:    data is read beginning at current file position, and the file position
  8236.       is updated after a successful read
  8237.     the returned AX may be smaller than the request in CX if a partial
  8238.       read occurred
  8239.     if reading from CON, read stops at first CR
  8240.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8241. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  8242. --------G-213F-------------------------------
  8243. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  8244.     AH = 3Fh
  8245.     BX = handle for character device "TDHDEBUG"
  8246.     CX = number of bytes to read
  8247.     DS:DX -> buffer for status block (see below)
  8248. Return: CF clear if successful
  8249.         AX = number of bytes actually read
  8250.     CF set on error
  8251.         AX = error code (05h,06h) (see AH=59h)
  8252. SeeAlso: AH=40h"Turbo Debug"
  8253.  
  8254. Values for status of command:
  8255.  00h    successful
  8256.  01h    invalid handle
  8257.  02h    no more breakpoints available
  8258.  03h    hardware does not support specified breakpoint type
  8259.  04h    previous command prevents execution
  8260.  05h    debugger hardware not found
  8261.  06h    hardware failure
  8262.  07h    invalid command
  8263.  08h    driver not initialized yet
  8264.  FEh    recursive entry (hardware breakpoint inside hw bp handler)
  8265.  
  8266. Format of status block:
  8267. Offset    Size    Description
  8268.  00h    BYTE    status of command (see above)
  8269. ---status for command 01h---
  8270.  01h    WORD    device driver interface version number (currently 1)
  8271.  03h    WORD    device driver software version
  8272.  05h    BYTE    maximum simultaneous hardware breakpoints
  8273.  06h    BYTE    configuration bits (see below)
  8274.  07h    BYTE    supported breakpoint types (see below)
  8275.  08h    WORD    supported addressing match modes (see below)
  8276.  0Ah    WORD    supported data matches (see below)
  8277.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  8278.  0Dh    WORD    size of onboard memory (in KB)
  8279.  0Fh    WORD    maximum number of trace-back events
  8280.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  8281.         supported)
  8282. ---status for command 04h---
  8283.  01h    BYTE    handle to use when referring to the just-set breakpoint
  8284.  
  8285. Bitfields for configuration bits:
  8286.  bit 0    CPU and DMA accesses are distinct
  8287.  bit 1    can detect DMA transfers
  8288.  bit 2    supports data mask
  8289.  bit 3    hardware pass counter on breakpoints
  8290.  bit 4    can match on data as well as addresses
  8291.  
  8292. Bitfields for supported breakpoint types:
  8293.  bit 0    memory read
  8294.  bit 1    memory write
  8295.  bit 2    memory read/write
  8296.  bit 3    I/O read
  8297.  bit 4    I/O write
  8298.  bit 5    I/O read/write
  8299.  bit 6    instruction fetch
  8300.  
  8301. Bitfields for supported addressing match modes:
  8302.  bit 0    any address
  8303.  bit 1    equal to test value
  8304.  bit 2    not equal
  8305.  bit 3    above test value
  8306.  bit 4    below test value
  8307.  bit 5    below or equal
  8308.  bit 6    above or equal
  8309.  bit 7    within range
  8310.  bit 8    outside range
  8311.  
  8312. Bitfields for supported data matches:
  8313.  bit 0    any data
  8314.  bit 1    equal to test value
  8315.  bit 2    not equal
  8316.  bit 3    above test value
  8317.  bit 4    below test value
  8318.  bit 5    below or equal
  8319.  bit 6    above or equal
  8320.  bit 7    within range
  8321.  bit 8    outside range
  8322. --------N-213F-------------------------------
  8323. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  8324.     AH = 3Fh
  8325.     BX = handle for character device "$IPCUST"
  8326.     CX = number of bytes to read
  8327.     DS:DX -> buffer for configuration data (see below)
  8328. Return: CF clear if successful
  8329.         AX = number of bytes actually read
  8330.     CF set on error
  8331.         AX = error code (05h,06h) (see AH=59h)
  8332. Notes:    if less than the entire data is read or written, the next read/write
  8333.       continues where the previous one ended; IOCTL calls AX=4402h and
  8334.       AX=4403h both reset the location at which the next operation starts
  8335.       to zero
  8336.     the data pointer is also reset to zero if the previous read or write
  8337.       reached or exceeded the end of the data, when the current function
  8338.       is read and the previous was write, or vice versa
  8339.     v2.1+ uses a new configuration method, but allows the installation
  8340.       of IPCUST.SYS for backward compatibility with other software which
  8341.       must read the PC/TCP configuration
  8342. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT"
  8343.  
  8344. Format of configuration data:
  8345. Offset    Size    Description
  8346.  00h 12 BYTEs    IPCUST.SYS device driver header
  8347.  12h    BYTE    ???
  8348.  13h    BYTE    ???
  8349.  14h    WORD    ???
  8350.  16h    BYTE    bit flags
  8351.         bit 0: send BS rather than DEL for BackSpace key
  8352.         bit 1: wrap long lines
  8353.  17h    BYTE    ???
  8354.  18h 64 BYTEs    ASCIZ hostname
  8355.  58h 64 BYTEs    ASCIZ domain name
  8356.         (fully qualified domain name is hostname.domain-name)
  8357.  98h 16 BYTEs    ASCIZ username
  8358.  A8h 64 BYTEs    ASCIZ full name
  8359.  E8h 64 BYTEs    ASCIZ office address
  8360. 128h 32 BYTEs    ASCIZ phone number
  8361. 148h    WORD    offset from GMT in minutes
  8362. 14Ah  4 BYTEs    ASCIZ timezone name
  8363. 14Eh    WORD    number of time servers
  8364. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  8365.     ???
  8366. 164h    WORD    number of old-style name servers
  8367. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  8368. 172h    WORD    number of domain name servers
  8369. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  8370. 180h    DWORD    (big-endian) IP address of default gateway
  8371. 184h    DWORD    (big-endian) IP address of log server
  8372. 188h    DWORD    (big-endian) IP address of cookie server
  8373. 18Ch    DWORD    (big-endian) IP address of lpr server
  8374. 190h    DWORD    (big-endian) IP address of imagen print server
  8375. 194h 54 BYTEs    ???
  8376. 1E8h    WORD    TCP default window size in bytes
  8377. 1EAh    WORD    TCP low window size
  8378. 1ECh 64 BYTEs    ASCIZ host tabel filename
  8379. 22Ch  2 BYTEs    ???
  8380. 22Eh 80 BYTEs    ASCIZ mail relay host name
  8381. 27Eh    BYTE    ???
  8382. 27Fh    BYTE    ??? bit flags
  8383. 280h 44 BYTEs    ???
  8384. 2ACh    WORD    ???
  8385. 2AEh 202 BYTEs    ???
  8386. --------N-213F-------------------------------
  8387. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  8388.     AH = 3Fh
  8389.     BX = file handle for device "NET$HLP$"
  8390.     CX = 0008h
  8391.     DS:DX -> buffer for entry point record (see AX=4402h"WORKGRP.SYS")
  8392. Return: CF clear if successful
  8393.         AX = number of bytes actually read (0 if at EOF before call)
  8394.     CF set on error
  8395.         AX = error code (05h,06h) (see AH=59h)
  8396. Program: WORKGRP.SYS is distributed with MS-DOS 6.0 to permit communication
  8397.       with PCs running Windows for Workgroups or LAN Manager
  8398. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  8399. --------N-213F-------------------------------
  8400. INT 21 - BW-TCP - GET DRIVER INFO
  8401.     AH = 3Fh
  8402.     BX = file handle for device "ETHDEV27"
  8403.     CX = 002Bh
  8404.     DS:DX -> buffer for driver info (see below)
  8405. Return: CF clear if successful
  8406.         AX = number of bytes actually read (0 if at EOF before call)
  8407.     CF set on error
  8408.         AX = error code (05h,06h) (see AH=59h)
  8409. Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software
  8410. Notes:    the B&W socket library performs an INT 21/AX=4401h with DX=0060h before
  8411.       making this call to retrieve the driver information; one should also
  8412.       call the private API interrupt with AH=15h
  8413.     the installation check for the TCP/IP stack is to test for the
  8414.       existence of the character device UDP-IP10
  8415. SeeAlso: INT 14/AH=56h,INT 62"BW-TCP",INT 63/AH=03h,INT 64/AH=00h
  8416. Index:    installation check;BW-TCP hardware driver
  8417. Index:    installation check;BW-TCP TCPIP.SYS
  8418.  
  8419. Format of driver info:
  8420. Offset    Size    Description
  8421.  00h    WORD    I/O base address
  8422.  02h    BYTE    shared memory page (01h = segment 0100h, etc.)
  8423.  03h    BYTE    interrupt vector for private API
  8424.  04h    BYTE    IRQ used by board
  8425.  05h    WORD    size of data buffer
  8426.  07h    WORD    maximum transfer window
  8427.  09h    WORD    time zone
  8428.  0Bh    BYTE    address type (01h user, 04h RARP, 05h BOOTP)
  8429.  0Ch    DWORD    internet address
  8430.  10h    WORD    "value" ???
  8431.  12h    BYTE    subnet mask
  8432.  13h    WORD    "ether_pointer" ???
  8433.  15h    WORD    offset in device driver of log server records
  8434.  17h    WORD    offset in device driver of name server records
  8435.  19h    WORD    offset in device driver of print server records
  8436.  1Bh    WORD    offset in device driver of time server records
  8437.  1Dh    WORD    offset in device driver of gateway records
  8438.  1Fh    WORD    segment address of device driver
  8439.  21h    BYTE    transfer size
  8440.  22h  9 BYTEs    network adapter board name
  8441. ---11/21/91+ ---
  8442.  23h    BYTE    ETHDEV version (major in high nybble, minor in low nybble)
  8443.  24h    BYTE    ETHDEV revision
  8444.  25h    BYTE    TCPIP version (major in high nybble, minor in low nybble)
  8445.  26h    BYTE    TCPIP revision
  8446.  27h    BYTE    BWRPC version (major in high nybble, minor in low nybble)
  8447.  28h    BYTE    BWRPC revision
  8448.  29h    BYTE    BWNFS version (major in high nybble, minor in low nybble)
  8449.  2Ah    BYTE    BWNFS revision
  8450.  2Bh    BYTE    Telnet version (major in high nybble, minor in low nybble)
  8451.  2Ch    BYTE    Telnet revision
  8452.  2Dh    BYTE    NETBIOS version (major in high nybble, minor in low nybble)
  8453.  2Eh    BYTE    NETBIOS revision
  8454. Note:    for each driver, if version=0, the driver is not installed or does
  8455.       not support the version check
  8456.  
  8457. Format of server records:
  8458. Offset    Size    Description
  8459.  00h    BYTE    number of server records following
  8460.  01h  N DWORDs    internet addresses of servers
  8461. --------y-213F-------------------------------
  8462. INT 21 - Trusted Access - NB.SYS - GET STATE
  8463.     AH = 3Fh
  8464.     BX = file handle for device "$$NB$$NB"
  8465.     CX = 0002h (size of state)
  8466.     DS:DX -> buffer for state record
  8467. Return: CF clear if successful
  8468.         AX = number of bytes actually read (0 if at EOF before call)
  8469.     CF set on error
  8470.         AX = error code (05h,06h) (see AH=59h)
  8471. Program: Trusted Access is a security and access-control package by Lassen
  8472.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  8473.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  8474. SeeAlso: AH=40h"NB.SYS",AX=4101h
  8475.  
  8476. Format of state record:
  8477. Offset    Size    Description
  8478.  00h    BYTE    00h off, 01h on
  8479.  01h    BYTE    keys being disabled
  8480.         bit 0: Ctrl-Break
  8481.         bit 1: SysRq
  8482.         bit 2: Ctrl and Alt
  8483.         bit 3: Ctrl-Alt-Del
  8484.         bit 7: all keys (overrides other bits)
  8485. --------D-2140-------------------------------
  8486. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  8487.     AH = 40h
  8488.     BX = file handle
  8489.     CX = number of bytes to write
  8490.     DS:DX -> data to write
  8491. Return: CF clear if successful
  8492.         AX = number of bytes actually written
  8493.     CF set on error
  8494.         AX = error code (05h,06h) (see AH=59h)
  8495. Notes:    if CX is zero, no data is written, and the file is truncated or
  8496.       extended to the current position
  8497.     data is written beginning at the current file position, and the file
  8498.       position is updated after a successful write
  8499.     the usual cause for AX < CX on return is a full disk
  8500. BUG:    a write of zero bytes will appear to succeed when it actually failed
  8501.       if the write is extending the file and there is not enough disk
  8502.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  8503.       whether the file was in fact extended by seeking to 0 bytes from
  8504.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  8505.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8506. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  8507. --------G-2140-------------------------------
  8508. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  8509.     AH = 40h
  8510.     BX = handle for character device "TDHDEBUG"
  8511.     CX = number of bytes to write
  8512.     DS:DX -> hardware breakpoint command (see below)
  8513. Return: CF clear if successful
  8514.         AX = number of bytes actually written
  8515.     CF set on error
  8516.         AX = error code (05h,06h) (see AH=59h)
  8517. Note:    results are retrieved by reading from the device
  8518. SeeAlso: AH=3Fh"Turbo Debug"
  8519.  
  8520. Format of hardware breakpoint commands:
  8521. Offset    Size    Description
  8522.  00h    BYTE    command code
  8523.         00h install interrupt vectors
  8524.         01h get hardware capabilities
  8525.         02h enable hardware breakpoints
  8526.         03h disable hardware breakpoints
  8527.         04h set hardware breakpoint
  8528.         05h clear hardware breakpoint
  8529.         06h set I/O base address and reset hardware
  8530.         07h restore interrupt vectors
  8531. ---command code 00h---
  8532.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  8533.         hardware breakpoint; call with CPU state the same as on
  8534.         the breakpoint except for pushing AX and placing an entry
  8535.         code (FFh if breakout button or breakpoint handle) in AH
  8536. ---command code 04h---
  8537.  01h    BYTE    breakpoint type
  8538.         00h memory read
  8539.         01h memory write
  8540.         02h memory read/write
  8541.         03h I/O read
  8542.         04h I/O write
  8543.         05h I/O read/write
  8544.         06h instruction fetch
  8545.  02h    BYTE    address matching mode
  8546.         00h any address
  8547.         01h equal to test value
  8548.         02h different from test value
  8549.         03h above test value
  8550.         04h below test value
  8551.         05h below or equal to test value
  8552.         06h above or equal to test value
  8553.         07h within inclusive range
  8554.         08h outside specified range
  8555.  03h    DWORD    32-bit linear low address
  8556.  07h    DWORD    32-bit linear high address
  8557.  0Bh    WORD    pass count
  8558.  0Dh    BYTE    data size (01h, 02h, or 04h)
  8559.  0Eh    BYTE    source of matched bus cycle
  8560.         01h CPU
  8561.         02h DMA
  8562.         03h either
  8563.  0Fh    BYTE    data-matching mode
  8564.         00h match any
  8565.         01h equal to test value
  8566.         02h different from test value
  8567.         03h above test value
  8568.         04h below test value
  8569.         05h below or equal to test value
  8570.         06h above or equal to test value
  8571.         07h within specified range
  8572.         08h outside specified range
  8573.  10h    DWORD    low data value
  8574.  14h    DWORD    high data value
  8575.  18h    DWORD    data mask specifying which bits of the data are tested
  8576. ---command code 05h---
  8577.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  8578.         04h)
  8579. ---command code 06h---
  8580.  01h    WORD    base address of hardware debugger board
  8581. --------N-2140-------------------------------
  8582. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  8583.     AH = 40h
  8584.     BX = handle for character device "$IPCUST"
  8585.     CX = number of bytes to write
  8586.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  8587. Return: CF clear if successful
  8588.         AX = number of bytes actually written
  8589.     CF set on error
  8590.         AX = error code (05h,06h) (see AH=59h)
  8591. Notes:    if less than the entire data is read or written, the next read/write
  8592.       continues where the previous one ended; IOCTL calls AX=4402h and
  8593.       AX=4403h both reset the location at which the next operation starts
  8594.       to zero
  8595.     the data pointer is also reset to zero if the previous read or write
  8596.       reached or exceeded the end of the data, when the current function
  8597.       is read and the previous was write, or vice versa
  8598.     v2.1+ uses a new configuration method, but allows the installation
  8599.       of IPCUST.SYS for backward compatibility with other software which
  8600.       must read the PC/TCP configuration
  8601. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  8602. --------y-2140-------------------------------
  8603. INT 21 U - Trusted Access - NB.SYS - SET STATE
  8604.     AH = 40h
  8605.     BX = handle for character device "$$NB$$NB"
  8606.     DS:DX -> state record (see AH=3Fh"NB.SYS")
  8607.     CX ignored
  8608. Return: CF clear if successful
  8609.         AX = number of bytes actually written
  8610.     CF set on error
  8611.         AX = error code (05h,06h) (see AH=59h)
  8612. Program: Trusted Access is a security and access-control package by Lassen
  8613.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  8614.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  8615. SeeAlso: AH=3Fh"NB.SYS"
  8616. --------j-214000BX0002-----------------------
  8617. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  8618.     AX = 4000h
  8619.     BX = 0002h
  8620.     CX = 0000h
  8621.     DS:DX = 0000h:0000h
  8622. Return: CF clear if installed
  8623.         AX = CS of resident code
  8624. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  8625.       noises when programs output a bell
  8626. SeeAlso: AX=4001h
  8627. --------j-214001BX0002-----------------------
  8628. INT 21 - FARTBELL.EXE - FORCE NOISE
  8629.     AX = 4001h
  8630.     BX = 0002h
  8631.     CX = 0000h
  8632.     DS:DX = 0000h:0000h
  8633. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  8634.       noises when programs output a bell
  8635. SeeAlso: AX=4000h
  8636. --------D-2141-------------------------------
  8637. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  8638.     AH = 41h
  8639.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  8640.     CL = attribute mask for deletion (server call only, see below)
  8641. Return: CF clear if successful
  8642.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  8643.     CF set on error
  8644.         AX = error code (02h,03h,05h) (see AH=59h)
  8645. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  8646.       the filespec must be canonical (as returned by AH=60h), and only
  8647.       files matching the attribute mask in CL are deleted
  8648.     DR-DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h
  8649.     DOS does not erase the file's data; it merely becomes inaccessible
  8650.       because the FAT chain for the file is cleared
  8651.     deleting a file which is currently open may lead to filesystem
  8652.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  8653.       referencing the deleted file, thus allowing writes to a nonexistant
  8654.       file.
  8655.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  8656.       is currently open
  8657.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  8658. BUG:    DR-DOS 3.41 crashes if called via AX=5D00h
  8659. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AX=F244h,INT 2F/AX=1113h
  8660. --------y-214101DXFFFE-----------------------
  8661. INT 21 - SoftLogic Data Guardian - ???
  8662.     AX = 4101h
  8663.     DX = FFFEh
  8664. Return: AX = 0000h if installed
  8665. Note:    resident code sets several internal variables on this call
  8666. SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h
  8667. --------!------------------------------------
  8668.