home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 February / PCWK0296.iso / sharewar / dos / program / interupt / interrup.i < prev    next >
Encoding:
Text File  |  1995-08-13  |  344.0 KB  |  9,300 lines

  1. Interrupt List, part 9 of 13
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994,1995 Ralf Brown
  3. --------G-2FD000-----------------------------
  4. INT 2F C - MDEBUG display driver - GET DRIVER STATUS
  5.     AX = D000h
  6. Return: CF set on error
  7.         all other registers must be unchanged)
  8.     CF clear if successful
  9.         AL = FFh
  10.         AH = driver semaphor
  11.         00h driver is not active
  12.         01h driver is active
  13.         BX = CS of the driver
  14.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  15.         DL = buffer semaphor
  16.         00h driver is not pending
  17.         01h driver is pending between functions 02h and 03h
  18.         DH = show semaphor
  19.         00h driver is not pending
  20.         01h driver is pending between functions 04h and 05h
  21. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  22.       Schemmer, including a memory monitor, an interpreter and a
  23.       disassembler
  24. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  25. Notes:    MDEBUG can use any two consecutive multiplex numbers between C0h and
  26.       FFh; the default is D0h for the display driver and D1h for the
  27.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  28.       numbers used)
  29.     this function MUST be reentrant, as MDEBUG calls it after every popup
  30.       before any other actions.  The handler should not change any
  31.       registers if the display is in an unsupported mode or in a mode
  32.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  33.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  34.       not call any of the other functions for this popup session.
  35.     MDEBUG will not call the other functions if the returned version is
  36.       less than the actual version of MDEBUG.
  37.     if the driver is reentrant, DL and DH should be 00h
  38. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  39. --------M-2FD000-----------------------------
  40. INT 2F - ZWmous - INSTALLATION CHECK
  41.     AX = D000h
  42. Return: AX = 5A57h ("ZW") if installed
  43.         BX = segment of resident code
  44. Program: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  45.       with many non-mouse applications by entering the letter under the
  46.       mouse cursor on button presses
  47. SeeAlso: INT 33/AX=0003h
  48. --------N-2FD000-----------------------------
  49. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  50.     AX = D000h
  51. Return: AL = FFh if CD/Networker TSR is loaded
  52.     BX = 4D44h ("MD") signature
  53.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  54.     DX = bitmap identifying all loaded CD/Networker TSRs.
  55. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  56.       resident redirector TSR and a transient program that controls the
  57.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  58.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  59. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  60. --------G-2FD001-----------------------------
  61. INT 2F C - MDEBUG display driver - INITIALIZE DRIVER
  62.     AX = D001h
  63. Return: CF set on error
  64.     AL = driver semaphor
  65.     AH = buffer semaphor
  66. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  67. Notes:    MDEBUG calls this function after every successful call of the function
  68.       00h. The function should reset all internal data and the status of
  69.       the driver. If this function returns an error, MDEBUG will not call
  70.       the other functions in this popup session.
  71.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  72.       FFh; the default is D0h for the display driver and D1h for the
  73.       command driver
  74. SeeAlso: AX=D000h
  75. --------G-2FD002-----------------------------
  76. INT 2F C - MDEBUG display driver - SAVE GRAPHIC DATA
  77.     AX = D002h
  78. Return: CF set on error
  79.     CF clear if successful
  80.         display memory saved and display switched to one of the text modes
  81.           02h, 03h or 07h.
  82. Note:    MDEBUG calls this function only once every popup session before
  83.       displaying its windows.
  84. SeeAlso: AX=D000h,AX=D003h
  85. --------N-2FD002BX4D44-----------------------
  86. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  87.     AX = D002h
  88.     BX = 4D44h
  89.     DX = bitmap identifying one loaded CD/Networker TSR
  90. Return: ES:DI -> data area owned by TSR
  91. Note:    the format of the data area changes with each minor revision, so it
  92.       cannot be counted on
  93. SeeAlso: AX=D000h"Lotus"
  94. --------G-2FD003-----------------------------
  95. INT 2F C - MDEBUG display driver - RESTORE GRAPHIC DATA
  96.     AX = D003h
  97. Return: CF set on error
  98.     CF clear if successful
  99.         display restored to the mode it was in before calling AX=D002h and
  100.           the display memory is restored
  101. Note:    MDEBUG calls this function only once every popup session just before
  102.      it exits to normal DOS.
  103. SeeAlso: AX=D000h,AX=D002h
  104. --------G-2FD004-----------------------------
  105. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  106.     AX = D004h
  107. Return: CF set on error
  108.     CF clear if successful
  109.         display switched to mode it was in before calling AX=D002h and the
  110.           display memory is restored
  111. Note:    This function needn't save the display memory before changing it.
  112. SeeAlso: AX=D000h,AX=D005h
  113. --------G-2FD005-----------------------------
  114. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  115.     AX = D005h
  116. Return: CF set on error
  117.     CF clear if successful
  118.         display restored to mode it was in before calling AX=D004h
  119. Note:    This function needn't save or change the display memory
  120. SeeAlso: AX=D000h,AX=D004h
  121. --------G-2FD0-------------------------------
  122. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  123.     AH = D0h
  124.     AL = 06h-7Fh
  125. Note:    these functions are reserved for future use
  126. --------G-2FD0-------------------------------
  127. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  128.     AH = D0h
  129.     AL = 80h-FFh
  130. Note:    these functions numbers are reserved for user defined features (e.g.
  131.       communication between the transient und resident parts of the driver)
  132. --------G-2FD100-----------------------------
  133. INT 2F C - MDEBUG command driver - GET STATUS
  134.     AX = D100h
  135.     BX = version of MDEBUG (BH = major, BL = minor)
  136.     CX = command driver counter
  137. ---v1.60+---
  138.     DS:SI -> MDEBUG identification table (see #1745)
  139.     ES = segment of display memory used by MDEBUG
  140.     DI = size of video mode used by MDEBUG
  141.         (high byte = lines, low byte = columns)
  142. Return: DL = FFh
  143.     BX = version number of the driver if it is less than the version in BX,
  144.           else unchanged
  145.     CX incremented
  146. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  147.       Schemmer, including a memory monitor, an interpreter, and a
  148.       disassembler
  149. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  150. Notes:    called by MDEBUG at start of popup session; if the version number
  151.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  152.       not call any of the other functions during this popup session
  153.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  154.       FFh; the default is D0h for the display driver and D1h for the
  155.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  156.       actually used)
  157.     this function must end with a far call to the old INT 2F handler after
  158.       changing the registers
  159.     this function MUST be reentrant
  160.     command drivers must also declare the following data at the given
  161.       offsets in the code segment
  162.         100h  3 BYTEs    JMP-command in .COM-files
  163.         103h    BYTE    NOP-command (90h)
  164.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  165.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  166.                 each driver must have a unique name
  167.     MDEBUG will pass every key and command to the command driver(s) before
  168.       checking for a valid internal command
  169. SeeAlso: AX=D000h,AX=D101h
  170.  
  171. Format of MDEBUG identification table:
  172. Offset    Size    Description    (Table 1745)
  173.  -2    WORD    entry offset
  174.  00h    WORD    CS of MDEBUG
  175.  02h    DWORD    old INT 08h vector
  176.  06h    DWORD    old INT 09h vector
  177.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  178.  0Eh    BYTE    length of version string
  179.  0Fh  N BYTEs    version string
  180. --------G-2FD101-----------------------------
  181. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  182.     AX = D101h
  183.     CX = command driver counter
  184. Return: DL = status
  185.         FFh if successful
  186.         CX incremented
  187.         else error: all registers unchanged
  188. Note:    this function must end with a  far call to the old INT 2F handler after
  189.       changing the registers
  190.     this function must be reentrant
  191. --------G-2FD102-----------------------------
  192. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  193.     AX = D102h
  194.     BL = first character of the interpreter command
  195.     BH = last character of the interpreter command (or blank)
  196.     DS:SI -> parameter for the interpreter command as ASCIZ string
  197.     DS:DI -> MDEBUG data structure (see #1747)
  198. Return: AL = FFh
  199.     CF set on error
  200.         AH = error number (see #1746)
  201.         DS:SI -> ASCIZ error message (max 30 characters) if AH=0Ch
  202.     CF clear if successful
  203.         AH = return code
  204.         00h continue processing the command line
  205.         01h leave MDEBUG popup session
  206.         02h leave MDEBUG popup session and automatically popup again
  207.               if the InDOS flag is zero
  208.         03h not used (same as 00h)
  209.         04h not used (same as 00h)
  210.         05h put new command line into the input buffer,
  211.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  212.         06h process new command line
  213.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  214.            else unknown status, but continue processing commmand line
  215. Note:    this function must end with a far call to the old INT 2F handler (with
  216.       registers unchanged) if the driver does not support the interpreter
  217.       command in BX.  Otherwise, the driver must not chain to the old
  218.       INT 2F.
  219.  
  220. (Table 1746)
  221. Values for MDEBUG error number:
  222.  01h    syntax error
  223.  02h    first shell of the command.com is activ
  224.  03h    Esc pressed
  225.  04h    break pressed
  226.  05h    DOS is busy
  227.  06h    command ended
  228.  07h    division by zero
  229.  08h    invalid display driver
  230.  09h    invalid command driver
  231.  0Ah    error 8 and 9
  232.  0Bh    unknown error
  233.  0Ch    new error
  234.  else    unknown error
  235.  
  236. Format of MDEBUG data structure:
  237. Offset    Size    Description    (Table 1747)
  238.  00h    WORD    register SE
  239.  02h    WORD    register OF
  240.  04h    WORD    register FS
  241.  06h    WORD    register FO
  242.  08h    WORD    register AX
  243.  0Ah    WORD    register BX
  244.  0Ch    WORD    register CX
  245.  0Eh    WORD    register DX
  246.  10h    WORD    register SI
  247.  12h    WORD    register DI
  248.  14h    WORD    register DS
  249.  16h    WORD    register ES
  250.  18h    WORD    register BP
  251.  1Ah    WORD    register SS
  252.  1Ch    WORD    register SP
  253.  1Eh    WORD    register FL (flags)
  254.  20h    WORD    register R0
  255.  22h    WORD    register R1
  256.  24h    WORD    register R2
  257.  26h    WORD    register R3
  258.  28h    WORD    register R4
  259.  2Ah    WORD    register R5
  260.  2Ch    WORD    register R6
  261.  2Eh    WORD    register R7
  262.  30h    WORD    register R8
  263.  32h    WORD    register CS, return-address
  264.  34h    WORD    register IP, return-address
  265.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  266.         saved monitor address (v1.70)
  267.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  268.         (original register values at popup entry of MDEBUG)
  269.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  270.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  271.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  272.  6Ah    DWORD    address of the DOS-invars-table
  273.  6Eh    DWORD    address of the InDOS flag
  274.  72h    WORD    offset of the register which is used for the segment of the
  275.           first monitor window
  276.  74h    WORD    offset of the register which is used for the offset of the
  277.           first monitor window
  278.  76h    WORD    name of the register which is used for the segment of the
  279.           first monitor segment
  280.  78h    WORD    name of the register which is used for the offset of the first
  281.           monitor window
  282.  7Ah    WORD    pseudo register 1
  283.  7Ch    WORD    pseudo register 2
  284. --------G-2FD103-----------------------------
  285. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  286.     AX = D103h
  287.     BX = key code (like result of an interrupt 16h call)
  288.     CX = cursor position
  289.         0000h in the ASCII column of the monitor
  290.         0001h in one of the hex fields of the monitor
  291.     DS:SI -> MDEBUG data structure (see #1747)
  292.     ES:DI -> actual byte in the monitor
  293. Return: AL = FFh
  294.     AH = return code
  295.         00h key processed, read next key
  296.         01h leave MDEBUG popup session
  297.         02h leave MDEBUG popup session and automatically popup again if DOS
  298.           is not busy
  299.         03h signal an error (beep)
  300.         04h driver has redefined the key, proceed with the new key
  301.         BX = new key code
  302.         MDEBUG will not pass the new key to the command driver(s)
  303.        else treat like code 00h
  304. Note:    this function must end with a far call to the old INT 2F handler (with
  305.       registers unchanged) if the driver does not support the key in BX.
  306.       Otherwise, the driver must not chain to the old INT 2F.
  307. SeeAlso: AX=D104h
  308. --------G-2FD104-----------------------------
  309. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  310.     AX = D104h
  311.     DS:SI -> MDEBUG data structure (see #1747)
  312. Return: AL = FFh
  313.     AH = return code
  314.         00h key processed, read next key
  315.         01h leave MDEBUG popup session
  316.         02h leave MDEBUG popup session and automactically popup again if
  317.           DOS is not busy
  318.         03h signal an error (beep)
  319.         04h driver has redefined the key, proceed with the new key
  320.         BX = new key code
  321.         MDEBUG won't pass the new key to the command driver(s)
  322.         05h put new command line into the input buffer
  323.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  324.         06h process new command line
  325.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  326.        else treat like code 00h
  327. Note:    this function must end with a far call to the old INT 2F handler if the
  328.       driver does not support the key in BX.  Otherwise, the driver must
  329.       not chain to the old INT 2F.
  330. SeeAlso: AX=D103h
  331. --------G-2FD1-------------------------------
  332. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  333.     AH = D1h
  334.     AL = 05h-0Ah
  335. Note:    these functions are reserved for future use
  336. --------G-2FD110-----------------------------
  337. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  338.     AX = D110h
  339. Return: DL = FFh
  340.     ES:BX -> next program in the chain for INT 2F
  341.     CX = code segment of this driver
  342.     DI = offset of driver identification table (see #1748) (v1.60+)
  343. Notes:    only called by the transient part of the driver
  344.     must be reentrant and the driver must not chain this function to the
  345.       old INT 2F
  346.  
  347. Format of the MDEBUG driver identification table:
  348. Offset    Size    Description    (Table 1748)
  349.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  350.                          ^- Note: ASCII 129,German U-umlaut
  351.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  352.          each driver must have a unique name
  353. --------G-2FD111-----------------------------
  354. INT 2F - MDEBUG command driver - START DRIVER
  355.     AX = D111h
  356. Return: DL = FFh
  357. Notes:    only called by the transient part of the driver to inform the resident
  358.       part that it is installed
  359.     the function must be reentrant and the driver mustn't chain this
  360.       function to the old INT 2F
  361. SeeAlso: AX=D101h,AX=D112h
  362. --------G-2FD112-----------------------------
  363. INT 2F - MDEBUG command driver - END DRIVER
  364.     AX = D112h
  365. Return: DL = FFh
  366. Notes:    only called by the transient part of the driver to inform the resident
  367.       part that it will be released after this function
  368.     the function must be reentrant and the driver mustn't chain this
  369.       function to the old INT 2F
  370. SeeAlso: AX=D101h,AX=D111h
  371. --------G-2FD1-------------------------------
  372. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  373.     AH = D1h
  374.     AL = 13h-7Fh
  375. Note:    these functions are reserved for future use
  376. --------G-2FD1-------------------------------
  377. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  378.     AH = D1h
  379.     AL = 80h-FFh
  380. Note:    these functions are reserved for user defined features (e.g.
  381.       communication between the transient und resident parts of the driver)
  382. --------U-2FD200-----------------------------
  383. INT 2F - PCL-838.EXE - INSTALLATION CHECK
  384.     AX = D200h
  385. Return: AL = FFh if installed??? (documented as AX = return value)
  386. Program: PCL-838 is a resident utility for controlling a stepmotor adapter
  387.       board by Advantec
  388. SeeAlso: AX=D201h"PCL-838",AX=D202h"PCL-838"
  389. --------Q-2FD200BX5144-----------------------
  390. INT 2F - Quarterdeck RPCI - INSTALLATION CHECK
  391.     AX = D200h
  392.     BX = 5144h ("QD")
  393.     CX = 4D45h ("ME")
  394.     DX = 4D30h ("M0")
  395. Return: AL = FFh installed
  396.     if BX,CX,DX registers were as specified on entry:
  397.         BX = 4D45h ("ME")
  398.         CX = 4D44h ("MD")
  399.         DX = 5652h ("VR")
  400. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  401. Notes:    the Quarterdeck RPCI (Resident Program Communication Interface) is
  402.       supported by QEMM v5.0+, QRAM, MANIFEST, VIDRAM, etc.
  403.     for AL <> 0, if the BX/CX/DX values don't match the identifier of a
  404.       Quarterdeck product, it just chains to the previous INT 2F handler
  405. SeeAlso: AX=D201h/BX=4849h,AX=D201h/BX=4D41h,AX=D201h/BX=4D45h
  406. SeeAlso: AX=D201h/BX=5145h,AX=D201h/BX=5649h
  407. --------U-2FD201-----------------------------
  408. INT 2F - PCL-838.EXE - UNINSTALL
  409.     AX = D201h
  410. Return: AX = return value
  411. SeeAlso: AX=D200h"PCL-838",AX=D202h"PCL-838"
  412. --------m-2FD201BX4849-----------------------
  413. INT 2F - Quarterdeck RPCI - GET QD HIMEM PRESENCE
  414.     AX = D201h
  415.     BX = 4849h ("HI")
  416.     CX = 4D45h ("ME")
  417.     DX = 4D51h ("MQ")
  418. Return: BX = 4F4Bh ("OK")
  419.     ES:DI -> HIMEM entry point
  420. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  421. SeeAlso: AX=D200h,AX=D201h/BX=5145h
  422. --------m-2FD201BX4849-----------------------
  423. INT 2F - Quarterdeck RPCI - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  424.     AX = D201h
  425.     BX = 4849h ("HI")
  426.     CX = 5241h ("RA")
  427.     DX = 4D30h ("M0")
  428. Return: BX = 4F4Bh ("OK")
  429.     CX = segment of start of HIRAM chain
  430.     DX = reserved block owner (QEMM/QRAM code segment)
  431. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  432. Note:    the HIRAM memory chain has the same format as the regular DOS 4.0
  433.       memory chain (see #0841 at INT 21/AH=52h), except that XMS Upper
  434.       Memory Blocks have the block header program name field set to
  435.       "UMB"; blocks whose "owner" field is set to the reserved segment
  436.       returned in DX are locked-out regions such as video memory and ROMs.
  437. SeeAlso: AX=12FFh/BX=0006h,AX=D200h
  438. --------G-2FD201BX4D41-----------------------
  439. INT 2F U - Quarterdeck RPCI - MANIFEST v1.0+ - INSTALLATION CHECK
  440.     AX = D201h
  441.     BX = 4D41h ("MA")
  442.     CX = 4E49h ("NI")
  443.     DX = 4645h ("FE")
  444. Return: BX = 5354h ("ST") if installed
  445. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  446. SeeAlso: AX=D200h
  447. --------E-2FD201BX4D45-----------------------
  448. INT 2F U - Quarterdeck RPCI - DVDOS4GX.DVR - ???
  449.     AX = D201h
  450.     BX = 4D45h ("ME")
  451.     CX = 5155h ("QU")
  452.     DX = 5044h ("PD")
  453. Return: AL = FFh
  454.     BX = 4F4Bh ("OK")
  455. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  456. Note:    this function is called by QEMM 6.03
  457.     performs a variety of actions before setting return registers
  458. SeeAlso: AX=D200h
  459. --------m-2FD201BX5145-----------------------
  460. INT 2F - Quarterdeck RPCI - QEMM v5.0+ - INSTALLATION CHECK
  461.     AX = D201h
  462.     BX = 5145h ("QE")
  463.     CX = 4D4Dh ("MM")
  464.     DX = 3432h ("42")
  465. Return: BX = 4F4Bh ("OK")
  466.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  467. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  468. Note:    this call is not available under QEMM v6.00 unless Windows3 support
  469.       has been disabled with the NW3 switch to QEMM386.SYS
  470. SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
  471. --------V-2FD201BX5649-----------------------
  472. INT 2F u - Quarterdeck RPCI - VIDRAM v5.0+ - INSTALLATION CHECK
  473.     AX = D201h
  474.     BX = 5649h ("VI")
  475.     CX = 4452h ("DR")
  476.     DX = 414Dh ("AM")
  477. Return: BX = 4F4Bh ("OK")
  478.     ES:DI -> VIDRAM entry point (see #1749)
  479. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  480. SeeAlso: AX=D200h
  481.  
  482. (Table 1749)
  483. Call VIDRAM entry point with:
  484.     AH = 00h get status
  485.         Return: AL = VIDRAM state (see #1750)
  486.             BL = extra RAM status (see #1751)
  487.             BH = feature flags (see #1752)
  488.             CL = current monitor (01h = mono, 80h = color)
  489.             SI = current top of memory (paragraph)
  490.             DI = segment of start of HiRAM chain
  491.     AH = 01h setup
  492.         AL = VIDRAM state (see #1750)
  493.         BL = extra RAM status (see #1751)
  494.         BH = feature flags (see #1752)
  495.         CL = monitor (01h = monochrome, 80h = color)
  496.         SI = new top of memory (paragraph)
  497.         DI = segment of start of HiRAM chain
  498.     AH = 02h get end address of VIDRAM code
  499.         Return: ES:DI -> VIDRAM partial map context (see #1753,#1754)
  500. Return: CF set on error
  501.     CF clear if successful
  502.  
  503. (Table 1750)
  504. Values for VIDRAM state:
  505.  00h    off
  506.  01h    no EGA graphics
  507.  02h    no graphics at all
  508.  
  509. (Table 1751)
  510. Values for VIDRAM extra RAM status:
  511.  00h    VIDRAM does not use extra RAM
  512.  01h    VIDRAM uses EMS as extra RAM
  513.  02h    VIDRAM uses EGA as extra RAM
  514.  
  515. Bitfields for VIDRAM feature flags:
  516. Bit(s)    Description    (Table 1752)
  517.  0    override enabled
  518.  1    mapped memory detected in A000h-B000h range
  519.  2    top of memory not at 640K
  520.  3    MDA detected
  521.  4    high RAM exists in video area
  522.  5    mapped memory detected in video area
  523.  6-7    reserved???
  524.  
  525. Format of VIDRAM partial map context (EMS 3.2):
  526. Offset    Size    Description    (Table 1753)
  527.  00h    BYTE    EMS version ID (32h)
  528.  01h    WORD    EMM handle for this entry
  529.  03h    BYTE    number of frames
  530.  04h    BYTE    first page frame
  531.  05h    WORD    offset from ES to previously saved map
  532.  
  533. Format of VIDRAM partial map context (EMS 4.0):
  534. Offset    Size    Description    (Table 1754)
  535.  00h    BYTE    EMS version ID (40h)
  536.  01h    WORD    mappable segment count
  537.  03h  N WORD    mappable segments
  538.     WORD    offset to previously saved map???
  539. --------U-2FD202-----------------------------
  540. INT 2F - PCL-838.EXE - EXECUTE PCL838 COMMANDS
  541.     AX = D202h
  542.     CX:BX -> parameter table
  543. Return: AX = return value
  544. SeeAlso: AX=D200h"PCL-838",AX=D201h"PCL-838"
  545. --------R-2FD300BX4562-----------------------
  546. INT 2F U - TeleReplica - INSTALLATION CHECK
  547.     AX = D300h
  548.     BX = 4562h
  549.     CX = 2745h
  550.     DX = serial port I/O base address??? (03F8h for v3.9)
  551. Return: SI = segment of resident code
  552.     AX = 251Dh
  553.     BX = DF21h
  554.     CX = F321h
  555.     DX = ???
  556. --------R-2FD3CB-----------------------------
  557. INT 2F U - LapLink Quick Connect v6 - API
  558.     AX = D3CBh
  559.     CX = function
  560.         0002h get ???
  561.         Return: BX:AX -> ???
  562.             CL = ???
  563.             CH = ???
  564.             DX = ???
  565.             DI = COM1 I/O port???
  566.             SI = COM2 I/O port???
  567.         0003h initialization???
  568.         0004h ???
  569.         0005h initialization???
  570.         0006h reset/clear ???
  571.         Return: AX = 0000h
  572.             ES:DI -> next byte after ??? cleared by this call
  573.         0007h initialization???
  574.         0008h uninstall
  575.         Return: BX = status
  576.                 0000h successful
  577.                 FFFFh incomplete, stub remains in memory
  578. Return: CX = 534Bh (except function 0002h)
  579. Index:    uninstall;LapLink Quick Connect
  580. --------l-2FD44D-----------------------------
  581. INT 2F - 4DOS.COM v2.1+ - API
  582.     AX = D44Dh
  583.     BH = function
  584.         00h installation check
  585.         Return: AX = 44DDh
  586.             BL = major version number
  587.             BH = minor version number
  588.             CX = PSP segment address for current invocation
  589.             DL = 4DOS shell number (0 for the first (root) shell,
  590.                   updated each time a new copy is loaded)
  591.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  592.         Return: nothing
  593.         (internal, v4.0) ???
  594.         Return: AX = 44DDh
  595.             ES:BX -> data area (see #1755)
  596.         02h ???
  597.         DX = ???
  598.     ---v2.1-3.03 only---
  599.         03h EXEC program
  600.         CX:DX -> EXEC record (see #1756)
  601.         FEh deallocate shell number (passed through to root shell)
  602.         ???
  603.         FFh allocate shell number (passed through to root shell)
  604. Note:    bug in v3.00 will crash system if unrecognized value in BH
  605. SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h
  606. Index:    installation check;4DOS|installation check;NDOS
  607.  
  608. Format of 4DOS v4.0 data area:
  609. Offset    Size    Description    (Table 1755)
  610.  00h  2 BYTEs    ???
  611.  06h    WORD    XMS handle for swapping
  612.     ???
  613.  
  614. Format of 4DOS EXEC record:
  615. Offset    Size    Description    (Table 1756)
  616.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  617.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  618.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  619. --------l-2FD44E-----------------------------
  620. INT 2F C - 4DOS v3.0+ - AWAITING USER INPUT
  621.     AX = D44Eh
  622. ---4DOS v3.01+---
  623.     BX = condition
  624.         0000h 4DOS is ready to display prompt
  625.         0001h 4DOS has displayed the prompt, about to accept user input
  626. Return: the handler must preserve SI, DI, BP, SP, DS, ES, and SS
  627. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  628. SeeAlso: AX=D44Dh
  629. --------K-2FD44FBX0000-----------------------
  630. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  631.     AX = D44Fh
  632.     BX = 0000h
  633. Return: AX = 44DDh if installed
  634. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  635.       which emulate the 4DOS and NDOS keystack
  636. SeeAlso: AX=D44Fh/BX=0001h,AX=E44Fh/BX=0000h
  637. --------K-2FD44FBX0001-----------------------
  638. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  639.     AX = D44Fh
  640.     BX = 0001h
  641.     CX = number of keystrokes (01h-FFh)
  642.     DS:DX -> keystroke list (one word per keystroke)
  643. Return: AX = status
  644.         0000h successful
  645.         nonzero failed
  646.     BX,CX,DX destroyed
  647. Notes:    the keystrokes are the exact values to return from subsequent calls to
  648.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  649.         0000h causes subfunctions 01h and 11h to indicate an empty
  650.               keyboard buffer
  651.         FFFFh is followed by a word indicating the number of clock
  652.               ticks to delay before the next faked keystroke
  653.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  654.       invocation, and does not range-check CX; it will overwrite memory
  655.       following the resident portion if CX is greater than 100h.
  656.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  657.       which emulate the 4DOS and NDOS keystack
  658. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  659. --------G-2FD600-----------------------------
  660. INT 2F - HEART.COM - INSTALLATION CHECK
  661.     AX = D600h
  662. Return: AX = 0303h (two hearts) if installed
  663.         ES:DI -> buffer (see #1757)
  664. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  665. Notes:    Once the host program has identified the address of the data area, it
  666.       can change this to indicate safe/critical, alternate colours, etc.
  667.     The entries for the color table are in char/attrib form.  Every two
  668.       entries form a pair which is alternated between 68 times a minute.
  669.       The first half of the table is for color videos, the second mono.
  670.       Within each half, the first half is for the safe chars, and the
  671.       second for the critical chars.
  672.  
  673. Format of HEART.COM buffer:
  674. Offset    Size    Description    (Table 1757)
  675.  00h  8 WORDs    table of colors/attributes (see notes above)
  676.  10h    BYTE    flags
  677.         bit 0: program is in critical section, so flash double
  678.               exclamation mark
  679.         bit 1: program is in safe code, so flash the heart character
  680.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  681.         of second line)
  682. --------T-2FD600-----------------------------
  683. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  684.     AX = D600h
  685. Return: AL = D6h if installed
  686. Program: VSWAP is the resident portion of VEDIT's "swapper" capability; VEDIT
  687.       is a programmer's text editor by Greenview Data.
  688. SeeAlso: AX=D601h,AX=D602h
  689. --------T-2FD601-----------------------------
  690. INT 2F U - VEDIT VSWAP - ???
  691.     AX = D601h
  692.     BL = subfunction number???
  693. Return: BL = return code ???
  694.     ES = resident portion's data??? segment
  695.     DX = resident portion's code segment
  696. SeeAlso: AX=D600h"VSWAP"
  697. --------T-2FD602-----------------------------
  698. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  699.     AX = D602h
  700.     other registers set as for INT 21/AX=4B00h
  701. Return: CF set on error
  702.         AL = error code
  703.         82h = failure due to ???
  704.     CF clear on success
  705. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  706. --------N-2FD701BX0000-----------------------
  707. INT 2F - Banyan VINES v4+ - GET BANV INTERRUPT NUMBER
  708.     AX = D701h
  709.     BX = 0000h
  710. Return: AX = 0000h if installed
  711.         BX = interrupt number (60h to 66h)
  712.        nonzero not present
  713. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  714.       necessary to examine the four bytes preceding the handlers for
  715.       INT 60 through INT 66 for the string "BANV"
  716. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  717. --------N-2FD702-----------------------------
  718. INT 2F U - Banyan VINES v4+ - PCPRINT interface
  719.     AX = D702h
  720.     BX = function
  721.     ???
  722. Return: ???
  723. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  724. --------N-2FD703-----------------------------
  725. INT 2F U - Banyan VINES v4+ - MAIL interface
  726.     AX = D703h
  727.     BX = function
  728.     ???
  729. Return: ???
  730. SeeAlso: AX=D702h,AX=D704h
  731. --------N-2FD704-----------------------------
  732. INT 2F U - Banyan VINES v4+ - Streettalk Directory Assistance interface
  733.     AX = D704h
  734.     BX = function
  735.     ???
  736. Return: ???
  737. SeeAlso: AX=D703h,INT 61/AX=0007h/BX=0002h"Banyan",INT 61/AX=0007h/BX=0008h
  738. --------N-2FD800-----------------------------
  739. INT 2F U - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  740.     AX = D800h
  741. Return: AL = FFh if installed
  742.         DX = version number (0100h for v1.0, 0101h for v1.1)
  743.         BX = data segment of resident copy
  744.         ES:DI -> private API entry point (see #1758)
  745.         SI = segment of resident code
  746. SeeAlso: AX=7A00h,AX=D880h
  747.  
  748. (Table 1758)
  749. Call CLIENT API entry point with:
  750.     BX = function
  751.         0000h get ???
  752.         Return: DX = CLIENT version??? (0101h for v1.1)
  753.             ES:BX -> ??? data
  754.         0001h ???
  755.         0002h ???
  756.         0003h ???
  757.         0004h ???
  758.         0005h ???
  759.         DL = ???
  760.         ???
  761.         Return: ???
  762.         0006h get module name???
  763.         ES:DI -> 16-byte buffer
  764.         Return: CX = ???
  765.             ES:DI filled with "NWLITE_CLIENT" 00h 00h 00h
  766.         0007h ???
  767.         DX:CX = ???
  768.         ???
  769.         Return: ???
  770.         0008h ???
  771.         0009h ???
  772.         DL = ???
  773.         ES:DI -> 16-byte buffer for ???
  774.         Return: CF clear if successful
  775.                 AX = 0000h
  776.                 CX = 0000h
  777.                 SI,DI destroyed
  778.             CF set on error
  779.                 AX = error code 4903h
  780.         000Ah ???
  781.         AH = subfunction
  782.             00h get ???
  783.             01h clear/set ??? flag
  784.             AL = new state (00h cleared, 01h set)
  785.             02h set ???
  786.             DX = new value of ???
  787.         Return: DX = old value of ???
  788.         000Bh ???
  789.         AX = ???
  790.         ???
  791.         Return: ???
  792.         000Ch ???
  793.         AX = ???
  794.         ???
  795.         Return: ???
  796.         000Dh ???
  797.         AX = ???
  798.         ???
  799.         Return: ???
  800.         000Eh get original INT 17
  801.         Return: CF clear
  802.             ES:BX -> original INT 17
  803.         000Fh ???
  804.         0010h ???
  805.         AX = ???
  806.         ???
  807.         Return: ???
  808.         0011h get ???
  809.         Return: CF clear
  810.             DL = ???
  811.         0012h get ???
  812.         AL = index of ???
  813.         ES:DI -> 10-byte buffer for ???
  814.         Return: CF clear if successful
  815.                 ES:DI buffer filled
  816.                 AX,CX destroyed
  817.             CF set on error
  818.                 AX = error code (4907h if AL out of range)
  819.         0013h get ???
  820.         Return: CF clear
  821.             DH = ???
  822.             DL = ???
  823.         0014h ???
  824.         DL = ???
  825.         ???
  826.         Return: CF clear if successful
  827.                 ???
  828.             CF set on error
  829.                 AX = error code 8056h
  830.         0015h ???
  831.         DX = ???
  832.         Return: ES:DI -> ???
  833.         other
  834.         Return: CF set
  835.             AX = 0001h (invalid function)
  836. --------N-2FD856-----------------------------
  837. INT 2F U - Novell NetWare Lite v1.1 - SERVER - GET ???
  838.     AX = D856h
  839. Return: AX = 0001h if supported???
  840.     BX = ??? (0004h for v1.1)
  841.     CX = ??? (0F20h for v1.1)
  842.     DS = segment of resident code
  843.     ES = data segment of resident copy
  844. Note:    this function is also supported by Personal NetWare SERVER, bundled
  845.       with Novell DOS 7
  846. --------N-2FD880-----------------------------
  847. INT 2F U - Novell NetWare Lite v1.0+ - SERVER - INSTALLATION CHECK
  848.     AX = D880h
  849. Return: AL = FFh if installed
  850.         DX = version number (0100h for v1.0, 0101h for v1.1)
  851.         BX = data segment of resident copy
  852.         CL = current state (00h SERVER is disabled, 01h SERVER is active)
  853.         ES:DI -> private API entry point (see #1759)
  854.         SI = ??? (offset of configuration info?)
  855. Note:    this function is also supported by Personal NetWare SERVER, but DI is
  856.       not set; instead, ES:SI points at the API entry point
  857. SeeAlso: AX=7A00h,AX=D800h,INT 2A/AX=D852h
  858.  
  859. (Table 1759)
  860. Call SERVER API entry point with:
  861.     BX = function
  862.         0000h ???
  863.         ???
  864.         Return: ???
  865.         Note: closes open files by calling INT 21/AH=3Eh
  866.         0001h get connection information
  867.         DX = connection number (0001h-max connections)
  868.         ES:DI -> 28-byte buffer for connection information
  869.         Return: CF clear if successful
  870.                 ES:DI buffer filled
  871.             CF set on error
  872.                 AX = FFFFh
  873.     ---Personal NetWare only---
  874.         0002h ???
  875.         0003h ???
  876.         0004h ???
  877.         0005h ???
  878.         0006h ???
  879.         0007h ???
  880.         other
  881.         Return: CF set
  882.             AX = 0001h (invalid function)
  883. --------d-2FD8C0-----------------------------
  884. INT 2F U - Novell NLCACHE,NWCACHE - INSTALLATION CHECK
  885.     AX = D8C0h
  886. Return: AL = FFh if installed
  887.         CL = cache variant (01h NLCACHEC, 02h NLCACHEX, 03h NLCACHEM)
  888.         DH = major version??? (01h for v1.1)
  889.         DL = minor version??? (01h for v1.1)
  890.         ES:DI -> private API entry point (see #1760)
  891. Program: NLCACHE is a disk cache included with NetWare Lite
  892. SeeAlso: AX=D800h,AX=D880h
  893.  
  894. (Table 1760)
  895. Call NLCACHE/NWCACHE API entry point with:
  896.     BX = function
  897.         0000h ???
  898.         ???
  899.         Return: CF clear if successful
  900.                 AX = 0000h
  901.                 ???
  902.             CF set on error
  903.                 AX = error code
  904.         0001h (NWCACHE only) ???
  905.         ES:DI -> buffer for ???
  906.         Return: ???
  907.         other
  908.         Return: CF set
  909.             AX = 0001h (invalid function)
  910. --------F-2FDA00-----------------------------
  911. INT 2F - ZyXEL ZFAX - INSTALLATION CHECK
  912.     AX = DA00h
  913. Return: AH = enabled state (00h = enabled, 01h = disabled)
  914.     AL = 5Ah installed
  915. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  916.       fax modems.
  917. Note:    This function, and the other DAxxh functions, may apply only to version
  918.       1 of the software; see AX=DB00h for the version 2 installation check
  919. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h,AX=DB00h
  920. --------F-2FDA01-----------------------------
  921. INT 2F - ZyXEL ZFAX - UNINSTALL
  922.     AX = DA01h
  923. Return: AL = 00h Success
  924.          01h Failure
  925. SeeAlso: AX=DA00h,AX=DB01h
  926. --------F-2FDA02-----------------------------
  927. INT 2F - ZyXEL ZFAX - DISABLE
  928.     AX = DA02h
  929. Return: AL = 00h
  930. SeeAlso: AX=DA03h,AX=DB02h
  931. --------F-2FDA03-----------------------------
  932. INT 2F - ZyXEL ZFAX - ENABLE
  933.     AX = DA03h
  934. Return: AL = 00h
  935. SeeAlso: AX=DA02h,AX=DB03h
  936. --------G-2FDA55-----------------------------
  937. INT 2F U - TRAP.COM - INSTALLATION CHECK
  938.     AX = DA55h
  939.     DL = interrupt number
  940.     DH = ???
  941. Return: if installed
  942.         AH = interrupt number
  943.         AL = ???
  944.         ES:BX -> ???
  945. Program: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  946. Note:    a separate copy of TRAP is loaded for each interrupt to be traced; thus
  947.       the interrupt number is part of the installation check
  948. --------N-2FDAB2-----------------------------
  949. INT 2F U - Beame&Whiteside BWSNMP - INSTALLATION CHECK
  950.     AX = DAB2h
  951. Return: AX = 00FFh if installed
  952.         BX:CX -> MIB table
  953. Program: BWSNMP is part of the BW-NFS package
  954. SeeAlso: INT 62/AH=00h"ETHDEV"
  955. --------F-2FDB00-----------------------------
  956. INT 2F - ZyXEL ZFAX v2+ - INSTALLATION CHECK
  957.     AX = DB00h
  958. Return:    AL = 5Bh if installed (v2.x)
  959.         ES:BX -> ???
  960.     AX = 00DBh if installed (v3)
  961.         ES:BX -> ZFAX configuration table (see #1761)
  962. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  963.       fax modems.
  964. SeeAlso: AX=CBDCh,AX=DA00h,AX=DB01h,AX=DB02h,AX=DB03h
  965.  
  966. Format of ZFAX Configuration Table:
  967. Offset    Size    Description    (Table 1761)
  968.  00h    WORD    version number (0300h for v3.0)
  969.  02h    BYTE    reserved
  970.  03h 70 BYTEs    ZFAX working path
  971.  49h 128 BYTEs    path to external editor
  972.  C9h 128 BYTEs    path to external terminal emulator
  973. 149h 128 BYTEs    path to Ring Shell
  974. 1C9h 128 BYTEs    path to DOS Shell
  975. 249h 128 BYTEs    path to Data Shell
  976. 2C9h 70 BYTEs    path to Chinese font
  977. 30Fh    BYTE    printer type (see #1762)
  978. 310h    BYTE    printer port (00h = LPT1, etc.)
  979. 311h    BYTE    type of graphics adapter
  980.         (00h auto-detect, 01h VGA, 02h EGA, 03h CGA, 04h Hercules)
  981. 312h    BYTE    display type
  982.         (00h auto-detect, 01h LCD, 02h color, 03h mono)
  983. 313h    BYTE    scan code for ZFAX hotkey
  984. 314h    BYTE    shift mask for ZFAX hotkey
  985. 315h    BYTE    tone/pulse dialing (00h tone, 01h pulse)
  986. 316h    BYTE    Caller ID (00h disabled, 01h enabled)
  987. 317h    BYTE    Distinctive Ring (00h disabled, 01h enabled)
  988. 318h    BYTE    normal ring answer type (see #1763)
  989. 319h    BYTE    Ring 1 answer type (see #1763)
  990. 31Ah    BYTE    Ring 2 answer type (see #1763)
  991. 31Bh    BYTE    Ring 3 answer type (see #1763)
  992. 31Ch    BYTE    COM port for modem
  993. 31Dh    BYTE    speaker volume (00h-07h)
  994. 31Eh    BYTE    modem dial timer, seconds
  995. 31Fh    WORD    user-defined COM port I/O address
  996. 321h    BYTE    user-defined COM port IRQ number
  997. 322h 81 BYTEs    dial prefix string
  998. 373h 79 BYTEs    dial postfix string
  999. 3C2h    BYTE    ring count until automatic answer
  1000. 3C3h    BYTE    retry count on busy signal
  1001. 3C4h    BYTE    redial delay in seconds
  1002. 3C5h    WORD    system password
  1003. 3C7h    BYTE    reserved
  1004. 3C8h    BYTE    voice file compression format
  1005.         00h CELP at 9600bps
  1006.         01h two-bit ADPCM at 19200bps
  1007.         03h three-bit ADPCM at 28800bps
  1008. 3C9h    BYTE    voice system: DTMF 0 action (see #1764)
  1009. 3CAh    BYTE    voice system: DTMF 1 action
  1010. 3CBh    BYTE    voice system: DTMF 2 action
  1011. 3CCh    BYTE    voice system: DTMF 3 action
  1012. 3CDh    BYTE    voice system: DTMF 4 action
  1013. 3CEh    BYTE    voice system: DTMF 5 action
  1014. 3CFh    BYTE    voice system: DTMF 6 action
  1015. 3D0h    BYTE    voice system: DTMF 7 action
  1016. 3D1h    BYTE    voice system: DTMF 8 action
  1017. 3D2h    BYTE    voice system: DTMF 9 action (see #1764)
  1018. 3D3h    WORD    reserved
  1019. 3D5h 25 BYTEs    local FAX ID to display on page header
  1020. 3EEh 20 BYTEs    local FAX ID sent to remote FAX
  1021. 402h    BYTE    FAX page size
  1022.         00h A4 (210x297mm)
  1023.         01h B4 (250x353mm)
  1024.         02h A3 (297x420mm)
  1025. 403h    BYTE    FAX resolution
  1026.         00h normal (3.85 pixels/mm)
  1027.         01h high (7.7 pixels/mm)
  1028. 404h    BYTE    FAX coding scheme
  1029.         00h 1-D, modified Huffman coding
  1030.         01h 2-D, modified READ coding
  1031. 405h    BYTE    left margin for text in millimeters
  1032. 406h    BYTE    vertical insertion for text in mm (0-20)
  1033. 407h    BYTE    horizontal insertion in mm (0-20)
  1034. 408h    BYTE    maximum text lines per page
  1035. 409h    BYTE    text type (00h ASCII, 01h WordStar-formatted)
  1036. 40Ah    BYTE    PCX image resize (00h disabled, 01h enabled)
  1037. 40Bh    BYTE    AutoPrint (00h disabled, 01h enabled)
  1038. 40Ch    BYTE    cover page (00h disabled, 01h enabled)
  1039. 40Dh 81 BYTEs    cover page logo filename
  1040. 45Eh 65 BYTEs    cover page sender name
  1041. 49Fh    BYTE    print capture (00h disabled, 01h enabled)
  1042. 4A0h    BYTE    send immediately (00h disabled, 01h enabled)
  1043. 4A1h    BYTE    print capture printer port
  1044. 4A2h    BYTE    print capture timer in seconds
  1045. 4A3h    BYTE    scan code for print capture hotkey
  1046. 4A4h    BYTE    shift mask for print capture hotkey
  1047. 4A5h    BYTE    DataShell type
  1048.         00h internal Zmodem, 01h Data Shell, 02h disable
  1049. 4A6h    BYTE    video I/O type
  1050.         00h auto-detect, 01h use BIOS, 02h direct writes
  1051. 4A7h    BYTE    call transfer digits
  1052. 4A8h    WORD    voice recorder maximum time in seconds (0-999)
  1053.  
  1054. (Table 1762)
  1055. Values for ZFAX printer type:
  1056.  00h    EPSON FX (9 pins)
  1057.  01h    EPSON LQ (24 pins)
  1058.  02h    HP Laser Jet II, letter size
  1059.  03h    HP Laser Jet II, legal size
  1060.  04h    HP Laser Jet II, A4 size
  1061.  05h    HP Laser Jet III, letter size
  1062.  06h    HP Laser Jet III, legal size
  1063.  07h    HP Laser Jet III, A4 size
  1064.  
  1065. (Table 1763)
  1066. Values for Ring Answer Type:
  1067.  00h    voice system
  1068.  01h    FAX only
  1069.  02h    Data Shell
  1070.  03h    Ring Shell
  1071.  04h    DOS Shell
  1072.  05h    ignore
  1073.  
  1074. (Table 1764)
  1075. Values for DTMF action:
  1076.  00h    none
  1077.  01h    page operator
  1078.  02h    FaxBack
  1079.  03h    announcement
  1080.  04h    call transfer
  1081.  05h    receive FAX
  1082.  06h    receive data
  1083.  07h    voice mailbox
  1084.  08h    DOS Shell Out
  1085.  09h    Data Shell Out
  1086. --------U-2FDB00-----------------------------
  1087. INT 2F U - WINGO.COM - INSTALLATION CHECK
  1088.     AX = DB00h
  1089. Return: AX = FFFFh if installed
  1090.     CX = 5749h ('WI') if installed
  1091.     DX = 4E47h ('NG') if installed
  1092.         ES = segment of resident code
  1093. Program: WINGO.COM is TSR for starting Windows programs from DOS
  1094.       prompt (together with companion Windows program
  1095.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  1096.       PC Magazine
  1097. Range:    AH=DBh to AH=FFh, selected by scanning for a free multiplex number
  1098. SeeAlso: AX=DB01h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  1099. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  1100. --------F-2FDB01-----------------------------
  1101. INT 2F - ZyXEL ZFAX v2+ - UNINSTALL
  1102.     AX = DB01h
  1103. Return: AX = status
  1104.         0000h successful
  1105.         0001h ZFAX is busy
  1106.         0002h another program resident above ZFAX
  1107. Note:    this function unhooks the vectors taken by the ZFAX TSR if they have
  1108.       not been hooked by other TSRs and releases the TSR's memory
  1109.     ZFAX v2.x crashes the contributor's machine when this function is
  1110.       called
  1111. SeeAlso: AX=DA01h,AX=DB00h
  1112. --------U-2FDB01-----------------------------
  1113. INT 2F U - WINGO.COM - SET CALLBACK FUNCTION POINTER
  1114.     AX = DB01h
  1115.     CX:DX -> new callback function
  1116. Return: AX = 0000h
  1117.     CX:DX -> end of resident code (stack ???)
  1118. Desc:    the callback function is used for WINGO <-> WINSTART communication
  1119. SeeAlso: AX=DB00h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  1120. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  1121. --------F-2FDB02-----------------------------
  1122. INT 2F - ZyXEL ZFAX v2.x - DISABLE
  1123.     AX = DB02h
  1124. Return: AL = 00h
  1125. SeeAlso: AX=DA02h,AX=DB00h,AX=DB03h
  1126. --------U-2FDB02-----------------------------
  1127. INT 2F U - WINGO.COM - RESET CALLBACK FUNCTION POINTER
  1128.     AX = DB02h
  1129. Return: AX = 0000h
  1130. Desc:    the callback function is used for WINGO <-> WINSTART communication
  1131. SeeAlso: AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  1132. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  1133. --------F-2FDB03-----------------------------
  1134. INT 2F - ZyXEL ZFAX v2.x - ENABLE
  1135.     AX = DB03h
  1136. Return: AL = 00h
  1137. SeeAlso: AX=DA03h,AX=DB00h,AX=DB02h
  1138. --------U-2FDB03-----------------------------
  1139. INT 2F U - WINGO.COM - SET ??? FLAG
  1140.     AX = DB03h
  1141. Return: AX = 0000h
  1142. SeeAlso: AX=DB00h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  1143. --------U-2FDB04-----------------------------
  1144. INT 2F U - WINGO.COM - RESET ??? FLAG
  1145.     AX = DB04h
  1146. Return: AX = 0000h
  1147. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  1148. --------U-2FDB05-----------------------------
  1149. INT 2F U - WINGO.COM - GET ??? FLAG
  1150.     AX = DB05h
  1151. Return: AX = 0000h
  1152.     DX = unknown flag - 0 or 1
  1153. Program: WINGO.COM is TSR for starting Windows programs from DOS
  1154.       prompt (together with companion Windows program
  1155.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  1156.       PC Magazine
  1157. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  1158. --------U-2FDB06-----------------------------
  1159. INT 2F U - WINGO.COM - CALL CALLBACK FUNCTION
  1160.     AX = DB06h
  1161. Return: AX = return value of INT 2F/AX=1685h
  1162. Note:    uses Windows service INT 2F/AX=1685h (SWITCH VMs AND CALLBACK) to
  1163.       call the callback function previously set by AX=DB01h
  1164.     used for WINGO <-> WINSTART communication
  1165. SeeAlso: AX=1685h, AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB02h"WINGO",
  1166. SeeAlso: AX=DB03h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO"
  1167. --------F-2FDB10-----------------------------
  1168. INT 2F - ZyXEL ZFAX v3 - EXECUTE ZFAX MAIN MENU
  1169.     AX = DB10h
  1170. --------F-2FDB11-----------------------------
  1171. INT 2F - ZyXEL ZFAX v3 - SEND FAX
  1172.     AX = DB11h
  1173.     DS:SI -> filename including path
  1174.     DS:BX -> remote FAX number
  1175. Return:    AX = status (see #1765)
  1176. SeeAlso: AX=DB12h,AX=DB13h,AX=DB14h,AX=DB20h,AX=DB21h
  1177.  
  1178. (Table 1765)
  1179. Values for ZFAX status:
  1180.  00h    OK
  1181.  01h    invalid DOS function
  1182.  02h    file not found
  1183.  03h    path not found
  1184.  04h    no file handle available
  1185.  05h    access denied by DOS
  1186.  06h    invalid handle
  1187.  07h    disk full
  1188.  10h    printer error
  1189.  11h    no graphics font
  1190.  12h    no ZFAX font
  1191.  20h    DCD dropped while sending
  1192.  21h    not ZyXEL modem
  1193.  22h    busy
  1194.  23h    no response from COM port
  1195.  24h    no carrier
  1196.  25h    no dial tone
  1197.  26h    no answer
  1198.  27h    no response
  1199.  28h    failed to send FAX
  1200.  30h    user aborted
  1201.  40h    critical error on disk
  1202.  50h    parameter error
  1203. --------F-2FDB12-----------------------------
  1204. INT 2F - ZyXEL ZFAX v3 - PRINT FAX
  1205.     AX = DB12h
  1206.     DS:SI -> filename, including path
  1207. Return: AX = status
  1208. SeeAlso: AX=DB11h,AX=DB13h,AX=DB14h
  1209. --------F-2FDB13-----------------------------
  1210. INT 2F - ZyXEL ZFAX v3 - CONVERT FAX
  1211.     AX = DB13h
  1212.     DS:SI -> source filename, including path
  1213.     DS:BX -> destination filename, including path
  1214.     CX = destination file format
  1215.         00h FAX, 01h PCX, 02h TIFF, 03h PRN
  1216. Return: AX = status
  1217. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h,AX=DB22h
  1218. --------F-2FDB14-----------------------------
  1219. INT 2F - ZyXEL ZFAX v3 - VIEW FAX
  1220.     AX = DB14h
  1221.     DS:SI -> source filename, including path
  1222. Return: AX = status
  1223. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h
  1224. --------F-2FDB20-----------------------------
  1225. INT 2F - ZyXEL ZFAX v3 - POLL FAX
  1226.     AX = DB20h
  1227.     DS:SI -> remote FAX number
  1228. Return: AX = status
  1229. SeeAlso: AX=DB11h,AX=DB21h
  1230. --------F-2FDB21-----------------------------
  1231. INT 2F - ZyXEL ZFAX v3 - SEND VOICE
  1232.     AX = DB21h
  1233.     DS:SI -> filename including path
  1234.     DS:BX -> remote phone number
  1235. Return:    AX = status
  1236. SeeAlso: AX=DB11h,AX=DB20h,AX=DB22h,AX=DB23h,AX=DB24h
  1237. --------F-2FDB22-----------------------------
  1238. INT 2F - ZyXEL ZFAX v3 - CONVERT VOICE FILE
  1239.     AX = DB22h
  1240.     DS:SI -> source filename, including path
  1241.     DS:BX -> destination filename, including path
  1242.     CX = destination format
  1243.         00h two-bit ADPCM, 01h three-bit ADPCM, 02h VOC
  1244. Return:    AX = status
  1245. SeeAlso: AX=DB13h,AX=DB20h,AX=DB21h,AX=DB23h
  1246. --------F-2FDB23-----------------------------
  1247. INT 2F - ZyXEL ZFAX v3 - RECORD VOICE FILE
  1248.     AX = DB23h
  1249.     DS:SI -> destination filename, including path
  1250.     CX = recording channel (0 = telephone line, 1 = microphone/speaker)
  1251.     DX = voice file format
  1252.         00h CELP, 01h two-bit ADPCM, 02h three-bit ADPCM
  1253. Return: AX = status
  1254. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  1255. --------F-2FDB24-----------------------------
  1256. INT 2F - ZyXEL ZFAX v3 - PLAY VOICE FILE
  1257.     AX = DB24h
  1258.     DS:SI -> name of voice file, including path
  1259.     CX = playback channel (0 = telephone line, 1 = microphone/speaker)
  1260. Return: AX = status
  1261. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  1262. --------F-2FDB25-----------------------------
  1263. INT 2F - ZyXEL ZFAX v3 - ANSWER MODEM WITH VOICE SYSTEM
  1264.     AX = DB25h
  1265. Return: AX = status
  1266. SeeAlso: AX=DB21h,AX=DB22h,AX=DB26h,AX=DB27h,AX=DB28h
  1267. --------F-2FDB26-----------------------------
  1268. INT 2F - ZyXEL ZFAX v3 - DIAL PHONE
  1269.     AX = DB26h
  1270.     DS:SI -> remote phone number
  1271. Return: AX = status
  1272. SeeAlso: AX=DB25h
  1273. --------F-2FDB27-----------------------------
  1274. INT 2F - ZyXEL ZFAX v3 - RECEIVE FAX - ANSWER MODEM AND SET TO FAX MODE
  1275.     AX = DB27h
  1276. Return: AX = status
  1277. SeeAlso: AX=DB25h,AX=DB28h
  1278. --------F-2FDB28-----------------------------
  1279. INT 2F - ZyXEL ZFAX v3 - RECEIVE FAX DATA - ANSWER MODEM IN MULTI-AUDIO MODE
  1280.     AX = DB28h
  1281. Return: AX = status
  1282. SeeAlso: AX=DB25h,AX=DB27h,AX=DB31h
  1283. --------F-2FDB31-----------------------------
  1284. INT 2F - ZyXEL ZFAX v3 - SEND DATA - DIAL NUMBER AND UPLOAD FILE WITH ZMODEM
  1285.     AX = DB31h
  1286.     DS:SI -> source file name, including path
  1287.     DS:BX -> remote data number
  1288. Return: AX = status
  1289. SeeAlso: AX=DB00h,AX=DB28h
  1290. --------F-2FDB40-----------------------------
  1291. INT 2F - ZyXEL ZFAX v3 - INTERNAL TERMINAL
  1292.     AX = DB40h
  1293. Return: AX = status
  1294. SeeAlso: AX=DB00h
  1295. --------K-2FDC00-----------------------------
  1296. INT 2F - GOLD.COM - INSTALLATION CHECK
  1297.     AX = DC00h
  1298. Return: AL = state
  1299.         00h not installed
  1300.         FFh installed
  1301. Program: GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  1302.       for F1; the purpose is to improve Kermit's VTxxx emulation
  1303. --------K-2FDC01-----------------------------
  1304. INT 2F - GOLD.COM - GET STATE
  1305.     AX = DC01h
  1306. Return: AL = status
  1307.         00h off
  1308.         01h on
  1309. SeeAlso: AX=DC00h,AX=DC02h
  1310. --------K-2FDC02-----------------------------
  1311. INT 2F - GOLD.COM - SET STATE
  1312.     AX = DC02h
  1313.     DL = new state
  1314.         00h off
  1315.         01h on
  1316. Return: AL = 00h (OK)
  1317. SeeAlso: AX=DC01h
  1318. --------t-2FDD-------------------------------
  1319. INT 2F - CappaCom programs - API
  1320.     AH = DDh
  1321.     AL = 00h general installation check
  1322.         Return: AL = FFh if any CappaCom programs are resident
  1323.     AL = FEh get info
  1324.         Return: ES:BX -> TSR info list (see #1766)
  1325.     AL = program identifier
  1326.         BH = function
  1327.         FDh get version
  1328.             Return: BX = version
  1329.         FFh installation check
  1330.             Return: AL = FFh if installed
  1331.                 BX = version
  1332.                 ES = segment of resident code
  1333.         others vary by program
  1334. Return: AL = status
  1335.         bit 7 set on error
  1336.         AL = 81h unknown function
  1337. Note:    CappaCom was originally SoftCom but changed its name due to a trademark
  1338.       conflict
  1339. Index:    installation check;SoftCom programs
  1340. Index:    installation check;CappaCom programs
  1341.  
  1342. Format of CappaCom TSR info list:
  1343. Offset    Size    Description    (Table 1766)
  1344.  00h  9 BYTEs    blank-padded ASCIZ program name
  1345.  09h    BYTE    program ID
  1346.  0Ah    WORD    program's PSP segment
  1347.  0Ch    WORD    program version (major in high byte)
  1348.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  1349.  12h    BYTE    number of interrupts hooked
  1350.  13h  5 BYTEs    interrupt numbers hooked by program
  1351.  18h  8 BYTEs    reserved
  1352. ----------2FDD-------------------------------
  1353. INT 2F - MIXFIX.EXE - API
  1354.     AH = DDh
  1355.     AL = function
  1356.         00h installation check
  1357.         Return: AX = 00DDh if installed
  1358.                 BX = version (BH = major, BL = minor)
  1359.         41h/61h get From: address
  1360.         Return: AX = 0001h
  1361.             ES:BX -> ASCIZ 4d address of mail sender ("1:2/3.4")
  1362.         49h/69h get To: address
  1363.         Return: AX = 0001h
  1364.             ES:BX -> ASCIZ 4d address of recipient ("1:2/3.4")
  1365.         4Ah/6Ah get subject of mail
  1366.         Return: AX = 0001h
  1367.             ES:BX -> ASCIZ subject of handled mail
  1368.         4Dh/6Dh get mail name
  1369.         Return: AX = 0001h
  1370.             ES:BX -> ASCIZ full name of current mail file
  1371.         4Eh/6Eh get From: field
  1372.         Return: AX = 0001h
  1373.             ES:BX -> ASCIZ From: field of mail (mail sender's name)
  1374. Program: MIXFIX by "KIV without Co" is a FidoNet mail robot which may execute
  1375.       other programs for mail handling.  The called programs may use the
  1376.       services described here to retrieve information about the mail being
  1377.       handled.
  1378. Index: installation check;MIXFIX.EXE
  1379. --------d-2FDD--BX7844-----------------------
  1380. INT 2F - xDISK v3.32+ - INSTALLATION CHECK
  1381.     AH = DDh
  1382.     BX = 7844h ('xD')
  1383.     CX = 4953h ('IS')
  1384.     DX = 4B3Fh ('K?')
  1385.     AL = desired drive (01h-1Ah) or 00h to check for xDISK on any drive
  1386.     ES:DI -> 25-byte data buffer (see #1767)
  1387. Return: AX = DDFFh if installed (on specified drive if AL nonzero on entry)
  1388.        BX = 87BBh
  1389.        DX = B4C0h
  1390.        ES:DI buffer filled
  1391.     CX,CF destroyed
  1392. SeeAlso: INT 21/AX=4404h"xDISK",INT 21/AX=4405h"xDISK"
  1393.  
  1394. Format of xDISK data buffer:
  1395. Offset    Size    Description    (Table 1767)
  1396.  00h    DWORD    pointer to ASCIZ driver signature "xDISK unit: X"
  1397.  04h    BYTE    flag: 01h if disk linked to DOS, 00h if unlinked
  1398.  05h    BYTE    flag: 01h if write protected, 00h if not
  1399.  06h    BYTE    flag: 01h if root directory full, 00h if not
  1400.  07h    BYTE    flag: 01h if free space uncompacted, 00h if compacted
  1401.  08h    BYTE    resizing state: 00h not resizable, 01h resized, 80h resizable
  1402.  09h    BYTE    flag: 01h inelastic resizable disk, 00h elastic
  1403.  0Ah  2 BYTEs    reserved
  1404.  0Ch    BYTE    flag: 01h collapsed disk, 00h not collapsed
  1405.  0Dh    BYTE    flag: 01h using all EMS, 00h some EMS free
  1406.  0Eh    BYTE    flag: 01h password enabled, 00h disabled
  1407.  0Fh    BYTE    flag: 01h password audio feedback, 00h no feedback
  1408.  10h    BYTE    flag: 01h password video feedback, 00h no feedback
  1409.  11h    BYTE    flag: 01h confirm changes, 00h no confirmation
  1410.  12h    BYTE    flag: 01h terse display, 00h verbose display
  1411.  13h    BYTE    flag: 01h click speaker on disk access, 00h no click
  1412.  14h    BYTE    flag: 01h flash icon on disk access, 00h no icon flash
  1413.  15h    BYTE    FAT entry size: 00h 12-bit, FFh 16-bit
  1414.  16h    WORD    count of open files in RAM disk
  1415.  18h    BYTE    unused
  1416. -------N-2FDE00BL00-------------------------
  1417. INT 2F U - Novell Netware - RPRINTER, NPRINTER - INSTALLATION CHECK
  1418.     AX = DE00h
  1419.     BL = 00h
  1420. Return: AL = FFh If Rprinter/Nprinter Installed
  1421.     BX -> Program Segment Prefix N/Rprinter.exe
  1422. --------Q-2FDE00BX4456-----------------------
  1423. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  1424.     AX = DE00h
  1425.     BX = 4456h ("DV")
  1426.     CX = 5844h ("XD")
  1427.     DX = 4931h ("I1")
  1428. Return: AL = FFh if installed (even if other registers do not match)
  1429.     if BX,CX, and DX were as specified on entry,
  1430.         BX = 4845h ("HE")
  1431.         CX = 5245h ("RE")
  1432.         DX = 4456h ("DV")
  1433. Range:    AH=C0h to AH=FFh, selected by scanning AH=DEh-FFh, then AH=C0h-DDh
  1434. Note:    the XDI handler should not issue any DOS or BIOS calls, nor should it
  1435.       issue DESQview API calls other than those allowed from hardware ints
  1436. SeeAlso: AX=DE02h,INT 15/AX=5400h
  1437. --------Q-2FDE01-----------------------------
  1438. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  1439.     AX = DE01h
  1440.     BX = driver ID
  1441.     other registers as needed by driver
  1442. Notes:    XDI drivers should pass this call through to previous handler if ID
  1443.       does not match
  1444.     DESQview never calls this function
  1445. --------Q-2FDE01BX4450-----------------------
  1446. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  1447.     AX = DE01h
  1448.     BX = 4450h ("DP")
  1449.     CX = 4D49h ("MI")
  1450.     DX = 3039h ("09")
  1451. Return: AL = FFh if installed
  1452.         BX = 4D42h ("MB")
  1453.         CX = 4921h ("I!")
  1454.         DX = 8F4Fh
  1455.         ES:DI -> filename of DPMI host overlay
  1456. Note:    the installation check consists of testing for the existence of the
  1457.       character device QDPMI$$$
  1458. SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
  1459. Index:    installation check;QDPMI
  1460. --------U-2FDE01BX5242-----------------------
  1461. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  1462.     AX = DE01h
  1463.     BX = 5242h ("RB")
  1464.     CX:DX = program identifier
  1465.         656F7000h ("eop",0) for DVeop
  1466. Return: AX = 5242h ("RB") if installed
  1467.         ES:BX -> data or entry point (see #1768)
  1468.         CX = version number (CH = major, CL = minor)
  1469.  
  1470. (Table 1768)
  1471. Call DVeop entry point with:
  1472.     ES:DI -> callback address or 0000h:0000h to remove callback
  1473. Return: AX = status
  1474.         0000h failed (callback table full or attempted to remove non-
  1475.           existent callback)
  1476.         0001h successful
  1477.         ES:DI -> chaining address
  1478.     BX,CX,DX destroyed
  1479. Notes:    the callback function is called with a simulated interrupt when the
  1480.       DESQview window containing it is closed; it should perform all
  1481.       necessary cleanup and then perform a FAR jump to the chaining address
  1482.       or an IRET if the chaining address is 0000h:0000h
  1483.     if the program wishes to remove itself before the window is closed, it
  1484.       should call the DVeop entry point with the previously returned
  1485.       chaining address and ignore the returned chaining address.
  1486. --------U-2FDE01BX7474-----------------------
  1487. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  1488.     AX = DE01h
  1489.     BX = 7474h
  1490.     CL = function
  1491.         00h installation check
  1492.         Return: AL = FFh
  1493.         01h get process handle
  1494.         DX = keys on Open Window menu (DL = first, DH = second)
  1495.         Return: AX = process handle or 0000h if not running
  1496.         02h (v1.3+) set TMAN handle
  1497.         DX = TMAN process handle
  1498.         03h (v1.3+) set open keys to ignore on next CL=01h call
  1499.         DX = keys on Open Window menu (DL = first, DH = second)
  1500. Return: BX = 4F4Bh ("OK")
  1501.     DL destroyed
  1502. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  1503.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  1504. Index:    installation check;DVTXDI
  1505. --------U-2FDE01BX7575-----------------------
  1506. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  1507.     AX = DE01h
  1508.     BX = 7575h
  1509.     CX = function
  1510.         0000h installation check
  1511.         Return: AX = 00FFh if installed
  1512.         0001h turn on notification (currently unused)
  1513.         Return: AX = 0001h
  1514.         0002h turn off notification (currently unused)
  1515.         Return: AX = 0001h
  1516.         0003h get process information
  1517.         Return: AX = status
  1518.                 0000h failed
  1519.                 0001h successful
  1520.                 BX = last instantaneous time slice
  1521.                     in 1/100s (v1.10)
  1522.                     in 1/18s (v1.11+)
  1523.                 CX = number of processes
  1524.                 DX = number of "(starting)" records (v2.00+)
  1525.                 SI = number of records in process info array
  1526.                       (v2.00+) (always 15 for v1.x)
  1527.                 ES:DI -> process info array (see #1769,#1770)
  1528.         0004h get version
  1529.         Return: AH = major version
  1530.             AL = minor version
  1531.         0005h (v1.10+) get time since DESQview started
  1532.         Return: DX:AX = 1/100s since DV start (v1.10)
  1533.             DX:AX = 1/18s since DV start (v1.11+)
  1534.         0006h (v1.10+) get number of task switches
  1535.         Return: DX:AX = total task switches
  1536.             CX = task switches in last instantaneous interval
  1537. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  1538.       Daniel J. Bodoh
  1539.     for v1.00, function 0003h allocates common memory, which the caller
  1540.       must deallocate after reading the process information; only the
  1541.       currently used records are placed in the buffer
  1542.     for v1.10+, function 0003h merely returns a pointer to the internal
  1543.       array of process information; the caller should make a copy of the
  1544.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  1545.       those records with bit 7 of the first byte set are valid.
  1546. Index:    installation check;DVSIXDI
  1547.  
  1548. Format of DVSIXDI v1.00 information for one process:
  1549. Offset    Size    Description    (Table 1769)
  1550.  00h    BYTE    flags
  1551.         bit 7: process slot is valid
  1552.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  1553.           Open Windows menu, else undefined
  1554.  03h    WORD    Switch Windows window number
  1555.  05h    WORD    segment of process handle
  1556.  07h    WORD    number of tasks owned by process
  1557.  09h    WORD    mapping context of process (see #0306 at INT 15/AX=1016h)
  1558.  0Bh    DWORD    hook for other programs
  1559.  
  1560. Format of DVSIXDI v1.10-v2.00 information for one process:
  1561. Offset    Size    Description    (Table 1770)
  1562.  00h    BYTE    process flags (see #1771)
  1563.  01h    WORD    Open Window keys
  1564.  03h    WORD    Switch Windows number
  1565.  05h    WORD    segment of process handle
  1566.  07h    WORD    number of tasks for process
  1567.  09h    WORD    process mapping context
  1568.  0Bh    DWORD    time process started (relative to start of DESQview)
  1569.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  1570.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  1571.  17h    DWORD    total CPU time since process started
  1572.  1Bh    DWORD    CPU time at start of current instantaneous interval
  1573.  1Fh    DWORD    CPU time in current instantaneous interval
  1574.  23h    DWORD    hook for other programs
  1575. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  1576.  
  1577. Bitfields for DVSIXDI process flags:
  1578. Bit(s)    Description    (Table 1771)
  1579.  7    valid record
  1580.  6    (v2.00+) record is allocated; if bit 7 clear, process is "(starting)"
  1581.       and only offsets 01h and 09h are valid
  1582.  5    (v2.00+) this app currently owns the CPU
  1583.  4    reserved (0)
  1584.  3    DESQview system task
  1585.  2    reserved (0)
  1586.  1    task has keyboard (currently unused)
  1587.  0    task swapped out (currently unused)
  1588. --------Q-2FDE01BXFFFE-----------------------
  1589. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  1590.     AX = DE01h
  1591.     BX = FFFEh
  1592.     CX = 4D47h ("MG")
  1593.     DX = 0052h (0,"R")
  1594. Return: AL = FFh
  1595.     DX = 584Dh
  1596. --------Q-2FDE02-----------------------------
  1597. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  1598.     AX = DE02h
  1599.     BX = mapping context of DESQview
  1600.     DX = handle of DESQview system task
  1601. Note:    driver should pass this call to previous handler after doing its work
  1602. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  1603. --------Q-2FDE03-----------------------------
  1604. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  1605.     AX = DE03h
  1606.     BX = mapping context of DESQview
  1607.     DX = handle of DESQview system task
  1608. Notes:    driver should pass this call to previous handler before doing its work
  1609.     DESQview makes this call when it is exiting, but before unhooking any
  1610.       interrupt vectors
  1611. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  1612. --------Q-2FDE04-----------------------------
  1613. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  1614.     AX = DE04h
  1615.     BX = mapping context of new process (see #0306 at INT 15/AX=1016h)
  1616.     DX = handle of process
  1617. Return: nothing
  1618. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  1619.       (see #1772) from "common" memory to control access to XMS memory
  1620.     all DOS, BIOS, and DV API calls are valid in handler
  1621.     driver should pass this call to previous handler after processing it
  1622. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  1623.  
  1624. Format of XMS XDI structure:
  1625. Offset    Size    Description    (Table 1772)
  1626.  00h    DWORD    pointer to 10-byte record???
  1627.  04h    DWORD    pointer to next XMS XDI structure
  1628.  08h    WORD    mapping context
  1629.  0Ah    BYTE    ???
  1630.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  1631.         (FAR jump to next field)
  1632.  10h  6 BYTEs    FAR handler for XMS driver entry point
  1633.         (consists of a FAR CALL followed by RETF)
  1634. --------Q-2FDE05-----------------------------
  1635. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  1636.     AX = DE05h
  1637.     BX = mapping context of process (see #0306 at INT 15/AX=1016h)
  1638.     DX = handle of last task in process
  1639. Return: nothing
  1640. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  1641.     driver should pass this call to previous handler before processing it
  1642.     all DOS, BIOS, and DV API calls except those generating a task switch
  1643.       are valid in handler
  1644. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  1645. --------Q-2FDE06-----------------------------
  1646. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  1647.     AX = DE06h
  1648.     BX = mapping context of process containing task
  1649.     DX = handle of new task
  1650. Notes:    driver should pass this call to previous handler after processing it
  1651.     all DOS, BIOS, and DV API calls are valid in handler
  1652. --------Q-2FDE07-----------------------------
  1653. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  1654.     AX = DE07h
  1655.     BX = mapping context of process containing task
  1656.     DX = handle of task
  1657. Notes:    driver should pass this call to previous handler before processing it
  1658.     all DOS, BIOS, and DV API calls except those generating a task switch
  1659.       are valid in handler
  1660. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  1661. --------Q-2FDE08-----------------------------
  1662. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  1663.     AX = DE08h
  1664.     BX = mapping context of task being switched from
  1665.           (see #0306 at INT 15/AX=1016h)
  1666.     DX = handle of task being switched from
  1667. Notes:    invoked prior to task swap, interrupts, etc
  1668.     driver should pass this call to previous handler after processing it
  1669. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  1670. --------Q-2FDE09-----------------------------
  1671. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  1672.     AX = DE09h
  1673.     BX = mapping context of task being switched to
  1674.           (see #0306 at INT 15/AX=1016h)
  1675.     DX = handle of task being switched to
  1676. Notes:    state is restored except for interrupts
  1677.     driver should pass this call to previous handler before processing it
  1678. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  1679. --------Q-2FDE0A-----------------------------
  1680. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  1681.     AX = DE0Ah
  1682.     BX = mapping context of task receiving focus
  1683.     DX = handle of running task
  1684. Notes:    driver should pass this call to previous handler before processing it
  1685.     this call often occurs inside a keyboard interrupt
  1686.     DV 2.42 does not provide this call to XDI handlers running inside a
  1687.       window; instead, it directly calls the INT 2F handler which was
  1688.       active at the time DV started
  1689. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  1690. --------Q-2FDE0B-----------------------------
  1691. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  1692.     AX = DE0Bh
  1693.     BX = mapping context of DESQview system task
  1694.     CX = number of system memory paragraphs required for the use of all
  1695.           XDI drivers (DV will add this to system memory in DVP buffer)
  1696.     DX = handle of DESQview system task
  1697.     SI = mapping context of new process if it starts
  1698.     ES:DI -> DVP buffer
  1699. Return: CX incremented as needed
  1700. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  1701.     driver should pass this call to previous handler before processing it
  1702. --------Q-2FDE0C-----------------------------
  1703. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  1704.     AX = DE0Ch
  1705.     BX = mapping context of task being swapped out
  1706.           (see #0306 at INT 15/AX=1016h)
  1707.     DX = handle of DESQview system task
  1708. Note:    driver should pass this call to previous handler after processing it
  1709. --------Q-2FDE0D-----------------------------
  1710. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  1711.     AX = DE0Dh
  1712.     BX = mapping context of process just swapped in
  1713.           (see #0306 at INT 15/AX=1016h)
  1714.     DX = handle of DESQview system task
  1715. Note:    driver should pass this call to previous handler before processing it
  1716. --------Q-2FDE0E-----------------------------
  1717. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  1718.     AX = DE0Eh
  1719.     BX = mapping context of DESQview system task
  1720.     DX = handle of DESQview system task
  1721.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  1722. Note:    driver should pass this call to previous handler after processing it
  1723. --------Q-2FDE0F-----------------------------
  1724. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  1725.     AX = DE0Fh
  1726. Note:    DESQview 2.50+ calls this function just before it completes its
  1727.       initialization.  At the time of the call, DESQview has not yet
  1728.       changed any interrupt vectors
  1729. SeeAlso: AX=DE02h
  1730. --------Q-2FDE10-----------------------------
  1731. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  1732.     AX = DE10h
  1733.     BX = mapping context of process (see #0306 at INT 15/AX=1016h)
  1734.     DX = task handle of process
  1735. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  1736.       similar to AX=DE07h but allows the XDI handler to make calls which
  1737.       cause context switches
  1738. SeeAlso: AX=DE06h,AX=DE07h
  1739. --------c-2FDF00-----------------------------
  1740. INT 2F - HyperWare programs - INSTALLATION CHECK
  1741.     AX = DF00h
  1742.     BX = product code (see #1773)
  1743.     CX = 0000h
  1744.     DX = 0000h
  1745. Return: AL = status
  1746.         00h not installed
  1747.         FFh multiplex number in use
  1748.         CX = 5948h ('YH') if selected product installed
  1749.         ---HyperDisk---
  1750.         BX = code segment of resident portion
  1751.         DX = HyperDisk local data version
  1752. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  1753. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  1754. SeeAlso: INT 13/AX=8EEDh
  1755. Index:    installation check;HyperDisk|installation check;HyperStb
  1756. Index:    installation check;HyperKey|installation check;HyperScreen
  1757. Index:    HyperDisk;installation check|HyperStb;installation check
  1758. Index:    HyperKey;installation check|HyperScreen;installation check
  1759.  
  1760. (Table 1773)
  1761. Values for HyperWare product code:
  1762.  4248h    ('BH') HyperStb
  1763.  4448h    ('DH') HyperDisk v4.20+
  1764.  4B48h    ('KH') HyperKey
  1765.  5348h    ('SH') HyperScreen
  1766. --------Q-2FDF00BX5445-----------------------
  1767. INT 2F U - Quarterdeck TELTSR.COM - INSTALLATION CHECK
  1768.     AX = DF00h
  1769.     BX = 5445h ('TE')
  1770.     CX = 4C54h ('LT')
  1771.     DX = 5352h ('SR')
  1772. Return: BX = 5454h ('TT') if installed
  1773.     CX = 494Eh ('IN') if installed
  1774.     DX = 5454h ('ST') if installed
  1775. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  1776.       which provides an INT 14h interface to the network
  1777. Range:    AH=DEh to AH=FFh and AH=C0h to AH=DDh, selected by scanning
  1778. SeeAlso: AX=DF01h"TELTSR",AX=DF02h"TELTSR",INT 14/AH=56h
  1779. --------N-2FDF01BX0000-----------------------
  1780. INT 2F U - MSG.COM - INSTALLATION CHECK
  1781.     AX = DF01h
  1782.     BX = 0000h
  1783. Return: AX = FDFFh if installed
  1784.        BX = segment of resident code
  1785. Program: MSG.COM is a TSR for intercepting incoming Novell broadcast
  1786.       messages written by Gary Dobbins (Dobbins@Arizona.Edu)
  1787. --------c-2FDF01BX4448-----------------------
  1788. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  1789.     AX = DF01h
  1790.     BX = 4448h ('DH')
  1791. Return: AX = 0000h if function supported
  1792.         BX = number of cache buffers in use
  1793.         CX = number of cache buffers which have been modified
  1794.         DL = caching flags (see #1774)
  1795. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  1796. SeeAlso: AX=DF00h,AX=DF02h
  1797.  
  1798. Bitfields for HyperDisk caching flags:
  1799. Bit(s)    Description    (Table 1774)
  1800.  0    staged writes enabled for floppy disks
  1801.  1    staged writes enabled for hard disks
  1802.  2    writes verified on floppy disks
  1803.  3    writes verified on hard disks
  1804.  4    reserved (0)
  1805.  5    reserved (0)
  1806.  6    floppy caching enabled
  1807.  7    all caching functions enabled
  1808. --------Q-2FDF01-----------------------------
  1809. INT 2F U - Quarterdeck TELTSR.COM - CLOSE CONNECTION
  1810.     AX = DF01h
  1811. Return: nothing???
  1812. Note:    invokes the DESQview/X socket API (see INT 15/AX=DE2Eh) function 0006h
  1813.       to close the socket corresponding to the file handle set with
  1814.       AX=DF02h; NOP if no file handle was ever set
  1815. SeeAlso: AX=DF00h"TELTSR",AX=DF02h"TELTSR"
  1816. --------c-2FDF02BX4448-----------------------
  1817. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  1818.     AX = DF02h
  1819.     BX = 4448h ('DH')
  1820.     DL = new caching flags (see #1774)
  1821. Return: AX = 0000h if supported
  1822.         BX = number of cache buffers in use
  1823.         CX = number of cache buffers which have been modified
  1824.         DL = previous caching flags (see #1774)
  1825. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  1826. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  1827. SeeAlso: AX=DF00h,AX=DF01h
  1828. --------Q-2FDF02-----------------------------
  1829. INT 2F U - Quarterdeck TELTSR.COM - OPEN CONNECTION
  1830.     AX = DF02h
  1831.     BX = file handle for connection's socket
  1832. Return: AX = status
  1833.         0000h successful
  1834.         FFFFh no more room in TELTSR's JFT
  1835. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  1836. Notes:    the indicated file handle becomes owned by TELTSR, and is closed in
  1837.       the caller's JFT
  1838.     multiple calls to this function will override the previous assignment
  1839.       without closing the previous file; use AX=DF01h before further calls
  1840. SeeAlso: AX=DF00h"TELTSR",AX=DF01h"TELTSR"
  1841. --------U-2FE000-----------------------------
  1842. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  1843.     AX = E000h
  1844. Return: AX = 4A52h ("JR") if present
  1845. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  1846.       apparent DOS version analogously to MS-DOS SETVER
  1847. Note:    this installation check differs from the usual one of returning AL=FFh
  1848. SeeAlso: AX=E001h,INT 21/AH=52h
  1849. --------K-2FE000DX5354-----------------------
  1850. INT 2F - StuffIt v3.21+ - INSTALLATION CHECK
  1851.     AX = E000h
  1852.     DX = 5354h ("ST")
  1853. Return: AL = FFh if installed
  1854.         BX = version (BH = major, BL = BCD minor)
  1855.         DX = segment of resident code
  1856. Program: StuffIt is a freeware delayed keyboard stuffer by Terje Mathisen
  1857. --------U-2FE001-----------------------------
  1858. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  1859.     AX = E001h
  1860. Return: AH = major version
  1861.     AL = minor version
  1862. SeeAlso: AX=E000h
  1863. --------U-2FE002-----------------------------
  1864. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  1865.     AX = E002h
  1866. Return: AL = FFh if successful
  1867.         BH = major DOS version
  1868.         BL = minor DOS version
  1869.         CH = DOS version flag
  1870.         CL = OEM number
  1871.         DH = major DR-DOS version number (FFh if unknown)
  1872.         DL = minor DR-DOS version number (FFh if unknown)
  1873. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  1874. --------U-2FE003-----------------------------
  1875. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  1876.     AX = E003h
  1877.     BH = new major DOS version
  1878.     BL = new minor DOS version
  1879.     CH = new DOS version flag
  1880.     CL = new DOS revision number
  1881.     DH = new OEM number
  1882. SeeAlso: AX=E002h
  1883. --------U-2FE004-----------------------------
  1884. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  1885.     AX = E004h
  1886. Return: AL = FFh if successful
  1887. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  1888. --------U-2FE005-----------------------------
  1889. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  1890.     AX = E005h
  1891. Return: AL = FFh if successful
  1892. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  1893. --------U-2FE006-----------------------------
  1894. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  1895.     AX = E006h
  1896. Return: AL = FFh if successful
  1897.         BL = status
  1898.         01h resident and active
  1899.         02h resident and inactive
  1900. --------U-2FE007-----------------------------
  1901. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  1902.     AX = E007h
  1903. Return: AL = FFh if successful
  1904.         BL = status
  1905.         00h if TaskMAX not loaded before SETDRVER
  1906.         FFh if TaskMAX was loaded before SETDRVER
  1907. SeeAlso: AX=E003h
  1908. --------U-2FE0-------------------------------
  1909. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  1910.     AH = E0h
  1911.     AL = 08h-10h
  1912. --------K-2FE100-----------------------------
  1913. INT 2F - Phantom2 v1.1+ - INSTALLATION CHECK
  1914.     AX = E100h
  1915. Return: AX = 0001h if installed
  1916.         DS:SI -> ASCIZ hotkey name
  1917.         DS:DI -> ASCIZ recording filename
  1918. Program: Phantom of the Keyboard II is a shareware keystroke recorder/replayer
  1919.       by P2 Enterprises
  1920. SeeAlso: AX=E101h,AX=E102h,AX=E103h,AX=E300h
  1921. Index:    hotkeys;Phantom2
  1922. --------K-2FE101-----------------------------
  1923. INT 2F - Phantom2 v1.1+ - FUNCTION REQUEST
  1924.     AX = E101h
  1925.     BX = function mask (see #1775)
  1926.     CX = code for hotkey (as returned by INT 16/AH=00h) if BX bit 6 set
  1927.     DS:DX -> ASCIZ filespec if BX bit 7 set
  1928. SeeAlso: AX=E100h
  1929. Index:    hotkeys;Phantom2
  1930.  
  1931. Bitfields for Phantom2 function mask:
  1932. Bit(s)    Description    (Table 1775)
  1933.  0    record
  1934.  1    play
  1935.  2    QuickPlay
  1936.  3    loop
  1937.  4    mode display toggle
  1938.  5    sound toggle
  1939.  6    set hotkey
  1940.  7    set filespec
  1941. --------K-2FE102-----------------------------
  1942. INT 2F - Phantom2 v1.1+ - UNINSTALL
  1943.     AX = E102h
  1944. Return: AX = status
  1945.         0001h removal successful
  1946.         0002h not installed as TSR
  1947.         FFFFh disabled but not removed
  1948. SeeAlso: AX=E100h
  1949. --------K-2FE103-----------------------------
  1950. INT 2F - Phantom2 v2.8 - SET ??? FLAG
  1951.     AX = E103h
  1952. Return: AX = 0001h
  1953. SeeAlso: AX=E100h
  1954. --------y-2FE200-----------------------------
  1955. INT 2F - SecureDevice - LOGIN TO DRIVE
  1956.     AX = E200h
  1957.     DL = drive number (0 = A:)
  1958.     DS:SI -> 104-byte key
  1959. Return: AL = status
  1960.         00h unable to determine key's validity
  1961.         01h key is valid
  1962.         FFh key is invalid
  1963. Program: SecureDevice is a copylefted device driver by Max Loewenthal and
  1964.       Arthur Helwig which turns one or more disk files into encrypted
  1965.       logical drives
  1966. SeeAlso: AX=E201h,AX=E203h,AX=E209h
  1967. --------y-2FE201-----------------------------
  1968. INT 2F - SecureDevice - GET INFORMATION
  1969.     AX = E201h
  1970.     DX = driver index (0000h = first loaded)
  1971. Return: AL = number of volumes handled by driver
  1972.     DL = drive number of first volume (00h = A:)
  1973. SeeAlso: AX=E200h,AX=E203h,AX=E209h
  1974. --------y-2FE203-----------------------------
  1975. INT 2F - SecureDevice - DESTROY PASSWORD (LOGOUT FROM DRIVE)
  1976.     AX = E203h
  1977.     DL = drive number (00h = A:) or FFh for all drives
  1978. Return: nothing
  1979. SeeAlso: AX=E200h,AX=E209h
  1980. --------y-2FE209DX0000-----------------------
  1981. INT 2F - SecureDevice - INSTALLATION CHECK
  1982.     AX = E209h
  1983.     DX = 0000h
  1984. Return: AX = 1DEAh if installed
  1985.         DX = number of drivers installed
  1986. --------K-2FE300-----------------------------
  1987. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  1988.     AX = E300h
  1989. Return: AL = state
  1990.         00h not installed
  1991.         FEh if installed but suspended (v3.0+)
  1992.         FFh installed
  1993. Program: ANARKEY.COM is a commandline recall program by Steven Calwas
  1994. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1995. SeeAlso: AX=E100h,AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h
  1996. SeeAlso: AX=E307h,INT 66"Newkey"
  1997. --------V-2FE300-----------------------------
  1998. INT 2F - Blank - INSTALLATION CHECK
  1999.     AX = E300h
  2000. Return: AL = FFh if installed
  2001.         ES = resident code segment
  2002. Program: Blank is a shareware screen blanker by Yonah Schmeidler
  2003. Note:    AH=E3h is the default, which may be reconfigured by the installation
  2004.       program in the registered version
  2005. SeeAlso: AH=93h,AX=C050h,INT 14/AX=AA01h
  2006. Index:    screen saver;Blank
  2007. --------K-2FE301-----------------------------
  2008. INT 2F U - ANARKEY.COM v2+ - GET ???
  2009.     AX = E301h
  2010. Return: DX:BX -> ??? (see #1776,#1777)
  2011. SeeAlso: AX=E300h
  2012.  
  2013. Format of returned data structure for ANARKEY v2.0:
  2014. Offset    Size    Description    (Table 1776)
  2015.  -7   7 BYTEs    signature ('ANARKEY')
  2016.  00h    WORD    ??? (I see 0001h in v2.0)
  2017.  02h    WORD    ??? (I see 0001h in v2.0)
  2018.  04h    WORD    ??? (I see 0 in v2.0)
  2019.  06h    WORD    PSP segment of next program loaded
  2020.  
  2021. Format of returned data structure for ANARKEY v3+:
  2022. Offset    Size    Description    (Table 1777)
  2023.  -1    BYTE    multiplex number
  2024.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  2025.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  2026.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  2027.  05h    WORD    PSP segment of next program loaded
  2028. --------K-2FE302-----------------------------
  2029. INT 2F U - ANARKEY.COM v3+ - ???
  2030.     AX = E302h
  2031.     BL = ???
  2032. Return: ???
  2033. SeeAlso: AX=E300h
  2034. --------K-2FE303-----------------------------
  2035. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  2036.     AX = E303h
  2037.     BL = function
  2038.         01h toggle insert mode
  2039.         02h display contents of history buffer
  2040.         03h write history buffer to file
  2041.         ES:DX -> file name
  2042.         04h clear history buffer
  2043.         05h undefine all aliases
  2044.         06h show aliases
  2045.         07h list programs using Unix switchar
  2046.         08h jump to bottom of history buffer
  2047.         09h (v4.0) add string to history buffer
  2048.         ES:DX -> ASCIZ string
  2049.         0Ah (v4.0) ???
  2050.         ES:DX -> ???
  2051.         0Bh (v4.0) copy string to edit buffer for use as next input line
  2052.         ES:DX -> ASCIZ string
  2053.         0Ch (v4.0) ???
  2054.         0Dh (v4.0) copy ??? to ???
  2055.         0Eh (v4.0) ???
  2056.         0Fh (v4.0) ???
  2057.         10h (v4.0) set ??? flag
  2058.         11h (v4.0) display error message about running in EMS under Windows
  2059. Return: ???
  2060. SeeAlso: AX=E300h
  2061. --------K-2FE304-----------------------------
  2062. INT 2F U - ANARKEY.COM v2+ - ???
  2063.     AX = E304h
  2064.     BL = ???
  2065. Return: ???
  2066. SeeAlso: AX=E300h
  2067. --------K-2FE305-----------------------------
  2068. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  2069.     AX = E305h
  2070.     BL = new state
  2071.         01h suspended
  2072.         00h enabled
  2073. SeeAlso: AX=E300h
  2074. --------K-2FE306-----------------------------
  2075. INT 2F U - ANARKEY.COM v4.0 - GET ???
  2076.     AX = E306h
  2077. Return: AX = ???
  2078. SeeAlso: AX=E300h
  2079. --------K-2FE307-----------------------------
  2080. INT 2F U - ANARKEY.COM v4.0 - GET ???
  2081.     AX = E307h
  2082. Return: AX = ???
  2083.     BL = ???
  2084. SeeAlso: AX=E300h
  2085. --------l-2FE44D-----------------------------
  2086. INT 2F - NDOS - API
  2087.     AX = E44Dh
  2088. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  2089.       Norton Utilities
  2090. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  2091.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  2092.       check returns AX=44EEh instead of AX=44DDh
  2093. SeeAlso: AX=D44Dh,AX=E44Eh
  2094. --------l-2FE44E-----------------------------
  2095. INT 2F C - NDOS - AWAITING USER INPUT
  2096.     AX = E44Eh
  2097.     BX = condition
  2098.         0000h NDOS is ready to display prompt
  2099.         0001h NDOS has displayed the prompt, about to accept user input
  2100. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  2101. SeeAlso: AX=E44Dh
  2102. --------K-2FE44FBX0000-----------------------
  2103. INT 2F - NDOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  2104.     AX = E44Fh
  2105.     BX = 0000h
  2106. Return: AX = 44EEh if installed
  2107. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  2108.       Norton Utilities
  2109. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  2110.       which emulate the 4DOS and NDOS keystack
  2111. SeeAlso: AX=D44Fh/BX=0000h,AX=E44Fh/BX=0001h
  2112. --------K-2FE44FBX0001-----------------------
  2113. INT 2F - NDOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  2114.     AX = E44Fh
  2115.     BX = 0001h
  2116.     CX = number of keystrokes (01h-FFh)
  2117.     DS:DX -> keystroke list (one word per keystroke)
  2118. Return: AX = status
  2119.         0000h successful
  2120.         nonzero failed
  2121.     BX,CX,DX destroyed
  2122. Notes:    the keystrokes are the exact values to return from subsequent calls to
  2123.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  2124.         0000h causes subfunctions 01h and 11h to indicate an empty
  2125.               keyboard buffer
  2126.         FFFFh is followed by a word indicating the number of clock
  2127.               ticks to delay before the next faked keystroke
  2128.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  2129.       invocation, and does not range-check CX; it will overwrite memory
  2130.       following the resident portion if CX is greater than 100h.
  2131.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  2132.       which emulate the 4DOS and NDOS keystack
  2133. SeeAlso: AX=E44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  2134. --------f-2FE77EBX0000-----------------------
  2135. INT 2F - CTDEMN - INSTALLATION CHECK
  2136.     AX = E77Eh
  2137.     BX = 0000h
  2138.     CX = 4F4Dh ('OM')
  2139.     DX = 5453h ('TS')
  2140. Return: AX = 7EE7h if installed
  2141.         BX = resident code segment
  2142.         CX = 6F6Dh ('om')
  2143.         DX = 7473h ('ts')
  2144. Program: CTDEMN is a file daemon TSR by Simultan AG
  2145. --------E-2FED00-----------------------------
  2146. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  2147.     AX = ED00h
  2148.     BL = DOS extender ID (see #1778)
  2149. Return: AL = status
  2150.         00h not installed
  2151.         FFh installed
  2152.         SI = 5048h ("PH")
  2153.         DI = 4152h ("AR")
  2154.         CH = major version number
  2155.         CL = minor version number
  2156.         DX = flags
  2157.             bit 0: running under DPMI
  2158.             bit 1: running under Phar Lap VMM
  2159.         if running under DPMI:
  2160.             BX = DPMI version (BH = major, BL = minor)
  2161. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  2162.  
  2163. (Table 1778)
  2164. Values for Phar Lap DOS extender ID:
  2165.  01h    286dosx v1.3+ (Software Development Kit)
  2166.  02h    286dosx v1.3+ (Run-Time Kit)
  2167.  03h    386dosx v4.0+ (SDK)
  2168.  04h    386dosx v4.0+ (RTK)
  2169. --------E-2FED03-----------------------------
  2170. INT 2F R - Phar Lap 386/DOS-Extender v4.1 - GET EXTENDER ENTRY POINT
  2171.     AX = ED03h
  2172.     CX = real-mode code segment
  2173.     DX = real-mode data segment
  2174. Return: CF clear if successful
  2175.         CX = protected-mode code segment selector
  2176.         DX = protected-mode data segment selector
  2177.         ES:DI -> real-mode entry point for calling protected-mode functions
  2178.               (see INT 21/AX=250Dh)
  2179.     CF set on error
  2180.         AX = error code
  2181.         0008h unable to allocate LDT descriptors
  2182. --------E-2FED10BL05-------------------------
  2183. INT 2F - Pharlap DOS Extender - ???
  2184.     AX = ED10h
  2185.     BL = 05h
  2186.     ES:SI -> ??? structure
  2187. Return:    AX = ???
  2188.     SI = ???
  2189.     DI = ???
  2190. SeeAlso: AX=ED00h,AX=ED11h
  2191. --------E-2FED11BL05-------------------------
  2192. INT 2F - Pharlap DOS Extender - FATAL EXIT TO REAL MODE ???
  2193.     AX = ED11h
  2194.     BL = 05h
  2195.     CX = ???
  2196.     DX = ???
  2197.     ES:SI -> ??? structure
  2198.     SS:SP = new stack ???
  2199. Return: ???
  2200. Note:    called immediately prior to terminating program with INT 21/AX=4CFFh
  2201. SeeAlso: AX=ED00h,AX=ED10h
  2202. --------K-2FED58-----------------------------
  2203. INT 2F U - K5.COM - INSTALLATION CHECK
  2204.     AX = ED58h
  2205. Return: AX = 000Dh if installed
  2206.         BX = 9999h if driver active
  2207.         ???
  2208. Program: K5 is an extended keyboard driver by Martin Gerdes, based on his K3
  2209. SeeAlso: INT 16/AX=AF20h
  2210. --------E-2FED80-----------------------------
  2211. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  2212.     AX = ED80h
  2213.     BL = DOS extender ID (see #1778)
  2214.     SI = 5048h ("PH")
  2215.     DI = 4152h ("AR")
  2216.     ???
  2217. Return: ???
  2218. ----------2FEDC8BX0000-----------------------
  2219. INT 2F - Novell ??? - INSTALLATION CHECK???
  2220.     AX = EDC8h ('EDC' = Novell European Development Center)
  2221.     BX = 0000h
  2222.     CX = 0000h
  2223.     DX = 1234h
  2224. Return: ???
  2225. Desc:    called by Novell DOS 7 LOCK command during installation; purpose
  2226.       unknown
  2227. --------y-2FEE00-----------------------------
  2228. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  2229.     AX = EE00h
  2230. Return: AL = FFh if installed
  2231. Program: GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  2232. SeeAlso: INT 21/AH=40h"NB.SYS"
  2233. --------U-2FEE00-----------------------------
  2234. INT 2F - XVIEW - INSTALLATION CHECK
  2235.     AX = EE00h
  2236. Return: AX = 00FFh if installed
  2237. Program: XVIEW is a hypertext viewer by Flambeaux Software, Inc.
  2238. --------N-2FEE00-----------------------------
  2239. INT 2F - WEB v4.02 - INSTALLATION CHECK
  2240.     AX = EE00h
  2241. Return: AL = status
  2242.         00h not installed
  2243.         FFh installed
  2244. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  2245. SeeAlso: AH=EEh"WEB",AX=EEF0h
  2246. --------U-2FEE01-----------------------------
  2247. INT 2F - XVIEW - POP UP GIVING TOPIC SEARCH KEYWORD
  2248.     AX = EE01h
  2249.     DS:DX -> ASCIZ string containing case-insensitive keyword to look up
  2250. Return: AX = status (see #1779)
  2251. Note:    the specified keyword should be a hyperlink in the _IndexPage of some
  2252.       database; the current database is searched first
  2253. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE03h,AX=EE04h,AX=EE06h
  2254.  
  2255. (Table 1779)
  2256. Values for XVIEW function status:
  2257.  0000h    successful
  2258.  00F1h    unknown subfunction
  2259.  00F2h    unable to pop up
  2260. --------U-2FEE02-----------------------------
  2261. INT 2F - XVIEW - POP UP GIVING A PAGE NUMBER
  2262.     AX = EE02h
  2263.     DX = physical page number or anchor page number (see #1780)
  2264. Return: AX = status (see #1779)
  2265. Note:    physical page numbers are assigned by the hypertext compiler, and
  2266.       will change if a page is inserted in the middle
  2267. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE05h,AX=EE06h
  2268.  
  2269. (Table 1780)
  2270. Values for XVIEW anchor page number:
  2271.  FFEAh    _Credits
  2272.  FFECh    _SearchTopics
  2273.  FFEDh    _SearchText
  2274.  FFF0h    _ManualList
  2275.  FFF5h    _HelpOnHelp
  2276.  FFF8h    _HomePage
  2277.  FFF9h    _IndexPage
  2278. --------U-2FEE03-----------------------------
  2279. INT 2F - XVIEW - POP UP GIVING FILENAME AND SEARCH TOPIC OR PAGE NUMBER
  2280.     AX = EE03h
  2281.     DS:DX -> data packet (see #1781)
  2282. Return: AX = status (see #1779)
  2283. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE06h
  2284.  
  2285. Format of XVIEW data packet:
  2286. Offset    Size    Description    (Table 1781)
  2287.  00h    DWORD    -> ASCIZ database filespec (0000h:0000h for current database)
  2288.  04h    DWORD    -> ASCIZ text to look up or 0000h:0000h
  2289.  08h    WORD    page number (0000h if keyword used)
  2290.  0Ah  6 BYTEs    reserved
  2291. --------U-2FEE04-----------------------------
  2292. INT 2F - XVIEW - POP UP AND READ SCREEN FOR SEARCH TOPIC KEYWORD
  2293.     AX = EE04h
  2294. Return: AX = status (see #1779)
  2295. Note:    equivalent to the action taken when the user presses the Alt-L hotkey
  2296. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE03h,AX=EE06h
  2297. --------U-2FEE05-----------------------------
  2298. INT 2F - XVIEW - POP UP TO MOST-RECENTLY VIEWED PAGE
  2299.     AX = EE05h
  2300. Return: AX = status (see #1779)
  2301. Note:    equivalent to the action taken when the user presses the Alt-H hotkey
  2302. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE06h
  2303. --------U-2FEE06-----------------------------
  2304. INT 2F - XVIEW - WAIT FOR POP-DOWN AND GET EXIT CODE
  2305.     AX = EE06h
  2306. Return: AX = status (see also AX=EE01h)
  2307.         0001h specified filename is not an xText database
  2308.         0002h no databases found
  2309.         0003h bad data in file
  2310.         0004h memory shortage
  2311.         0005h unable to open the requested file
  2312.         0007h invalid page number for file
  2313. Note:    although this call is not required, the exit code can alert the
  2314.       caller to problems; if the call is not made, the program should
  2315.       enforce a delay of about 1/2 second to allow the viewer to pop up,
  2316.       and should not get keyboard input or attempt disk accesses during
  2317.       the delay
  2318. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE03h,AX=EE04h,AX=EE05h
  2319. --------N-2FEE-------------------------------
  2320. INT 2F - WEB v4.02 - WEB MODULE INSTALLATION CHECK
  2321.     AH = EEh
  2322.     AL = module ID (see #1782)
  2323. Return: AX = 0000h if installed
  2324.         ES:DI -> far entry point for module-specific API calls
  2325.           (see #1783,#1784,#1785,#1786,#1787)
  2326. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  2327. SeeAlso: AX=EE00h"WEB"
  2328.  
  2329. (Table 1782)
  2330. Values for WEB module ID:
  2331.  10h    server module (SERVER.EXE)
  2332.  20h    client module (CLIENT.EXE)
  2333.  30h    mail module (MAIL.EXE)
  2334.  40h    spooler (PCSPOOL.EXE)
  2335.  50h    kernel module (KERNEL.EXE)
  2336.  60h    SAP module (KERNEL.EXE)
  2337.  70h    resident station manager (SM.EXE)
  2338.  90h    router module (ROUTER.EXE)
  2339.  
  2340. (Table 1783)
  2341. Call server module entry point with:
  2342.     BX = function
  2343.         0000h remove server module
  2344.         Return: AX = status (0000h if successful, else WEB error code)
  2345.         0001h create SYSINFO file
  2346.         Note:    the SYSINFO file is used by the station manager when
  2347.               displaying info for a particular station
  2348.         0002h get server object table
  2349.         Return: CX = number of server objects
  2350.             ES:DI -> server object table
  2351.         Note:    server objects include drives and devices that the
  2352.               server module controls
  2353.         0003h get server variables
  2354.         Return: ES:DI -> server variables
  2355.  
  2356. (Table 1784)
  2357. Call client module entry point with:
  2358.     BX = function
  2359.         0000h remove client module
  2360.         Return: AX = status (0000h if successful, else WEB error code)
  2361.         0001h decrement client-only flag
  2362.         0002h increment client-only flag
  2363.         0005h set device capture
  2364.         Note:    decrements DeviceOutput flag, telling the spooler that
  2365.               it may trap device output again
  2366.         0006h clear device capture
  2367.         Note:    increments DeviceOutput flag, telling the spooler that
  2368.               it should not trap device output (this is used
  2369.               internally by the spooler to prevent it from trapping
  2370.               its own output)
  2371.         0007h get client debug pointer
  2372.         Return: ES:DI -> client debug data structure (see #1788)
  2373.         0008h get root drive
  2374.         Return: AL = WEB startup drive
  2375.         0009h get maximum possible drive/device redirections
  2376.         Return: AL = maximum drive redirections
  2377.             CH = maximum LPTx redirections
  2378.             CL = maximum COMx redirections
  2379.         000Ah suspend client
  2380.         Return: AX = previous value of Suspend flag
  2381.         000Bh resume client
  2382.         Return: AX = previous value of Suspend flag
  2383.         000Ch get instance data
  2384.         CX = maximum number of structures in array
  2385.         ES:DI -> buffer for array of WIN_INSTANCE_DATA structures
  2386.               (see #1789)
  2387.         Return: CX = number of structures actually returned
  2388.         Note:    used internally by WEB4WIN
  2389.  
  2390. (Table 1785)
  2391. Call mail module entry point with:
  2392.     BX = function
  2393.         0000h remove mail module
  2394.         Return: AX = status (0000h successful, else WEB error code)
  2395.         0001h set mail poll
  2396.         Note:    schedules the WEB mail module
  2397.         0002h set mail notify
  2398.         Note:    sets the Notify flag, which determines whether the
  2399.               user will be notified when mail is received
  2400.         0003h clear mail notify
  2401.         Note:    clears the Notify flag, which determines whether the
  2402.               user will be notified when mail is received
  2403.         0004h check whether new mail has arrived
  2404.         Return: AL = new mail status
  2405.                 00h no new mail since last call
  2406.                 else new mail has arrived
  2407.         Note:    also clears the new-mail flag after retrieving it
  2408.         0005h send notify
  2409.         ES:DI -> name of WEB user to be notified
  2410.         0006h get post office
  2411.         Return: ES:DI -> full network path of Post Office subdirectory
  2412.  
  2413. (Table 1786)
  2414. Call spooler entry point with:
  2415.     BX = function
  2416.         0000h remove PCSpool module
  2417.         Return: AX = status (0000h successful, else WEB error code)
  2418.         0001h set spooler poll
  2419.         Note:    schedules the WEB spooler
  2420.         0002h check spooler changed
  2421.         Return:    AX = 0000h
  2422.         Note:    this call is a NOP in current versions of WEB
  2423.  
  2424. (Table 1787)
  2425. Call kernel entry point with:
  2426.     BX = function
  2427.         0000h remove kernel module
  2428.         Return: AX = status (0000h successful, else WEB error code)
  2429.         0001h set kernel ^S filter
  2430.         DL = new state (00h don't filter ^S, nonzero do filter)
  2431.         0002h get kernel data area
  2432.         Return: ES:DI -> kernel data area
  2433.         0003h display dialog box
  2434.         CL = dialog box type
  2435.             00h password
  2436.             01h E-Note received notification
  2437.             02h Novell login
  2438.             03h general notification
  2439.         DL = number of rows to display
  2440.         ES:SI -> array of far pointers to rows to be displayed
  2441.         ES:DI -> Pascal-style input buffer
  2442.         Return: AX = status (0000h successful, else error code)
  2443.         0004h kernel service events
  2444.         0005h get kernel's in-critical-section flag
  2445.         Return: ES:DI -> kernel InCriticalSection flag
  2446.         0006h schedule DOS event
  2447.         AL = directive
  2448.             00h do not ignore WEB ExtraBusy flag
  2449.             01h ignore ExtraBusy flag
  2450.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  2451.         ES:SI -> WEB AES Event Control Block (ECB) (see #1790)
  2452.         Notes:    the WEB Asynchronous Event Scheduler is similar to the
  2453.               one used by IPX; this call schedules a special ECB
  2454.               to be executed at a later time.  Unlike IPX ECBs,
  2455.               the timeout must be set explicitly by the caller
  2456.             this function also calls function 0004h
  2457.         0007h check busy
  2458.         AL = directive
  2459.             00h do not ignore WEB ExtraBusy flag
  2460.             01h ignore ExtraBusy flag
  2461.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  2462.         Return: AX = status (0000h not busy, else busy)
  2463.         0008h set keyboard intercept
  2464.         Note:    currently a NOP which returns immediately
  2465.         0009h get keyboard intercept
  2466.         Note:    currently a NOP which returns immediately
  2467.         000Ah get dialog flags
  2468.         Return: ES:DI -> kernel dialog flags (see #1791)
  2469.         000Bh get network path
  2470.         Return: ES:DI -> fully-qualified network path of file where
  2471.                 the screen is stored on Dialog calls
  2472.         000Ch kernel alternate dialog
  2473.         CL = dialog box type
  2474.             00h password
  2475.             01h E-Note received notification
  2476.             02h Novell login
  2477.             03h general notification
  2478.         DL = number of rows to display
  2479.         ES:SI -> array of far pointers to rows to be displayed
  2480.         ES:DI -> Pascal-style input buffer
  2481.         Return: AX = status (0000h successful, else error code)
  2482.         Note:    this function is identical to function 0003h except
  2483.               that it does not notify WEB4WIN of the impending
  2484.               dialog request
  2485.         000Dh get machine/operating system type
  2486.         Return: AX = machine/operating system type
  2487.                 01h IBM PC, MS-DOS
  2488.                 02h IBM PC, DOSV (Japanese)
  2489.                 03h NEC PC-9800, JDOS (Japanese)
  2490.                 04h IBM PC, Korean DBC DOS
  2491.  
  2492. Format of client debug data structure:
  2493. Offset    Size    Description    (Table 1788)
  2494.  00h    WORD    total files
  2495.  02h    WORD    files free
  2496.  04h    WORD    no files
  2497.  06h    WORD    minimum files
  2498.  08h    WORD    total FCBs
  2499.  0Ah    WORD    total safe FCBs
  2500.  0Ch    WORD    FCBs in use
  2501.  0Eh    WORD    wrong FCB
  2502.  10h    WORD    compressed
  2503.  12h    WORD    retransmits
  2504.  
  2505. Format of WIN_INSTANCE_DATA structure:
  2506. Offset    Size    Description    (Table 1789)
  2507.  00h    DWORD    real-mode pointer to data to be instanced
  2508.  04h    WORD    size of data to be instanced
  2509.  
  2510. Format of WEB AES Event Control Block:
  2511. Offset    Size    Description    (Table 1790)
  2512.  00h    DWORD    link address
  2513.  04h    WORD    ESR address
  2514.  08h    BYTE    InUse flag
  2515.  09h    BYTE    completion code
  2516.  0Ah  3 BYTEs    reserved
  2517.  0Dh    WORD    timeout
  2518.  0Fh    BYTE    IgnoreExtra flag
  2519.  10h    WORD    PSP
  2520.  12h    DWORD    DTA
  2521.  16h    WORD    AX value for DOS critical information
  2522.  18h    WORD    BX value for DOS critical information
  2523.  1Ah    WORD    CX value for DOS critical information
  2524.  1Ch    WORD    DX value for DOS critical information
  2525.  
  2526. (Table 1791)
  2527. Values for kernel dialog flags:
  2528.  01h    dialog will timeout
  2529.  02h    display stars instead of entered keystrokes
  2530. --------N-2FEEF0-----------------------------
  2531. INT 2F - WEB v4.02 - WEB GENERAL NOTIFICATION
  2532.     AX = EEF0h
  2533.     BX = notification function ID (see #1792)
  2534. Return: varies by notification function
  2535. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  2536. Note:    the notification functions are used internally by WEB modules to notify
  2537.       other modules and external programs of actions or event, and should
  2538.       never be called by an application
  2539. SeeAlso: AX=EE00h"WEB"
  2540.  
  2541. (Table 1792)
  2542. Values for WEB Notification Function ID:
  2543.  00h    node added
  2544.  01h    node deleted
  2545.  02h    dial attempt
  2546.  03h    dial failed
  2547.  04h    file close
  2548.  05h    close connection
  2549.  07h    check Windows mode
  2550.  20h    link up
  2551.  21h    link down
  2552. --------K-2FF000-----------------------------
  2553. INT 2F U - 4MAP - INSTALLATION CHECK
  2554.     AX = F000h
  2555. Return: AX = 00FFh
  2556. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  2557. Note:    returns AX=00FFh for any value of AL not listed here
  2558. SeeAlso: AX=D44Dh,AX=F001h,AX=F002h
  2559. --------K-2FF001-----------------------------
  2560. INT 2F U - 4MAP - GET KEY MAPPINGS
  2561.     AX = F001h
  2562. Return: ES:BX -> key mappings
  2563. SeeAlso: AX=F000h
  2564. --------K-2FF002-----------------------------
  2565. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  2566.     AX = F002h
  2567.     BL = character to insert
  2568. Return: AX = status
  2569.         0000h successful
  2570.         0001h buffer full
  2571. SeeAlso: AX=F000h,AX=F003h
  2572. --------K-2FF003-----------------------------
  2573. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  2574.     AX = F003h
  2575.     BL = character to insert
  2576. Return: AX = status
  2577.         0000h successful
  2578.         0001h buffer full
  2579. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  2580. SeeAlso: AX=F000h,AX=F002h
  2581. --------m-2FF1-------------------------------
  2582. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  2583.     AH = F1h
  2584.     AL <> F1h
  2585. Return: AL = F1h if installed
  2586. Program: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  2587.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  2588.       TSR at a time is brought back into memory at the user's request.
  2589. --------E-2FF100-----------------------------
  2590. INT 2F - DOS EXTENDER INSTALLATION CHECK
  2591.     AX = F100h
  2592. Return: AL = FFh if DOS extender present
  2593.         SI = 444Fh ("DO")
  2594.         DI = 5358h ("SX")
  2595. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  2596. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  2597. --------W-2FF200-----------------------------
  2598. INT 2F - WINX - INSTALLATION CHECK
  2599.     AX = F200h
  2600. Return: AX = 00FFh if installed
  2601. Program: WINX is a DOS/Windows utilities by Al Williams which can be used to
  2602.       launch Windows applications from a DOS Box; it was published in
  2603.       "DOS and Windows Protected Mode-Programming with DOS Extenders"
  2604.       (Addison-Wesley) and should not be confused with the Windows driver
  2605.       of the same name which is part of the DESQview/X package
  2606. --------W-2FF201-----------------------------
  2607. INT 2F - WINX - RETURN ADDRESS OF SERVER BUFFER
  2608.     AX = F201h
  2609. Return: AX = status
  2610.         FFFFh if WINX is busy processing a different request
  2611.         0000h if successful
  2612.         BX:CX = address of server buffer (see #1793)
  2613.  
  2614. Format of WINX server buffer:
  2615. Offset    Size    Description    (Table 1793)
  2616.  00h    BYTE    command/status
  2617.         00h buffer available
  2618.         01h buffer contains result
  2619.         02h change directory
  2620.         03h execute program
  2621.         FFh terminate windows portion of WINX
  2622.  01h  ? BYTEs    command (03h) or directory (02h)
  2623.   or
  2624.  01h    DWORD    result (01h)
  2625. --------W-2FF202-----------------------------
  2626. INT 2F - WINX - SET SERVER'S WORKING DIRECTORY
  2627.     AX = F202h
  2628.     BX:CX -> directory
  2629. Return: AX = status
  2630.         FFFFh if WINX is busy processing a different request
  2631.         0000h if successful
  2632. SeeAlso: AX=F200h,AX=F203h
  2633. --------W-2FF203-----------------------------
  2634. INT 2F - WINX - EXECUTE COMMAND
  2635.     AX = F203h
  2636.     BX:CX -> command
  2637. Return: AX = status
  2638.         0000h if successful
  2639.         FFFFh if WINX is busy processing a different request
  2640. SeeAlso: AX=F200h,AX=F202h
  2641. --------G-2FF400-----------------------------
  2642. INT 2F - FINDIRQ.COM - INSTALLATION CHECK
  2643.     AX = F400h
  2644. Return: AL = 01h if installed
  2645. Program: FINDIRQ is a program by Rick Knoblaugh published in the 9/28/93 issue
  2646.       of PC Magazine; when run as a TSR it can determine which IRQs are
  2647.       used only when a device is active
  2648. SeeAlso: AX=F401h
  2649. --------N-2FF401-----------------------------
  2650. INT 2F - PowerLAN - VERSION CHECK
  2651.     AX = F401h
  2652. Return: ES:BX -> WORD containing 100*version (in decimal)
  2653. Program: PowerLAN is by Performance Technology
  2654. --------G-2FF401CX5121-----------------------
  2655. INT 2F - FINDIRQ.COM - GET HOOKED INTERRUPTS
  2656.     AX = F401h
  2657.     CX = 5121h ('Q!')
  2658. Return: AX:DX -> hooked interrupt table (see #1794)
  2659. SeeAlso: AX=F400h
  2660.  
  2661. Format of FINDIRQ hooked interrupt table:
  2662. Offset    Size    Description    (Table 1794)
  2663.  00h    BYTE    1Ch
  2664.  01h    DWORD    FINDIRQ's INT 1C handler
  2665.  05h    DWORD    original INT 1C handler
  2666.  09h    BYTE    28h
  2667.  0Ah    DWORD    FINDIRQ's INT 28 handler
  2668.  0Eh    DWORD    original INT 28 handler
  2669.  12h    BYTE    2Fh
  2670.  13h    DWORD    FINDIRQ's INT 2F handler
  2671.  17h    DWORD    original INT 2F handler
  2672. --------d-2FF700-----------------------------
  2673. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  2674.     AX = F700h
  2675. Return: AL = state
  2676.         00h not installed
  2677.         FFh installed
  2678. Program: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  2679. --------d-2FF701-----------------------------
  2680. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  2681.     AX = F701h
  2682.     BX:CX = 32-bit count of 55ms timer ticks
  2683. --------d-2FF800CX4455-----------------------
  2684. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  2685.     AX = F800h
  2686.     CX = 4455h ("DU")
  2687.     DL = 45h ("E")
  2688. Return: AL = FFh if installed
  2689.         ES:BX -> ASCII signature "Universal Data Exchange"
  2690. Program: SuperStor is a disk-compression program by Addstor.
  2691. Note:    returns AX=0001h if AL is not 00h or 01h
  2692. SeeAlso: AX=1001h,AX=F801h
  2693. --------d-2FF801CX4455-----------------------
  2694. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  2695.     AX = F801h
  2696.     CX = 4455h ("DU")
  2697.     DL = 45h ("E")
  2698.     ES:BX = return address if successful
  2699. Return: at specified address if successfully removed from memory
  2700.     else
  2701.         AL = error code
  2702.         ???
  2703. Program: SuperStor is a disk-compression program by Addstor.
  2704. Note:    returns AX=0001h if AL is not 00h or 01h
  2705. SeeAlso: AX=1001h,AX=F800h
  2706. --------*-2FFB-------------------------------
  2707. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  2708.     AH = FBh
  2709. SeeAlso: AX=FB42h/BX=0001h
  2710. --------f-2FFB-------------------------------
  2711. INT 2F U - Conner Backup Exec AUTORES - API
  2712.     AH = FBh
  2713.     BL = function number (00h-07h)
  2714.     ???
  2715. Return: ???
  2716. Program: AUTORES is a resident program launcher for unattended backups
  2717. --------a-2FFB00-----------------------------
  2718. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  2719.     AX = FB00h
  2720. Return: AX = 00FFh if installed
  2721. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2722. SeeAlso: INT 10/AX=3800h,INT 14/AX=F0F1h
  2723. --------U-2FFB00-----------------------------
  2724. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  2725.     AX = FB00h
  2726. Return: AX = FFFFh if installed
  2727.         BX = version (BCD, BH=major, BL=minor)
  2728. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  2729. --------a-2FFB01-----------------------------
  2730. INT 2F U - AutoBraille v1.1A - ???
  2731.     AX = FB01h
  2732.     ???
  2733. Return: ???
  2734. --------U-2FFB01-----------------------------
  2735. INT 2F U - Jot-It! v1.50 - GET USER NAME
  2736.     AX = FB01h
  2737. Return: DX:BX -> ASCIZ user name
  2738. SeeAlso: AX=FB02h"Jot-It"
  2739. --------a-2FFB02-----------------------------
  2740. INT 2F U - AutoBraille v1.1A - ???
  2741.     AX = FB02h
  2742. Return: AH = ???
  2743.     AL = ???
  2744. --------U-2FFB02-----------------------------
  2745. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  2746.     AX = FB02h
  2747. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  2748. SeeAlso: AX=FB01h"Jot-It"
  2749. --------a-2FFB03-----------------------------
  2750. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  2751.     AX = FB03h
  2752. Return: AX = ???
  2753. --------U-2FFB03-----------------------------
  2754. INT 2F U - Jot-It! v1.50 - UNINSTALL
  2755.     AX = FB03h
  2756. Return: resident code removed from memory
  2757. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  2758.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  2759. SeeAlso: AX=FB00h"Jot-It"
  2760. --------a-2FFB-------------------------------
  2761. INT 2F U - AutoBraille v1.1A - SET ???
  2762.     AH = FBh
  2763.     AL = 04h-08h
  2764. Return: AX = 0000h
  2765. --------a-2FFB-------------------------------
  2766. INT 2F U - AutoBraille v1.1A - SET ???
  2767.     AH = FBh
  2768.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  2769. Return: ???
  2770. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2771. --------a-2FFB-------------------------------
  2772. INT 2F U - AutoBraille v1.1A - SET ???
  2773.     AH = FBh
  2774.     AL = 10h-1Fh
  2775.     ???
  2776. Return: ???
  2777. --------a-2FFB20-----------------------------
  2778. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  2779.     AX = FB20h
  2780.     BL = flags to set
  2781. SeeAlso: AX=FB21h"AutoBraille"
  2782. --------a-2FFB21-----------------------------
  2783. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  2784.     AX = FB21h
  2785.     BL = flags to clear
  2786. SeeAlso: AX=FB20h"AutoBraille"
  2787. --------a-2FFB22-----------------------------
  2788. INT 2F U - AutoBraille v1.1A - SET ???
  2789.     AX = FB22h
  2790.     BL = ???
  2791. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2792. --------a-2FFB28-----------------------------
  2793. INT 2F U - AutoBraille v1.1A - ???
  2794.     AX = FB28h
  2795.     BX = ???
  2796.     ???
  2797. Return: ???
  2798. SeeAlso: AX=FB29h"AutoBraille"
  2799. --------a-2FFB29-----------------------------
  2800. INT 2F U - AutoBraille v1.1A - ???
  2801.     AX = FB29h
  2802.     BX = ???
  2803.     ???
  2804. Return: ???
  2805. SeeAlso: AX=FB28h"AutoBraille"
  2806. --------a-2FFB-------------------------------
  2807. INT 2F U - AutoBraille v1.1A - SET ???
  2808.     AH = FBh
  2809.     AL = 2Bh-34h
  2810.     BX = ???
  2811. --------a-2FFB35-----------------------------
  2812. INT 2F U - AutoBraille v1.1A - SET ???
  2813.     AX = FB35h
  2814.     BL = ???
  2815. --------a-2FFB36-----------------------------
  2816. INT 2F U - AutoBraille v1.1A - SET ???
  2817.     AX = FB36h
  2818.     BL = ???
  2819. --------a-2FFB37-----------------------------
  2820. INT 2F U - AutoBraille v1.1A - SET ???
  2821.     AX = FB37h
  2822.     BL = ???
  2823. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2824. --------E-2FFB42BX0001-----------------------
  2825. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  2826.     AX = FB42h
  2827.     BX = 0001h
  2828. Return: AX = version number??? (AL=major, AH=minor)
  2829.     CX = next-selector increment
  2830. ---BC2.0---
  2831.     ES:BX -> 80-byte buffer for ???
  2832.     DX = DPMI version
  2833. ---BC3.0---
  2834.     BX = ??? (0000h)
  2835.     DX = ???
  2836.     ES:SI -> list of valid selectors ???
  2837. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2838.       as version 1.000, while the version distributed with BC++ 3.0
  2839.       identifies itself as version 1.0; the former is 10864 bytes, the
  2840.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  2841.       the BC3.0 version also adds a DPMI host and DOS extender
  2842.     the BC++ 2.0 version displays an error message if called with BX
  2843.       values other than 0001h-0008h
  2844. SeeAlso: AX=1687h,AX=FB42h/BX=1001h,AX=FB43h
  2845. --------E-2FFB42BX0002-----------------------
  2846. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  2847.     AX = FB42h
  2848.     BX = 0002h
  2849.     CX = size in bytes
  2850.     DX = bit flags
  2851.         bit 2: set to allocate DOS memory, clear for DPMI memory
  2852.     SI = selector of descriptor to be modified to access allocated memory
  2853.     DI = selector of a second descriptor to be modified
  2854. Return: AX = ??? or 0000h on error
  2855.     CX:DX = linear base address of DPMI memory block
  2856.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  2857.     ???
  2858. Note:    two segment descriptors may be set if a code and an aliased data
  2859.       segment are required; if only one descriptor is needed, SI should
  2860.       equal DI on entry
  2861. BUG:    when allocating DOS memory, the code computes the linear address by
  2862.       multiplying the segment number by 4 rather than shifting by 4
  2863. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  2864. --------E-2FFB42BX0002-----------------------
  2865. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  2866.     AX = FB42h
  2867.     BX = 0002h
  2868.     ES:SI -> memory block info (see #1795)
  2869. Return: ???
  2870. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2871.       as version 1.000, while the version distributed with BC++ 3.0
  2872.       identifies itself as version 1.0; the former is 10864 bytes, the
  2873.       latter 22180 bytes.
  2874. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  2875.  
  2876. Format of DPMILOAD memory block info:
  2877. Offset    Size    Description    (Table 1795)
  2878.  00h    WORD    flags (see #1796)
  2879.  02h    DWORD    block size in bytes
  2880. ---DPMI memory block---
  2881.  06h    DWORD    DPMI memory block handle
  2882. ---DOS memory block---
  2883.  06h    WORD    real-mode segment of memory block
  2884.  08h    WORD    selector of memory block
  2885. ---
  2886.  0Ah    DWORD    linear address of memory
  2887.  0Eh    WORD    memory operation error code
  2888.         0008h no more free LDT descriptors
  2889. ---if flags bit 0 clear---
  2890.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  2891.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  2892. ---if flags bit 0 set---
  2893.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  2894.  12h    WORD    unused???
  2895.  
  2896. Bitfields for DPMILOAD memory block flags:
  2897. Bit(s)    Description    (Table 1796)
  2898.  0    set if data segment rather than code segment
  2899.  1    information valid
  2900.  2    set if DOS memory block rather than DPMI memory block
  2901.  4    ???
  2902.  15    set if no LDT selectors for memory block???
  2903. SeeAlso: #1795
  2904. --------E-2FFB42BX0003-----------------------
  2905. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  2906.     AX = FB42h
  2907.     BX = 0003h
  2908. Return: DX:AX = size of largest free block in paragraphs
  2909.         0000h:0000h on error (BC3.0 version only)
  2910. Note:    AX and DX are destroyed on error, but no other error indicator is
  2911.       returned, under the BC++ 2.0 version of DPMILOAD
  2912. SeeAlso: AX=FB42h/BX=0002h
  2913. --------E-2FFB42BX0004-----------------------
  2914. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  2915.     AX = FB42h
  2916.     BX = 0004h
  2917.     DS:DX -> ASCIZ filename of protected-mode executable
  2918. Return: CX = selector of ??? or 0000h
  2919. ---BC3.0---
  2920.     DX = status (0000h,FFF4h,others???) (see #1797)
  2921. Note:    the filename may also be terminated by a CR rather than a NUL under the
  2922.       BC++ 3.0 version of DPMILOAD
  2923.  
  2924. (Table 1797)
  2925. Values for DPMILOAD function status:
  2926.  0000h    successful
  2927.  0001h    ??? failure
  2928.  0002h    invalid selector
  2929.  0004h    unknown error
  2930.  0008h    no more LDT descriptors available???
  2931.  FFDEh    unable to set descriptor
  2932.  FFDFh    unable to get segment base address
  2933.  FFE0h    ???
  2934.  FFF2h    invalid parameter value
  2935.  FFF4h    component of filename too long (name not in 8.3 format)
  2936.  FFF5h    pathname too long (>79 chars)
  2937.  FFF6h    ???
  2938.  FFF8h    ???
  2939.  FFF9h    index out of range
  2940.  FFFAh    ???
  2941.  FFFCh    invalid access to code segment???
  2942.  FFFEh    ???
  2943.  FFFFh    general error
  2944. --------E-2FFB42BX0005-----------------------
  2945. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  2946.     AX = FB42h
  2947.     BX = 0005h
  2948.     CX = selector of DPMILOAD data (see #1798)
  2949.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  2950. Return: DX = status (see #1797)
  2951.         0000h successful
  2952.         AX:BX -> ??? FAR function (called with two words on top of stk)
  2953.         else
  2954.         BX destroyed
  2955. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  2956.  
  2957. Format of DPMILOAD data:
  2958. Offset    Size    Description    (Table 1798)
  2959.  00h 12 BYTEs    ???
  2960.  0Ch    WORD    ??? bit flags
  2961.  0Eh 14 BYTEs    ???
  2962.  1Ch    WORD    number of memory control records (see #1801)
  2963.  1Eh 25 BYTEs    ???
  2964.  37h    BYTE    ??? bit flags
  2965.         bit 4: data valid???
  2966.  38h  4 BYTEs    ???
  2967.  3Ch    WORD    ???
  2968.  3Eh 12 BYTEs    ???
  2969.  46h    BYTE    ??? counter
  2970.  47h    BYTE    ???
  2971.  48h    BYTE    ???
  2972.  49h    BYTE    ???
  2973.  4Ah    WORD    ???
  2974.  4Ch  2 BYTEs    ???
  2975.  4Eh    WORD    offset of array of 64-byte memory control records
  2976.  52h    WORD    offset of name list (see #1799)
  2977.  54h  4 BYTEs    ???
  2978.  58h    WORD    offset of array of 6-byte objects (see #1800)
  2979.  5Ah  8 BYTEs    ???
  2980.  62h  9 BYTEs    ASCIZ name for ???
  2981.  6Bh  9 BYTEs    ASCIZ name for ???
  2982.     ???
  2983.  
  2984. Format of name list entry [array]:
  2985. Offset    Size    Description    (Table 1799)
  2986.  00h    BYTE    length of name (00h if end of array)
  2987.  01h  N BYTEs    name
  2988.  N+1    WORD    1-based index into array of unknown 6-byte objects
  2989.  
  2990. Format of 6-byte objects:
  2991. Offset    Size    Description    (Table 1800)
  2992.  00h    BYTE    ???
  2993.  01h    BYTE    ???
  2994.  02h    BYTE    ???
  2995.  03h    BYTE    1-based index of memory control record
  2996.  04h    WORD    ???
  2997.  
  2998. Format of memory control record:
  2999. Offset    Size    Description    (Table 1801)
  3000.  00h 20 BYTEs    memory block info (see #1795)
  3001.  14h  6 BYTEs    ???
  3002.  1Ah    BYTE    ???
  3003.  1Bh  2 BYTEs    ???
  3004.  1Dh    BYTE    ??? bit flags
  3005.  1Eh 14 BYTEs    ???
  3006.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  3007.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  3008.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  3009.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  3010.  3Ch  4 BYTEs    ???
  3011. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  3012.       the pointers at offsets 34h and 38h
  3013. --------E-2FFB42BX0006-----------------------
  3014. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  3015.     AX = FB42h
  3016.     BX = 0006h
  3017.     CX = selector of DPMILOAD data (see #1798)
  3018.     DX = 1-based index into array of ??? 6-byte objects
  3019. Return: DX = status (see #1797)
  3020.         0000h successful
  3021.         AX:BX -> ??? FAR function (called with two words on top of stk)
  3022.         else
  3023.         BX destroyed
  3024. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  3025. --------E-2FFB42BX0007-----------------------
  3026. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  3027.     AX = FB42h
  3028.     BX = 0007h
  3029.     CX = selector of ???
  3030. Return: ???
  3031. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3032.       as version 1.000, while the version distributed with BC++ 3.0
  3033.       identifies itself as version 1.0; the former is 10864 bytes, the
  3034.       latter 22180 bytes.
  3035. --------E-2FFB42BX0007-----------------------
  3036. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3037.     AX = FB42h
  3038.     BX = 0007h
  3039.     CX = selector of DPMILOAD data (see #1798)
  3040.     ???
  3041. Return: DX = status (see #1797)
  3042.         0000h successful
  3043.         AX = ???
  3044. --------E-2FFB42BX0008-----------------------
  3045. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  3046.     AX = FB42h
  3047.     BX = 0008h
  3048.     CX = bit flags
  3049.         bit 2: set if DPMI memory, clear if DOS memory
  3050.     DX = selector of DOS memory block
  3051.     SI:DI = handle of DPMI memory block
  3052. Return: DX = 0000h on error, unchanged if succcessful
  3053. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3054.       as version 1.000, while the version distributed with BC++ 3.0
  3055.       identifies itself as version 1.0; the former is 10864 bytes, the
  3056.       latter 22180 bytes.
  3057. SeeAlso: AX=FB42h/BX=0002h
  3058. --------E-2FFB42BX0008-----------------------
  3059. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  3060.     AX = FB42h
  3061.     BX = 0008h
  3062.     ES:SI -> memory block info (see #1795)
  3063. Return: ???
  3064. SeeAlso: AX=FB42h/BX=0009h
  3065. --------E-2FFB42BX0009-----------------------
  3066. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  3067.     AX = FB42h
  3068.     BX = 0009h
  3069.     ES:SI -> memory block info (see #1795)
  3070.     ???
  3071. Return: ???
  3072. SeeAlso: AX=FB42h/BX=0008h"3.0"
  3073. --------E-2FFB42BX000A-----------------------
  3074. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  3075.     AX = FB42h
  3076.     BX = 000Ah
  3077.     CX = 0001h
  3078.     DX = ???
  3079.     SI = ???
  3080. Return: after user exits subshell
  3081. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  3082.       function is not available in protected mode.
  3083.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  3084.       version also adds a DPMI host and DOS extender.
  3085. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  3086. --------E-2FFB42BX000B-----------------------
  3087. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  3088.     AX = FB42h
  3089.     BX = 000Bh
  3090. --------E-2FFB42BX000C-----------------------
  3091. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  3092.     AX = FB42h
  3093.     BX = 000Ch
  3094.     ES:SI -> memory block info ??? (see #1795)
  3095. Return: DX = status???
  3096. SeeAlso: AX=FB42h/BX=000Fh
  3097. --------E-2FFB42BX000D-----------------------
  3098. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  3099.     AX = FB42h
  3100.     BX = 000Dh
  3101.     CX = number of words to copy from protected-mode to real mode stack
  3102.     DL = interrupt number
  3103.     DH = flags
  3104.         bit 0: reset the interrupt controller and A20 line
  3105.     ES:DI -> real-mode call structure (see #1815 at INT 31/AX=0300h)
  3106. Return: CX = status
  3107.         0000h successful
  3108.         0001h failed
  3109. SeeAlso: INT 31/AX=0300h
  3110. --------E-2FFB42BX000E-----------------------
  3111. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  3112.     AX = FB42h
  3113.     BX = 000Eh
  3114.     DS:DX -> ASCIZ or CR-terminated name of ???
  3115. Return: CX = selector of DPMILOAD data (see #1798) corresponding to name,
  3116.           0000h on error
  3117. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  3118. --------E-2FFB42BX000F-----------------------
  3119. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  3120.     AX = FB42h
  3121.     BX = 000Fh
  3122.     ES:SI -> memory block info (see #1795)
  3123. Return: ???
  3124. SeeAlso: AX=FB42h/BX=000Ch
  3125. --------E-2FFB42BX0010-----------------------
  3126. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  3127.     AX = FB42h
  3128.     BX = 0010h
  3129.     DX = segment number
  3130. Return: CX = status (0000h,0008h) (see also AX=FB42h/BX=0004h)
  3131.         0000h successful
  3132.         DX = selector number for descriptor
  3133.         0008h failed
  3134. SeeAlso: AX=FB42h/BX=0023h
  3135. --------E-2FFB42BX0011-----------------------
  3136. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3137.     AX = FB42h
  3138.     BX = 0011h
  3139.     CX = selector of DPMILOAD data (see #1798)
  3140.     ???
  3141. Return: DX = status (0000h,0002h,FFFEh) (see also #1797)
  3142.         0000h successful
  3143.         AX:BX -> ??? name
  3144.         FFFEh ??? error
  3145. --------E-2FFB42BX0012-----------------------
  3146. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3147.     AX = FB42h
  3148.     BX = 0012h
  3149.     CX = selector for ???
  3150. Return: CX = selector for ???
  3151. --------E-2FFB42BX0013-----------------------
  3152. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3153.     AX = FB42h
  3154.     BX = 0013h
  3155.     CX = selector of DPMILOAD data (see #1798)
  3156.     DX = 1-based index of ???
  3157. Return: CX = status (0000h,0002h,FFF9h) (see also #1797)
  3158.         0000h successful
  3159.         BX = ??? or 0000h
  3160.         FFF9h ??? error
  3161. --------E-2FFB42BX0014-----------------------
  3162. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INSTALLATION CHECK
  3163.     AX = FB42h
  3164.     BX = 0014h
  3165.     CX = 0001h
  3166. Return: BX = 0000h if installed
  3167. Note:    unlike most of the DPMILOAD functions, this call is available only in
  3168.       real or V86 mode
  3169. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=000Ah
  3170. --------E-2FFB42BX0015-----------------------
  3171. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - UNINSTALL
  3172.     AX = FB42h
  3173.     BX = 0015h
  3174.     CX = 0001h
  3175. Return: ???
  3176. Note:    unlike most of the DPMILOAD functions, this call is available only in
  3177.       real or V86 mode
  3178. SeeAlso: AX=FB42h/BX=000Ah
  3179. --------E-2FFB42BX0016-----------------------
  3180. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3181.     AX = FB42h
  3182.     BX = 0016h
  3183.     CX = selector of DPMILOAD data (see #1798)
  3184. Return: DX = status (see also AX=FB42h/BX=0004h)
  3185.         0000h successful
  3186.         CX = ???
  3187. --------E-2FFB42BX0017-----------------------
  3188. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3189.     AX = FB42h
  3190.     BX = 0017h
  3191.     CX = ???
  3192.     DX = ???
  3193.     ???
  3194. Return: DX = status (0000h,0001h) (see #1797)
  3195. --------E-2FFB42BX0018-----------------------
  3196. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  3197.     AX = FB42h
  3198.     BX = 0018h
  3199.     CX = ???
  3200. --------E-2FFB42BX0019-----------------------
  3201. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3202.     AX = FB42h
  3203.     BX = 0019h
  3204.     CX = selector for ???
  3205.     ???
  3206. Return: DX = status (see also AX=FB42h/BX=0004h)
  3207.         0000h successful
  3208.         CX = selector for ???
  3209. --------E-2FFB42BX001A-----------------------
  3210. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3211.     AX = FB42h
  3212.     BX = 001Ah
  3213.     CX = selector for ???
  3214.     ???
  3215. Return: DX = status (see also AX=FB42h/BX=0004h)
  3216.         0000h successful
  3217.         0004h failed
  3218.     CX:BX -> ???
  3219. --------E-2FFB42BX001B-----------------------
  3220. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3221.     AX = FB42h
  3222.     BX = 001Bh
  3223.     CX = selector of DPMILOAD data (see #1798)
  3224.     DX = offset of ???
  3225. Return: DX = status (0000h,0002h) (see also #1797)
  3226.         0000h successful
  3227.         BX = selector for ???
  3228.         CX = selector for ???
  3229. --------E-2FFB42BX001C-----------------------
  3230. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3231.     AX = FB42h
  3232.     BX = 001Ch
  3233.     ES = selector for DPMILOAD data (see #1798)
  3234.     CX = 1-based index of ???
  3235.     DX = 1-based index of ???
  3236. Return: DX = status (0000h,0002h,FFF9h) (see #1797)
  3237. --------E-2FFB42BX001D-----------------------
  3238. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3239.     AX = FB42h
  3240.     BX = 001Dh
  3241. Return: CX:DX = ???
  3242. --------E-2FFB42BX001E-----------------------
  3243. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3244.     AX = FB42h
  3245.     BX = 001Eh
  3246.     CX = ???
  3247.     ???
  3248. Return: DX = status (see also AX=FB42h/BX=0004h)
  3249.         0000h successful
  3250.         FFF7h ??? error
  3251.     CX:BX -> ???
  3252. --------E-2FFB42BX001F-----------------------
  3253. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  3254.     AX = FB42h
  3255.     BX = 001Fh
  3256.     DS:DX -> 8-character name of ???
  3257.     ???
  3258. Return: CX = selector of DPMILOAD data (see #1798) for ???
  3259.         0000h on error
  3260. SeeAlso: AX=FB42h/BX=000Eh
  3261. --------E-2FFB42BX0020-----------------------
  3262. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  3263.     AX = FB42h
  3264.     BX = 0020h
  3265. Return: DX = ??? (always 0000h)
  3266. --------E-2FFB42BX0021-----------------------
  3267. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  3268.     AX = FB42h
  3269.     BX = 0021h
  3270.     CL = exception number (00h-1Fh)
  3271. Return: DX = status (see also AX=FB42h/BX=0004h)
  3272.         0000h successful
  3273.         AX:BX = selector:offset of handler
  3274.         FFF2h unable to get exception handler vector
  3275. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  3276. --------E-2FFB42BX0022-----------------------
  3277. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  3278.     AX = FB42h
  3279.     BX = 0022h
  3280.     CL = exception number (00h-1Fh)
  3281.     SI:DX = selector:offset of new handler
  3282. Return: DX = status (0000h,0004h,FFF2h) (see #1797)
  3283. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  3284. --------E-2FFB42BX0023-----------------------
  3285. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  3286.     AX = FB42h
  3287.     BX = 0023h
  3288.     CX = selector
  3289. Return: DX = status (see also AX=FB42h/BX=0004h)
  3290.         0000h successful
  3291.         CX = real-mode segment number
  3292.         FFF2h descriptor has invalid base address for real-mode segment
  3293. SeeAlso: AX=FB42h/BX=0010h
  3294. --------E-2FFB42BX0024-----------------------
  3295. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  3296.     AX = FB42h
  3297.     BX = 0024h
  3298.     CL = interrupt number
  3299. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  3300.     AX:BX = selector:offset of handler
  3301. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  3302. --------E-2FFB42BX0025-----------------------
  3303. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  3304.     AX = FB42h
  3305.     BX = 0025h
  3306.     CL = interrupt number
  3307.     SI:DX = selector:offset of new handler
  3308. Return: DX = status (0000h,0004h,FFF2h) (see #1797)
  3309. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  3310. --------E-2FFB42BX0026-----------------------
  3311. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3312.     AX = FB42h
  3313.     BX = 0026h
  3314.     CX = selector of DPMILOAD data (see #1798)
  3315.     DX = 1-based index of ???
  3316.     ???
  3317. Return: DX = status (0000h,0002h,FFF9h) (see #1797)
  3318.         0000h successful
  3319.         BX = offset of ??? within data structure
  3320. --------E-2FFB42BX0027-----------------------
  3321. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3322.     AX = FB42h
  3323.     BX = 0027h
  3324.     CX = selector of DPMILOAD data (see #1798)
  3325.     DX = offset of ???
  3326. Return: DX = status (see also AX=FB42h/BX=0004h)
  3327.         0000h successful
  3328.         BX = ???
  3329. --------E-2FFB42BX0080-----------------------
  3330. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3331.     AX = FB42h
  3332.     BX = 0080h
  3333.     ???
  3334. Return: AX = ???
  3335.     ???
  3336. --------E-2FFB42BX0081-----------------------
  3337. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3338.     AX = FB42h
  3339.     BX = 0081h
  3340.     ???
  3341. Return: AX = ???
  3342.     ???
  3343. --------E-2FFB42BX1001-----------------------
  3344. INT 2F U - Borland RTM.EXE 1.0 - INSTALLATION CHECK???
  3345.     AX = FB42h
  3346.     BX = 1001h
  3347. Return: BX = 0000h
  3348. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=1002h,AX=FB42h/BX=1003h
  3349. --------E-2FFB42BX1002-----------------------
  3350. INT 2F U - Borland RTM.EXE 1.0 - ???
  3351.     AX = FB42h
  3352.     BX = 1002h
  3353.     ???
  3354. Return: ???
  3355. SeeAlso: AX=FB42h/BX=1001h
  3356. --------E-2FFB42BX1003-----------------------
  3357. INT 2F U - Borland RTM.EXE 1.0 - ???
  3358.     AX = FB42h
  3359.     BX = 1003h
  3360.     ???
  3361. Return: ???
  3362. SeeAlso: AX=FB42h/BX=1001h
  3363. --------E-2FFB43-----------------------------
  3364. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  3365.     AX = FB43h
  3366.     BX = subfunction (at least 0000h-000Eh)
  3367. Notes:    this function is only present in protected mode; it does nothing but
  3368.       an immediate IRET
  3369.     DPMILOAD.EXE itself calls various subfunctions:
  3370.         subfunction 0004h is called with CX=selector of ???, DI=selector
  3371.           of DPMILOAD data
  3372.         subfunction 0008h is called with CX=selector of DPMILOAD data
  3373. SeeAlso: AX=FB42h/BX=0001h
  3374. --------G-2FFB43BX0100-----------------------
  3375. INT 2F PU - Borland TDX - INSTALLATION CHECK
  3376.     AX = FB43h
  3377.     BX = 0100h
  3378. Return: BX = FB43h if loaded
  3379. Program: TDX is Borland's Turbo Debugger variant for DPMI programs
  3380. Note:    Borland Pascal 7 DPMI programs use this call to check whether they
  3381.       should install their own stack and general protection exception
  3382.       handlers, or allow TDX to handle those exceptions
  3383. --------a-2FFB64-----------------------------
  3384. INT 2F U - AutoBraille v1.1A - GET ???
  3385.     AX = FB64h
  3386. Return: AX = ??? (0006h seen)
  3387. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3388. --------E-2FFBA1BX0081-----------------------
  3389. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  3390.     AX = FBA1h
  3391.     BX = 0081h
  3392.     ES:DI -> 16-byte buffer
  3393. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  3394. Program: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.
  3395. Note:    TKERNEL was present only in Borland C++ 2.0; with version 3.0, the DOS
  3396.       extender was moved into DPMILOAD.
  3397. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h
  3398. SeeAlso: INT 21/AX=4403h"TKERNEL"
  3399. --------E-2FFBA1BX0082-----------------------
  3400. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  3401.     AX = FBA1h
  3402.     BX = 0082h
  3403.     ES:DI -> response buffer (see #1802)
  3404. Return: ES:DI buffer filled
  3405. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  3406.  
  3407. Format of TKERNEL response buffer:
  3408. Offset    Size    Description    (Table 1802)
  3409.  00h  4 BYTEs    signature "IABH"
  3410.  04h    DWORD    pointer to FAR extender entry point (see #1803)
  3411.  
  3412. (Table 1803)
  3413. Call TKERNEL entry point with:
  3414.     AX = function number
  3415.         0000h initialize???
  3416.         STACK:    WORD  ???
  3417.         Return: AX = status???
  3418.             STACK unchanged
  3419.         0001h get version???
  3420.         Return: AX = 0200h for v2.0.34
  3421.         0002h get ???
  3422.         Return: AX = ??? (011Eh or 0182h seen)
  3423.         0003h load protected-mode executable
  3424.         STACK:    DWORD -> ASCIZ filename of executable
  3425.             DWORD    ???
  3426.             DWORD -> program arguments (counted string plus CR)
  3427.             DWORD -> environment for protected-mode executable
  3428.                 (terminated with two consecutive NULs)
  3429.             DWORD -> WORD buffer for ???
  3430.         Return: AX = status???
  3431.             STACK unchanged
  3432.         0004h get descriptor
  3433.         STACK:    WORD    selector for which to get descriptor
  3434.             WORD    segment number (when running in real mode)
  3435.             DWORD -> buffer for descriptor
  3436.         Return: CF clear if successful
  3437.                 buffer filled
  3438.             CF set on error
  3439.                 AX destroyed???
  3440.             STACK unchanged
  3441.         0005h ???
  3442.         STACK:    WORD    selector for ???
  3443.             WORD    subfunction number???
  3444.                 0000h run previously-loaded program???
  3445.                 0001h ??? (similar to 0000h)
  3446.                 0002h
  3447.                 0003h
  3448.                 0005h ??? (similar to 0000h and 0001h)
  3449.         Return: AX = status???
  3450.             STACK unchanged
  3451.         0006h ???
  3452.         STACK:    WORD ???
  3453.             DWORD -> WORD (call) max iterations of ???
  3454.                       (ret) remaining iterations
  3455.         Return: AX = ???
  3456.             STACK unchanged
  3457.         0007h unused
  3458.         Return: AX = 0001h
  3459.         0008h unused
  3460.         Return: AX = 0001h
  3461.         0009h copy protected-mode memory into conventional memory
  3462.         STACK:    WORD    selector for source segment
  3463.             WORD    segment of source if in real mode???
  3464.             DWORD    offset of source
  3465.             WORD    number of bytes to copy
  3466.             DWORD -> low-memory destination
  3467.         Return: AX = status
  3468.             STACK unchanged
  3469.         000Ah copy conventional memory into protected-mode memory
  3470.         STACK:    WORD    selector for destination segment
  3471.             WORD    segment of destination if in real mode???
  3472.             DWORD    offset of destination
  3473.             WORD    number of bytes to copy
  3474.             DWORD -> low-memory source
  3475.         Return: AX = status
  3476.             STACK unchanged
  3477.         000Bh get ??? pointers
  3478.         STACK:    WORD desired pointer
  3479.                 0000h get ???
  3480.                 0002h get protected-mode CR3
  3481.                 0003h get 4K page table buffer pointer
  3482.                 else Return: DX:AX = FFFFh:FFFFh
  3483.         Return: DX:AX = requested pointer
  3484.             STACK unchanged
  3485.         000Ch set ??? pointers
  3486.         STACK:    WORD desired pointer
  3487.                 0000h set ???
  3488.                 0002h set protected-mode CR3
  3489.                 0003h set 4K page table buffer pointer
  3490.                 else ignore
  3491.             DWORD new value for pointer
  3492.         Return: STACK unchanged
  3493.         000Dh get ??? pointers
  3494.         STACK:    WORD desired pointer
  3495.                 0000h get ???
  3496.                 0001h get ???
  3497.                 0002h get ???
  3498.                 0003h get ???
  3499.                 0004h get ???
  3500.                 0005h get ???
  3501.                 0006h get ???
  3502.                 0007h get ???
  3503.                 else Return: DX:AX = FFFFh:FFFFh
  3504.         Return: DX:AX = desired pointer
  3505.             STACK unchanged
  3506.         000Eh set ??? pointer
  3507.         STACK:    WORD desired pointer
  3508.                 0000h set ???
  3509.                 0001h set ???
  3510.                 0002h set ???
  3511.                 0003h set ???
  3512.                 0004h set ???
  3513.                 0005h set ???
  3514.                 0006h set ???
  3515.                 0007h set ???
  3516.                 else Return: DX:AX = FFFFh:FFFFh
  3517.         Return: STACK unchanged
  3518.         000Fh get ???
  3519.         Return: AX = ??? (seen 0008h)
  3520.         0010h get ???
  3521.         Return: AX = ???
  3522.         0011h determine whether selector is valid
  3523.         STACK:    WORD    possible selector
  3524.         Return: AX = selector or 0000h if invalid
  3525.             STACK unchanged
  3526.         0012h get physical address
  3527.         STACK:    WORD    selector for desired segment
  3528.             WORD    segment number if in real mode
  3529.             DWORD    offset within segment
  3530.         Return: DX:AX = 32-bit physical address or 00000000h on error
  3531.             BX destroyed
  3532.             STACK unchanged
  3533.         0013h ???
  3534.         Note:    normally jumps to code for function 0012h
  3535.         0014h copy protected-mode memory to conventional memory, with ???
  3536.         STACK:    WORD    selector for source segment
  3537.             WORD    segment of source if in real mode???
  3538.             DWORD    offset of source
  3539.             WORD    number of bytes to copy
  3540.             DWORD -> low-memory destination
  3541.         Return: AX = status???
  3542.             STACK unchanged
  3543.         0015h copy conventional memory to protected-mode memory, with ???
  3544.         STACK:    WORD    selector for destination segment
  3545.             WORD    segment of destination if in real mode???
  3546.             DWORD    offset of destination
  3547.             WORD    number of bytes to copy
  3548.             DWORD -> low-memory source
  3549.         Return: AX = status???
  3550.             STACK unchanged
  3551.         0016h set ??? pointer
  3552.         STACK:    WORD    unused
  3553.             DWORD -> ??? or 0000h:0000h
  3554.         Return: AX = 0000h
  3555.             STACK unchanged
  3556.         0017h allocate real-mode procedure???
  3557.         STACK:    DWORD    ASCIZ name of procedure
  3558.             DWORD ???
  3559.             DWORD    address of subroutine to invoke
  3560.         Return: AX = status
  3561.                 0032h procedure by that name exists
  3562.                 0033h no more real-mode procedures available
  3563.             DX destroyed
  3564.             STACK unchanged
  3565.         0018h unused
  3566.         Return: AX = 0001h
  3567.         0019h get parameter block
  3568.         Return: DX:AX -> parameter block (format unknown at this time,
  3569.                   but 92h bytes)
  3570.                   (preceded by signature "!!PARAM-BLOCK!!")
  3571.         001Ah get ???
  3572.         Return: AX = ??? (0148h seen)
  3573.         001Bh free real-mode procedure???
  3574.         STACK:    DWORD -> ASCIZ name of procedure
  3575.         Return: ???
  3576.             STACK unchanged
  3577.         001Ch check whether packets from protected mode task pending
  3578.         Return: AX = 0001h if packets pending, 0000h if not
  3579.         001Dh set ???
  3580.         STACK:    DWORD ??? or 0000h:0000h
  3581.         Return: AX,BX destroyed
  3582.             STACK unchanged
  3583.         001Eh ???
  3584.         STACK:    WORD ??? (high byte ignored)
  3585.             DWORD -> data structure (see below)
  3586.         Return: AX,BX,CX,DX destroyed
  3587.             data structure updated
  3588.             STACK unchanged
  3589.         Format of data structure:
  3590.         Offset    Size    Description
  3591.          00h  2 BYTEs    unused
  3592.          02h    WORD    ???
  3593.          04h    WORD    ???
  3594.          06h    WORD    ???
  3595.          08h  2 BYTEs    unused
  3596.          0Ah    WORD    ???
  3597.          0Ch    WORD    (call) ???
  3598.                 (ret) offset of this data structure (BUG?)
  3599.         001Fh set ???
  3600.         STACK:    WORD ??? (set to 0001h if zero)
  3601.         Return: AX destroyed
  3602.             STACK unchanged
  3603.         0020h ???
  3604.         STACK:    DWORD -> ??? (8 bytes of data)
  3605.         Return: AX = ???
  3606.             STACK unchanged
  3607.         0021h ???
  3608.         STACK:    DWORD -> ??? (8 bytes of data)
  3609.             WORD    ???
  3610.             WORD    ???
  3611.         Return: AX = ???
  3612.             STACK unchanged
  3613.         0022h ???
  3614.         STACK:    DWORD -> ??? (8 bytes of data)
  3615.             DWORD -> 4-byte buffer for results
  3616.         Return: AX = ???
  3617.             STACK unchanged
  3618.         0023h ???
  3619.         STACK:    DWORD -> ??? (8 bytes of data)
  3620.         Return: AX = ???
  3621.             STACK unchanged
  3622.         0024h set ???
  3623.         STACK:    WORD ???
  3624.         Return: AX destroyed
  3625.             STACK unchanged
  3626.         0025h get ???
  3627.         Return: AX = ??? (value set with func 0024h)
  3628.         0026h BUG: jumps to hyperspace due to fencepost error
  3629.         FFFFh set DOS memory management functions
  3630.         BX:SI -> FAR routine for allocating DOS memory
  3631.               (called with AH=48h,BX=number of paragraphs to alloc;
  3632.               returns CF clear, AX=segment of allocated memory, or
  3633.                   CF set on error)
  3634.         CX:DI -> FAR routine for freeing DOS memory
  3635.               (called with AH=49h,ES=segment of block to free;
  3636.               returns CF set on error, AX=error code)
  3637.         Note: each of these pointers normally points at INT 21/RETF
  3638.         other Return: AX = 0001h
  3639. Note:    BX may be destroyed by any of the API calls
  3640. --------E-2FFBA1BX0084-----------------------
  3641. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  3642.     AX = FBA1h
  3643.     BX = 0084h
  3644.     ES:DI -> response buffer (see #1804)
  3645. Return: ES:DI buffer filled
  3646. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  3647.  
  3648. Format of TKERNEL response buffer:
  3649. Offset    Size    Description    (Table 1804)
  3650.  00h  4 BYTEs    signature "IABH"
  3651.  04h    WORD    success indicator
  3652.         0001h failed (INT 2F hooked by another program)
  3653.         unchanged if successful
  3654.  06h    WORD    segment of ???
  3655.  08h    WORD    segment of ??? memory block to free if nonzero
  3656.  0Ah    WORD    segment of ??? memory block to free if nonzero
  3657. --------s-2FFBFBES0000-----------------------
  3658. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  3659.     AX = FBFBh
  3660.     ES = 0000h
  3661. Return: ES nonzero if installed
  3662.         ES:BX -> entry point data structure (see #1805)
  3663. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  3664.  
  3665. Format of SoundBlaster entry point data structure:
  3666. Offset    Size    Description    (Table 1805)
  3667.  00h  3 BYTEs    signature "FB "
  3668.  03h    BYTE    driver major version number???
  3669.  04h    DWORD    speech driver entry point (see #1806)
  3670.  08h 24 BYTEs    ???
  3671.  20h  ? BYTEs    data buffer for calling speech driver
  3672.  
  3673. (Table 1806)
  3674. Call SoundBlaster speech driver entry point with:
  3675.     AL = function
  3676.         07h speak a string
  3677.         data buffer (see #1805) contains:
  3678.             BYTE  length of string
  3679.               N BYTEs string to speak
  3680. --------N-2FFE00BX4454-----------------------
  3681. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  3682.     AX = FE00h
  3683.     BX = 4454h ("DT")
  3684.     CX = 4B52h ("KR")
  3685.     DX = 4E4Dh ("NM")
  3686. Return: AL = FFh if installed
  3687.        BX = 524Eh ("RM")
  3688.        CX = 4D44h ("MD")
  3689.        DX = 544Bh ("TK")
  3690. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  3691. SeeAlso: AX=FE08h
  3692. --------N-2FFE00BX4454-----------------------
  3693. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  3694.     AX = FE00h
  3695.     BX = 4454h ("DT")
  3696.     CX = 4B52h ("KR")
  3697.     DX = 544Dh ("TM")
  3698. Return: AL = FFh if installed
  3699.        BX = 5254h ("RT")
  3700.        CX = 4D44h ("MD")
  3701.        DX = 544Bh ("TK")
  3702. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  3703. SeeAlso: AX=FE08h
  3704. --------U-2FFE00DI4E55-----------------------
  3705. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  3706.     AX = FE00h
  3707.     DI = 4E55h ("NU")
  3708.     SI = TSR identifier (see #1807)
  3709. Return: SI = TSR reply
  3710.         lowercase version of SI on entry (i.e. SI OR 2020h)
  3711.     AH = status
  3712.         00h installed but disabled internally
  3713.         01h installed and enabled
  3714.     AL = installed product
  3715.         00h NCACHE-x or DISKREET
  3716.         01h SPEEDRV / FILESAVE / EP / DISKMON v6+ installed
  3717.         02h NCACHE2 / SMARTCAN
  3718.         45h DISKMON v5 installed
  3719.     BX = length of *.INI file (DISKMON and FILESAVE/EP/SMARTCAN only)
  3720.           (see #1808,#1809)
  3721.     CX = segment of resident portion
  3722.         FFFFh if completely loaded high (NCACHE)
  3723. ---FILESAVE/EP---
  3724.     DL = ??? (apparently always 00h)
  3725. ---DISKMON---
  3726.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6] / 1C26h [v7])
  3727. Notes:    the value returned in CX is incorrect for NCACHE 6.00
  3728.     all Norton Caches install as SMARTAAR drivers like SMARTDRV v3
  3729.     NCACHE2 and SPEEDRV both support the SMARTDRV v4+ installation check
  3730.     to detect Diskreet NDisk drives use CDS/DPB (see INT 21/AH=52h)
  3731. SeeAlso: AX=4A10h/BX=0000h,AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  3732. SeeAlso: INT 21/AX=4402h"SMARTDRV"
  3733.  
  3734. (Table 1807)
  3735. Values for Norton Utilities TSR identifier:
  3736.  4346h    ("CF") NCACHE-F (v5) / NCACHE (v6) / NCACHE2 (v7+) / SPEEDRV
  3737.  4353h    ("CS") NCACHE-S (v5 only)
  3738.  4443h    ("DC") DISKREET
  3739.  444Dh    ("DM") DISKMON
  3740.  4653h    ("FS") FILESAVE (v5) / EP (v6) / SMARTCAN (v7+)
  3741.  
  3742. Format of DISKMON.INI file:
  3743. Offset    Size    Description    (Table 1808)
  3744. -6Ch 108 BYTEs    (in memory copy only)
  3745.         list of filenames which are always protected:
  3746.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  3747.           MIO.SYS/IO.BIN, COMMAND.COM
  3748.  00h    BYTE    ??? always 01h
  3749.  01h    BYTE    disk light (00h off, 01h on)
  3750.  02h    BYTE    disk protection (00h off, 01h on)
  3751.  03h    BYTE    protected areas
  3752.         01h system area
  3753.         02h files
  3754.         03h system area and files
  3755.         04h entire disk
  3756.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  3757.  05h 27 BYTEs    filename extension list (9 entries)
  3758.         (lowercase, blank padded or = 000000h)
  3759.  20h 240 BYTEs    filename list (20 entries)
  3760.         (lowercase, name and extension blank padded, with '.')
  3761. Note:    CX:0508h -> copy in installed TSR (v5)
  3762.     CX:052Fh -> copy in installed TSR (v6)
  3763.     CX:04E0h -> copy in installed TSR (v7-v8)
  3764.  
  3765. Format of FILESAVE.INI / EP.INI / SMARTCAN.INI file:
  3766. Offset    Size    Description    (Table 1809)
  3767.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  3768.  00h    BYTE    drives    A: - H:
  3769.  01h    BYTE    drives    I: - P:
  3770.  02h    BYTE    drives    Q: - X:
  3771.  03h    BYTE    drives    Y: - Z:
  3772.  04h    BYTE    which files to protect
  3773.         00h all files
  3774.         01h all files with extension in list
  3775.         02h all files except those with extension in list
  3776.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  3777.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  3778.  21h    WORD    number of days after which files are purged (0 = never)
  3779.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  3780. Note:    CX:03D2h -> copy in installed TSR (v5)
  3781.     CX:03F5h -> copy in installed TSR (v6)
  3782.     CX:0434h -> copy in installed TSR (v7-v8)
  3783. --------U-2FFE00DX474F-----------------------
  3784. INT 2F - GO! v3.22+ - API
  3785.     AX = FE00h
  3786.     DX = 474Fh ('GO')
  3787.     SI = function number
  3788.         0063h (BCD for '?') installation check
  3789.         0078h (BCD for 'N') non-registered search (two levels only)
  3790.         0082h (BCD for 'R') reserved for registered version
  3791.         0083h (BCD for 'S') reserved for registered version
  3792.         0085h (BCD for 'U') uninstall
  3793.     BX:CX -> buffer (for search functions)
  3794.         buffer filled with search spec, i.e. "APL" to get first
  3795.           directory containing the substring APL, ":\APL" to find
  3796.           the first top-level directory beginning with the letters
  3797.           APL
  3798. Return: BX:CX buffer filled with result (search functions only)
  3799.         result is counted ASCIZ directory name, empty string if
  3800.         no matches (i.e. first byte is length of name, followed by
  3801.         name)
  3802. Program: GO! is a shareware directory locator TSR by Steve Ryckman
  3803. Note:    the application-supplied buffer for the requests and results which
  3804.       BX:CX points at must lie outside the conventional (low-640K)
  3805.       memory, since the TSR swaps memory on pop-up; a common location is
  3806.       the last 96 bytes of the video memory or a UMB
  3807. --------U-2FFE01DI4E55-----------------------
  3808. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  3809.     AX = FE01h
  3810.     DI = 4E55h ("NU")
  3811.     SI = TSR identifier (see #1807)
  3812. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3813.     AX = status
  3814.         0002h successful (DISKMON, FILESAVE, EP)
  3815.         FE00h successful (NCACHE-x, DISKREET)
  3816. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  3817.       report generated by the programs still indicates the previous state,
  3818.       and DISKMON.INI is not updated
  3819.     apparently has no effect on DISKREET
  3820. SeeAlso: AX=FE00h,AX=FE02h
  3821. --------U-2FFE02DI4E55-----------------------
  3822. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  3823.     AX = FE02h
  3824.     DI = 4E55h ("NU")
  3825.     SI = TSR identifier (see #1807)
  3826. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3827.     AX = status
  3828.         0004h successful (DISKMON, FILESAVE)
  3829.         FE00h successful (NCACHE-x, DISKREET)
  3830. Notes:    (see also AX=FE01h)
  3831.     this function appears to be unsafe, as the cache buffers are not
  3832.       flushed
  3833. SeeAlso: AX=FE00h,AX=FE01h
  3834. --------U-2FFE03DI4E55-----------------------
  3835. INT 2F U - NORTON UTILITIES 5.0+ TSRs - FLUSH BUFFERS
  3836.     AX = FE03h
  3837.     DI = 4E55h ("NU")
  3838.     SI = TSR identifier (see #1807)
  3839. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3840.     AX = status
  3841.         0006h successful???
  3842. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  3843.     useful for flushing NCACHE before rebooting
  3844. SeeAlso: AX=FE00h,AX=FE10h
  3845. --------U-2FFE04DI4E55-----------------------
  3846. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  3847.     AX = FE04h
  3848.     DI = 4E55h ("NU")
  3849.     SI = TSR identifier (see #1807)
  3850. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  3851.     AX = status
  3852.         0008h successful???
  3853. SeeAlso: AX=FE00h
  3854. --------U-2FFE05DI4E55-----------------------
  3855. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  3856.     AX = FE05h
  3857.     DI = 4E55h ("NU")
  3858.     SI = TSR identifier (see #1807)
  3859. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  3860.     AX = status
  3861.         000Ah successful???
  3862. Note:    reportedly dangerous
  3863. SeeAlso: AX=FE00h
  3864. --------N-2FFE08-----------------------------
  3865. INT 2F - PC-NFS ??? - GET ???
  3866.     AX = FE08h
  3867. Return: ES:BX -> ???
  3868. Notes:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  3869.     both the driver responding to AX=FE00h/DX=4E4Dh and the one responding
  3870.       to AX=FE00h/DX=544Dh support this function
  3871. SeeAlso: AX=FE00h/BX=4454h
  3872. --------U-2FFE10DI4E55-----------------------
  3873. INT 2F U - NORTON UTILITIES 6.0 NCACHE - REBOOT
  3874.     AX = FE10h
  3875.     DI = 4E55h ("NU")
  3876.     SI = TSR identifier (see #1807)
  3877. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  3878.     AX = status
  3879. Note:    probably used to flush NCACHE buffers and reboot when Ctrl-Alt-Del is
  3880.       detected
  3881. SeeAlso: AX=FE03h
  3882. --------S-2FFEEF-----------------------------
  3883. INT 2F - RTS Control TSR - INSTALLATION CHECK
  3884.     AX = FEEFh
  3885. Return: AX = EFFEh if installed
  3886.         BX = port address
  3887. Program: RTS Control TSR is a utility by Michal Szokolo to lower the RTS
  3888.       signal on a COM port during disk accesses to avoid losing incoming
  3889.       data
  3890. --------N-2FFF00-----------------------------
  3891. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  3892.     AX = FF00h
  3893. Return: AL = status
  3894.         00h not installed, OK to install
  3895.         01h not installed, not OK to install
  3896.         FFh installed
  3897. SeeAlso: AX=FF01h,AX=FF02h,AX=FF10h,INT 21/AX=FF00h"Topware",INT 7A"Topware"
  3898. --------N-2FFF01-----------------------------
  3899. INT 2F - Topware Network Operating System - GET VERSION
  3900.     AX = FF01h
  3901. Return: AX = version
  3902. SeeAlso: AX=FF00h,AX=FF02h
  3903. --------N-2FFF02-----------------------------
  3904. INT 2F - TopWare Network OS v5.10+ - GET TopNet VERSION STRING
  3905.     AX = FF02h
  3906. Return: ES:BX -> version string
  3907. SeeAlso: AX=FF00h,AX=FF01h
  3908. --------N-2FFF10-----------------------------
  3909. INT 2F - TopWare Network OS v5.10+ - TopTerm - INSTALLATION CHECK
  3910.     AX = FF10h
  3911. Return: AL = status (00h not installed, 01h installed)
  3912. SeeAlso: AX=FF00h,AX=FF11h,AX=FF12h,AX=FF13h
  3913. --------N-2FFF11-----------------------------
  3914. INT 2F - TopWare Network OS v5.10+ - TopTerm - ENABLE KEYBOARD SERVICE
  3915.     AX = FF11h
  3916. Note:    this function is only available on workstations, not on the server
  3917. SeeAlso: AX=FF10h,AX=FF12h
  3918. --------N-2FFF12-----------------------------
  3919. INT 2F - TopWare Network OS v5.10+ - TopTerm - DISABLE KEYBOARD SERVICE
  3920.     AX = FF12h
  3921. Note:    this function is only available on workstations, not on the server
  3922. SeeAlso: AX=FF10h,AX=FF11h
  3923. --------N-2FFF13-----------------------------
  3924. INT 2F - TopWare Network OS v5.10+ - TopTerm - SET INSTALLATION FLAG
  3925.     AX = FF13h
  3926.     CL = new state (00h off, 01h on)
  3927. SeeAlso: AX=FF10h
  3928. --------N-2FFF14-----------------------------
  3929. INT 2F - TopWare Network OS v5.10+ - START BACKGROUND RECEIVE VIDEO DATA
  3930.     AX = FF14h
  3931. Note:    this function is only available on workstations, not on the server
  3932. SeeAlso: AX=FF10h,AX=FF15h
  3933. --------N-2FFF15-----------------------------
  3934. INT 2F - TopWare Network OS v5.10+ - END BACKGROUND RECEIVE VIDEO DATA
  3935.     AX = FF15h
  3936. Note:    this function is only available on workstations, not on the server
  3937. SeeAlso: AX=FF10h,AX=FF14h
  3938. --------N-2FFF16-----------------------------
  3939. INT 2F - TopWare Network OS v5.10+ - SET CONTROL NUMBER OF "SHOW" SCREEN
  3940.     AX = FF16h
  3941.     BL = which to set (00h TopShow, FFh TopTerm)
  3942.     CX = destination screen
  3943.         0000h all stations
  3944.         0000h-00FFh (TopTerm only) send to group CL
  3945.         8001h-80FEh send to station CL
  3946. SeeAlso: AX=FF18h
  3947. --------N-2FFF18-----------------------------
  3948. INT 2F - TopWare Network OS v5.10+ - SEND FULL SCREEN OF DATA FOR TopShow
  3949.     AX = FF18h
  3950. SeeAlso: AX=FF00h,AX=FF16h,AX=FF27h
  3951. --------N-2FFF23-----------------------------
  3952. INT 2F - TopWare Network OS v5.10+ - CLOSE SPOOL FILES AND START PRINTING
  3953.     AX = FF23h
  3954. SeeAlso: AX=FF00h
  3955. --------N-2FFF27-----------------------------
  3956. INT 2F - TopWare Network OS v5.10+ - GET "SHOW" TYPE
  3957.     AX = FF27h
  3958. Return: AL = type (00h complete version, 01h simple version)
  3959.     BL = "show" functions flag (00h disabled, 01h enabled)
  3960. SeeAlso: AX=FF16h,AX=FF18h
  3961. --------D-30---------------------------------
  3962. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  3963.    the CALL 5 entry point does a FAR jump to here
  3964. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  3965.       memory
  3966. SeeAlso: INT 21/AH=26h
  3967. --------V-30---------------------------------
  3968. INT 30 - QRIP/TSR - USED BY GRAPHICS LIBRARY
  3969. Program: QRIP/TSR is a shareware TSR by Shane Hathaway implementing the Remote
  3970.       Imaging Protocol (RIP, RIPscrip) used by several BBS systems to
  3971.       provide a graphical user interface
  3972. SeeAlso: INT 2F/AX=ACF0h
  3973. --------D-31---------------------------------
  3974. INT 31 - overwritten by CP/M jump instruction in INT 30
  3975. --------v-31---------------------------------
  3976. INT 31 - VIRUS - "Vacsina" series - INSTALLATION CHECK (NOT A VECTOR!)
  3977. Note:    if one of the Vacsina viruses is resident, the low byte of this
  3978.       interrupt still contains the last byte of the INT 30 CP/M JMP
  3979.       instruction, but the remaining three bytes are 7Fh 39h followed
  3980.       by the Vacsina version number
  3981. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 32"VIRUS"
  3982. --------E-310000-----------------------------
  3983. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  3984.     AX = 0000h
  3985.     CX = number of descriptors to allocate
  3986. Return: CF clear if successful
  3987.         AX = base selector
  3988.     CF set on error
  3989.         AX = error code (DPMI 1.0+) (see #1810)
  3990. Notes:    DPMI is the DOS Protected-Mode Interface
  3991.     the base and limit of the returned descriptors will be 0, and the type
  3992.       will be "data"
  3993.     add the value returned by INT 31/AX=0003h to move to subsequent
  3994.       descriptors if multiple descriptors were allocated
  3995.     not supported by MS Windows 3.0 in Standard mode
  3996. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  3997.  
  3998. (Table 1810)
  3999. Values for DPMI 1.0 error code:
  4000.  0000h-7FFFh DOS error passed through by DPMI
  4001.  8001h    unsupported function
  4002.  8002h    object in wrong state for function
  4003.  8003h    system integrity would be endangered
  4004.  8004h    deadlock detected
  4005.  8005h    pending serialization request cancelled
  4006.  8010h    out of DPMI internal resources
  4007.  8011h    descriptor unavailable
  4008.  8012h    linear memory unavailable
  4009.  8013h    physical memory unavailable
  4010.  8014h    backing store unavailable
  4011.  8015h    callback unavailable
  4012.  8016h    handle unavailable
  4013.  8017h    maximum lock count exceeded
  4014.  8018h    shared memory already serialized exclusively by another
  4015.  8019h    shared memory already serialized shared by another client
  4016.  8021h    invalid value for numeric or flag parameter
  4017.  8022h    invalid segment selector
  4018.  8023h    invalid handle
  4019.  8024h    invalid callback
  4020.  8025h    invalid linear address
  4021.  8026h    request not supported by hardware
  4022. --------E-310001-----------------------------
  4023. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  4024.     AX = 0001h
  4025.     BX = selector to free
  4026. Return: CF clear if successful
  4027.     CF set on error
  4028.         AX = error code (DPMI 1.0+) (8022h) (see #1810)
  4029. Notes:    only one descriptor is freed per call
  4030.     the program's initial CS, DS, and SS descriptors may be freed
  4031.     (DPMI 1.0+) any segment registers containing the freed selector are
  4032.       set to 0000h
  4033.     not supported by MS Windows 3.0 in Standard mode
  4034. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  4035. --------E-310002-----------------------------
  4036. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  4037.     AX = 0002h
  4038.     BX = real mode segment
  4039. Return: CF clear if successful
  4040.         AX = selector corresponding to real mode segment (64K limit)
  4041.     CF set on error
  4042.         AX = error code (DPMI 1.0+) (8011h) (see #1810)
  4043. Notes:    multiple calls for the same real mode segment return the same selector
  4044.     the returned descriptor can never be modified or freed
  4045.     not supported by MS Windows 3.0 in Standard mode
  4046. --------E-310003-----------------------------
  4047. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  4048.     AX = 0003h
  4049. Return: CF clear
  4050.         AX = value to add to get next sequential selector
  4051. Notes:    the increment will be a power of two
  4052.     not supported by MS Windows 3.0 in Standard mode
  4053. SeeAlso: AX=0000h
  4054. --------E-310004-----------------------------
  4055. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  4056.     AX = 0004h
  4057.     BX = selector to lock (prevent paging)
  4058. Return: ???
  4059. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4060.       specification, this function is called by MS Windows TASKMAN,
  4061.       PROGMAN, and KERNEL
  4062. SeeAlso: AX=0005h,AX=0600h
  4063. --------E-310005-----------------------------
  4064. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  4065.     AX = 0005h
  4066.     BX = selector to unlock (permit paging)
  4067. Return: ???
  4068. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4069.       specification, this function is called by MS Windows TASKMAN,
  4070.       PROGMAN, and KERNEL
  4071. SeeAlso: AX=0004h,AX=0601h
  4072. --------E-310006-----------------------------
  4073. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  4074.     AX = 0006h
  4075.     BX = selector
  4076. Return: CF clear if successful
  4077.         CX:DX = linear base address of segment
  4078.     CF set on error
  4079.         AX = error code (DPMI 1.0+) (8022h) (see #1810)
  4080. Note:    not supported by MS Windows 3.0 in Standard mode
  4081. SeeAlso: AX=0007h,INT 21/AX=3504h
  4082. --------E-310007-----------------------------
  4083. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  4084.     AX = 0007h
  4085.     BX = selector
  4086.     CX:DX = linear base address
  4087. Return: CF clear if successful
  4088.     CF set on error
  4089.         AX = error code (DPMI 1.0+) (8022h,8025h) (see #1810)
  4090. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  4091.     only the low 24 bits of the address will be used by 16-bit DPMI
  4092.       implementations even on a 386 or higher
  4093.     DPMI 1.0+ automatically reloads any segment registers containing the
  4094.       selector being modified
  4095.     not supported by MS Windows 3.0 in Standard mode
  4096. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  4097. SeeAlso: INT 21/AH=E9h"OS/286",INT 2C/AX=0002h
  4098. --------E-310008-----------------------------
  4099. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  4100.     AX = 0008h
  4101.     BX = selector
  4102.     CX:DX = segment limit
  4103. Return: CF clear if successful
  4104.     CF set on error
  4105.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #1810)
  4106. Notes:    CX must be zero for 16-bit DPMI implementations
  4107.     limits greater than 1MB must be page aligned (low 12 bits set)
  4108.     only modify descriptors allocated with INT 31/AX=0000h
  4109.     DPMI 1.0+ automatically reloads any segment registers containing the
  4110.       selector being modified
  4111.     not supported by MS Windows 3.0 in Standard mode
  4112. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  4113. SeeAlso: INT 2C/AX=0003h,#0377 at INT 15/AH=89h
  4114. --------E-310009-----------------------------
  4115. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  4116.     AX = 0009h
  4117.     BX = selector
  4118.     CL = access rights/type byte (see #0378 at INT 15/AH=89h)
  4119.     CH = 80386 extended rights/type byte (see #0379 at INT 15/AH=89h)
  4120.         (32-bit DPMI implementations only)
  4121. Return: CF clear if successful
  4122.     CF set on error
  4123.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #1810)
  4124. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  4125.     DPMI 1.0+ automatically reloads any segment registers containing the
  4126.       selector being modified
  4127.     not supported by MS Windows 3.0 in Standard mode
  4128. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h,INT 2C/AX=0004h
  4129. SeeAlso: INT 2C/AX=0005h
  4130. --------E-31000A-----------------------------
  4131. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  4132.     AX = 000Ah
  4133.     BX = selector
  4134. Return: CF clear if successful
  4135.         AX = new data selector
  4136.     CF set on error
  4137.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #1810)
  4138. Notes:    fails if selector in BX is not a code segment or is invalid
  4139.     use INT 31/AX=0001h to free new selector
  4140.     future changes to the original selector will not be reflected in the
  4141.       returned alias selector
  4142.     not supported by MS Windows 3.0 in Standard mode
  4143. SeeAlso: AX=0001h
  4144. --------E-31000B-----------------------------
  4145. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  4146.     AX = 000Bh
  4147.     BX = LDT selector
  4148.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  4149. Return: CF clear if successful
  4150.         buffer filled
  4151.     CF set on error
  4152.         AX = error code (DPMI 1.0+) (8022h) (see #1810)
  4153. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4154.     not supported by MS Windows 3.0 in Standard mode
  4155. SeeAlso: AX=000Ch
  4156. --------E-31000C-----------------------------
  4157. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  4158.     AX = 000Ch
  4159.     BX = LDT selector
  4160.     ES:(E)DI -> 8-byte buffer containing descriptor
  4161. Return: CF clear if successful
  4162.     CF set on error
  4163.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #1810)
  4164. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4165.     only modify descriptors allocated with INT 31/AX=0000h
  4166.     DPMI 1.0+ automatically reloads any segment registers containing the
  4167.       selector being modified
  4168.     not supported by MS Windows 3.0 in Standard mode
  4169. SeeAlso: AX=000Bh
  4170. --------E-31000D-----------------------------
  4171. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  4172.     AX = 000Dh
  4173.     BX = LDT selector
  4174. Return: CF clear if successful
  4175.         descriptor allocated
  4176.     CF set on error
  4177.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #1810)
  4178. Notes:    free descriptor with INT 31/AX=0001h
  4179.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  4180.       some may already be in use by other applications under DPMI 0.9;
  4181.       DPMI 1.0 guarantees 16 descriptors per client
  4182.     not supported by MS Windows 3.0 in Standard mode
  4183. SeeAlso: AX=0000h,AX=0001h
  4184. --------E-31000E-----------------------------
  4185. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  4186.     AX = 000Eh
  4187.     CX = number of descriptors to copy
  4188.     ES:(E)DI -> descriptor buffer (see #1811)
  4189. Return: CF clear if successful
  4190.         descriptors copied
  4191.     CF set on error
  4192.         AX = error code (8022h) (see #1810)
  4193.         CX = number of descriptors successfully copied
  4194. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4195.     if the function fails, the first CX descriptors are valid; the
  4196.       remainder are not modified
  4197. SeeAlso: AX=000Bh,AX=000Fh
  4198.  
  4199. Format of DPMI descriptor buffer entry (one per descriptor to get):
  4200. Offset    Size    Description    (Table 1811)
  4201.  00h    WORD    selector (set by client)
  4202.  02h    QWORD    descriptor (set by host)
  4203. --------E-31000F-----------------------------
  4204. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  4205.     AX = 000Fh
  4206.     CX = number of descriptors to copy
  4207.     ES:(E)DI -> descriptor buffer (see #1812)
  4208. Return: CF clear if successful
  4209.         descriptors copied
  4210.     CF set on error
  4211.         AX = error code (8021h,8022h,8025h) (see #1810)
  4212.         CX = number of descriptors successfully copied
  4213. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4214.     if the function fails, the first CX descriptors are valid; the
  4215.       remainder are not modified
  4216.     DPMI 1.0+ automatically reloads any segment registers containing a
  4217.       selector being modified
  4218. SeeAlso: AX=000Ch,AX=000Eh
  4219.  
  4220. Format of DPMI descriptor buffer entry (one per descriptor to set):
  4221. Offset    Size    Description    (Table 1812)
  4222.  00h    WORD    selector
  4223.  02h    QWORD    descriptor
  4224. --------E-310100-----------------------------
  4225. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  4226.     AX = 0100h
  4227.     BX = number of paragraphs to allocate
  4228. Return: CF clear if successful
  4229.         AX = real mode segment of allocated block
  4230.         DX = first selector for allocated block
  4231.     CF set on error
  4232.         AX = DOS error code (07h,08h) (see #0885 at INT 21/AH=59h)
  4233.         (DPMI 1.0+) DPMI error code (8011h) (see #1810)
  4234.         BX = size (in paragraphs) of largest available block
  4235. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  4236.       if the caller is a 16-bit program
  4237.     never modify or deallocate returned descriptors
  4238.     not supported by MS Windows 3.0 in Standard mode
  4239. SeeAlso: AX=0101h,AX=0501h
  4240. --------E-310101-----------------------------
  4241. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  4242.     AX = 0101h
  4243.     DX = selector of block
  4244. Return: CF set if successful
  4245.     CF set on error
  4246.         AX = DOS error code (07h,09h) (see #0885 at INT 21/AH=59h)
  4247. Notes:    all descriptors allocated for the block are automatically freed
  4248.     DPMI 1.0+ automatically zeros any segment registers containing a
  4249.       selector freed by this function
  4250.     not supported by MS Windows 3.0 in Standard mode
  4251. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  4252. --------E-310102-----------------------------
  4253. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  4254.     AX = 0102h
  4255.     BX = new block size in paragraphs
  4256.     DX = selector of block
  4257. Return: CF clear if successful
  4258.     CF set on error
  4259.         AX = DOS error code (07h,08h,09h) (see #0885 at INT 21/AH=59h)
  4260.         (DPMI 1.0+) DPMI error code (8011h,8022h) (see #1810)
  4261.         BX = maximum block size (in paragraphs) possible
  4262. Notes:    increasing the size of a block past a 64K boundary will fail if the
  4263.       next descriptor in the LDT is already in use
  4264.     shrinking a block past a 64K boundary will cause some selectors to be
  4265.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  4266.       a selector freed by this function
  4267.     not supported by MS Windows 3.0 in Standard mode
  4268. SeeAlso: AX=0100h
  4269. --------E-310200-----------------------------
  4270. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  4271.     AX = 0200h
  4272.     BL = interrupt number
  4273. Return: CF clear
  4274.     CX:DX = segment:offset of real mode interrupt handler
  4275. Note:    the DPMI implementation is required to support all 256 vectors
  4276. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  4277. --------E-310201-----------------------------
  4278. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  4279.     AX = 0201h
  4280.     BL = interrupt number
  4281.     CX:DX = segment:offset of real mode handler
  4282. Return: CF clear
  4283. Note:    all memory that may be touched by a hardware interrupt handler must be
  4284.       locked down with INT 31/AX=0600h
  4285. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  4286. --------E-310202-----------------------------
  4287. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  4288.     AX = 0202h
  4289.     BL = exception number (00h-1Fh)
  4290. Return: CF clear if successful
  4291.         CX:(E)DX = selector:offset of handler
  4292.     CF set on error
  4293.         AX = error code (DPMI 1.0+) (8021h) (see #1810)
  4294. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  4295.     DPMI 1.0+ supports this function only for backward compatibility; use
  4296.        AX=0210h or AX=0211h instead
  4297.     not supported by MS Windows 3.0 in Standard mode
  4298. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  4299. --------E-310203-----------------------------
  4300. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  4301.     AX = 0203h
  4302.     BL = exception number (00h-1Fh)
  4303.     CX:(E)DX = selector:offset of handler
  4304. Return: CF clear if successful
  4305.     CF set on error
  4306.         AX = error code (DPMI 1.0+) (8021h,8022h) (see #1810)
  4307. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  4308.       stack frame on chaining to the next exception handler
  4309.     the handler should return using a FAR return
  4310.     all fault stack frames contain an error code, but it is only valid for
  4311.       exceptions 08h and 0Ah-0Eh
  4312.     handlers will only be called if the exception occurs in protected mode,
  4313.       and the DPMI host does not transparently handle the exception
  4314.     the handler may change certain values on the stack frame
  4315.       (see #1813,#1814)
  4316.     DPMI 1.0+ supports this function only for backward compatibility; use
  4317.        AX=0212h or AX=0213h instead
  4318.     not supported by MS Windows 3.0 in Standard mode
  4319. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  4320.  
  4321. Format of stack frame for 16-bit programs: (offset from SS:SP)
  4322. Offset    Size    Description    (Table 1813)
  4323.  00h    DWORD    return CS:IP (do not change)
  4324.  04h    WORD    error code
  4325.  06h    DWORD    CS:IP of exception
  4326.  0Ah    WORD    flags
  4327.  0Ch    DWORD    SS:SP
  4328.  
  4329. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  4330. Offset    Size    Description    (Table 1814)
  4331.  00h    DWORD    return EIP (do not change)
  4332.  04h    WORD    return CS selector (do not change)
  4333.  06h    WORD    reserved (do not change)
  4334.  08h    DWORD    error code
  4335.  0Ch    DWORD    EIP of exception
  4336.  10h    WORD    CS selector of exception
  4337.  12h    WORD    reserved (do not change)
  4338.  14h    DWORD    EFLAGS
  4339.  18h    DWORD    ESP
  4340.  1Ch    WORD    SS
  4341.  1Eh    WORD    reserved (do not change)
  4342. --------E-310204-----------------------------
  4343. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  4344.     AX = 0204h
  4345.     BL = interrupt number
  4346. Return: CF clear
  4347.     CX:(E)DX = selector:offset of handler
  4348. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4349.     DPMI implementations are required to support all 256 vectors
  4350.     not supported by MS Windows 3.0 in Standard mode
  4351. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2C/AX=0006h
  4352. SeeAlso: INT 2F/AX=FB42h/BX=0024h
  4353. --------E-310205-----------------------------
  4354. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  4355.     AX = 0205h
  4356.     BL = interrupt number
  4357.     CX:(E)DX = selector:offset of handler
  4358. Return: CF clear if successful
  4359.     CF set on error
  4360.         AX = error code (DPMI 1.0+) (8022h) (see #1810)
  4361. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4362.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  4363.       to the next handler
  4364.     DPMI implementations are required to support all 256 vectors
  4365.     hardware interrupts are reflected to the virtual machine's primary
  4366.       client, software interrupts to the current client
  4367.     not supported by MS Windows 3.0 in Standard mode
  4368. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2C/AX=0007h
  4369. SeeAlso: INT 2F/AX=FB42h/BX=0025h
  4370. --------E-310210-----------------------------
  4371. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4372.     AX = 0210h
  4373.     BL = exception number (00h-1Fh)
  4374. Return: CF clear if successful
  4375.         CX:(E)DX = selector:offset of exception handler
  4376.     CF set on error
  4377.         AX = error code (8021h) (see #1810)
  4378. Note:    DPMI host reflects exception to current client's handler
  4379. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  4380. --------E-310211-----------------------------
  4381. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4382.     AX = 0211h
  4383.     BL = exception number (00h-1Fh)
  4384. Return: CF clear if successful
  4385.         CX:(E)DX = selector:offset of exception handler
  4386.     CF set on error
  4387.         AX = error code (8021h) (see #1810)
  4388. Notes:    returns address of protected-mode handler for real-mode exception
  4389.     DPMI host performs a switch to protected mode, reflects the exception
  4390.       to the virtual machine's primary client, and returns to real mode
  4391.       on the handler's completion
  4392. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  4393. --------E-310212-----------------------------
  4394. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4395.     AX = 0212h
  4396.     BL = exception or fault number (00h-1Fh)
  4397.     CX:(E)DX = exception handler selector:offset
  4398. Return: CF clear if successful
  4399.     CF set on error
  4400.         AX = error code (8021h,8022h) (see #1810)
  4401. Note:    DPMI host sends exception to current client's handler
  4402. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  4403. --------E-310213-----------------------------
  4404. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4405.     AX = 0213h
  4406.     BL = exception or fault number (00h-1Fh)
  4407.     CX:(E)DX = exception handler selector:offset
  4408. Return: CF clear if successful
  4409.     CF set on error
  4410.         AX = error code (8021h,8022h) (see #1810)
  4411. Notes:    specifies address of protected-mode handler for real-mode exception
  4412.     DPMI host performs a switch to protected mode, reflects the exception
  4413.       to the virtual machine's primary client, and returns to real mode
  4414.       on the handler's completion
  4415. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  4416. --------E-310300-----------------------------
  4417. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  4418.     AX = 0300h
  4419.     BL = interrupt number
  4420.     BH = flags
  4421.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4422.             reserved, must be 0 (DPMI 1.0+)
  4423.         others: reserved, must be 0
  4424.     CX = number of words to copy from protected mode to real mode stack
  4425.     ES:(E)DI = selector:offset of real mode call structure (see #1815)
  4426. Return: CF clear if successful
  4427.         real mode call structure modified (all fields except SS:SP, CS:IP
  4428.           filled with return values from real mode interrupt)
  4429.     CF set on error
  4430.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #1810)
  4431.     protected mode stack unchanged
  4432. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4433.     CS:IP in the real mode call structure is ignored for this call,
  4434.       instead, the indicated interrupt vector is used for the address
  4435.     the flags in the call structure are pushed on the real mode stack to
  4436.       form an interrupt stack frame, and the trace and interrupt flags are
  4437.       clear on entry to the handler
  4438.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4439.     the real mode handler must return with the stack in the same state as
  4440.       it was on being called
  4441. SeeAlso: AX=0302h,AX=FF01h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  4442. SeeAlso: INT 2C/AX=0026h,INT 2F/AX=FB42h/BX=000Dh
  4443.  
  4444. Format of DPMI real mode call structure:
  4445. Offset    Size    Description    (Table 1815)
  4446.  00h    DWORD    EDI
  4447.  04h    DWORD    ESI
  4448.  08h    DWORD    EBP
  4449.  0Ch    DWORD    reserved (00h)
  4450.  10h    DWORD    EBX
  4451.  14h    DWORD    EDX
  4452.  18h    DWORD    ECX
  4453.  1Ch    DWORD    EAX
  4454.  20h    WORD    flags
  4455.  22h    WORD    ES
  4456.  24h    WORD    DS
  4457.  26h    WORD    FS
  4458.  28h    WORD    GS
  4459.  2Ah    WORD    IP
  4460.  2Ch    WORD    CS
  4461.  2Eh    WORD    SP
  4462.  30h    WORD    SS
  4463. --------E-310301-----------------------------
  4464. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  4465.     AX = 0301h
  4466.     BH = flags
  4467.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4468.             reserved, must be 0 (DPMI 1.0+)
  4469.         others: reserved must be 0
  4470.     CX = number of words to copy from protected mode to real mode stack
  4471.     ES:(E)DI = selector:offset of real mode call structure
  4472.           (see #1815 at INT 31/AX=0300h)
  4473. Return: CF clear if successful
  4474.         real mode call structure modified (all fields except SS:SP, CS:IP
  4475.           filled with return values from real mode interrupt)
  4476.     CF set on error
  4477.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #1810)
  4478.     protected mode stack unchanged
  4479. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4480.     the real mode procedure must exit with a FAR return
  4481.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4482.     the real mode handler must return with the stack in the same state as
  4483.       it was on being called
  4484. SeeAlso: AX=0300h,AX=0302h,AX=FF02h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  4485. SeeAlso: INT 2C/AX=0025h
  4486. --------E-310302-----------------------------
  4487. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  4488.     AX = 0302h
  4489.     BH = flags
  4490.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4491.             reserved, must be 0 (DPMI 1.0+)
  4492.         others: reserved, must be 0
  4493.     CX = number of words to copy from protected mode to real mode stack
  4494.     ES:(E)DI = selector:offset of real mode call structure
  4495.           (see #1815 at INT 31/AX=0300h)
  4496. Return: CF clear if successful
  4497.         real mode call structure modified (all fields except SS:SP, CS:IP
  4498.           filled with return values from real mode interrupt)
  4499.     CF set on error
  4500.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #1810)
  4501.     protected mode stack unchanged
  4502. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4503.     the flags in the call structure are pushed on the real mode stack to
  4504.       form an interrupt stack frame, and the trace and interrupt flags are
  4505.       clear on entry to the handler
  4506.     the real mode procedure must exit with an IRET
  4507.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4508.     the real mode handler must return with the stack in the same state as
  4509.       it was on being called
  4510. SeeAlso: AX=0300h
  4511. --------E-310303-----------------------------
  4512. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  4513.     AX = 0303h
  4514.     DS:(E)SI = selector:offset of procedure to call
  4515.     ES:(E)DI = selector:offset of real mode call structure (see #1815)
  4516. Return: CF clear if successful
  4517.         CX:DX = segment:offset of real mode call address (see #1816)
  4518.     CF set on error
  4519.         AX = error code (DPMI 1.0+) (8015h) (see #1810)
  4520. Notes:    the real mode call structure is static, causing reentrancy problems;
  4521.       its contents are only valid at the time of a callback
  4522.     the called procedure must modify the real mode CS:IP before returning
  4523.     values are returned to real mode by modifying the real mode call struc
  4524.     DPMI hosts must provide at least 16 callbacks per client
  4525.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  4526.       not support this function
  4527. SeeAlso: AX=0304h,AX=0C00h
  4528.  
  4529. (Table 1816)
  4530. Values DPMI real-mode callback procedure is called with:
  4531.     DS:(E)SI = selector:offset of real mode SS:SP
  4532.     ES:(E)DI = selector:offset of real mode call structure
  4533.     SS:(E)SP = locked protected mode API stack
  4534.     interrupts disabled
  4535. Return: (with IRET)
  4536.     ES:(E)DI = selector:offset of real mode call structure to restore
  4537. --------E-310304-----------------------------
  4538. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  4539.     AX = 0304h
  4540.     CX:DX = real mode callback address
  4541. Return: CF clear if successful
  4542.     CF set on error
  4543.         AX = error code (DPMI 1.0+) (8024h) (see #1810)
  4544. Note:    the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  4545.       not support this function
  4546. SeeAlso: AX=0303h
  4547. --------E-310305-----------------------------
  4548. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  4549.     AX = 0305h
  4550. Return: CF clear
  4551.     AX = size in bytes of state buffer
  4552.     BX:CX = real mode address of procedure to save/restore state
  4553.     SI:(E)DI = protected mode procedure to save/restore state (see #1817)
  4554. Notes:    the buffer size will be zero if it is not necessary to preserve state
  4555.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  4556.     this function is only needed if using the raw mode switch service
  4557. SeeAlso: AX=0306h
  4558.  
  4559. (Table 1817)
  4560. Call DPMI state-save procedures with:
  4561.     AL = direction
  4562.         00h save state
  4563.         01h restore state
  4564.     ES:(E)DI -> state buffer
  4565. Return: all registers preserved
  4566. --------E-310306-----------------------------
  4567. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  4568.     AX = 0306h
  4569. Return: CF clear
  4570.     BX:CX -> procedure to switch from real to protected mode (see #1818)
  4571.     SI:(E)DI -> procedure to switch from protected to real mode
  4572. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  4573.     the caller must save and restore the state of the task with AX=0305h
  4574.     not supported by MS Windows 3.0 in Standard mode
  4575. SeeAlso: AX=0305h
  4576.  
  4577. (Table 1818)
  4578. Values to JUMP at mode-switch procedures with:
  4579.     AX = new DS
  4580.     CX = new ES
  4581.     DX = new SS
  4582.     (E)BX = new (E)SP
  4583.     SI:(E)DI = new CS:(E)IP
  4584. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  4585.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  4586.     interrupts will stay disabled during the entire mode switch if they
  4587.       are disabled on entry to the mode-switch procedure
  4588. --------E-310400-----------------------------
  4589. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  4590.     AX = 0400h
  4591. Return: CF clear
  4592.     AH = major version of DPMI spec supported
  4593.     AL = two-digit minor version of DPMI spec supported
  4594.     BX = DPMI host flags (see #1819)
  4595.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4596.     DH = curr value of virtual master interrupt controller base interrupt
  4597.     DL = curr value of virtual slave interrupt controller base interrupt
  4598. BUG:    Windows NT versions from the March 1993 beta to at least the Final
  4599.       release with fixes to CSD002 report version 0090h (0.144); this has
  4600.       reportedly been corrected in the Windows NT 3.5 beta
  4601. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 67/AX=DE0Ah
  4602.  
  4603. Bitfields for DPMI host flags:
  4604. Bit(s)    Description    (Table 1819)
  4605.  0    running under an 80386 (32-bit) implementation
  4606.  1    processor returns to real mode for reflected interrupts instead of V86
  4607.       mode
  4608.  2    virtual memory supported
  4609.  3    reserved (undefined)
  4610.  4-15    reserved (zero)
  4611. --------E-310401-----------------------------
  4612. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  4613.     AX = 0401h
  4614.     ES:(E)DI -> 128-byte buffer for host description (see #1820)
  4615. Return: CF clear if successful
  4616.         AX = capabilities (see #1821)
  4617.         CX = reserved (00h)
  4618.         DX = reserved (00h)
  4619.         buffer filled
  4620.     CF set on error (DPMI 0.9 only)
  4621. SeeAlso: AX=0400h
  4622.  
  4623. Format of DPMI host description:
  4624. Offset    Size    Description    (Table 1820)
  4625.  00h    BYTE    host major version number
  4626.  01h    BYTE    host minor version number
  4627.  02h 126 BYTEs    ASCIZ host vendor name
  4628.  
  4629. Bitfields for DPMI capabilities:
  4630. Bit(s)    Description    (Table 1821)
  4631.  0    paged accessed/dirty supported (see AX=0506h,AX=0507h)
  4632.  1    exceptions restartability supported
  4633.  2    device mapping supported (see AX=0508h)
  4634.  3    conventional memory mapping supported (see AX=0509h)
  4635.  4    demand zero-fill supported
  4636.  5    write-protect client capability supported
  4637.  6    write-protect host capability supported
  4638.  7-15    reserved
  4639. --------E-310500-----------------------------
  4640. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  4641.     AX = 0500h
  4642.     ES:(E)DI -> buffer for memory information (see #1822)
  4643. Return: CF clear
  4644. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  4645.     this function must be considered advisory because other applications
  4646.       may affect the results at any time after the call
  4647.     fields not supported by the DPMI implementation are filled with
  4648.       FFFFFFFFh
  4649.     DPMI 1.0+ supports this function solely for backward compatibility; use
  4650.       AX=050Bh instead
  4651.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 only
  4652.       returns the first field in the memory information record
  4653. SeeAlso: AX=0501h,AX=050Bh,AX=0604h
  4654.  
  4655. Format of DPMI memory information:
  4656. Offset    Size    Description    (Table 1822)
  4657.  00h    DWORD    largest available block in bytes
  4658.  04h    DWORD    maximum unlocked page allocation
  4659.  08h    DWORD    maximum locked page allocation
  4660.  0Ch    DWORD    total linear address space in pages
  4661.  10h    DWORD    total unlocked pages
  4662.  14h    DWORD    free pages
  4663.  18h    DWORD    total physical pages
  4664.  1Ch    DWORD    free linear address space in pages
  4665.  20h    DWORD    size of paging file/partition in pages
  4666.  24h 12 BYTEs    reserved
  4667. --------E-310501-----------------------------
  4668. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  4669.     AX = 0501h
  4670.     BX:CX = size in bytes
  4671. Return: CF clear if successful
  4672.         BX:CX = linear address of block
  4673.         SI:DI = memory block handle for resizing and freeing block
  4674.     CF set on error
  4675.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see #1810)
  4676. Notes:    no selectors are allocated
  4677.     the memory block is allocated unlocked (can be locked with AX=0600h)
  4678.     allocations are often page granular (see AX=0604h)
  4679.     under MS Windows 3.10 Enhanced mode with paging enabled, it is possible
  4680.       for this function to fail even if AX=0500h indicates that enough
  4681.       memory is available
  4682. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  4683. SeeAlso: INT 2F/AX=FB42h/BX=0002h
  4684. --------E-310502-----------------------------
  4685. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  4686.     AX = 0502h
  4687.     SI:DI = handle of memory block
  4688. Return: CF clear if successful
  4689.     CF set on error
  4690.         AX = error code (DPMI 1.0+) (8023h) (see #1810)
  4691. Note:    any selectors allocated for the memory block must also be freed,
  4692.       preferably before freeing the memory block
  4693. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  4694. --------E-310503-----------------------------
  4695. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  4696.     AX = 0503h
  4697.     BX:CX = new size in bytes (nonzero)
  4698.     SI:DI = handle of memory block
  4699. Return: CF clear if successful
  4700.         BX:CX = new linear address
  4701.         SI:DI = new handle of memory block
  4702.     CF set on error
  4703.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  4704.         (see #1810)
  4705. Notes:    any selectors pointing at the block must be updated
  4706.     the previous memory block handle becomes invalid
  4707.     an error is returned if the new size is 0
  4708. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  4709. --------E-310504-----------------------------
  4710. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  4711.     AX = 0504h
  4712.     EBX = page-aligned linear address of memory block (00000000h if any
  4713.           address is acceptable)
  4714.     ECX = size in bytes (nonzero)
  4715.     EDX = flags
  4716.         bit 0: set to create committed pages instead of uncommitted pages
  4717.         bits 1-31 reserved (0)
  4718. Return: CF clear if successful
  4719.         EBX = linear address of memory block
  4720.         ESI = memory block handle
  4721.     CF set on error
  4722.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see #1810)
  4723. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4724. SeeAlso: AX=0501h,AX=0505h
  4725. --------E-310505-----------------------------
  4726. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  4727.     AX = 0505h
  4728.     ESI = memory block handle
  4729.     ECX = new size in bytes (nonzero)
  4730.     EDX = flags
  4731.         bit 0: create committed pages rather than uncommitted pages
  4732.         bit 1: segment descriptor update required
  4733.         ES:EBX -> buffer containing array of WORDs with selectors
  4734.         EDI = number of selectors in array
  4735.         bits 2-31 reserved (0)
  4736. Return: CF clear if successful
  4737.         EBX = new linear base address
  4738.         ESI = new memory block handle
  4739.     CF set on error
  4740.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see #1810)
  4741. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4742.     the old memory block handle becomes invalid
  4743.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  4744.       all descriptors for selectors in the update buffer which fall within
  4745.       the memory block
  4746. SeeAlso: AX=0503h,AX=0504h
  4747. --------E-310506-----------------------------
  4748. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  4749.     AX = 0506h
  4750.     ESI = memory block handle
  4751.     EBX = offset in memory block of first page
  4752.     ECX = number of pages
  4753.     ES:EDX -> array of WORDs to hold page attributes (see #1823)
  4754. Return: CF clear if successful
  4755.         buffer filled
  4756.     CF set on error
  4757.         AX = error code (8001h,8023h,8025h) (see #1810)
  4758. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4759.     if EBX is not page-aligned, it will be rounded down
  4760. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  4761.  
  4762. Bitfields for DPMI page attribute word:
  4763. Bit(s)    Description    (Table 1823)
  4764.  0-2    page type
  4765.     000 uncommitted
  4766.     001 committed
  4767.     010 mapped (see AX=0508h,AX=0509h)
  4768.     other currently unused
  4769.  3    page is read/write rather than read-only
  4770.  4    accessed/dirty bits supplied in bits 5 and 6
  4771.  5    page has been accessed (only valid if bit 4 set)
  4772.  6    page has been written (only valid if bit 4 set)
  4773.  7-15    reserved (0)
  4774. --------E-310507-----------------------------
  4775. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  4776.     AX = 0507h
  4777.     ESI = memory block handle
  4778.     EBX = offset in memory block of first page
  4779.     ECX = number of pages
  4780.     ES:EDX -> array of WORDs with new page attributes (see #1823)
  4781. Return: CF clear if successful
  4782.     CF set on error
  4783.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  4784.         (see #1810)
  4785.         ECX = number of pages which have been set
  4786. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4787.     if EBX is not page-aligned, it will be rounded down
  4788. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  4789. --------E-310508-----------------------------
  4790. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  4791.     AX = 0508h
  4792.     ESI = memory block handle
  4793.     EBX = page-aligned offset within memory block of page(s) to be mapped
  4794.     ECX = number of pages to map
  4795.     EDX = page-aligned physical address of device
  4796. Return: CF clear if successful
  4797.     CF set on error
  4798.         AX = error code (8001h,8003h,8023h,8025h) (see #1810)
  4799. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4800.     support of this function is optional; hosts are also allowed to support
  4801.       the function for some devices but not others
  4802. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  4803. --------E-310509-----------------------------
  4804. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  4805.     AX = 0509h
  4806.     ESI = memory block handle
  4807.     EBX = page-aligned offset within memory block of page(s) to map
  4808.     ECX = number of pages to map
  4809.     EDX = page-aligned linear address of conventional (below 1M) memory
  4810. Return: CF clear if successful
  4811.     CF set on error
  4812.         AX = error code (8001h,8003h,8023h,8025h) (see #1810)
  4813. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4814.     support of this function is optional
  4815. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  4816. --------E-31050A-----------------------------
  4817. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  4818.     AX = 050Ah
  4819.     SI:DI = memory block handle
  4820. Return: CF clear if successful
  4821.         SI:DI = size in bytes
  4822.         BX:CX = base address
  4823.     CF set on error
  4824.         AX = error code (8023h) (see #1810)
  4825. SeeAlso: AX=0501h,AX=0504h
  4826. --------E-31050B-----------------------------
  4827. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  4828.     AX = 050Bh
  4829.     ES:(E)DI -> 128-byte buffer for memory information (see #1824)
  4830. Return: CF clear if successful
  4831.     CF set on error (DPMI 0.9 only)
  4832. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  4833. SeeAlso: AX=0500h
  4834.  
  4835. Format of DPMI memory information:
  4836. Offset    Size    Description    (Table 1824)
  4837.  00h    DWORD    total allocated bytes of physical memory controlled by host
  4838.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  4839.  08h    DWORD    total available bytes of virtual memory controlled by host
  4840.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  4841.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  4842.  14h    DWORD    total allocated bytes of virtual memory for current client
  4843.  18h    DWORD    total available bytes of virtual memory for current client
  4844.  1Ch    DWORD    total locked bytes for current client
  4845.  20h    DWORD    maximum locked bytes for current client
  4846.  24h    DWORD    highest linear address available to current client
  4847.  28h    DWORD    largest available memory block in bytes
  4848.  2Ch    DWORD    minimum allocation unit in bytes
  4849.  30h    DWORD    allocation alignment unit size in bytes
  4850.  34h 76 BYTEs    reserved (00h)
  4851. --------E-310600-----------------------------
  4852. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  4853.     AX = 0600h
  4854.     BX:CX = starting linear address
  4855.     SI:DI = size of region in bytes
  4856. Return: CF clear if successful
  4857.     CF set on error
  4858.         none of the memory is locked
  4859.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see #1810)
  4860. Notes:    pages at beginning and end will be locked if the region overlaps them
  4861.     may be called multiple times for a given page; the DPMI host keeps a
  4862.       lock count for each page
  4863. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  4864. --------E-310601-----------------------------
  4865. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  4866.     AX = 0601h
  4867.     BX:CX = starting linear address
  4868.     SI:DI = size of region in bytes
  4869. Return: CF clear if successful
  4870.     CF set on error
  4871.         none of the memory is unlocked
  4872.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #1810)
  4873. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  4874.     memory whose lock count has not reached zero remains locked
  4875. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  4876. --------E-310602-----------------------------
  4877. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  4878.     AX = 0602h
  4879.     BX:CX = starting linear address
  4880.     SI:DI = size of region in bytes
  4881. Return: CF clear if successful
  4882.     CF set on error
  4883.         none of the memory is made pageable
  4884.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #1810)
  4885. Notes:    must relock all unlocked real mode memory before terminating process
  4886.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  4887.     pages at beginning and end will be unlocked if the region overlaps them
  4888.     pageability of real mode pages is binary, not a count
  4889. SeeAlso: AX=0600h,AX=0603h
  4890. --------E-310603-----------------------------
  4891. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  4892.     AX = 0603h
  4893.     BX:CX = starting linear address
  4894.     SI:DI = size of region in bytes
  4895. Return: CF clear if successful
  4896.     CF set on error
  4897.         none of the memory is relocked
  4898.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see #1810)
  4899. Notes:    pages at beginning and end will be relocked if the region overlaps them
  4900.     pageability of real mode pages is binary, not a count
  4901. SeeAlso: AX=0602h
  4902. --------E-310604-----------------------------
  4903. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  4904.     AX = 0604h
  4905. Return: CF clear if successful
  4906.         BX:CX = page size in bytes
  4907.     CF set on error
  4908.         AX = error code (DPMI 1.0+) (see also #1810)
  4909.         8001h unsupported, 16-bit host
  4910. BUG:    the Borland C++ 3.1 DPMILOAD returns with CF clear but BX and CX
  4911.       unchanged
  4912. --------E-310700-----------------------------
  4913. INT 31 Pu - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  4914.     AX = 0700h
  4915.     BX:CX = starting linear page number
  4916.     SI:DI = number of pages to mark as paging candidates
  4917. Return: ???
  4918. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4919.       specification, this function is called by MS Windows TASKMAN,
  4920.       PROGMAN, and KERNEL
  4921. SeeAlso: AX=0701h,AX=0702h
  4922. --------E-310701-----------------------------
  4923. INT 31 Pu - DPMI 0.9+ - DISCARD PAGES
  4924.     AX = 0701h
  4925.     BX:CX = starting linear page number
  4926.     SI:DI = number of pages to discard
  4927. Return: ???
  4928. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4929.       specification, this function is called by MS Windows TASKMAN,
  4930.       PROGMAN, and KERNEL
  4931. SeeAlso: AX=0700h,AX=0703h
  4932. --------E-310702-----------------------------
  4933. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  4934.     AX = 0702h
  4935.     BX:CX = starting linear address
  4936.     SI:DI = number of bytes to mark as paging candidates
  4937. Return: CF clear if successful
  4938.     CF set on error
  4939.         AX = error code (DPMI 1.0+) (8025h) (see #1810)
  4940. Notes:    this function is advisory, and does not force immediate paging
  4941.     partial pages will not be discarded
  4942. SeeAlso: AX=0700h,AX=0703h
  4943. --------E-310703-----------------------------
  4944. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  4945.     AX = 0703h
  4946.     BX:CX = starting linear address
  4947.     SI:DI = number of bytes to mark as discarded
  4948. Return: CF clear if successful
  4949.     CF set on error
  4950.         AX = error code (DPMI 1.0+) (8025h) (see #1810)
  4951. Notes:    this function is advisory, and may be ignored by DPMI implementations
  4952.     partial pages will not be discarded
  4953. SeeAlso: AX=0701h,AX=0702h
  4954. --------E-310800-----------------------------
  4955. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  4956.     AX = 0800h
  4957.     BX:CX = physical address (should be above 1 MB)
  4958.     SI:DI = size in bytes
  4959. Return: CF clear if successful
  4960.         BX:CX = linear address which maps the requested physical memory
  4961.     CF set on error
  4962.         AX = error code (DPMI 1.0+) (8003h,8021h) (see #1810)
  4963. Notes:    implementations may refuse this call because it can circumvent protects
  4964.     the caller must build an appropriate selector for the memory
  4965.     do not use for memory mapped in the first megabyte
  4966. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  4967. --------E-310801-----------------------------
  4968. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  4969.     AX = 0801h
  4970.     BX:CX = linear address returned by AX=0800h
  4971. Return: CF clear if successful
  4972.     CF set on error
  4973.         AX = error code (8025h) (see #1810)
  4974. Note:    should be called at end of access to device mapped with AX=0800h
  4975. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  4976. --------E-310900-----------------------------
  4977. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  4978.     AX = 0900h
  4979. Return: CF clear
  4980.     virtual interrupts disabled
  4981.     AL = previous interrupt state (00h disabled, 01h enabled)
  4982.     AH preserved
  4983. Notes:    the previous state may be restored simply by executing another INT 31
  4984.     a CLI instruction may be used if the previous state is unimportant,
  4985.       but should be assumed to be very slow due to trapping by the host
  4986. SeeAlso: AX=0901h,AX=0902h
  4987. --------E-310901-----------------------------
  4988. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  4989.     AX = 0901h
  4990. Return: CF clear
  4991.     virtual interrupts enabled
  4992.     AL = previous interrupt state (00h disabled, 01h enabled)
  4993.     AH preserved
  4994. Notes:    the previous state may be restored simply by executing another INT 31
  4995.     a STI instruction may be used if the previous state is unimportant,
  4996.       but should be assumed to be very slow due to trapping by the host
  4997. SeeAlso: AX=0900h,AX=0902h
  4998. --------E-310902-----------------------------
  4999. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  5000.     AX = 0902h
  5001. Return: CF clear
  5002.     AL = current interrupt state (00h disabled, 01h enabled)
  5003. Note:    should be used rather than PUSHF because that instruction yields the
  5004.       physical interrupt state rather than the per-client virtualized
  5005.       interrupt flag
  5006. SeeAlso: AX=0900h,AX=0901h
  5007. --------E-310A00-----------------------------
  5008. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  5009.     AX = 0A00h
  5010.     DS:(E)SI -> case-sensitive ASCIZ vendor name or identifier
  5011. Return: CF clear if successful
  5012.         ES:(E)DI -> FAR extended API entry point
  5013.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  5014.     CF set on error
  5015.         AX = error code (DPMI 1.0+) (8001h) (see #1810)
  5016. Notes:    extended API parameters are vendor-specific
  5017.     DPMI 1.0+ supports this function solely for backward compatibility; use
  5018.       INT 2F/AX=168Ah instead
  5019.     this function is not supported by MS Windows 3.10, BC++ 3.1 DPMILOAD,
  5020.       or QDPMI v1.0x; use INT 2F/AX=168Ah instead.    It is supported by
  5021.       386MAX v7.01.
  5022. SeeAlso: INT 2F/AX=168Ah
  5023. --------E-310B00-----------------------------
  5024. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  5025.     AX = 0B00h
  5026.     BX:CX = linear address
  5027.     DL = size (1,2,4 bytes)
  5028.     DH = type (00h execute, 01h write, 02h read/write)
  5029. Return: CF clear if successful
  5030.         BX = watchpoint handle
  5031.     CF set on error
  5032.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see #1810)
  5033. SeeAlso: AX=0212h,AX=0601h
  5034. --------E-310B01-----------------------------
  5035. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  5036.     AX = 0B01h
  5037.     BX = watchpoint handle
  5038. Return: CF clear if successful
  5039.     CF set on error
  5040.         AX = error code (DPMI 1.0+) (8023h) (see #1810)
  5041. Note:    the watchpoint handle is freed
  5042. SeeAlso: AX=0B00h
  5043. --------E-310B02-----------------------------
  5044. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  5045.     AX = 0B02h
  5046.     BX = watchpoint handle
  5047. Return: CF clear if successful
  5048.         AX = status flags
  5049.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  5050.     CF set on error
  5051.         AX = error code (DPMI 1.0+) (8023h) (see #1810)
  5052. SeeAlso: AX=0B00h,AX=0B03h
  5053. --------E-310B03-----------------------------
  5054. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  5055.     AX = 0B03h
  5056.     BX = watchpoint handle
  5057. Return: CF clear if successful
  5058.     CF set on error
  5059.         AX = error code (DPMI 1.0+) (8023h) (see #1810)
  5060. SeeAlso: AX=0B02h
  5061. --------E-310C00-----------------------------
  5062. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  5063.     AX = 0C00h
  5064.     ES:(E)DI -> resident service provider structure (see #1825)
  5065. Return: CF clear if successful
  5066.     CF set on error
  5067.         AX = error code (8015h,8021h,8025h) (see #1810 at AX=0000h)
  5068. Note:    calling this function declares an intent to provide resident
  5069.       protected mode services after terminating with AX=0C01h
  5070. SeeAlso: AX=0303h,AX=0C01h
  5071.  
  5072. Format of DPMI resident service provider structure:
  5073. Offset    Size    Description    (Table 1825)
  5074.  00h    QWORD    descriptor for 16-bit data segment
  5075.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  5076.  10h    WORD    offset of 16-bit callback procedure
  5077.  12h  2 BYTEs    reserved
  5078.  14h    QWORD    descriptor for 32-bit data segment
  5079.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  5080.  24h    DWORD    offset of 32-bit callback procedure
  5081. --------E-310C01-----------------------------
  5082. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  5083.     AX = 0C01h
  5084.     BL = return code
  5085.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  5086. Return: never
  5087. Notes:    should only be used if the program will only provide services to
  5088.       other DPMI programs
  5089.     any protected mode memory remains allocated to the program unless
  5090.       explicitly freed before this call
  5091.     must first call AX=0C00h or program will simply be terminated
  5092. SeeAlso: AX=0C00h,INT 21/AH=31h
  5093. --------E-310D00-----------------------------
  5094. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  5095.     AX = 0D00h
  5096.     ES:(E)DI -> shared memory allocation request structure (see #1826)
  5097. Return: CF clear if successful
  5098.         request structure updated
  5099.     CF set on error
  5100.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see #1810)
  5101. Note:    first 16 bytes of memory block will be initialized to zeros on the
  5102.       first allocation
  5103. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  5104.  
  5105. Format of DPMI shared memory allocation request structure:
  5106. Offset    Size    Description    (Table 1826)
  5107.  00h    DWORD    requested length of shared memory block in bytes
  5108.  04h    DWORD    (ret) allocated length of block
  5109.  08h    DWORD    (ret) shared memory handle
  5110.  0Ch    DWORD    (ret) linear address of memory block
  5111.  10h    PWORD    selector:offset32 of ASCIZ name for memory block
  5112.         (name max 128 bytes)
  5113.  16h  2 BYTEs    reserved
  5114.  18h  4 BYTEs    reserved (00h)
  5115. --------E-310D01-----------------------------
  5116. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  5117.     AX = 0D01h
  5118.     SI:DI = shared memory block handle
  5119. Return: CF clear if successful
  5120.     CF set on error
  5121.         AX = error code (8023h) (see #1810)
  5122. Notes:    handle becomes invalid after this call
  5123.     DPMI maintains separate global and virtual machine use counts for each
  5124.       shared memory block; when the global use counts reaches zero, the
  5125.       block is finally destroyed
  5126. SeeAlso: AX=0502h,AX=0D00h
  5127. --------E-310D02-----------------------------
  5128. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  5129.     AX = 0D02h
  5130.     SI:DI = shared memory block handle
  5131.     DX = flags
  5132.         bit 0: return immediately rather than suspending if serialization
  5133.           unavailable
  5134.         bit 1: shared rather than exclusive serialization
  5135.         bits 2-15 reserved (0)
  5136. Return: CF clear if successful
  5137.     CF set on error
  5138.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see #1810)
  5139. Notes:    an exclusive serialization blocks any other serialization attempts for
  5140.       the same block by another virtual machine; a shared serialization
  5141.       blocks attempts at exclusive serialization by another virtual machine
  5142.     hosts are not required to detect deadlock
  5143.     a client's interrupt handler can cancel a serialization call which
  5144.       caused it to block by calling AX=0D03h
  5145. SeeAlso: AX=0D00h,AX=0D03h
  5146. --------E-310D03-----------------------------
  5147. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  5148.     AX = 0D03h
  5149.     SI:DI = shared memory block handle
  5150.     DX = flags
  5151.         bit 0: release shared serialization rather than exclusive serialztn
  5152.         bit 1: free pending serialization
  5153.         bits 2-15 reserved (0)
  5154. Return: CF clear if successful
  5155.     CF set on error
  5156.         AX = error code (8002h,8023h) (see #1810 at AX=0000h)
  5157. SeeAlso: AX=0D00h,AX=0D02h
  5158. --------E-310E00-----------------------------
  5159. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  5160.     AX = 0E00h
  5161. Return: CF clear
  5162.     AX = coprocessor status (see #1827)
  5163. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  5164. SeeAlso: AX=0E01h
  5165.  
  5166. Bitfields for DPMI coprocessor status:
  5167. Bit(s)    Description    (Table 1827)
  5168.  0    numeric coprocessor enabled for current client
  5169.  1    client is emulating coprocessor
  5170.  2    numeric coprocessor is present
  5171.  3    host is emulating coprocessor instructions
  5172.  4-7    coprocessor type
  5173.     0000 none
  5174.     0010 80287
  5175.     0011 80387
  5176.     0100 80486 with numeric coprocessor
  5177.     other reserved
  5178.  8-15    not used
  5179. --------E-310E01-----------------------------
  5180. INT 31 P - DPMI 1.0+ - SET EMULATION
  5181.     AX = 0E01h
  5182.     BX = coprocessor flag bits (see #1828)
  5183. Return: CF clear if successful
  5184.     CF set on error
  5185.         AX = error code (8026h) (see #1810 at AX=0000h)
  5186. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  5187. SeeAlso: AX=0E00h
  5188.  
  5189. Bitfields for DPMI coprocessor flags:
  5190. Bit(s)    Description    (Table 1828)
  5191.  0    enable numeric coprocessor for current client
  5192.  1    client will emulate coprocessor
  5193.  2-15    not used
  5194. --------E-3157-------------------------------
  5195. INT 31 - Netroom3 DPMI.EXE v3.00 - ???
  5196.     AH = 57h
  5197.     AL = subfunction (at least 02h,03h,04h,05h,07h,08h,09h,0Ah)
  5198.     ???
  5199. Return: ???
  5200. SeeAlso: INT 2C/AX=0000h"RM386"
  5201. --------E-315702-----------------------------
  5202. INT 31 - Netroom3 DPMI.EXE v3.00 - SWITCH TO PROTECTED MODE
  5203.     AX = 5702h
  5204.     DX = PSP segment of caller
  5205.     STACK: WORD    ???
  5206.            WORD    flags (bit 0 set if 32-bit program)
  5207. Return: as for DPMI mode-switch entry point (see #1441 at INT 2F/AX=1687h)
  5208. Note:    this function is called by the real-mode DPMI mode-switch entry point
  5209. SeeAlso: INT 2F/AX=1687h
  5210. --------E-31EE00------------------------
  5211. INT 31 - DOS32 v3.0+ - GET DOS32 VERSION AND SELECTOR VALUES
  5212.     AX = EE00h
  5213. Return: AL = minor version (BCD)
  5214.     AH = major version (BCD)
  5215.     DL = system type (1=raw DOS, 2=XMS, 4=VCPI, 8=DPMI)
  5216.     BX = selector of 4GB data segment with zero base address
  5217. Program: DOS32 is a 32 bit DOS extender by Adam Seychell.
  5218. SeeAlso: AX=EE02h
  5219. --------E-31EE02------------------------
  5220. INT 31 - DOS32 v3.0+ - GET DOS32 ADDRESS INFORMATION
  5221.     AX = EE02h
  5222. Return: EBX = 32bit linear address of the program segment
  5223.     EDX = Total size in bytes of the programs .EXE file after linking.
  5224.     ESI = offset address of PSP
  5225.     EDI = offset address of program environment
  5226.     ECX = offset address of the program's .EXE ASCIZ file name and path
  5227. SeeAlso: AX=EE00h,AX=EE20h
  5228. --------E-31EE20------------------------
  5229. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH RETF STACK FRAME
  5230.     AX = EE20h
  5231.     ESI = offset of the real mode call back function
  5232. Return: CF clear if successful
  5233.         CX:DX = real mode address to call up to the protected mode
  5234.           procedure
  5235.     CF set on error
  5236. SeeAlso: AX=EE02h,AX=EE21h
  5237. --------E-31EE21------------------------
  5238. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH IRET STACK FRAME
  5239.     AX = EE21h
  5240.     ESI = offset of the real mode call back function
  5241. Return: CF clear if successful
  5242.         CX:DX = real mode address to call up to the protected mode
  5243.           procedure
  5244.     CF set on error
  5245. SeeAlso: AX=EE20h
  5246. --------E-31EE30------------------------
  5247. INT 31 - DOS32 v3.0+ - TERMINATE AND STAY RESIDENT
  5248.     AX = EE30h
  5249. SeeAlso: AX=EE21h,AX=EE40h,INT 21/AH=31h
  5250. --------E-31EE40------------------------
  5251. INT 31 - DOS32 v3.0+ - UNDO PREVIOUS MEMORY ALLOCATION or DMA BUFFER
  5252.     AX = EE40h
  5253. Return: CF clear if successful
  5254.     CF set on error
  5255. SeeAlso: AX=EE41h,AX=EE42h
  5256. --------E-31EE41------------------------
  5257. INT 31 - DOS32 v3.0+ - ALLOCATE 16KB DMA BLOCK
  5258.     AX = EE41h
  5259. Return: CF clear if successful
  5260.         EBX -> 16KB DMA block (Physical address)
  5261.         EDX -> ???
  5262.     CF set on error
  5263. SeeAlso: AX=EE42h
  5264. --------E-31EE42------------------------
  5265. INT 31 - DOS32 v3.0+ - ALLOCATE MEMORY BLOCK
  5266.     AX = EE42h
  5267.     EDX = size in bytes
  5268. Return: CF clear if successful
  5269.         EAX = size in bytes
  5270.         EDX -> memory block
  5271.     CF set on error
  5272. Note:    Size is rounded off to the next 4kb boundary
  5273. SeeAlso: AX=EE41h
  5274. --------E-31FF00-----------------------------
  5275. INT 31 P - CauseWay - "Info" - GET SYSTEM SELECTORS/FLAGS
  5276.     AX = FF00h
  5277. Return: AX = selector for flag address space (base 00000000h, limit 4GB)
  5278.     BX = selector for current PSP segment (limit 0100h)
  5279.     (E)CX = size of DOS transfer buffer (max 64K)
  5280.     DX = real-mode segment address of DOS transfer buffer
  5281.     ES:(E)SI = protected-mode address of DOS transfer buffer
  5282.     EDI = system flags (see #2670)
  5283. Program: CauseWay is a 386 DOS extender by Michael Devore and John Wildsmith
  5284.       for use with assembly language programs
  5285. Notes:    the entire transfer buffer can be addressed with a 16-bit offset in
  5286.       protected mode
  5287.     CauseWay always maps selector 0040h to the BIOS data segment at
  5288.       real-mode segment 0040h; when not running under a DPMI host, CauseWay
  5289.       also provides selectors A000h, B000h, and B800h mapped to video
  5290.       memory
  5291. SeeAlso: AX=FF25h
  5292.  
  5293. Bitfields for CauseWay system flags:
  5294. Bit(s)    Description    (Table 2670)
  5295.  0    32-bit code
  5296.  1    virtual memory manage enabled
  5297.  3-2    mode: 00 raw extended memory, 01 VCPI, 10 DPMI
  5298.  4    DPMI available
  5299.  5    VCPI available
  5300.  6    no memory managers
  5301.  7    application descriptor table type: 0 = GDT, 1 = LDT
  5302.  14-8    reserved
  5303.  15    debugging engine present
  5304. --------E-31FF01-----------------------------
  5305. INT 31 P - CauseWay - "IntXX" - SIMULATE REAL-MODE INTERRUPT
  5306.     AX = FF01h
  5307.     BL = interrupt number
  5308.     ES:(E)DI -> real-mode register list (see #1815 at AX=0300h)
  5309. Return: register list updated
  5310. Note:    CauseWay fills in the values for SS, SP, and FLAGS itself, and ignores
  5311.       the values specified for CS and IP
  5312. SeeAlso: AX=0300h,AX=FF02h
  5313. --------E-31FF02-----------------------------
  5314. INT 31 P - CauseWay - "FarCallReal" - SIMULATE REAL-MODE FAR CALL
  5315.     AX = FF02h
  5316.     ES:(E)DI -> real-mode register list (see #1815 at AX=0300h)
  5317. Return: register list updated
  5318. SeeAlso: AX=0301h,AX=FF01h
  5319. --------E-31FF03-----------------------------
  5320. INT 31 P - CauseWay - "GetSel" - ALLOCATE NEW SELECTOR
  5321.     AX = FF03h
  5322. Return: CF clear if successful
  5323.         BX = new selector
  5324.     CF set on error
  5325. Note:    the new selector is initialized with a base address of 000000h, a limit
  5326.       of 0000h, and attributes read/write expand-up data
  5327. SeeAlso: AX=FF04h,AX=FF05h,AX=FF06h
  5328. --------E-31FF04-----------------------------
  5329. INT 31 P - CauseWay - "RelSel" - RELEASE A SELECTOR
  5330.     AX = FF04h
  5331.     BX = selector
  5332. Return: CF clear if successful
  5333.     CF set on error
  5334. SeeAlso: AX=FF03h,AX=FF06h
  5335. --------E-31FF05-----------------------------
  5336. INT 31 P - CauseWay - "CodeSel" - CONVERT SELECTOR TO EXECUTABLE CODE SELECTOR
  5337.     AX = FF05h
  5338.     BX = selector
  5339.     CL = default operation size (00h = 16-bit, 01h = 32-bit)
  5340. Return: CF clear if successful
  5341.     CF set on error
  5342. SeeAlso: AX=FF03h
  5343. --------E-31FF06-----------------------------
  5344. INT 31 P - CauseWay - "AliasSel" - CREATE READ/WRITE DATA ALIAS SELECTOR
  5345.     AX = FF06h
  5346.     BX = original selector
  5347. Return: CF clear if successful
  5348.         AX = new data selector aliasing original selector
  5349.     CF set on error
  5350. SeeAlso: AX=FF03h,AX=FF04h
  5351. --------E-31FF07-----------------------------
  5352. INT 31 P - CauseWay - "GetSelDet" - GET SELECTOR BASE AND LIMIT
  5353.     AX = FF07h
  5354.     BX = selector
  5355. Return: CF clear if successful
  5356.         CX:DX = base address
  5357.         SI:DI = limit (bytes)
  5358.     CF set on error
  5359. SeeAlso: AX=FF08h,AX=FF09h
  5360. --------E-31FF08-----------------------------
  5361. INT 31 P - CauseWay - "GetSelDet32" - GET SELECTOR BASE AND LIMIT (32-bit)
  5362.     AX = FF08h
  5363. Return: CF clear if successful
  5364.         EDX = base address
  5365.         ECX = limit (bytes)
  5366.     CF set on error
  5367. SeeAlso: AX=FF07h,AX=FF0Ah
  5368. --------E-31FF09-----------------------------
  5369. INT 31 P - CauseWay - "SetSelDet" - SET SELECTOR BASE AND LIMIT
  5370.     AX = FF09h
  5371.     BX = selector
  5372.     CX:DX = new base address
  5373.     SI:DI = new byte-granular limit
  5374. Return: CF clear if successful
  5375.     CF set on error
  5376. SeeAlso: AX=FF07h,AX=FF0Ah
  5377. --------E-31FF0A-----------------------------
  5378. INT 31 P - CauseWay - "SetSelDet32" - SET SELECTOR BASE AND LIMIT (32-bit)
  5379.     AX = FF0Ah
  5380.     BX = selector
  5381.     EDX = new base address
  5382.     ECX = new byte-granular limit
  5383. Return: CF clear if successful
  5384.     CF set on error
  5385. SeeAlso: AX=FF08h,AX=FF09h
  5386. --------E-31FF0B-----------------------------
  5387. INT 31 P - CauseWay - "GetMem" - ALLOCATE BLOCK OF MEMORY
  5388.     AX = FF0Bh
  5389.     CX:DX = size in bytes (FFFFh:FFFFh to get size of largest available)
  5390. Return: CF clear if successful
  5391.         BX = selector for accessing block if requested size not FFFFh:FFFFh
  5392.         CX:DX = size of largest available block if requested FFFFh:FFFFh
  5393.     CF set on error
  5394. SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF0Fh,AX=FF10h
  5395. --------E-31FF0C-----------------------------
  5396. INT 31 P - CauseWay - "GetMem32" - ALLOCATE BLOCK OF MEMORY (32-bit)
  5397.     AX = FF0Ch
  5398.     ECX = size in bytes (FFFFFFFFh to get size of largest available block)
  5399. Return: CF clear if successful
  5400.         BX = selector for accessing block if requested size not FFFFh:FFFFh
  5401.         ECX = size of largest available block if requested FFFFh:FFFFh
  5402.     CF set on error
  5403. SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF0Fh,AX=FF11h
  5404. --------E-31FF0D-----------------------------
  5405. INT 31 P - CauseWay - "ResMem" - RESIZE MEMORY BLOCK
  5406.     AX = FF0Dh
  5407.     BX = selector for block to be resized
  5408.     CX:DX = new size in bytes
  5409. Return: CF clear if successful
  5410.     CF set on error
  5411. Note:    the memory block may have to be copied to another location in order
  5412.       to satisfy the requested new size, in which case the base address
  5413.       of the selector is updated
  5414. SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF12h
  5415. --------E-31FF0E-----------------------------
  5416. INT 31 P - CauseWay - "ResMem32" - RESIZE MEMORY BLOCK (32-bit)
  5417.     AX = FF0Eh
  5418.     BX = selector for block to be resized
  5419.     ECX = new size in bytes
  5420. Return: CF clear if successful
  5421.     CF set on error
  5422. Note:    the memory block may have to be copied to another location in order
  5423.       to satisfy the requested new size, in which case the base address
  5424.       of the selector is updated
  5425. SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF13h
  5426. --------E-31FF0F-----------------------------
  5427. INT 31 P - CauseWay - "RelMem" - RELEASE PREVIOUSLY ALLOCATED MEMORY
  5428.     AX = FF0Fh
  5429.     BX = selector for block to be released
  5430. Return: CF clear if successful
  5431.     CF set on error
  5432. SeeAlso: AX=FF0Bh,AX=FF0Ch,AX=FF14h
  5433. --------E-31FF10-----------------------------
  5434. INT 31 P - CauseWay - "GetMemLinear" - ALLOCATE MEMORY WITHOUT SELECTOR
  5435.     AX = FF10h
  5436.     CX:DX = size of block in bytes
  5437. Return: CF clear if successful
  5438.         SI:DI = linear address of allocated block
  5439.     CF set on error
  5440. Note:    this function may return addresses above 16M
  5441. SeeAlso: AX=FF0Bh,AX=FF11h,AX=FF12h,AX=FF14h
  5442. --------E-31FF11-----------------------------
  5443. INT 31 P - CauseWay - "GetMemLinear32" - ALLOCATE MEMORY WITHOUT SELECTOR
  5444.     AX = FF11h
  5445.     ECX = size of block in bytes
  5446. Return: CF clear if successful
  5447.         ESI = linear address of allocated block
  5448.     CF set on error
  5449. Note:    this function may return addresses above 16M
  5450. SeeAlso: AX=FF0Ch,AX=FF10h,AX=FF13h,AX=FF14h
  5451. --------E-31FF12-----------------------------
  5452. INT 31 P - CauseWay - "ResMemLinear" - RESIZE LINEAR MEMORY BLOCK
  5453.     AX = FF12h
  5454.     CX:DX = new size in bytes
  5455.     SI:DI = linear address of block to be resized
  5456. Return: CF clear if successful
  5457.        SI:DI = new linear address of block
  5458.     CF set on error
  5459. SeeAlso: AX=FF0Dh,AX=FF10h,AX=FF13h
  5460. --------E-31FF13-----------------------------
  5461. INT 31 P - CauseWay - "ResMemLinear32" - RESIZE LINEAR MEMORY BLOCK (32-bit)
  5462.     AX = FF13h
  5463.     ECX = new size in bytes
  5464.     ESI = linear address of block to be resized
  5465. Return: CF clear if successful
  5466.        ESI = new linear address of block
  5467.     CF set on error
  5468. SeeAlso: AX=FF0Eh,AX=FF11h,AX=FF12h
  5469. --------E-31FF14-----------------------------
  5470. INT 31 P - CauseWay - "RelMemLinear" - RELEASE LINEAR MEMORY BLOCK
  5471.     AX = FF14h
  5472.     SI:DI = linear address of block to be released
  5473. Return: CF clear if successful
  5474.     CF set on error
  5475. SeeAlso: AX=FF0Fh,AX=FF10h,AX=FF15h
  5476. --------E-31FF15-----------------------------
  5477. INT 31 P - CauseWay - "RelMemLinear32" - RELEASE LINEAR MEMORY BLOCK (32-bit)
  5478.     AX = FF15h
  5479.     ESI = linear address of block to be released
  5480. Return: CF clear if successful
  5481.     CF set on error
  5482. SeeAlso: AX=FF0Fh,AX=FF11h,AX=FF15h
  5483. --------E-31FF16-----------------------------
  5484. INT 31 P - CauseWay - "GetMemNear" - ALLOCATE APPLICATION-RELATIVE MEMORY
  5485.     AX = FF16h
  5486.     EBX = size in bytes of block to allocate
  5487. Return: CF clear if successful
  5488.        ESI = application-relative linear address of allocated block
  5489.     CF set on error
  5490. SeeAlso: AX=FF17h,AX=FF18h,AX=FF19h
  5491. --------E-31FF17-----------------------------
  5492. INT 31 P - CauseWay - "ResMemNear" - RESIZE APPLICATION-RELATIVE MEMORY BLOCK
  5493.     AX = FF17h
  5494.     EBX = size in bytes of block to allocate
  5495.     ESI = application-relative linear address of block
  5496. Return: CF clear if successful
  5497.         ESI = new application-relative linear address of block
  5498.     CF set on error
  5499. SeeAlso: AX=FF16h,AX=FF18h,AX=FF19h
  5500. --------E-31FF18-----------------------------
  5501. INT 31 P - CauseWay - "RelMemNear" - RELEASE APPLICATION-RELATIVE MEMORY BLOCK
  5502.     AX = FF18h
  5503.     ESI = application-relative linear address of block
  5504. Return: CF clear if successful
  5505.     CF set on error
  5506. SeeAlso: AX=FF16h,AX=FF17h,AX=FF19h
  5507. --------E-31FF19-----------------------------
  5508. INT 31 P - CauseWay - "Linear2Near" - CONVERT LINEAR TO APP-RELATIVE ADDRESS
  5509.     AX = FF19h
  5510.     ESI = linear address
  5511. Return: ESI = application-relative linear address
  5512. SeeAlso: AX=FF1Ah
  5513. --------E-31FF1A-----------------------------
  5514. INT 31 P - CauseWay - "Near2Linear" - CONVERT APP-RELATIVE TO LINEAR ADDRESS
  5515.     AX = FF1Ah
  5516.     ESI = application-relative linear address
  5517. Return: ESI = linear address
  5518. SeeAlso: AX=FF19h
  5519. --------E-31FF1B-----------------------------
  5520. INT 31 P - CauseWay - "LockMem" - LOCK REGION OF MEMORY
  5521.     AX = FF1Bh
  5522.     BX:CX = starting linear address
  5523.     SI:DI = size of region in bytes
  5524. Return: CF clear if successful
  5525.     CF set on error
  5526. Desc:    prevent memory from being swapped out by the virtual memory manager
  5527. Note:    locks are applied on 4K page boundaries, so memory above and below
  5528.       the specified region may be locked as well
  5529. SeeAlso: AX=FF1Ch,AX=FF1Dh
  5530. --------E-31FF1C-----------------------------
  5531. INT 31 P - CauseWay - "LockMem32" - LOCK REGION OF MEMORY (32-bit)
  5532.     AX = FF1Ch
  5533.     ESI = starting linear address
  5534.     ECX = size of region in bytes
  5535. Return: CF clear if successful
  5536.     CF set on error
  5537. Desc:    prevent memory from being swapped out by the virtual memory manager
  5538. Note:    locks are applied on 4K page boundaries, so memory above and below
  5539.       the specified region may be locked as well
  5540. SeeAlso: AX=FF1Bh,AX=FF1Eh,AX=FF1Fh
  5541. --------E-31FF1D-----------------------------
  5542. INT 31 P - CauseWay - "UnLockMem" - UNLOCK REGION OF MEMORY
  5543.     AX = FF1Dh
  5544.     BX:CX = starting linear address
  5545.     SI:DI = size of region in bytes
  5546. Return: CF clear if successful
  5547.     CF set on error
  5548. Desc:    allow memory to be swapped out by the virtual memory manager
  5549. Note:    locks are applied on 4K page boundaries, so memory above and below
  5550.       the specified region may be unlocked as well
  5551. SeeAlso: AX=FF1Bh,AX=FF1Eh
  5552. --------E-31FF1E-----------------------------
  5553. INT 31 P - CauseWay - "UnLockMem32" - UNLOCK REGION OF MEMORY (32-bit)
  5554.     AX = FF1Eh
  5555.     ESI = starting linear address
  5556.     ECX = size of region in bytes
  5557. Return: CF clear if successful
  5558.     CF set on error
  5559. Desc:    allow memory to be swapped out by the virtual memory manager
  5560. Note:    locks are applied on 4K page boundaries, so memory above and below
  5561.       the specified region may be unlocked as well
  5562. SeeAlso: AX=FF1Ch,AX=FF1Dh,AX=FF20h
  5563. --------E-31FF1F-----------------------------
  5564. INT 31 P - CauseWay - "LockMemNear" - LOCK APPLICATION-RELATIVE MEMORY REGION
  5565.     AX = FF1Fh
  5566.     ESI = starting application-relative linear address
  5567.     EBX = size of region in bytes
  5568. Return: CF clear if successful
  5569.     CF set on error
  5570. Desc:    prevent memory from being swapped out by the virtual memory manager
  5571. Note:    locks are applied on 4K page boundaries, so memory above and below
  5572.       the specified region may be locked as well
  5573. SeeAlso: AX=FF1Ch,AX=FF20h
  5574. --------E-31FF20-----------------------------
  5575. INT 31 P - CauseWay - "UnLockMemNear" - UNLOCK APP-RELATIVE MEMORY REGION
  5576.     AX = FF20h
  5577.     ESI = starting application-relative linear address
  5578.     ECX = size of region in bytes
  5579. Return: CF clear if successful
  5580.     CF set on error
  5581. Desc:    allow memory to be swapped out by the virtual memory manager
  5582. Note:    locks are applied on 4K page boundaries, so memory above and below
  5583.       the specified region may be unlocked as well
  5584. SeeAlso: AX=FF1Eh,AX=FF1Fh
  5585. --------E-31FF21-----------------------------
  5586. INT 31 P - CauseWay - "GetMemDOS" - ALLOCATE CONVENTIONAL MEMORY
  5587.     AX = FF21h
  5588.     BX = number of paragraphs to allocate
  5589. Return: CF clear if successful
  5590.         AX = real-mode segment of allocated block
  5591.         DX = initial selector for block
  5592.     CF set on error
  5593.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  5594.         BX = size of largest available block
  5595. Note:    if the requested size is greater than 64K, contiguous selectors will
  5596.       be allocated, one for each 64K; for 32-bit applications, the first
  5597.       selector's limit will be set to the size of the entire block, while
  5598.       that selector will have a limit of 64K for 16-bit applications.  All
  5599.       selectors after the first one have a limit of 64K except the final
  5600.       one
  5601. SeeAlso: AX=FF22h,AX=FF23h,INT 21/AH=48h
  5602. --------E-31FF22-----------------------------
  5603. INT 31 P - CauseWay - "ResMemDOS" - RESIZE CONVENTIONAL MEMORY BLOCK
  5604.     AX = FF22h
  5605.     BX = new size in paragraphs
  5606.     DX = initial selector for block
  5607. Return: CF clear if successful
  5608.     CF set on error
  5609.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  5610.         BX = maximum number of paragraphs available
  5611. Note:    this function will also fail if the block is expanded past a 64K
  5612.       boundary and the next selector is already in use
  5613. SeeAlso: AX=FF21h,AX=FF23h,INT 21/AH=49h
  5614. --------E-31FF23-----------------------------
  5615. INT 31 P - CauseWay - "RelMemDOS" - RELEASE CONVENTIONAL MEMORY BLOCK
  5616.     AX = FF23h
  5617.     DX = initial selector for block
  5618. Return: CF clear if successful
  5619.     CF set on error
  5620.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  5621. Note:    all descriptors allocated for the block are freed
  5622. SeeAlso: AX=FF21h,AX=FF22h,INT 21/AH=4Ah
  5623. --------E-31FF24-----------------------------
  5624. INT 31 P - CauseWay - "ExecOverlay" - LOAD AND OPTIONALLY EXECUTE APP CODE
  5625.     AX = FF24h
  5626.     EBX = flags
  5627.         bit 0: don't execute (overlay only)
  5628.         bit 1: don't preserve relocation information
  5629.     ES:EDX -> filename (see also #2669)
  5630.     FS:ESI -> commandline (ESI = 00000000h if no commandline)
  5631.     GS:EDI -> name (CW's /o option)
  5632. Return: CF clear if successful
  5633.         ---EBX bit 0 set---
  5634.         CX:EDX = program entry point (CS:EIP)
  5635.         SI = segment of PSP
  5636.         ---EBX bit 1 set---
  5637.         BX:EAX = initial SS:ESP
  5638.         EDI high word = base segment
  5639.         EDI low word = number of segments
  5640.         EBP = start of segment definitions
  5641.     CF set on error
  5642.         AX = error code
  5643.         0001h DOS file access error
  5644.         0002h not a CuaseWay 3P file
  5645.         0003h not enough memory
  5646. SeeAlso: INT 21/AH=4Bh
  5647.  
  5648. Format of CauseWay executable:
  5649. Offset    Size    Description    (Table 2669)
  5650.  00h  2 BYTEs    signature "3P"
  5651.  02h    DWORD    size of header data in bytes
  5652.  06h    DWORD    size of EXE image data in bytes
  5653.  0Ah    DWORD    number of bytes of program memory required
  5654.  0Eh    WORD    number of segment definitions (see #2672)
  5655.  10h    DWORD    number of relocation table entries
  5656.  14h    DWORD    offset of program entry point
  5657.  18h    WORD    segment list entry number for entry point's CS
  5658.  1Ah    DWORD    initial ESP
  5659.  1Eh    WORD    segment list entry number for initial SS
  5660.  20h    DWORD    control flags (see #2671)
  5661.  24h    DWORD    automatic stack size in bytes if ESP entry = 00000000h
  5662.  28h    BYTE    length of name (name follows program image)
  5663.  29h 23 BYTEs    reserved
  5664.  
  5665. Bitfields for CauseWay executable control flags:
  5666. Bit(s)    Description    (Table 2671)
  5667.  0    16-bit interrupt stack frame
  5668.  7    descriptor table type (0 = GDT, 1 = LDT)
  5669.  14    16-bit default data size
  5670.  31    compressed EXE image
  5671. Note:    bits 0 and 14 should always be equal
  5672. SeeAlso: #2669
  5673.  
  5674. Format of CauseWay segment definition [array]:
  5675. Offset    Size    Description    (Table 2672)
  5676.  00h    DWORD    start offset within program image
  5677.  04h    DWORD    length and type
  5678.         bits 0-19: length
  5679.         bit 20:       granularity (if set, length is in 4K pages)
  5680.         bits 21-24: type
  5681.             0000 code
  5682.             0001 read/write data
  5683.             0010 stack
  5684.             0011 read-only data
  5685.         bit 25: force segment descriptor's D bit to 0
  5686.         bit 26: force segmetn descriptor's D bit to 1
  5687. SeeAlso: #2669
  5688. --------E-31FF25-----------------------------
  5689. INT 31 P - CauseWay - "GetDOSTrans" - GET DOS TRANSFER BUFFER
  5690.     AX = FF25h
  5691. Return: BX = real-mode segment of transfer buffer
  5692.     ECX = transfer buffer size
  5693.     DX = protected-mode selector for transfer buffer
  5694. Note:    the default buffer size of 8K is sufficient for most applications,
  5695.       but an application performing large amounts of file I/O may benefit
  5696.       from allocating its own, larger buffer
  5697. SeeAlso: AX=FF00h,AX=FF26h
  5698. --------E-31FF26-----------------------------
  5699. INT 31 P - CauseWay - "SetDOSTrans" - SET DOS TRANSFER BUFFER
  5700.     AX = FF26h
  5701.     BX = real-mode segment of new transfer buffer
  5702.     ECX = new transfer buffer size
  5703.     DX = protected-mode selector for new transfer buffer
  5704. Return: nothing
  5705. Note:    the specific buffer must be located in conventional memory; only the
  5706.       first 64K will be used
  5707. SeeAlso: AX=FF25h
  5708. --------v-32---------------------------------
  5709. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  5710. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 31"VIRUS",INT 44"VIRUS"
  5711. --------v-32---------------------------------
  5712. INT 32 - VIRUS - "Plovdiv 1.3"/"Damage 1.3" - ORIGINAL INT 21h VECTOR
  5713. SeeAlso: INT 31"VIRUS",INT 9E"VIRUS"
  5714. --------M-330000-----------------------------
  5715. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  5716.     AX = 0000h
  5717. Return: AX = status
  5718.         0000h hardware/driver not installed
  5719.         FFFFh hardware/driver installed
  5720.     BX = number of buttons
  5721.         0000h other than two
  5722.         0002h two buttons (many drivers)
  5723.         0003h Mouse Systems/Logitech three-button mouse
  5724.         FFFFh two buttons
  5725. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  5726.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  5727.       and then call this function.    Logitech drivers v5.01 and v6.00
  5728.       reportedly do not correctly use Hercules graphics in dual-monitor
  5729.       systems, while version 4.10 does.
  5730.     the Logitech mouse driver contains the signature string "LOGITECH"
  5731.       three bytes past the interrupt handler; many of the Logitech mouse
  5732.       utilities check for this signature.
  5733.     Logitech MouseWare v6.30 reportedly does not support CGA video modes
  5734.       if no CGA is present when it is started and the video board is
  5735.       later switched into CGA emulation
  5736. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  5737. --------M-330001-----------------------------
  5738. INT 33 - MS MOUSE v1.0+ - SHOW MOUSE CURSOR
  5739.     AX = 0001h
  5740. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh,INT 6F/AH=06h"F_TRACK_ON"
  5741. --------M-330002-----------------------------
  5742. INT 33 - MS MOUSE v1.0+ - HIDE MOUSE CURSOR
  5743.     AX = 0002h
  5744. Note:    multiple calls to hide the cursor will require multiple calls to
  5745.       function 01h to unhide it.
  5746. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  5747. SeeAlso: INT 6F/AH=08h"F_TRACK_OFF"
  5748. --------M-330003-----------------------------
  5749. INT 33 - MS MOUSE v1.0+ - RETURN POSITION AND BUTTON STATUS
  5750.     AX = 0003h
  5751. Return: BX = button status (see #1829)
  5752.     CX = column
  5753.     DX = row
  5754. Note:    in text modes, all coordinates are specified as multiples of the cell
  5755.       size, typically 8x8 pixels
  5756. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  5757.  
  5758. Bitfields for mouse button status:
  5759. Bit(s)    Description    (Table 1829)
  5760.  0    left button pressed if 1
  5761.  1    right button pressed if 1
  5762.  2    middle button pressed if 1 (Mouse Systems/Logitech/Genius)
  5763. --------M-330004-----------------------------
  5764. INT 33 - MS MOUSE v1.0+ - POSITION MOUSE CURSOR
  5765.     AX = 0004h
  5766.     CX = column
  5767.     DX = row
  5768. Note:    the row and column are truncated to the next lower multiple of the cell
  5769.       size (typically 8x8 in text modes); however, some versions of the
  5770.       Microsoft documentation incorrectly state that the coordinates are
  5771.       rounded
  5772. SeeAlso: AX=0003h,INT 62/AX=0081h,INT 6F/AH=10h"F_PUT_SPRITE"
  5773. --------M-330005-----------------------------
  5774. INT 33 - MS MOUSE v1.0+ - RETURN BUTTON PRESS DATA
  5775.     AX = 0005h
  5776.     BX = button number (see #1830)
  5777. Return: AX = button states (see #1829)
  5778.     BX = number of times specified button has been pressed since last call
  5779.     CX = column at time specified button was last pressed
  5780.     DX = row at time specified button was last pressed
  5781. Note:    at least for the Genius mouse driver, the number of button presses
  5782.       returned is limited to 7FFFh
  5783. SeeAlso: AX=0006h,INT 62/AX=007Ch
  5784.  
  5785. (Table 1830)
  5786. Values for mouse button number:
  5787.  0000h    left
  5788.  0001h    right
  5789.  0002h    middle (Mouse Systems/Logitech/Genius mouse)
  5790. --------M-330006-----------------------------
  5791. INT 33 - MS MOUSE v1.0+ - RETURN BUTTON RELEASE DATA
  5792.     AX = 0006h
  5793.     BX = button number (see #1830)
  5794. Return: AX = button states (see #1829)
  5795.     BX = number of times specified button has been released since last call
  5796.     CX = column at time specified button was last released
  5797.     DX = row at time specified button was last released
  5798. Note:    at least for the Genius mouse driver, the number of button releases
  5799.       returned is limited to 7FFFh
  5800. SeeAlso: AX=0005h,INT 62/AX=007Ch
  5801. --------M-330007-----------------------------
  5802. INT 33 - MS MOUSE v1.0+ - DEFINE HORIZONTAL CURSOR RANGE
  5803.     AX = 0007h
  5804.     CX = minimum column
  5805.     DX = maximum column
  5806. Note:    in text modes, the minimum and maximum columns are truncated to the
  5807.       next lower multiple of the cell size, typically 8x8 pixels
  5808. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  5809. SeeAlso: INT 6F/AH=0Ch"F_SET_LIMITS_X"
  5810. --------M-330008-----------------------------
  5811. INT 33 - MS MOUSE v1.0+ - DEFINE VERTICAL CURSOR RANGE
  5812.     AX = 0008h
  5813.     CX = minimum row
  5814.     DX = maximum row
  5815. Note:    in text modes, the minimum and maximum rows are truncated to the
  5816.       next lower multiple of the cell size, typically 8x8 pixels
  5817. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  5818. SeeAlso: INT 6F/AH=0Eh"F_SET_LIMITS_Y"
  5819. --------M-330009-----------------------------
  5820. INT 33 - MS MOUSE v3.0+ - DEFINE GRAPHICS CURSOR
  5821.     AX = 0009h
  5822.     BX = column of cursor hot spot in bitmap (-16 to 16)
  5823.     CX = row of cursor hot spot (-16 to 16)
  5824.     ES:DX -> mask bitmap (see #1831)
  5825. Notes:    in graphics modes, the screen contents around the current mouse cursor
  5826.       position are ANDed with the screen mask and then XORed with the
  5827.       cursor mask
  5828.     the Microsoft mouse driver v7.04 and v8.20 uses only BL and CL, so the
  5829.       hot spot row/column should be limited to -128..127
  5830.     Microsoft KnowledgeBase article Q19850 states that the high bit is
  5831.       right-most, but that statement is contradicted by all other available
  5832.       documentation
  5833. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh,INT 6F/AH=0Ah"F_DEF_MASKS"
  5834.  
  5835. Format of mouse mask bitmap:
  5836. Offset    Size    Description    (Table 1831)
  5837.  00h 16 WORDs    screen mask
  5838.  10h 16 WORDs    cursor mask
  5839. Note:    each word defines the sixteen pixels of a row, low bit rightmost
  5840. --------M-33000A-----------------------------
  5841. INT 33 - MS MOUSE v3.0+ - DEFINE TEXT CURSOR
  5842.     AX = 000Ah
  5843.     BX = hardware/software text cursor
  5844.         0000h software
  5845.         CX = screen mask
  5846.         DX = cursor mask
  5847.         0001h hardware
  5848.         CX = start scan line
  5849.         DX = end scan line
  5850. Note:    when the software cursor is selected, the character/attribute data at
  5851.       the current screen position is ANDed with the screen mask and then
  5852.       XORed with the cursor mask
  5853. SeeAlso: AX=0009h,INT 62/AX=007Eh
  5854. --------M-33000B-----------------------------
  5855. INT 33 - MS MOUSE v1.0+ - READ MOTION COUNTERS
  5856.     AX = 000Bh
  5857. Return: CX = number of mickeys mouse moved horizontally since last call
  5858.     DX = number of mickeys mouse moved vertically
  5859. Notes:    a mickey is the smallest increment the mouse can sense
  5860.     positive values indicate down/right
  5861. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  5862. --------M-33000C-----------------------------
  5863. INT 33 - MS MOUSE v1.0+ - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  5864.     AX = 000Ch
  5865.     CX = call mask (see #1832)
  5866.     ES:DX -> FAR routine (see #1833)
  5867. SeeAlso: AX=0018h
  5868.  
  5869. Bitfields for mouse call mask:
  5870. Bit(s)    Description    (Table 1832)
  5871.  0    call if mouse moves
  5872.  1    call if left button pressed
  5873.  2    call if left button released
  5874.  3    call if right button pressed
  5875.  4    call if right button released
  5876.  5    call if middle button pressed (Mouse Systems/Logitech/Genius mouse)
  5877.  6    call if middle button released (Mouse Systems/Logitech/Genius mouse)
  5878.  7-15    unused
  5879. Note:    some versions of the Microsoft documentation incorrectly state that CX
  5880.       bit 0 means call if mouse cursor moves
  5881.  
  5882. (Table 1833)
  5883. Values interrupt routine is called with:
  5884.     AX = condition mask (same bit assignments as call mask)
  5885.     BX = button state
  5886.     CX = cursor column
  5887.     DX = cursor row
  5888.     SI = horizontal mickey count
  5889.     DI = vertical mickey count
  5890. Notes:    some versions of the Microsoft documentation erroneously swap the
  5891.       meanings of SI and DI
  5892.     in text modes, the row and column will be reported as a multiple of
  5893.       the character cell size, typically 8x8 pixels
  5894. --------M-33000D-----------------------------
  5895. INT 33 - MS MOUSE v1.0+ - LIGHT PEN EMULATION ON
  5896.     AX = 000Dh
  5897. SeeAlso: AX=000Eh,INT 10/AH=04h
  5898. --------M-33000E-----------------------------
  5899. INT 33 - MS MOUSE v1.0+ - LIGHT PEN EMULATION OFF
  5900.     AX = 000Eh
  5901. SeeAlso: AX=000Dh
  5902. --------M-33000F-----------------------------
  5903. INT 33 - MS MOUSE v1.0+ - DEFINE MICKEY/PIXEL RATIO
  5904.     AX = 000Fh
  5905.     CX = number of mickeys per 8 pixels horizontally (default 8)
  5906.     DX = number of mickeys per 8 pixels vertically (default 16)
  5907. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  5908. --------M-330010-----------------------------
  5909. INT 33 - MS MOUSE v1.0+ - DEFINE SCREEN REGION FOR UPDATING
  5910.     AX = 0010h
  5911.     CX,DX = X,Y coordinates of upper left corner
  5912.     SI,DI = X,Y coordinates of lower right corner
  5913. Note:    mouse cursor is hidden in the specified region, and needs to be
  5914.       explicitly turned on again
  5915. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  5916. --------M-330010-----------------------------
  5917. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  5918.     AX = 0010h
  5919.     ES:DX -> update region list (see #1834)
  5920. Notes:    mouse cursor is hidden in the specified region, and needs to be
  5921.       explicitly turned on again
  5922.     this version of the call is described in an August 1988 version of the
  5923.       Genius Mouse programmer's reference; it has been changed to conform
  5924.       to the Microsoft version shown above by version 9.06 (and possibly
  5925.       earlier versions)
  5926. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  5927.  
  5928. Format of Genius Mouse update region list:
  5929. Offset    Size    Description    (Table 1834)
  5930.  00h    WORD    left-most column
  5931.  02h    WORD    top-most row
  5932.  04h    WORD    right-most column
  5933.  06h    WORD    bottom-most row
  5934. --------M-330011-----------------------------
  5935. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  5936.     AX = 0011h
  5937. Return: AX = FFFFh
  5938.     BX = number of buttons
  5939. SeeAlso: AX=0000h
  5940. --------M-330012-----------------------------
  5941. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  5942.     AX = 0012h
  5943.     BH = cursor width in words
  5944.     CH = rows in cursor
  5945.     BL = horizontal hot spot (-16 to 16)
  5946.     CL = vertical hot spot (-16 to 16)
  5947.     ES:DX -> bit map of screen and cursor maps
  5948. Return: AX = FFFFh if successful
  5949. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  5950. --------M-330013-----------------------------
  5951. INT 33 - MS MOUSE v5.0+ - DEFINE DOUBLE-SPEED THRESHOLD
  5952.     AX = 0013h
  5953.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  5954. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  5955. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  5956. --------M-330014-----------------------------
  5957. INT 33 - MS MOUSE v3.0+ - EXCHANGE INTERRUPT SUBROUTINES
  5958.     AX = 0014h
  5959.     CX = call mask (see #1832)
  5960.     ES:DX -> FAR routine
  5961. Return: CX = call mask of previous interrupt routine
  5962.     ES:DX = FAR address of previous interrupt routine
  5963. SeeAlso: AX=000Ch,AX=0018h
  5964. --------M-330015-----------------------------
  5965. INT 33 - MS MOUSE v6.0+ - RETURN DRIVER STORAGE REQUIREMENTS
  5966.     AX = 0015h
  5967. Return: BX = size of buffer needed to store driver state
  5968. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  5969. --------M-330016-----------------------------
  5970. INT 33 - MS MOUSE v6.0+ - SAVE DRIVER STATE
  5971.     AX = 0016h
  5972.     BX = size of buffer (see AX=0015h)
  5973.     ES:DX -> buffer for driver state
  5974. Note:    although not documented (since the Microsoft driver does not use it),
  5975.       many drivers appear to require BX on input
  5976. SeeAlso: AX=0015h,AX=0017h
  5977. --------M-330017-----------------------------
  5978. INT 33 - MS MOUSE v6.0+ - RESTORE DRIVER STATE
  5979.     AX = 0017h
  5980.     BX = size of buffer (see AX=0015h)
  5981.     ES:DX -> buffer containing saved state
  5982. Notes:    although not documented (since the Microsoft driver does not use it),
  5983.       many drivers appear to require BX on input
  5984.     some mouse drivers range-check the values in the saved state based on
  5985.       the current video mode; thus, the video mode should be restored
  5986.       before the mouse driver's state is restored
  5987. SeeAlso: AX=0015h,AX=0016h
  5988. --------M-330018-----------------------------
  5989. INT 33 - MS MOUSE v6.0+ - SET ALTERNATE MOUSE USER HANDLER
  5990.     AX = 0018h
  5991.     CX = call mask (see #1835)
  5992.     ES:DX -> FAR routine to be invoked on mouse events (see #1836)
  5993. Return: AX = status
  5994.         0018h if successful
  5995.         FFFFh on error
  5996. Notes:    up to three handlers can be defined by separate calls to this function,
  5997.       each with a different combination of shift states in the call mask;
  5998.       calling this function again with a call mask of 0000h undefines the
  5999.       specified handler (official documentation); specifying the same
  6000.       call mask and an address of 0000h:0000h undefines the handler (real
  6001.       life)
  6002.     some versions of the documentation erroneously reverse the order of
  6003.       the bits in the call mask
  6004. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  6005.  
  6006. Bitfields for mouse call mask:
  6007. Bit(s)    Description    (Table 1835)
  6008.  0    call if mouse moves
  6009.  1    call if left button pressed
  6010.  2    call if left button released
  6011.  3    call if right button pressed
  6012.  4    call if right button released
  6013.  5    call if shift button pressed during event
  6014.  6    call if ctrl key pressed during event
  6015.  7    call if alt key pressed during event
  6016. Note:    at least one of 5-7 must be set
  6017.  
  6018. (Table 1836)
  6019. Values user handler is called with:
  6020.     AX = condition mask (same bit assignments as call mask)
  6021.     BX = button state
  6022.     CX = cursor column
  6023.     DX = cursor row
  6024.     SI = horizontal mickey count
  6025.     DI = vertical mickey count
  6026. Return: registers preserved
  6027. Note:    in text modes, the row and column will be reported as a multiple of
  6028.       the cell size, typically 8x8 pixels
  6029. --------M-330019-----------------------------
  6030. INT 33 - MS MOUSE v6.0+ - RETURN USER ALTERNATE INTERRUPT VECTOR
  6031.     AX = 0019h
  6032.     CX = call mask (see #1835)
  6033. Return: BX:DX = user interrupt vector
  6034.     CX = call mask (0000h if not found)
  6035. Note:    attempts to find a user event handler (defined by function 18h)
  6036.       whose call mask matches CX
  6037. SeeAlso: AX=0018h
  6038. --------M-33001A-----------------------------
  6039. INT 33 - MS MOUSE v6.0+ - SET MOUSE SENSITIVITY
  6040.     AX = 001Ah
  6041.     BX = horizontal speed \
  6042.     CX = vertical speed   / (see AX=000Fh)
  6043.     DX = double speed threshold (see AX=0013h)
  6044. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  6045. --------M-33001B-----------------------------
  6046. INT 33 - MS MOUSE v6.0+ - RETURN MOUSE SENSITIVITY
  6047.     AX = 001Bh
  6048. Return: BX = horizontal speed
  6049.     CX = vertical speed
  6050.     DX = double speed threshold
  6051. SeeAlso: AX=000Bh,AX=001Ah
  6052. --------M-33001C-----------------------------
  6053. INT 33 - MS MOUSE v6.0+ - SET INTERRUPT RATE
  6054.     AX = 001Ch
  6055.     BX = rate (see #1837)
  6056. Notes:    only available on InPort mouse
  6057.     values greater than 4 may cause unpredictable driver behavior
  6058.  
  6059. (Table 1837)
  6060. Values for mouse interrupt rate:
  6061.  00h    no interrupts allowed
  6062.  01h    30 per second
  6063.  02h    50 per second
  6064.  03h    100 per second
  6065.  04h    200 per second
  6066. --------M-33001D-----------------------------
  6067. INT 33 - MS MOUSE v6.0+ - DEFINE DISPLAY PAGE NUMBER
  6068.     AX = 001Dh
  6069.     BX = display page number
  6070. Note:    the cursor will be displayed on the specified page
  6071. SeeAlso: AX=001Eh
  6072. --------M-33001E-----------------------------
  6073. INT 33 - MS MOUSE v6.0+ - RETURN DISPLAY PAGE NUMBER
  6074.     AX = 001Eh
  6075. Return: BX = display page number
  6076. SeeAlso: AX=001Dh
  6077. --------M-33001F-----------------------------
  6078. INT 33 - MS MOUSE v6.0+ - DISABLE MOUSE DRIVER
  6079.     AX = 001Fh
  6080. Return: AX = status
  6081.         001Fh successful
  6082.         ES:BX = INT 33 vector before mouse driver was first installed
  6083.         FFFFh unsuccessful
  6084. Notes:    restores vectors for INT 10 and INT 71 (8086) or INT 74 (286/386)
  6085.     if you restore INT 33 to ES:BX, driver will be completely disabled
  6086.     many drivers return AX=001Fh even though the driver has been disabled
  6087. SeeAlso: AX=0020h
  6088. --------M-330020-----------------------------
  6089. INT 33 - MS MOUSE v6.0+ - ENABLE MOUSE DRIVER
  6090.     AX = 0020h
  6091. Return: AX = status
  6092.         0020h successful
  6093.         FFFFh unsuccessful
  6094. Notes:    restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386)
  6095.       which were removed by function 1Fh
  6096.     Microsoft's documentation states that no value is returned
  6097. SeeAlso: AX=001Fh
  6098. --------M-330021-----------------------------
  6099. INT 33 - MS MOUSE v6.0+ - SOFTWARE RESET
  6100.     AX = 0021h
  6101. Return: AX = status
  6102.         FFFFh if mouse driver installed
  6103.         BX = number of buttons (FFFFh = two buttons)
  6104.         0021h if mouse driver not installed
  6105. Note:    this call is identical to funtion 00h, but does not reset the mouse
  6106. SeeAlso: AX=0000h
  6107. --------M-330022-----------------------------
  6108. INT 33 - MS MOUSE v6.0+ - SET LANGUAGE FOR MESSAGES
  6109.     AX = 0022h
  6110.     BX = language (see #1838)
  6111. Note:    only available on international versions of the driver; US versions
  6112.       ignore this call
  6113. SeeAlso: AX=0023h
  6114.  
  6115. (Table 1838)
  6116. Values for mouse driver language:
  6117.  00h    English
  6118.  01h    French
  6119.  02h    Dutch
  6120.  03h    German
  6121.  04h    Swedish
  6122.  05h    Finnish
  6123.  06h    Spanish
  6124.  07h    Portugese
  6125.  08h    Italian
  6126. --------M-330023-----------------------------
  6127. INT 33 - MS MOUSE v6.0+ - GET LANGUAGE FOR MESSAGES
  6128.     AX = 0023h
  6129. Return: BX = language (see #1838)
  6130. Note:    the US version of the driver always returns zero
  6131. SeeAlso: AX=0022h
  6132. --------M-330024-----------------------------
  6133. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  6134.     AX = 0024h
  6135. Return: AX = FFFFh on error
  6136.     otherwise,
  6137.         BH = major version
  6138.         BL = minor version
  6139.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  6140.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  6141. SeeAlso: AX=004Dh,AX=006Dh
  6142. --------M-330025-----------------------------
  6143. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  6144.     AX = 0025h
  6145. Return: AX = general information (see #1839)
  6146.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  6147.     CX = mouse code active flag (for OS/2)
  6148.     DX = mouse driver busy flag (for OS/2)
  6149.  
  6150. Bitfields for general mouse driver information:
  6151. Bit(s)    Description    (Table 1839)
  6152.  15    driver loaded as device driver rather than TSR
  6153.  14    driver is newer integrated type
  6154.  13,12    current cursor type
  6155.     00 software text cursor
  6156.     01 hardware text cursor (CRT Controller's cursor)
  6157.     1X graphics cursor
  6158.  11-8    interrupt rate (see #1837)
  6159.  7-0    count of currently-active Mouse Display Drivers (MDD), the newer
  6160.       integrated driver type
  6161. --------M-330026-----------------------------
  6162. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  6163.     AX = 0026h
  6164. Return: BX = mouse-disabled flag (0000h mouse enabled, nonzero disabled)
  6165.     CX = maximum virtual X (for current video mode)
  6166.     DX = maximum virtual Y
  6167. Note:    for driver versions before 7.05, this call returns the currently-set
  6168.       maximum coordinates; v7.05+ returns the absolute maximum coordinates
  6169. SeeAlso: AX=0031h
  6170. --------M-330026-----------------------------
  6171. INT 33 - Genius Mouse 9.06 - ???
  6172.     AX = 0026h
  6173. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  6174. --------M-330027-----------------------------
  6175. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  6176.     AX = 0027h
  6177. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  6178.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  6179.     CX = horizontal mickeys moved since last call
  6180.     DX = vertical mickeys moved since last call
  6181. SeeAlso: AX=000Bh
  6182. --------M-330028-----------------------------
  6183. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  6184.     AX = 0028h
  6185.     CX = new video mode (call is NOP if 0000h)
  6186.     DH = Y font size (00h = default)
  6187.     DL = X font size (00h = default)
  6188. Return: CL = status (00h = successful)
  6189. Notes:    DX is ignored unless the selected video mode supports font size control
  6190.     when CX=0000h, an internal flag that had been set by a previous call
  6191.       is cleared; this is required before a mouse reset
  6192. SeeAlso: AX=0029h,INT 10/AH=00h
  6193. --------M-330029-----------------------------
  6194. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  6195.     AX = 0029h
  6196.     CX = previous video mode
  6197.         0000h get first supported video mode
  6198.         other get next supported mode after mode CX
  6199. Return: CX = first/next video mode (0000h = no more video modes)
  6200.     DS:DX -> description of video mode or 0000h:0000h if none
  6201. Notes:    the enumerated video modes may be in any order and may repeat
  6202.     the description string (if available) is terminated by '$' followed by
  6203.       a NUL byte
  6204. SeeAlso: AX=0028h
  6205. --------M-33002A-----------------------------
  6206. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  6207.     AX = 002Ah
  6208. Return: AX = internal counter controlling cursor visibility
  6209.     BX = cursor hot spot column
  6210.     CX = cursor hot spot row
  6211.     DX = mouse type (see #1840)
  6212. Note:    the hot spot location is relative to the upper left corner of the
  6213.       cursor block and may range from -128 to +127 both horizontally and
  6214.       vertically
  6215. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  6216.  
  6217. (Table 1840)
  6218. Values for mouse type:
  6219.  00h    none
  6220.  01h    bus
  6221.  02h    serial
  6222.  03h    InPort
  6223.  04h    IBM
  6224.  05h    Hewlett-Packard
  6225. --------M-33002B-----------------------------
  6226. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  6227.     AX = 002Bh
  6228.     BX = active acceleration profile
  6229.         0001h-0004h or FFFFh to restore default curves
  6230.     ES:SI -> buffer containing acceleration profile data (see #1841)
  6231. Return: AX = success flag
  6232. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  6233.  
  6234. Format of acceleration profile data:
  6235. Offset    Size    Description    (Table 1841)
  6236.  00h    BYTE    length of acceleration profile 1
  6237.  01h    BYTE    length of acceleration profile 2
  6238.  02h    BYTE    length of acceleration profile 3
  6239.  03h    BYTE    length of acceleration profile 4
  6240.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  6241.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  6242.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  6243.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  6244.  84h 32 BYTEs    speedup factor for acceleration profile 1
  6245.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  6246.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  6247.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  6248.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  6249.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  6250.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  6251.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  6252. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  6253. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  6254. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  6255. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  6256. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  6257.       unused bytes in the speedup factor fields are filled with 10h
  6258. --------M-33002C-----------------------------
  6259. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  6260.     AX = 002Ch
  6261. Return: AX = status (0000h success)
  6262.     BX = currently-active acceleration profile
  6263.     ES:SI -> acceleration profile data (see #1841)
  6264. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  6265. --------M-33002D-----------------------------
  6266. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  6267.     AX = 002Dh
  6268.     BX = acceleration level
  6269.         0001h-0004h to set profile, or FFFFh to get current profile
  6270. Return: AX = status
  6271.         0000h successful
  6272.         ES:SI -> 16-byte blank-padded name of acceleration profile
  6273.         FFFEh invalid acceleration curve number
  6274.         ES:SI destroyed
  6275.     BX = active acceleration curve number
  6276. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  6277. --------M-33002E-----------------------------
  6278. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  6279.     AX = 002Eh
  6280.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  6281.     ES:SI -> 64-byte buffer containing profile names (16 bytes per name)
  6282. Return: AX = status (0000h success)
  6283.         FFFEh error for ATI Mouse driver
  6284.     ES:SI buffer filled with default names if BL nonzero on entry
  6285. Notes:    not supported by Logitech driver v6.10
  6286.     supported by ATI Mouse driver v7.04
  6287. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  6288. --------M-33002F-----------------------------
  6289. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  6290.     AX = 002Fh
  6291. Return: AX = status
  6292. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  6293. SeeAlso: INT 2F/AH=53h
  6294. --------M-330030-----------------------------
  6295. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  6296.     AX = 0030h
  6297.     CX = command
  6298.         0000h get status of BallPoint device
  6299.         other set rotation angle and masks
  6300.         BX = rotation angle (-32768 to 32767 degrees)
  6301.         CH = primary button mask
  6302.         CL = secondary button mask
  6303. Return: AX = button status (FFFFh if no BallPoint) (see #1842)
  6304.     BX = rotation angle (0-360 degrees)
  6305.     CH = primary button mask
  6306.     CL = secondary button mask
  6307. Note:    not supported by the ATI Mouse driver which calls itself v7.04
  6308.  
  6309. Bitfields for BallPoint mouse button status:
  6310. Bit(s)    Description    (Table 1842)
  6311.  5    button 1
  6312.  4    button 2
  6313.  3    button 3
  6314.  2    button 4
  6315.  other    zero
  6316. --------M-330031-----------------------------
  6317. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  6318.     AX = 0031h
  6319. Return: AX = virtual X minimum
  6320.     BX = virtual Y minimum
  6321.     CX = virtual X maximum
  6322.     DX = virtual Y maximum
  6323. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  6324.       the default is minimum = 0 and maximum = absolute maximum
  6325.       (see AX=0026h)
  6326. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  6327. --------M-330032-----------------------------
  6328. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  6329.     AX = 0032h
  6330. Return: AX = active function flags (FFFFh for v8.10)
  6331.         bit 15: function 0025h supported
  6332.         bit 14: function 0026h supported
  6333.         ...
  6334.         bit 0:  function 0034h supported
  6335.     BX = ??? (0000h) officially unused
  6336.     CX = ??? (E000h) officially unused
  6337.     DX = ??? (0000h) officially unused
  6338. Note:    the Italian version of MS MOUSE v8.20 reportedly indicates that
  6339.       functions 0033h and 0034h are not supported even though they are
  6340. --------M-330033-----------------------------
  6341. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  6342.     AX = 0033h
  6343.     CX = size of buffer
  6344.         0000h get required buffer size
  6345.         Return: AX = 0000h
  6346.             CX = required size (0154h for Logitech v6.10, 0159h
  6347.                 for MS v8.10-8.20)
  6348.         other
  6349.         ES:DX -> buffer of CX bytes for mouse settings
  6350.         Return: AX = 0000h
  6351.             CX = number of bytes returned
  6352.             ES:DX buffer filled (see #1843)
  6353. SeeAlso: AX=002Bh
  6354.  
  6355. Format of mouse settings data buffer:
  6356. Offset    Size    Description    (Table 1843)
  6357.  00h    BYTE    mouse type
  6358.  01h    BYTE    current language
  6359.  02h    BYTE    horizontal sensitivity (00h-64h)
  6360.  03h    BYTE    vertical sensitivity (00h-64h)
  6361.  04h    BYTE    double-speed threshold (00h-64h)
  6362.  05h    BYTE    ballistic curve (01h-04h)
  6363.  06h    BYTE    interrupt rate (01h-04h)
  6364.  07h    BYTE    cursor override mask
  6365.  08h    BYTE    laptop adjustment
  6366.  09h    BYTE    memory type (00h-02h)
  6367.  0Ah    BYTE    SuperVGA support (00h,01h)
  6368.  0Bh    BYTE    rotation angle
  6369.  0Ch    BYTE    ???
  6370.  0Dh    BYTE    primary button (01h-04h)
  6371.  0Eh    BYTE    secondary button (01h-04h)
  6372.  0Fh    BYTE    click lock enabled (00h,01h)
  6373.  10h 324 BYTEs    acceleration profile data (see #1841)
  6374. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  6375. --------M-330034-----------------------------
  6376. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  6377.     AX = 0034h
  6378. Return: AX = status (0000h successful)
  6379.     ES:DX -> ASCIZ initialization (.INI) file name
  6380. --------M-330035-----------------------------
  6381. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  6382.     AX = 0035h
  6383.     BX = function
  6384.         FFFFh get current settings
  6385.         Return: AX = 0000h
  6386.             BH = style (see #1844)
  6387.             BL = size (see below)
  6388.             CH = threshold
  6389.             CL = active flag (00h disabled, 01h enabled)
  6390.             DX = delay
  6391.         other
  6392.         BH = pointer style (see #1844)
  6393.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  6394.         CH = threshold (00h-64h)
  6395.         CL = active flag (00h disable size change, 01h enable)
  6396.         DX = delay (0000h-0064h)
  6397.         Return: AX = 0000h
  6398. Note:    not supported by Logitech driver v6.10
  6399. SeeAlso: AX=0012h,AX=002Ah
  6400.  
  6401. (Table 1844)
  6402. Values for pointer style:
  6403.  00h    normal
  6404.  01h    reverse
  6405.  02h    transparent
  6406. --------M-330042-----------------------------
  6407. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  6408.     AX = 0042h
  6409. Return: AX = status
  6410.         0000h MSMOUSE not installed
  6411.         0042h functions 42h, 50h, and 52h not supported
  6412.         FFFFh successful
  6413.         BX = buffer size in bytes for functions 50h and 52h
  6414. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6415. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  6416. --------M-330043-----------------------------
  6417. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - CONFIGURE MOUSE???
  6418.     AX = 0043h
  6419.     CX:BX -> configuration buffer (see #1845)
  6420.     DL = ???
  6421. Return: ???
  6422. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  6423.     this function is also supported by the Genius Mouse 9.06 driver
  6424.  
  6425. Format of Mouse Systems configuration buffer:
  6426. Offset    Size    Description    (Table 1845)
  6427.  00h    WORD    I/O port address
  6428.  02h    BYTE    ???
  6429.  03h    BYTE    interrupt number
  6430.  04h    BYTE    interrupt mask for interrupt controller
  6431.  05h  5 BYTEs    ???
  6432. --------M-330044CXCDEF-----------------------
  6433. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - TOGGLE IGNORE ACCELERATION CMDS
  6434.     AX = 0044h
  6435.     CX = CDEFh
  6436. Return: AX = new state of "Ignore Application Acceleration Commands" flag
  6437. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6438. SeeAlso: AX=0045h
  6439. --------M-330045CXCDEF-----------------------
  6440. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - TOGGLE RESOLUTION DOUBLING
  6441.     AX = 0045h
  6442.     CX = CDEFh
  6443. Return: AX = new state of resolution doubling flag
  6444. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6445. SeeAlso: AX=0044h
  6446. --------M-330047-----------------------------
  6447. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET BUTTON ASSIGNMENTS
  6448.     AX = 0047h
  6449.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  6450. Return: ???
  6451. Note:    also supported by Genius Mouse 9.06 driver
  6452. SeeAlso: AX=0067h
  6453. --------M-330048BXCDEF-----------------------
  6454. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET ???
  6455.     AX = 0048h
  6456.     BX = CDEFh
  6457. Return: CX = ???
  6458.     BH = ???
  6459.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  6460. Note:    also supported by Genius Mouse 9.06 driver
  6461. --------M-33004B-----------------------------
  6462. INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK
  6463.     AX = 004Bh
  6464. Return: ES:DI -> signature/description string if installed
  6465. Note:    the signature string in v7.04d is
  6466.       "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  6467. --------M-33004CBXCDEF-----------------------
  6468. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET ??? FLAG
  6469.     AX = 004Ch
  6470.     BX = CDEFh
  6471. Note:    also supported by Genius Mouse 9.06
  6472. SeeAlso: AX=006Ch
  6473. --------M-33004D-----------------------------
  6474. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  6475.     AX = 004Dh
  6476. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft" or
  6477.         "Copyright 19XX...."
  6478. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  6479.       mouse drivers
  6480.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  6481.       follows the above copyright message (KYE Corp. manufactures the
  6482.       driver)
  6483. SeeAlso: AX=0024h,AX=006Dh,AX=0666h
  6484. --------M-33004F-----------------------------
  6485. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ENABLE MOUSE
  6486.     AX = 004Fh
  6487. Return: nothing
  6488. Note:    also supported by Genius Mouse 9.06
  6489. SeeAlso: AX=0043h,AX=0053h
  6490. --------M-330050-----------------------------
  6491. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  6492.     AX = 0050h
  6493.     BX = buffer size (ignored by some driver versions)
  6494.     ES:DX -> buffer
  6495. Return: AX = FFFFh if successful
  6496. Notes:    the buffer must be large enough to hold the entire state, or following
  6497.       data will be overwritten by state data in versions which ignore BX;
  6498.       use INT 33/AX=0042h to get the required size
  6499.     this function is also supported by the Genius Mouse 9.06 driver
  6500. SeeAlso: AX=0042h,AX=0052h
  6501. --------M-330052-----------------------------
  6502. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  6503.     AX = 0052h
  6504.     BX = buffer size (ignored by some driver versions)
  6505.     ES:DX -> buffer
  6506. Return: AX = FFFFh if successful
  6507. Note:    also supported by Genius Mouse 9.06 driver
  6508. SeeAlso: AX=0050h
  6509. --------M-330053-----------------------------
  6510. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - DISABLE MOUSE
  6511.     AX = 0053h
  6512. Return: nothing
  6513. Note:    also supported by Genius Mouse 9.06
  6514. SeeAlso: AX=0043h,AX=004Fh
  6515. --------M-330054CXCDEF-----------------------
  6516. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SELECT ULTRARES ACCELERATION LEVEL
  6517.     AX = 0054h
  6518.     CX = CDEFh
  6519.     BX = new acceleration level (0-9)
  6520. Return: ???
  6521. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6522. SeeAlso: AX=005Ah
  6523. --------M-330055-----------------------------
  6524. INT 33 - Kraft Mouse - GET ???
  6525.     AX = 0055h
  6526. Return: CX = ???
  6527.     DX = ???
  6528.     ES = ???
  6529. --------M-330058-----------------------------
  6530. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  6531.     AX = 0058h
  6532. Return: AX = CS of driver
  6533.     CX:BX = original INT 33 vector
  6534.     DX = ???
  6535. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6536. --------M-33005A-----------------------------
  6537. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET ULTRARES ACCELERATIONS
  6538.     AX = 005Ah
  6539.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  6540.     DX:SI -> buffer containing thresholds??? (CX words)
  6541.     DX:BX -> buffer containing acceleration values???
  6542.         (9*14h words, only first CX of each 14h used)
  6543.     ???
  6544. Return: CF clear
  6545.     ???
  6546. Note:    this function is also supported by Genius Mouse 9.06
  6547. SeeAlso: AX=0054h
  6548. --------M-330061BXCDEF-----------------------
  6549. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  6550.     AX = 0061h
  6551.     BX = CDEFh
  6552. Return: CX = ???
  6553. Note:    also supported by Genius Mouse 9.06
  6554. --------M-330067-----------------------------
  6555. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET MOUSE BUTTONS???
  6556.     AX = 0067h
  6557. Return: BL = number of buttons???
  6558. Note:    also supported by Genius Mouse 9.06
  6559. SeeAlso: AX=0047h
  6560. --------M-33006A-----------------------------
  6561. INT 33 U - ATI Mouse - INSTALLATION CHECK
  6562.     AX = 006Ah
  6563. Return: AL = AAh
  6564.     AH = ???
  6565.     BH = ???
  6566.     BL = ???
  6567.     CL = ???
  6568.     CH = ???
  6569. Program: ATI's MOUSE.COM and MOUSE.SYS are drivers for the mouse port found on
  6570.       some of ATI's video adapters
  6571. SeeAlso: AX=006Dh
  6572. --------M-33006C-----------------------------
  6573. INT 33 U - TRUEDOX Mouse driver v4.01 - GET/SET HARDWARE PARAMETERS
  6574.     AX = 006Ch
  6575.     BX = new IRQ (0003h or 0004h), or 0000h to get current values only
  6576.     CL = new IRQmask (sent to 8259)
  6577.     DX = new base I/O port
  6578. Return: BX = current IRQ
  6579.     DX = light pen state???
  6580. Note:    this is the mouse driver for the Dell Dimension series of computers, by
  6581.       TRUEDOX Technology Corporation
  6582. SeeAlso: AX=00A1h,AX=0666h
  6583. --------M-33006CBXCDEF-----------------------
  6584. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - CLEAR ??? FLAG
  6585.     AX = 006Ch
  6586.     BX = CDEFh
  6587. Note:    also supported by Genius Mouse 9.06
  6588. SeeAlso: AX=004Ch
  6589. --------M-33006D-----------------------------
  6590. INT 33 - MS MOUSE - GET VERSION STRING
  6591.     AX = 006Dh
  6592. Return: ES:DI -> Microsoft version number of resident driver (see #1846)
  6593. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  6594.       drivers
  6595.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  6596.       Microsoft version as 7.00 even though they do not support any of the
  6597.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  6598.       (the Genius Mouse driver supports function 0026h, but it differs
  6599.       from the Microsoft function)
  6600.     the TRUEDOX 4.01 driver reports its version as 6.26 through this call,
  6601.       but as 6.24 through AX=0024h
  6602. SeeAlso: AX=0024h,AX=004Dh,AX=006Ah,AX=266Ch
  6603.  
  6604. Format of Microsoft version number:
  6605. Offset    Size    Description    (Table 1846)
  6606.  00h    BYTE    major version
  6607.  01h    BYTE    minor version (BCD)
  6608. --------M-330070BXABCD-----------------------
  6609. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  6610.     AX = 0070h
  6611.     BX = ABCDh
  6612. Return: AX = ABCDh if installed
  6613.         BX:CX -> data structure (see #1847)
  6614. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  6615.     the v7.01 POPUP.COM and menu drivers also check for the signature
  6616.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  6617.     if POPUP is not loaded, the returned data structure contains the proper
  6618.       signature at offset 00h, but not at offset 08h
  6619.  
  6620. Format of Mouse Systems POPUP.COM data structure:
  6621. Offset    Size    Description    (Table 1847)
  6622.  00h    WORD    signature ABCDh
  6623.  02h    DWORD    pointer to info structure??? (see #1848)
  6624.  06h  2 BYTEs    ???
  6625.  08h    WORD    signature ABCDh
  6626.  
  6627. Format of Mouse Systems POPUP.COM info structure:
  6628. Offset    Size    Description    (Table 1848)
  6629.  00h    WORD    driver version
  6630.  02h  8 BYTEs    ???
  6631.  0Ah    WORD    segment of ???
  6632.     ???
  6633. --------M-330072BXABCD-----------------------
  6634. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  6635.     AX = 0072h
  6636.     BX = ABCDh
  6637. Return: ???
  6638. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6639. --------M-330073BXCDEF-----------------------
  6640. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET BUTTON ASSIGNMENTS
  6641.     AX = 0073h
  6642.     BX = CDEFh
  6643.     ES:DX -> 3-byte buffer for button assignments
  6644. Return: CX = number of buttons???
  6645.     ES:DX buffer filled (default is "LMR")
  6646. Note:    also supported by Genius Mouse 9.06
  6647. SeeAlso: AX=0067h
  6648. --------M-3300A0-----------------------------
  6649. INT 33 U - TRUEDOX Mouse driver - SET HARDWARE PC MODE (3 button)
  6650.     AX = 00A0h
  6651. Return: nothing
  6652. Note:    this function is only available if the mouse mode is switchable
  6653.       through the power pins
  6654. SeeAlso: AX=006Ch"TRUEDOX",AX=00A1h"TRUEDOX"
  6655. --------M-3300A1-----------------------------
  6656. INT 33 U - TRUEDOX Mouse driver - SET HARDWARE MS MODE (2 button)
  6657.     AX = 00A1h
  6658. Return: nothing
  6659. Notes:    this function is only available if the mouse mode is switchable
  6660.       through the power pins
  6661.     this is the mouse driver for the Dell Dimension series of computers, by
  6662.       TRUEDOX Technology Corporation
  6663. SeeAlso: AX=006Ch"TRUEDOX",AX=00A0h"TRUEDOX",AX=00A6h,AX=0666h
  6664. --------M-3300A6-----------------------------
  6665. INT 33 U - TRUEDOX Mouse driver - SET RESOLUTION
  6666.     AX = 00A6h
  6667.     BX = new software resolution
  6668.         0001h 50-200 dpi
  6669.         0002h 200-400 dpi
  6670.         0003h 400-800 dpi
  6671. Note:    this is the mouse driver for the Dell Dimension series of computers, by
  6672.       TRUEDOX Technology Corporation
  6673. SeeAlso: AX=00A0h,AX=00A1h,AX=0666h
  6674. --------M-330100CX4752-----------------------
  6675. INT 33 - GRTMOUSE v1.00+ - INSTALLATION CHECK
  6676.     AX = 0100h
  6677.     CX = 4752h ('GR')
  6678.     DX = 544Dh ('TM')
  6679. Return: AX = 474Dh ('GM') if installed
  6680.         CX = version number (CH = major, CL = minor)
  6681. Program: GRTMOUSE is a graphical-cursor driver for textmode by Tommer Leyvand
  6682. SeeAlso: AX=0101h,AX=0102h,AX=0103h,AX=0104h
  6683. --------M-330101-----------------------------
  6684. INT 33 - GRTMOUSE v1.00+ - SET MOUSE CURSOR SHAPE
  6685.     AX = 0101h
  6686.     DS:SI -> 16-byte cursor pattern
  6687. Return: CF clear if successful
  6688. SeeAlso: AX=0100h,AX=0102h
  6689. --------M-330102-----------------------------
  6690. INT 33 - GRTMOUSE v1.00+ - GET MOUSE CURSOR SHAPE
  6691.     AX = 0102h
  6692.     ES:DI -> 16-byte buffer for cursor pattern
  6693. SeeAlso: AX=0100h,AX=0101h
  6694. --------M-330103-----------------------------
  6695. INT 33 - GRTMOUSE v1.00+ - SET ACTIVE CHARACTERS
  6696.     AX = 0103h
  6697.     CH,CL,DH,DL = ASCII codes to be remapped to display mouse pointer
  6698. Note:    the default active characters are D0h,D1h,D6h,D8h; the active
  6699.      characters should be in the range C0h to DFh
  6700. SeeAlso: AX=0100h,AX=0104h
  6701. --------M-330104-----------------------------
  6702. INT 33 - GRTMOUSE v1.00+ - GET ACTIVE CHARACTERS
  6703.     AX = 0104h
  6704. Return: CH,CL,DH,DL = ASCII codes for the active characters
  6705. SeeAlso: AX=0100h,AX=0103h
  6706. --------M-33012E-----------------------------
  6707. INT 33 - MS MOUSE v8.10+ - ???
  6708.     AX = 012Eh
  6709.     BL = ???
  6710. Return: AX = 0000h (MS)
  6711.     AX = FFFFh (ATI Mouse v7.04)
  6712. Note:    not supported by Logitech driver v6.10
  6713. SeeAlso: AX=002Eh,AX=022Eh
  6714. --------M-33022E-----------------------------
  6715. INT 33 - MS MOUSE v8.10+ - ???
  6716.     AX = 022Eh
  6717.     BL = ???
  6718. Return: AX = 0000h (MS)
  6719.     AX = FFFFh (ATI Mouse v7.04)
  6720. Note:    not supported by Logitech driver v6.10
  6721. SeeAlso: AX=002Eh,AX=012Eh
  6722. --------M-330666-----------------------------
  6723. INT 33 U - TRUEDOX Mouse driver v4.01 - GET COPYRIGHT STRING
  6724.     AX = 0666h
  6725. Return: DX:AX -> ASCII "Copyright 1987-1992 TRUEDOX Technology Corporation"
  6726. Note:    this is the mouse driver for the Dell Dimension series of computers,
  6727.       by TRUEDOX Technology Corporation
  6728. SeeAlso: AX=004Dh,AX=00A6h,AX=0666h
  6729. --------M-33136C-----------------------------
  6730. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6731.     AX = 136Ch
  6732.     BX = ???
  6733. Return: AX = ???
  6734.     BX = ???
  6735. --------M-33146C-----------------------------
  6736. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  6737.     AX = 146Ch
  6738.     BL = function
  6739.         00h set ???
  6740.         BH = new value (zero/nonzero to clear/set)
  6741.         else get ???
  6742.         Return: ???
  6743. --------M-33156C-----------------------------
  6744. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  6745.     AX = 156Ch
  6746. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  6747.     ES:SI -> version string, terminated with CRLF
  6748. --------M-33166C-----------------------------
  6749. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6750.     AX = 166Ch
  6751.     BL = ???
  6752.         00h ???
  6753.         01h ???
  6754.         other ???
  6755.         BH = new value of ???
  6756.         Return: AX = FFFFh
  6757. --------M-33176C-----------------------------
  6758. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6759.     AX = 176Ch
  6760.     ???
  6761. Return: ???
  6762. --------M-33186C-----------------------------
  6763. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6764.     AX = 186Ch
  6765.     ???
  6766. Return: ???
  6767. --------M-33196C-----------------------------
  6768. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6769.     AX = 196Ch
  6770.     ???
  6771. Return: ???
  6772. --------M-331A6C-----------------------------
  6773. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  6774.     AX = 1A6Ch
  6775. Return: AX = FFFFh
  6776.     BX = ???
  6777.     CX = ???
  6778. SeeAlso: AX=1B6Ch
  6779. --------M-331B6C-----------------------------
  6780. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  6781.     AX = 1B6Ch
  6782.     BX = new value for ??? (0000h-0003h)
  6783. Return: AX = FFFFh
  6784. SeeAlso: AX=1A6Ch
  6785. --------M-331C6C-----------------------------
  6786. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6787.     AX = 1C6Ch
  6788.     BX = ???
  6789.         <42h ???
  6790.         =42h ???
  6791.         >42h ???
  6792.         ES:DI -> ???
  6793.         Return: AX = ???
  6794. --------M-331D6C-----------------------------
  6795. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  6796.     AX = 1D6Ch
  6797. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  6798. SeeAlso: AX=1E6Ch
  6799. --------M-331E6C-----------------------------
  6800. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  6801.     AX = 1E6Ch
  6802.     BX = direction (0=north, 1=south, 2=east, 3=west)
  6803. SeeAlso: AX=1D6Ch
  6804. --------M-331F6C-----------------------------
  6805. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  6806.     AX = 1F6Ch
  6807. Return: BX = 0=off, 1=on
  6808.     CX = 1=low, 2=high
  6809. SeeAlso: AX=002Ch,AX=236Ch
  6810. --------M-33206C-----------------------------
  6811. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  6812.     AX = 206Ch
  6813.     BX = parameter (00h = right, FFh = left)
  6814. SeeAlso: AX=216Ch
  6815. --------M-33216C-----------------------------
  6816. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  6817.     AX = 216Ch
  6818. Return: BX = parameter (00h = right, FFh = left)
  6819. SeeAlso: AX=206Ch
  6820. --------M-33226C-----------------------------
  6821. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  6822.     AX = 226Ch
  6823. Note:    this only frees memory; does not restore hooked interrupts
  6824. --------M-33236C-----------------------------
  6825. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  6826.     AX = 236Ch
  6827.     BX = 0=off, 1=on
  6828.     CX = 1=low, 2=high
  6829. SeeAlso: AX=002Ch,AX=1F6Ch
  6830. --------M-33246C-----------------------------
  6831. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  6832.     AX = 246Ch
  6833.     ES:DX -> parameter table buffer (see #1849)
  6834. Return: AX = FFFFh if driver installed for serial mouse
  6835. SeeAlso: AX=0000h,AX=256Ch/BX=0000h,AX=256Ch/BX=0001h,AX=256Ch/BX=0003h
  6836.  
  6837. Format of Logitech Mouse parameter table:
  6838. Offset    Size    Description    (Table 1849)
  6839.  00h    WORD    baud rate divided by 100  (serial mouse only)
  6840.  02h    WORD    emulation          (serial mouse only)
  6841.  04h    WORD    report rate          (serial mouse only)
  6842.  06h    WORD    firmware revision      (serial mouse only)
  6843.  08h    WORD    00h              (serial mouse only)
  6844.  0Ah    WORD    port              (serial mouse only)
  6845.  0Ch    WORD    physical buttons
  6846.  0Eh    WORD    logical buttons
  6847. --------M-33256CBX0000-----------------------
  6848. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET BAUD RATE (SERIAL MOUSE ONLY)
  6849.     AX = 256Ch
  6850.     BX = 0000h
  6851.     CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  6852. Return: AX = FFFFh if driver installed for serial mouse
  6853. SeeAlso: AX=246Ch,AX=256Ch/BX=0001h,AX=256Ch/BX=0002h,AX=276Ch
  6854. --------M-33256CBX0001-----------------------
  6855. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET EMULATION (SERIAL MOUSE ONLY)
  6856.     AX = 256Ch
  6857.     BX = 0001h
  6858.     CX = emulation type (see #1850)
  6859. Return: AX = FFFFh if driver installed for serial mouse
  6860. SeeAlso: AX=246Ch,AX=256Ch/BX=0000h,AX=256Ch/BX=0003h,AX=276Ch
  6861.  
  6862. (Table 1850)
  6863. Values for Logitech mouse emulation type:
  6864.  00h    5 byte packed binary
  6865.  01h    3 byte packed binary
  6866.  02h    hexadecimal
  6867.  03h    relative bit pad
  6868.  04h    not supported
  6869.  05h    MM Series
  6870.  06h    not supported
  6871.  07h    Microsoft
  6872. --------M-33256CBX0002-----------------------
  6873. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET REPORT RATE (SERIAL MOUSE ONLY)
  6874.     AX = 256Ch
  6875.     BX = 0002h
  6876.     CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  6877. Return: AX = FFFFh if driver installed for serial mouse
  6878. SeeAlso: AX=246Ch,AX=256Ch/BX=0001h,AX=256Ch/BX=0003h,AX=276Ch
  6879. --------M-33256CBX0003-----------------------
  6880. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET MOUSE PORT (SERIAL MOUSE ONLY)
  6881.     AX = 256Ch
  6882.     BX = 0003h
  6883.     CX = port (1, 2)
  6884. Return: AX = FFFFh if driver installed for serial mouse
  6885. SeeAlso: AX=246Ch,AX=256Ch/BX=0000h,AX=256Ch/BX=0004h,AX=276Ch
  6886. --------M-33256CBX0004-----------------------
  6887. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET MOUSE LOGICAL BUTTONS
  6888.     AX = 256Ch
  6889.     BX = 0004h
  6890.     CX = buttons (2, 3)
  6891. Return: AX = FFFFh if driver installed for serial mouse
  6892. SeeAlso: AX=246Ch,AX=276Ch
  6893. --------M-33266C-----------------------------
  6894. INT 33 - LOGITECH MOUSE - GET VERSION???
  6895.     AX = 266Ch
  6896. Return: BX = 'SS'
  6897.     CH = '4'  major version number
  6898.     CL = '1'  minor version number
  6899. SeeAlso: AX=006Dh
  6900. --------M-33276C-----------------------------
  6901. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  6902.     AX = 276Ch
  6903. SeeAlso: AX=256Ch
  6904. --------M-333000-----------------------------
  6905. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  6906.     AX = 3000h
  6907. Return: AX = FFFFh if installed
  6908.         BX = version number (BH = major, BL = minor)
  6909. Program: SMD is a programmer's library by Andy Hakim which provides a
  6910.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  6911.       SMD-based TSR which replaces the block mouse cursor in text
  6912.       applications.
  6913. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  6914. --------M-333001-----------------------------
  6915. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  6916.     AX = 3001h
  6917. Return: AX = status (0000h = disabled, 0001h = enabled)
  6918. Note:    SMD remains disabled if running under Desqview or in graphics mode
  6919. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  6920. --------M-333002-----------------------------
  6921. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  6922.     AX = 3002h
  6923. Return: AX = status (0000h = disabled, 0001h = enabled)
  6924. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  6925. --------M-333003-----------------------------
  6926. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  6927.     AX = 3003h
  6928.     BL = data structure selector
  6929.         00h Primary Bitmap (used for 25 line mode) (see #1851)
  6930.         01h Secondary Bitmap (used for 43/50 line modes) (see #1851)
  6931.         02h Sacrifice Character Map (see #1852)
  6932.         03h Program Information (see #1853)
  6933. Return: ES:DX -> selected data structure
  6934. SeeAlso: AX=3000h
  6935.  
  6936. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]:
  6937. Offset    Size    Description    (Table 1851)
  6938.  00h    BYTE    vertical size of bitmap (00h - 10h)
  6939.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  6940.  02h    BYTE    vertical hotspot position (00h - 10h)
  6941.  03h    BYTE    horizontal hotspot position (00h - 10h)
  6942.  04h 16 WORDs    cursor bitmap data
  6943.  14h 16 WORDs    screen bitmap data
  6944.  
  6945. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]:
  6946. Offset    Size    Description    (Table 1852)
  6947.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  6948.  01h    BYTE    actual character for the corresponding position on the screen
  6949.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  6950.  03h    BYTE         | 0h | 1h | 2h |      cursor
  6951.  04h    BYTE         |----+----+----|
  6952.  05h    BYTE         | 3h | 4h | 5h |
  6953.  06h    BYTE         |----+----+----|
  6954.  07h    BYTE         | 6h | 7h | 8h |
  6955.  08h    BYTE         +--------------+
  6956.  
  6957. Format of Program Information [SMD_INFO_STRUCT]:
  6958. Offset    Size    Description    (Table 1853)
  6959.  00h    WORD    segment of old interrupt 33h handler
  6960.  02h    WORD    offset of old interrupt 33h handler
  6961.  04h    WORD    PSP of SMD
  6962.  06h    BYTE    ENABLE/DISABLE manual setting status
  6963.  07h    BYTE    ENABLE/DISABLE internal usage status
  6964. --------M-333004-----------------------------
  6965. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  6966.     AX = 3004h
  6967. SeeAlso: AX=3000h
  6968. --------M-333005-----------------------------
  6969. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  6970.     AX = 3005h
  6971. SeeAlso: AX=3000h
  6972. --------M-334F00-----------------------------
  6973. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  6974.     AX = 4F00h
  6975. Return: AX = 004Fh if supported
  6976.     BX = ???
  6977.     ES:DI -> ???
  6978. SeeAlso: AX=4F01h
  6979. --------M-334F01-----------------------------
  6980. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6981.     AX = 4F01h
  6982.     ES = ???
  6983. Return: AX = 004Fh if supported
  6984.     ES:DI -> ???
  6985. SeeAlso: AX=4F00h
  6986. --------M-336F00-----------------------------
  6987. INT 33 - Hewlett Packard - HP MOUSE DRIVER INSTALLATION CHECK
  6988.     AX = 6F00h
  6989.     BX <> 4850h
  6990. Return: BX = 4850h ('HP') if mouse driver written by Hewlett Packard
  6991. SeeAlso: INT 10/AX=6F00h,INT 14/AX=6F00h,INT 16/AX=6F00h,INT 17/AX=6F00h
  6992. --------M-338800-----------------------------
  6993. INT 33 U - InfoTrack IMOUSE.COM - UNHOOK MOUSE IRQ
  6994.     AX = 8800h
  6995.     BX <> FFFFh
  6996. Note:    the code is written to expect a subfunction number in AL, but only
  6997.       function 00h has been implemented
  6998. SeeAlso: AX=8800h/BX=FFFFh
  6999. --------M-338800BXFFFF-----------------------
  7000. INT 33 U - InfoTrack IMOUSE.COM - GET ACTIVE IRQ
  7001.     AX = 8800h
  7002.     BX = FFFFh
  7003. Return: BL = number of IRQ being used by the mouse
  7004. SeeAlso: AX=8800h
  7005. --------T-33FFE6-----------------------------
  7006. INT 33 - Switch-It v3.23 - GET ??? PROGRAM
  7007.     AX = FFE6h
  7008.     CX = length of buffer
  7009.     ES:DI -> buffer for program name
  7010. Return: ES:DI buffer filled
  7011. Program: Switch-It is a task switcher supporting up to 100 programs
  7012.       simultaneously by Better Software Technology, Inc.
  7013. --------T-33FFE7-----------------------------
  7014. INT 33 - Switch-It v3.23 - GET ???
  7015.     AX = FFE7h
  7016. Return: AX = ???
  7017. --------T-33FFE8-----------------------------
  7018. INT 33 - Switch-It v3.23 - ???
  7019.     AX = FFE8h
  7020.     CX = length of name including terminating NUL
  7021.     DS:SI -> ASCIZ program pathname
  7022. --------T-33FFE9-----------------------------
  7023. INT 33 - Switch-It v3.23 - SET ???
  7024.     AX = FFE9h
  7025.     BX = ???
  7026. --------T-33FFEA-----------------------------
  7027. INT 33 - Switch-It v3.23 - SET ???
  7028.     AX = FFEAh
  7029.     BL = ???
  7030. --------T-33FFEB-----------------------------
  7031. INT 33 - Switch-It v3.23 - SET ??? FLAG
  7032.     AX = FFEBh
  7033. --------T-33FFEC-----------------------------
  7034. INT 33 - Switch-It v3.23 - SET ???
  7035.     AX = FFECh
  7036.     BL = ???
  7037. --------T-33FFED-----------------------------
  7038. INT 33 - Switch-It v3.23 - GET ???
  7039.     AX = FFEDh
  7040. Return: AX = ??? (0001h)
  7041.     BX = ???
  7042. Program: Switch-It is a task switcher supporting up to 100 programs
  7043.       simultaneously by Better Software Technology, Inc.
  7044. --------T-33FFEE-----------------------------
  7045. INT 33 - Switch-It v3.23 - GET ???
  7046.     AX = FFEEh
  7047. Return: AX = ???
  7048. --------T-33FFEF-----------------------------
  7049. INT 33 - Switch-It v3.23 - GET ???
  7050.     AX = FFEFh
  7051. Return: BX:AX -> ???
  7052. --------T-33FFF0-----------------------------
  7053. INT 33 - Switch-It v3.23 - SET ???
  7054.     AX = FFF0h
  7055.     BL = ???
  7056. --------T-33FFF1-----------------------------
  7057. INT 33 - Switch-It v3.23 - GET CONFIGURATION FILE
  7058.     AX = FFF1h
  7059. Return: BX:AX -> ASCIZ pathname of configuration file
  7060. Program: Switch-It is a task switcher supporting up to 100 programs
  7061.       simultaneously by Better Software Technology, Inc.
  7062. --------T-33FFF2-----------------------------
  7063. INT 33 - Switch-It v3.23 - SET ??? FLAG
  7064.     AX = FFF2h
  7065. Return: AL = 01h
  7066. --------T-33FFF3-----------------------------
  7067. INT 33 - Switch-It v3.23 - GET ???
  7068.     AX = FFF3h
  7069. Return: AX = ???
  7070. --------T-33FFF4-----------------------------
  7071. INT 33 - Switch-It v3.23 - SET ???
  7072.     AX = FFF4h
  7073.     BX = ???
  7074.     CX = ???
  7075. --------T-33FFF5-----------------------------
  7076. INT 33 - Switch-It v3.23 - GET ???
  7077.     AX = FFF5h
  7078. Return: AX = ???
  7079. --------T-33FFF6-----------------------------
  7080. INT 33 - Switch-It v3.23 - GET ???
  7081.     AX = FFF6h
  7082. Return: AX = ???
  7083. --------T-33FFF7-----------------------------
  7084. INT 33 - Switch-It v3.23 - GET ???
  7085.     AX = FFF7h
  7086.     BX = index of ???
  7087. Return: AX = ???
  7088. --------T-33FFF8-----------------------------
  7089. INT 33 - Switch-It v3.23 - ???
  7090.     AX = FFF8h
  7091.     BX = ???
  7092.     CX = length of program name, including terminating NUL
  7093.     DS:SI -> ASCIZ program pathname
  7094. Return: ???
  7095. Program: Switch-It is a task switcher supporting up to 100 programs
  7096.       simultaneously by Better Software Technology, Inc.
  7097. --------T-33FFF9-----------------------------
  7098. INT 33 - Switch-It v3.23 - NOP
  7099.     AX = FFF9h
  7100. --------T-33FFFA-----------------------------
  7101. INT 33 - Switch-It v3.23 - SET ???
  7102.     AX = FFFAh
  7103.     BX = index of program
  7104. SeeAlso: AX=FFFBh,AX=FFFCh
  7105. --------T-33FFFB-----------------------------
  7106. INT 33 - Switch-It v3.23 - GET ???
  7107.     AX = FFFBh
  7108.     BX = index of program
  7109. Return: AX = ??? (0000h or 0001h)
  7110. SeeAlso: AX=FFFAh,AX=FFFCh
  7111. --------T-33FFFC-----------------------------
  7112. INT 33 - Switch-It v3.23 - CLEAR ???
  7113.     AX = FFFCh
  7114.     BX = index of program
  7115. SeeAlso: AX=FFFAh,AX=FFFCh
  7116. --------T-33FFFD-----------------------------
  7117. INT 33 - Switch-It v3.23 - GET MEMORY ADDRESSES???
  7118.     AX = FFFDh
  7119. Return: AX = first available segment???
  7120.     BX = paragraph of top of conventional memory
  7121.     DX = PSP segment of SI.EXE
  7122. --------T-33FFFE-----------------------------
  7123. INT 33 - Switch-It v3.23 - INSTALLATION CHECK
  7124.     AX = FFFEh
  7125. Return: BX = ???
  7126.     DX = 5349h ("SI")
  7127. --------T-33FFFF-----------------------------
  7128. INT 33 - Switch-It v3.23 - ???
  7129.     AX = FFFFh
  7130.     BX = ???
  7131. Program: Switch-It is a task switcher supporting up to 100 programs
  7132.       simultaneously by Better Software Technology, Inc.
  7133. --------r-34---------------------------------
  7134. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  7135. Desc:    this interrupt is used to emulate floating-point instructions with
  7136.       an opcode of D8h
  7137. Note:    the floating-point emulators in Borland and Microsoft languages and
  7138.       Lahey FORTRAN use this interrupt
  7139. SeeAlso: INT 35,INT 3E
  7140. --------r-35---------------------------------
  7141. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  7142. Desc:    this interrupt is used to emulate floating-point instructions with
  7143.       an opcode of D9h
  7144. Note:    the floating-point emulators in Borland and Microsoft languages and
  7145.       Lahey FORTRAN use this interrupt
  7146. SeeAlso: INT 34,INT 36
  7147. --------r-36---------------------------------
  7148. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  7149. Desc:    this interrupt is used to emulate floating-point instructions with
  7150.       an opcode of DAh
  7151. Note:    the floating-point emulators in Borland and Microsoft languages and
  7152.       Lahey FORTRAN use this interrupt
  7153. SeeAlso: INT 35,INT 37
  7154. --------r-37---------------------------------
  7155. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  7156. Desc:    this interrupt is used to emulate floating-point instructions with
  7157.       an opcode of DBh
  7158. Note:    the floating-point emulators in Borland and Microsoft languages and
  7159.       Lahey FORTRAN use this interrupt
  7160. SeeAlso: INT 36,INT 38
  7161. --------r-38---------------------------------
  7162. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  7163. Desc:    this interrupt is used to emulate floating-point instructions with
  7164.       an opcode of DCh
  7165. Note:    the floating-point emulators in Borland and Microsoft languages and
  7166.       Lahey FORTRAN use this interrupt
  7167. SeeAlso: INT 37,INT 39
  7168. --------O-38---------------------------------
  7169. INT 38 - PC-MOS/386 v3.0 - API
  7170. Note:    this API was been moved to INT D4h sometime between versions 3.0 and
  7171.       5.01; v3.0 supported at least functions 02h,04h,0703h,10h,11h, and
  7172.       12h
  7173. SeeAlso: INT D4/AH=02h,INT D4/AH=04h,INT D4/AH=07h,INT D4/AH=10h,INT D4/AH=11h
  7174. --------r-39---------------------------------
  7175. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  7176. Desc:    this interrupt is used to emulate floating-point instructions with
  7177.       an opcode of DDh
  7178. Note:    the floating-point emulators in Borland and Microsoft languages and
  7179.       Lahey FORTRAN use this interrupt
  7180. SeeAlso: INT 38,INT 3A
  7181. --------r-3A---------------------------------
  7182. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  7183. Desc:    this interrupt is used to emulate floating-point instructions with
  7184.       an opcode of DEh
  7185. Note:    the floating-point emulators in Borland and Microsoft languages and
  7186.       Lahey FORTRAN use this interrupt
  7187. SeeAlso: INT 39,INT 3B
  7188. --------r-3B---------------------------------
  7189. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  7190. Desc:    this interrupt is used to emulate floating-point instructions with
  7191.       an opcode of DFh
  7192. Note:    the floating-point emulators in Borland and Microsoft languages and
  7193.       Lahey FORTRAN use this interrupt
  7194. SeeAlso: INT 3A,INT 3C
  7195. --------r-3C---------------------------------
  7196. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  7197. Notes:    the floating-point emulators in Borland and Microsoft languages and
  7198.       Lahey FORTRAN use this interrupt
  7199.     the generated code is  CD 3C xy mm ....
  7200.       where xy is a modified ESC instruction and mm is the modR/M byte.
  7201.       The xy byte appears to be encoded as
  7202.         s s 0 1 1 x x x      or    s s 0 0 0 x x x
  7203.       where "ss" specifies the segment override:
  7204.         00 -> DS:
  7205.         01 -> SS:
  7206.         10 -> CS:
  7207.         11 -> ES:
  7208. SeeAlso: INT 3B,INT 3D
  7209. --------r-3D---------------------------------
  7210. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  7211. Notes:    the floating-point emulators in Borland and Microsoft languages and
  7212.       Lahey FORTRAN use this interrupt
  7213.     this vector is modified but not restored by Direct Access v4.0, and
  7214.       may be left dangling by other programs written with the same version
  7215.       of compiled BASIC
  7216. SeeAlso: INT 3C,INT 3E
  7217. --------r-3E---------------------------------
  7218. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  7219. Notes:    the two bytes following the INT 3E instruction are the subcode
  7220.       (see #1854) and a NOP (90h), except for subcodes DCh and DEh, where
  7221.       the second byte is a register count (01h-08h)
  7222.     this vector is modified but not restored by Direct Access v4.0, and
  7223.       may be left dangling by other programs written with the same version
  7224.       of compiled BASIC
  7225. SeeAlso: INT 3D
  7226.  
  7227. (Table 1854)
  7228. Values for Borland floating-point shortcut subcode:
  7229. Subcode        Function
  7230.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  7231.       top of the stack prior to the INT 3E with the 8087 register contents
  7232.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  7233.       of 8086 stack
  7234.  E0h    round TOS and R1 to single precision, compare, pop twice
  7235.       returns AX=8087 status word, FLAGS=8087 condition bits
  7236.  E2h    round TOS and R1 to double precision, compare, pop twice
  7237.       returns AX=8087 status word, FLAGS=8087 condition bits
  7238.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  7239.       field to the undocumented value 01h; this results in actually
  7240.       rounding to single precision
  7241.  E4h    compare TOS/R1 with two POP's
  7242.       returns FLAGS=8087 condition bits
  7243.  E6h    compare TOS/R1 with POP
  7244.       returns FLAGS=8087 condition bits
  7245.  E8h    FTST (check TOS value)
  7246.       returns FLAGS=8087 condition bits
  7247.  EAh    FXAM (check TOS value)
  7248.       returns AX=8087 status word
  7249.  ECh    sine(ST0)
  7250.  EEh    cosine(ST0)
  7251.  F0h    tangent(ST0)
  7252.  F2h    arctangent(ST0)
  7253.  F4h    ST0 = ln(ST0)
  7254.  F6h    ST0 = log2(ST0)
  7255.  F8h    ST0 = log10(ST0)
  7256.  FAh    ST0 = e**ST0
  7257.  FCh    ST0 = 2**ST0
  7258.  FEh    ST0 = 10**ST0
  7259. --------r-3F---------------------------------
  7260. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  7261. Notes:    INT 3F is the default, and may be overridden while linking
  7262.     this vector is modified but not restored by Direct Access v4.0, and
  7263.       may be left dangling by other programs written with the same version
  7264.       of compiled BASIC
  7265. SeeAlso: INT FE"OVERLAY"
  7266. --------r-3F---------------------------------
  7267. INT 3F - Microsoft Dynamic Link Library manager
  7268. SeeAlso: INT 21/AH=4Bh
  7269. --------B-40---------------------------------
  7270. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  7271. SeeAlso: INT 13,INT 47"SuperBIOS",INT 63
  7272. --------h-40---------------------------------
  7273. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  7274. SeeAlso: INT 41"Z100",INT FF"Z100"
  7275. --------O-40---------------------------------
  7276. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  7277.     AL = operation
  7278.         00h close file
  7279.         40h open file for reading
  7280.         80h open file for writing
  7281.         C0h open file for random access
  7282.     DS:BX -> CR-terminated filename
  7283. Return: AL = file handle (00h if file closed or could not be opened)
  7284. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  7285.       6502-based Master 128 which uses the original CPU as an I/O processor
  7286. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  7287. --------h-40---------------------------------
  7288. INT 40 - TI Professional PC - IRQ0
  7289. Note:    on the TI Pro, IRQ0 is connected to the same pin on the expansion bus
  7290.       that IBM connects to IRQ2
  7291. SeeAlso: INT 0A"IRQ2",INT 41"TI Professional"
  7292. --------B-41---------------------------------
  7293. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  7294. Notes:    the default parameter table array is located at F000h:E401h in 100%
  7295.       compatible BIOSes; the pointer may be overridden by the hard disk
  7296.       controller's BIOS to support drive formats unknown to the ROM BIOS
  7297.     not used by some PS/2 models
  7298. SeeAlso: #1855,INT 13/AH=09h,INT 1E,INT 46,INT 60"Adaptec",INT C0"AMI"
  7299.  
  7300. Format of fixed disk parameters:
  7301. Offset    Size    Description    (Table 1855)
  7302.  00h    WORD    number of cylinders
  7303.  02h    BYTE    number of heads
  7304.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  7305.  05h    WORD    starting write precompensation cylinder number
  7306.  07h    BYTE    maximum ECC burst length (XT only)
  7307.  08h    BYTE    control byte (see #1856,#1857)
  7308.  09h    BYTE    standard timeout (XT only, 0 for others)
  7309.  0Ah    BYTE    formatting timeout (XT and WD1002 only, 0 for others)
  7310.  0Bh    BYTE    timeout for checking drive (XT and WD1002 only, 0 for others)
  7311.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  7312.  0Eh    BYTE    number of sectors per track (AT and later only)
  7313.  0Fh    BYTE    reserved
  7314. SeeAlso: #0179,#0181
  7315.  
  7316. Bitfields for XT fixed disk control byte:
  7317. Bit(s)    Description    (Table 1856)
  7318.  2-0    drive step speed
  7319.     000  3ms
  7320.     100  200ms
  7321.     101  70ms (default)
  7322.     110  3ms
  7323.     111  3ms
  7324.  5-3    unused
  7325.  6    disable ECC retries
  7326.  7    disable access retries
  7327.  
  7328. Bitfields for AT fixed disk control byte:
  7329. Bit(s)    Description    (Table 1857)
  7330.  0    unused
  7331.  1    reserved (0)  (disable IRQ)
  7332.  2    reserved (0)  (no reset)
  7333.  3    set if more than 8 heads
  7334.  4    always 0
  7335.  5    set if manufacturer's defect map on max cylinder+1  (AT and later only)
  7336.  6    disable ECC retries
  7337.  7    disable access retries
  7338. --------h-41---------------------------------
  7339. INT 41 - Z100 - Master 8259 - Processor Swap
  7340. SeeAlso: INT 40"Z100",INT 42"Z100"
  7341. --------h-41---------------------------------
  7342. INT 41 - TI Professional PC - IRQ1
  7343. Note:    on the TI Pro, IRQ1 is connected to the same pin on the expansion bus
  7344.       that IBM connects to IRQ3
  7345. SeeAlso: INT 0B"IRQ3",INT 40"TI Professional",INT 42"TI Professional"
  7346. --------O-41---------------------------------
  7347. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  7348.     AL = function
  7349.         01h put bytes sequentially
  7350.         02h put bytes, ignoring sequential pointer
  7351.         03h get bytes sequentially
  7352.         04h get bytes, ignoring sequential pointer
  7353.         05h get media title and boot option
  7354.         06h get current device and directory
  7355.         07h get current library and device
  7356.         08h search directory
  7357.     DS:BX -> control block (see #1858)
  7358. Return: CF clear if successful
  7359.     CF set on error
  7360.     AL = 00h if operation attempted
  7361.     AL unchanged if unsupported function
  7362. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  7363.  
  7364. Format of BBC Master control block:
  7365. Offset    Size    Description    (Table 1858)
  7366.  00h    BYTE    file handle
  7367.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  7368.  05h    DWORD    number of bytes to be transferred
  7369.  09h    DWORD    transfer address
  7370. --------G-410000-----------------------------
  7371. INT 41 CPU - MS Windows debugging kernel - OUTPUT CHARACTER FOR USER
  7372.     AX = 0000h
  7373.     DS:DX -> character
  7374. Note:    the kernel calls this function when it wants the user program to
  7375.       output a character
  7376. SeeAlso: AX=0001h
  7377. --------G-410001-----------------------------
  7378. INT 41 CPU - MS Windows debugging kernel - INPUT CHARACTER
  7379.     AX = 0001h
  7380. Return: AL = character
  7381. Note:    the kernel calls this function when it needs to input a character
  7382. SeeAlso: AX=0000h
  7383. --------G-41000D-----------------------------
  7384. INT 41 CPU - MS Windows debugging kernel - TASK GOING OUT
  7385.     AX = 000Dh
  7386. SeeAlso: AX=000Eh
  7387. --------G-41000E-----------------------------
  7388. INT 41 CPU - MS Windows debugging kernel - TASK COMING IN
  7389.     AX = 000Eh
  7390. SeeAlso: AX=000Dh
  7391. --------G-410012-----------------------------
  7392. INT 41 CPU - MS Windows debugging kernel - "OutputDebugString"
  7393.     AX = 0012h
  7394.     DS:SI -> string (Windows 3.0)
  7395.     ES:SI -> string (Windows 3.1)
  7396. Return: nothing???
  7397. Note:    this function is called by the kernel when it wants to output a
  7398.       string through the debugger
  7399. SeeAlso: AX=0050h,INT 68/AH=47h
  7400. --------G-41004F-----------------------------
  7401. INT 41 CPU - MS Windows debugging kernel - DEBUGGER INSTALLATION CHECK
  7402.     AX = 004Fh
  7403. Return: AX = F386h if debugger is present
  7404. SeeAlso: INT 68/AX=4400h
  7405. --------G-410050-----------------------------
  7406. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  7407.     AX = 0050h
  7408.     BX = segment number in executable (0-based)
  7409.     CX = selector
  7410.     DX = instance handle
  7411.     SI = segment flags (0=code, 1=data)
  7412.     ES:DI -> module name of owner
  7413. Return: ???
  7414. SeeAlso: AX=0012h,AX=004Fh
  7415. --------G-410051-----------------------------
  7416. INT 41 CPU - MS Windows debugging kernel - MOVE SEGMENT
  7417.     AX = 0051h
  7418.     ???
  7419. Return: ???
  7420. SeeAlso: AX=0050h,AX=0052h
  7421. --------G-410052-----------------------------
  7422. INT 41 CPU - MS Windows debugging kernel - FREE SEGMENT
  7423.     AX = 0052h
  7424.     BX = freed selector
  7425. SeeAlso: AX=0050h,AX=0051h,AX=005Ch
  7426. --------G-410059-----------------------------
  7427. INT 41 CPU - MS Windows debugging kernel - LOAD TASK
  7428.     AX = 0059h
  7429.     ???:BX = CS:IP of new task's starting point
  7430. --------G-41005C-----------------------------
  7431. INT 41 CPU - MS Windows debugging kernel - FREE INITIAL SEGMENT
  7432.     AX = 005Ch
  7433.     BX = freed selector
  7434. Note:    called only when KERNEL starts, once for CS and once for the DS alias
  7435.       to CS
  7436. SeeAlso: AX=0052h
  7437. --------G-410060-----------------------------
  7438. INT 41 CPU - MS Windows debugging kernel -  END OF SEGMENT LOAD
  7439.     AX = 0060h
  7440.     ???
  7441. Return: ???
  7442. SeeAlso: AX=0061h
  7443. --------G-410061-----------------------------
  7444. INT 41 CPU - MS Windows debugging kernel - END OF SEGMENT DISCARD
  7445.     AX = 0061h
  7446.     ???
  7447. Return: ???
  7448. SeeAlso: AX=0060h
  7449. --------G-410062-----------------------------
  7450. INT 41 CPU - MS Windows debugging kernel - APPLICATION TERMINATING
  7451.     AX = 0062h
  7452. STACK:    BYTE    exit code
  7453. Return: ???
  7454.     STACK unchanged???
  7455. SeeAlso: AX=0064h
  7456. --------G-410063-----------------------------
  7457. INT 41 CPU - MS Windows debugging kernel - ASYNCHRONOUS STOP (Ctrl-Alt-SysReq)
  7458.     AX = 0063h
  7459. --------G-410064-----------------------------
  7460. INT 41 CPU - MS Windows debugging kernel - DLL LOADED
  7461.     AX = 0064h
  7462.     CX:BX = DLL entry point CS:IP
  7463.     SI = module handle
  7464. SeeAlso: AX=0062h,AX=0065h
  7465. --------G-410065-----------------------------
  7466. INT 41 CPU - MS Windows debugging kernel - MODULE REMOVED
  7467.     AX = 0065h
  7468.     ES = module handle
  7469. SeeAlso: AX=0064h
  7470. --------V-42---------------------------------
  7471. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  7472. Desc:    contains the address of the original INT 10 handler which an EGA+
  7473.       video adapter replaces with its own on-board BIOS code
  7474. SeeAlso: INT 10
  7475. Note:    not used by PS/2 built-in VGA or XGA
  7476. --------h-42---------------------------------
  7477. INT 42 - Z100 - Master 8259 - Timer
  7478. SeeAlso: INT 41"Z100",INT 43"Z100"
  7479. --------h-42---------------------------------
  7480. INT 42 - TI Professional PC - IRQ2
  7481. Note:    on the TI Pro, IRQ0 is connected to the same pin on the expansion bus
  7482.       that IBM connects to IRQ4
  7483. SeeAlso: INT 0C"IRQ4",INT 41"TI Professional",INT 43"TI Professional"
  7484. --------b-42---------------------------------
  7485. INT 42 - Western Digital WD1002 SuperBIOS - INT 40 CASCADE
  7486. Note:    if the second WD1002 controller in the system finds INT 40 already in
  7487.       use, it uses this vector to cascade to the first controller's BIOS
  7488. SeeAlso: INT 40"DISKETTE",INT 47"SuperBIOS"
  7489. --------O-42---------------------------------
  7490. INT 42 - Acorn BBS Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  7491.     AL = byte to be written
  7492.     BH = file handle
  7493. Return: flags destroyed
  7494. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  7495. --------V-427500-----------------------------
  7496. INT 42 U - Toshiba laptops - ???
  7497.     AX = 7500h
  7498.     BL = ??? (00h or 01h)
  7499. Return: ???
  7500. Note:    used by Toshiba utility VCHAD.EXE
  7501. SeeAlso: AX=7501h,AX=7503h
  7502. --------V-427501-----------------------------
  7503. INT 42 U - Toshiba laptop - GET ??? DATA
  7504.     AX = 7501h
  7505.     DS:DI -> data area to be filled ???
  7506. Return: area filled with data ???
  7507. Note:    used by Toshiba utility VCHAD.EXE
  7508. SeeAlso: AX=7500h,AX=7502h,AX=7503h
  7509. --------V-427502-----------------------------
  7510. INT 42 U - Toshiba laptops - SET ??? DATA
  7511.     AX = 7502h
  7512.     DS:DI -> data area ???
  7513. Return: ???
  7514. Note:    used by Toshiba utility VCHAD.EXE
  7515. SeeAlso: AX=7501h,AX=7503h
  7516. --------V-427503-----------------------------
  7517. INT 42 - Toshiba laptops - GET DISPLAY STATUS
  7518.     AX = 7503h
  7519. Return: AX = 7575h if supported
  7520.     CX = 0001h if supported
  7521.     BH = display type (00h color, 03h monochrome)
  7522.     BL = display state
  7523.         01h internal LCD display is active
  7524.         02h external VGA display is active
  7525.         03h both displays active / DeskStation display mode enabled
  7526.         (not possible on all machines)
  7527. Note:    used by VCHAD.EXE and supported by all Toshiba VGA laptops until about
  7528.       1994 (string "TOSHIBA " at F000:E010h should be checked before call)
  7529.         no longer supported by T21xx series, use INT 10/AX=5F50h instead
  7530.     INT 42 normally points to F000:F065h but may be redirected by QEMM386
  7531. SeeAlso: AX=7500h,AX=7504h,INT 10/AX=5F50h,INT 15/AH=C0h
  7532. --------V-427504-----------------------------
  7533. INT 42 U - Toshiba laptops - ???
  7534.     AX = 7504h
  7535.     BL = ???
  7536. Return: BH = ???
  7537. Note:    used by Toshiba utility VCHAD.EXE
  7538. SeeAlso: AX=7500h,AX=7503h
  7539. --------V-43---------------------------------
  7540. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  7541. Desc:    points at graphics data for characters 00h-7Fh of the current font
  7542.       in 8x8 dot modes, graphics data for all characters in 8x14 and 8x16
  7543.       modes
  7544. Note:    this is not a callable vector!
  7545. SeeAlso: INT 06"no-name",INT 1F,INT 44"VIDEO"
  7546. --------h-43---------------------------------
  7547. INT 43 - Z100 - Master 8259 - Slave 8259 input
  7548. Note:    slave runs in special fully nested mode
  7549. SeeAlso: INT 42"Z100",INT 44"Z100"
  7550. --------h-43---------------------------------
  7551. INT 43 - TI Professional PC - IRQ3 - TIMER1 25ms INTERVAL INTERRUPT
  7552. SeeAlso: INT 0B"IRQ3",INT 42"TI Professional",INT 44"TI Professional"
  7553. SeeAlso: INT 58"TI Professional"
  7554. --------O-43---------------------------------
  7555. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  7556.     BH = file handle
  7557. Return: CF clear if successful
  7558.         AL = byte read from file
  7559.     CF set on error
  7560. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  7561. --------V-44---------------------------------
  7562. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  7563. Desc:    this vector points at graphics data for current character font
  7564. SeeAlso: INT 1F,INT 43"VIDEO"
  7565. --------N-44---------------------------------
  7566. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  7567. --------I-44---------------------------------
  7568. INT 44 - IBM 3270-PC High Level Language API
  7569.     DS:SI -> parameter control block
  7570. --------h-44---------------------------------
  7571. INT 44 - Z100 - Master 8259 - Serial A
  7572. SeeAlso: INT 43"Z100",INT 45"Z100"
  7573. --------h-44---------------------------------
  7574. INT 44 - TI Professional PC - IRQ4
  7575. Note:    on the TI Pro, IRQ4 is connected to the same pin on the expansion bus
  7576.       that IBM connects to IRQ5
  7577. SeeAlso: INT 0D"IRQ5",INT 43"TI Professional",INT 45"TI Professional"
  7578. --------v-44---------------------------------
  7579. INT 44 - VIRUS - "Lehigh" - ORIGINAL INT 21h VECTOR
  7580. SeeAlso: INT 32"VIRUS",INT 60"VIRUS",INT 70"VIRUS",INT 9E"VIRUS"
  7581. --------O-4400-------------------------------
  7582. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  7583.     AH = 00h
  7584.     AL = function
  7585.         00h get current filing system
  7586.         Return: AL = filing system (see #1859)
  7587.         01h get address of commandline tail
  7588.         Return: BX buffer filled with address of command tail in I/O
  7589.                   processor address space (use INT 4A/AL=05h to
  7590.                   retrieve)
  7591.         FFh flush all files onto secondary storage
  7592.     BX -> 4-byte data buffer
  7593. Note:    the commandline tail is terminated with a carriage return (0Dh)
  7594. SeeAlso: INT 40"Acorn",INT 45"Acorn"
  7595.  
  7596. (Table 1859)
  7597. Values for BBC Master filing system:
  7598.  00h    none
  7599.  01h    1200 bps cassette
  7600.  02h    300 bps cassette
  7601.  03h    ROM FS
  7602.  04h    DFS
  7603.  05h    ANFS/NFS
  7604.  06h    TFS
  7605.  08h    ADFS
  7606. --------O-44---------------------------------
  7607. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  7608.     AH = nonzero file handle
  7609.     AL = function
  7610.         00h get sequential pointer for file
  7611.         01h set sequential pointer for file
  7612.         02h get length of file
  7613.     BX -> 4-byte data buffer
  7614. Return: BX buffer updated if appropriate
  7615. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44/AH=00h,INT 45"Acorn",INT 4A"Acorn"
  7616. --------h-45---------------------------------
  7617. INT 45 - Z100 - Master 8259 - Serial B
  7618. SeeAlso: INT 44"Z100",INT 46"Z100"
  7619. --------h-45---------------------------------
  7620. INT 45 - TI Professional PC - IRQ5
  7621. Note:    on the TI Pro, IRQ5 is connected to the same pin on the expansion bus
  7622.       that IBM connects to IRQ6
  7623. SeeAlso: INT 0E"IRQ6",INT 44"TI Professional",INT 46"TI Professional"
  7624. --------O-45---------------------------------
  7625. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  7626.     AL = function
  7627.         00h save block of memory as file
  7628.         01h update directory entry for existing file
  7629.         02h set load address for existing file
  7630.         03h set execution address for existing file
  7631.         04h set attributes for existing file
  7632.         05h read directory
  7633.         06h delete file
  7634.         FFh load file
  7635.     DS:BX -> control block (see #1860)
  7636. Return: FLAGS destroyed
  7637.     AL = file type
  7638.         00h not found
  7639.         01h file found
  7640.         02h directory found
  7641.         FFh protected file
  7642. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  7643.  
  7644. Format of BBC Master control block:
  7645. Offset    Size    Description    (Table 1860)
  7646.  00h    WORD    address of CR-terminated filename
  7647.  02h    DWORD    load address of file
  7648.  06h    DWORD    execution address of file
  7649.  0Ah    DWORD    start address of data to save
  7650.  0Eh    DWORD    end address of data to save, or file attributes
  7651.         file attributes in low byte (see #1861)
  7652.         other three bytes are filing-system specific file attributes
  7653.  
  7654. Bitfields for BBC Master file attributes:
  7655. Bit(s)    Description    (Table 1861)
  7656.  0    no owner read access
  7657.  1    no owner write access
  7658.  2    not executable by owner
  7659.  3    not deletable by owner
  7660.  4    no public read access
  7661.  5    no public write access
  7662.  6    not executable with public access
  7663.  7    not deletable with public access
  7664. --------B-46---------------------------------
  7665. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  7666. Note:    not used by some PS/2 models
  7667. SeeAlso: INT 13/AH=09h,INT 41,INT 60"Adaptec",INT C0"AMI"
  7668. --------h-46---------------------------------
  7669. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  7670. SeeAlso: INT 45"Z100",INT 47"Z100"
  7671. --------h-46---------------------------------
  7672. INT 46 - TI Professional PC - IRQ6
  7673. Note:    on the TI Pro, IRQ6 is connected to the same pin on the expansion bus
  7674.       that IBM connects to IRQ7
  7675. SeeAlso: INT 0F"IRQ7",INT 45"TI Professional",INT 47"TI Professional"
  7676. --------O-46---------------------------------
  7677. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  7678. Return: CF clear if successful
  7679.         AL = character read
  7680.     CF set on error
  7681.         AL = error code
  7682. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  7683. --------h-47---------------------------------
  7684. INT 47 - Z100 - Master 8259 - Printer
  7685. SeeAlso: INT 46"Z100",INT 48"Z100"
  7686. --------h-47---------------------------------
  7687. INT 47 - TI Professional PC - IRQ7 - KEYBOARD USART
  7688. SeeAlso: INT 09"IRQ1",INT 46"TI Professional"
  7689. --------O-47---------------------------------
  7690. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  7691.     AL = character to be written
  7692. Return: FLAGS destroyed
  7693. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  7694. --------b-47---------------------------------
  7695. INT 47 - Western Digital WD1002-27X SuperBIOS - INT 40 CASCADE
  7696. Desc:    used by the second WD1002-27X controller to cascade to the first
  7697.       controller's INT 40
  7698. SeeAlso: INT 40"DISKETTE",INT 42"SuperBIOS",INT 48"SuperBIOS"
  7699. ----------478000-----------------------------
  7700. INT 47 - SQL Base - DATABASE ENGINE API
  7701.     AX = 8000h
  7702.     DS:BX -> parameter block, first word is function number (see #1862)
  7703. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  7704. SeeAlso: AX=8001h
  7705.  
  7706. (Table 1862)
  7707. Values for SQL Base function number:
  7708.  01h    "SQLFINI" initalialize application's use of the database
  7709.  02h    "SQLFDON" application is done using the database
  7710.  03h    "SQLFCON" connect to a cursor/database
  7711.  04h    "SQLFDIS" disconnect from a cursor/database
  7712.  05h    "SQLFCOM" compile a SQL command
  7713.  06h    "SQLFEXE" execute a SQL command
  7714.  07h    "SQLFCEX" compile and execute a SQL command
  7715.  08h    "SQLFCMT" commit a transaction to the database
  7716.  09h    "SQLFDES" describe the items of a SELECT statement
  7717.  0Ah    "SQLFGFI" get fetch information
  7718.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  7719.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  7720.  0Dh    "SQLFEFB" enable fetch backwards
  7721.  0Eh    "SQLFPRS" position in result set
  7722.  0Fh    "SQLFURS" undo result set
  7723.  10h    "SQLFNBV" get number of bind variables
  7724.  11h    "SQLFBND" bind data variables
  7725.  12h    "SQLFBNN" bind numerics
  7726.  13h    "SQLFBLN" bind long number
  7727.  14h    "SQLFBLD" bind long data variables
  7728.  15h    "SQLFSRS" start restriction set processing
  7729.  16h    "SQLFRRS" restart restriction set processing
  7730.  17h    "SQLFCRS" close restriction set
  7731.  18h    "SQLFDRS" drop restriction set
  7732.  19h    "SQLFARF" apply Roll Forward journal
  7733.  1Ah    "SQLFERF" end Roll Forward journal
  7734.  1Bh    "SQLFSRF" start Roll Forward journal
  7735.  1Ch    "SQLFSTO" store a compiled SQL command
  7736.  1Dh    "SQLFRET" retrieve a compiled SQL command
  7737.  1Eh    "SQLFDST" drop a stored command
  7738.  1Fh    "SQLFCTY" get command type
  7739.  20h    "SQLFEPO" get error position
  7740.  21h    "SQLFGNR" get number of rows
  7741.  22h    "SQLFNSI" get number of select items
  7742.  23h    "SQLFRBF" get Roll Back flag
  7743.  24h    "SQLFRCD" get return code
  7744.  25h    "SQLFROW" get number of ROWs
  7745.  26h    "SQLFSCN" set cursor name
  7746.  27h    "SQLFSIL" set isolation level
  7747.  28h    "SQLFSLP" set log parameters
  7748.  29h    "SQLFSSB" set select buffer
  7749.  2Ah    "SQLFSSS" set sort space
  7750.  2Bh    "SQLFRLO" read long
  7751.  2Ch    "SQLFWLO" write long
  7752.  2Dh    "SQLFLSK" long seek
  7753.  2Eh    "SQLFGLS" get long size
  7754.  2Fh    "SQLFELO" end long operation
  7755.  30h    "SQLFRBK" roll back a transaction from the database
  7756.  31h    "SQLFERR" error message
  7757.  32h    "SQLFCPY" copy
  7758.  33h    "SQLFR01" reserved
  7759.  34h    "SQLFSYS" system
  7760.  35h    "SQLFSTA" statistics
  7761.  36h    "SQLFR02" reserved
  7762.  37h    "SQLFXAD" extra add
  7763.  38h    "SQLFXCN" extra character to number
  7764.  39h    "SQLFXDA" extra date add
  7765.  3Ah    "SQLFXDP" extra date picture
  7766.  3Bh    "SQLFXDV" extra divide
  7767.  3Ch    "SQLFXML" extra multiply
  7768.  3Dh    "SQLFXNP" extra number picture
  7769.  3Eh    "SQLFXPD" extra picture date
  7770.  3Fh    "SQLFXSB" extra subtract
  7771.  40h    "SQLFINS" install database
  7772.  41h    "SQLFDIN" deinstall database
  7773.  42h    "SQLFDIR" directory of databases
  7774.  43h    "SQLFTIO" timeout
  7775.  44h    "SQLFFQN" get fully qualified column name
  7776.  45h    "SQLFEXP" explain execution plan
  7777.  46h    "SQLFFER" get full error
  7778.  47h    "SQLFBKP" begin online backup
  7779.  48h    "SQLFRDC" read backup data chunk
  7780.  49h    "SQLFEBK" end backup
  7781.  4Ah    "SQLFRES" begin restore from backup
  7782.  4Bh    "SQLFWDC" write backup data chunk for restore
  7783.  4Ch    "SQLFRRD" recover restored database to consistent state
  7784.  4Dh    "SQLFERS" end restore
  7785.  4Eh    "SQLFNRR" return number of result set rows
  7786.  4Fh    "SQLFSTR" start restriction mode
  7787.  50h    "SQLFSPR" stop restriction mode
  7788.  51h    "SQLFCNC" connect 2
  7789.  52h    "SQLFCNR" connect with no recovery
  7790.  53h    "SQLFOMS" set output message size
  7791.  54h    "SQLFIMS" set input message size
  7792.  55h    "SQLFSCP" set cache pages
  7793.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  7794.  57h    "SQLFLAB" get label info for items in SELECT statement
  7795.  58h    "SQLFCBV" clear bind variables
  7796.  59h    "SQLFGET" get database information
  7797.  5Ah    "SQLFSET" set database information
  7798.  5Bh    "SQLFTEC" translate error code
  7799. ----------478001-----------------------------
  7800. INT 47 - SQL Base - GET VERSION NUMBER
  7801.     AX = 8001h
  7802. Return: ???
  7803. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  7804. SeeAlso: AX=8000h
  7805. --------B-48---------------------------------
  7806. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  7807. SeeAlso: INT 49"PCjr"
  7808. --------h-48---------------------------------
  7809. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  7810. SeeAlso: INT 47"Z100",INT 49"Z100"
  7811. --------N-48---------------------------------
  7812. INT 48 - Watstar PC Network data pointer 1
  7813. SeeAlso: INT 49"Watstar"
  7814. --------b-48---------------------------------
  7815. INT 48 - TI Professional PC - SPEAKER DEVICE SERVICE ROUTINE
  7816.     no details available
  7817. SeeAlso: INT 40"TI Professional",INT 49"TI Professional"
  7818. SeeAlso: INT 4A"TI Professional",INT 4C"TI Professional",INT 4D/AH=00h
  7819. --------O-48---------------------------------
  7820. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  7821. Return: FLAGS destroyed
  7822. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  7823. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  7824. --------b-48---------------------------------
  7825. INT 48 - Western Digital WD1002-27X SuperBIOS - DRIVE DATA (NOT A VECTOR!)
  7826. Note:    the second WD1002-27X controller in a system uses the low byte to
  7827.       store the number of drives controlled by the second controller,
  7828.       and the high word for temporary storage during track recalculation;
  7829.       the first controller uses offsets 74h-77h in the BIOS data area
  7830.       (see MEMORY.LST) to store data
  7831. SeeAlso: INT 47"SuperBIOS"
  7832. --------V-48---------------------------------
  7833. INT 48 U - Compaq UILIB.EXE - API
  7834.     AX = function (see #1863)
  7835.     BX = call type (0002h) (see #1864)
  7836.     ???
  7837. Return: ???
  7838. Note:    returns AX=FFFFh if 1000h<=AX<=2000h and AX is not one of the functions
  7839.       listed below
  7840. SeeAlso: AX=1A70h
  7841.  
  7842. (Table 1863)
  7843. Values for valid UILIB function number:
  7844.  1000h    1160h    12D0h    1430h    1570h    1680h    17F0h    1920h    1A90h
  7845.  1010h    1170h    12E0h    1440h    1578h    1690h    1800h    1930h    1AA0h
  7846.  1020h    1180h    12F0h    1450h    1580h    16A0h    1810h    1940h
  7847.  1030h    1190h    1300h    1460h    1590h    16B0h    1820h    1950h
  7848.  1040h    11A0h    1310h    1470h    1594h    16C0h    1830h    1960h
  7849.  1050h    11B0h    1320h    1480h    1598h    16D0h    1840h    1970h
  7850.  1060h    11C0h    1330h    1490h    15A0h    16E0h    1848h    1980h
  7851.  1070h    11D0h    1340h    14A0h    15B0h    16F0h    1850h    1990h
  7852.  1080h    11E0h    1350h    14B0h    15C0h    1700h    1860h    19A0h
  7853.  1090h    11F0h    1360h    14B8h    15D0h    1710h    1870h    19B0h
  7854.  1095h    1200h    1370h    14BBh    15D4h    1720h    1878h    19C0h
  7855.  1098h    1210h    1380h    14C0h    15D8h    1730h    1880h    19D0h
  7856.  10A0h    1220h    1390h    14D0h    15E0h    1735h    1890h    19E0h
  7857.  10C0h    1230h    13A0h    14E0h    15F0h    1740h    1898h    19F0h
  7858.  10D0h    1240h    13B0h    14F0h    1600h    1750h    18A0h    1A00h
  7859.  10E0h    1250h    13B8h    1500h    1610h    1770h    18B0h    1A10h
  7860.  10F0h    1260h    13C0h    1508h    1620h    1780h    18C0h    1A20h
  7861.  1100h    1270h    13D0h    1510h    1630h    1790h    18D0h    1A30h
  7862.  1110h    1280h    13E0h    1520h    1640h    17A0h    18E0h    1A40h
  7863.  1120h    1290h    13F0h    1530h    1650h    17B0h    18F0h    1A50h
  7864.  1130h    12A0h    1400h    1540h    1660h    17C0h    1900h    1A60h
  7865.  1140h    12B0h    1410h    1550h    1664h    17D0h    1909h    1A70h
  7866.  1150h    12C0h    1420h    1560h    1670h    17E0h    1910h    1A80h
  7867. --------V-481A70-----------------------------
  7868. INT 48 U - Compaq UILIB.EXE - INSTALLATION CHECK
  7869.     AX = 1A70h
  7870.     BX = call type (see #1864)
  7871. Return: CX = 5649h ('VI') if installed
  7872.     DX = 4557h ('EW') if installed
  7873.         AX = version??? (0106h)
  7874.  
  7875. (Table 1864)
  7876. Values for UILIB call type:
  7877.  0000h    near
  7878.  0001h    far
  7879.  0002h    INT (only valid call type when using INT 48)
  7880.  0003h    near
  7881. --------B-49---------------------------------
  7882. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  7883. SeeAlso: #1865,INT 48"PCjr"
  7884.  
  7885. Format of PCjr scan-code translation table:
  7886. Offset    Size    Description    (Table 1865)
  7887.  00h    BYTE    number of non-keyboard scancodes in the table
  7888.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  7889.           representing the scancode mapped values relative to their
  7890.           input values within the range of 56h through 7Eh
  7891. --------h-49---------------------------------
  7892. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  7893. SeeAlso: INT 48"Z100",INT 4A"Z100"
  7894. --------V-49---------------------------------
  7895. INT 49 - TI Professional PC - CRT DEVICE SERVICE ROUTINE
  7896.     apparently provides direct video display on the TI Professional PC
  7897. SeeAlso: INT 40"TI Professional",INT 48"TI Professional"
  7898. SeeAlso: INT 4A"TI Professional",INT 4B"TI Professional",INT 4D/AH=00h
  7899. SeeAlso: INT 57"TI Professional"
  7900. --------N-49---------------------------------
  7901. INT 49 - Watstar PC Network data pointer 2
  7902. SeeAlso: INT 48"Watstar"
  7903. --------O-49---------------------------------
  7904. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  7905.     AL = character to be written
  7906. Return: FLAGS destroyed
  7907. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  7908. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  7909. --------a-490001-----------------------------
  7910. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  7911.     AX = 0001h
  7912. Return: AX = status (see #1866)
  7913.     BX,CX,DX destroyed
  7914. Program: MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  7915.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  7916. Note:    INT 49 is the default, but may be overridden on the commandline.  The
  7917.       actual interrupt in use may be found by searching for the signature
  7918.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  7919.       the interrupt handler (this is also the installation check).    MAGic
  7920.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  7921.       the interrupt handler's segment, followed by MAGic's TSR ID of
  7922.       "VMAG".
  7923. SeeAlso: AX=0002h,AX=0003h,AX=0004h,AX=0008h
  7924. Index:    installation check;MAGic
  7925.  
  7926. (Table 1866)
  7927. Values for MAGic status:
  7928.  0000h    cannot magnify current video mode
  7929.  0002h    magnified (text mode)
  7930.  0003h    magnified (graphics mode)
  7931.  FFFDh    function works only in magnified mode
  7932.  FFFFh    MAGic busy, retry later
  7933. --------a-490002-----------------------------
  7934. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  7935.     AX = 0002h
  7936. Return: AX = status (see #1866)
  7937.     BX,CX,DX destroyed
  7938. SeeAlso: AX=0001h
  7939. --------a-490003-----------------------------
  7940. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  7941.     AX = 0003h
  7942.     BX = vertical position (character row [text] or pixel row [graphics])
  7943.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  7944. Return: AX = status
  7945.         0000h successful
  7946.         FFFFh MAGic busy, retry later
  7947.     BX,CX,DX destroyed
  7948. Note:    window is not moved if the position is inside the current window
  7949. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  7950. --------a-490004-----------------------------
  7951. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  7952.     AX = 0004h
  7953.     BX = vertical position of upper left corner
  7954.     DX = horizontal position
  7955. Return: AX = status (see AX=0003h)
  7956.     BX,CX,DX destroyed
  7957. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  7958. --------a-490005-----------------------------
  7959. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  7960.     AX = 0005h
  7961. Return: AX = status
  7962.         0000h successful
  7963.         BX = vertical position (char row or pixel row)
  7964.         DX = horizontal position (char column or 8-pixel units)
  7965.         FFFFh MAGic busy, retry later
  7966.         BX,DX destroyed
  7967.     CX destroyed
  7968. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  7969. --------a-490006-----------------------------
  7970. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  7971.     AX = 0006h
  7972. Return: AX = status
  7973.         0000h successful
  7974.         BX = vertical size (char rows or pixel rows)
  7975.         DX = horizontal size (char cols or 8-pixel units)
  7976.         FFFFh MAGic busy, retry later
  7977.         BX,DX destroyed
  7978.     CX destroyed
  7979. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  7980. --------a-490007-----------------------------
  7981. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  7982.     AX = 0007h
  7983. Return: AX = status
  7984.         0000h successful
  7985.         BX = vertical size (char rows or pixel rows)
  7986.         DX = horizontal size (char cols or 8-pixel units)
  7987.         FFFEh invalid function
  7988.         FFFFh MAGic busy, retry later
  7989.         BX,DX destroyed
  7990.     CX destroyed
  7991. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  7992.       AX=0000h is accepted and will branch into hyperspace
  7993. SeeAlso: AX=0001h,AX=0006h
  7994. --------a-490008-----------------------------
  7995. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  7996.     AX = 0008h
  7997.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  7998. Return: AX = status
  7999.         0000h successful
  8000.         FFFBh scaling factor only available in MAGic Deluxe
  8001.         FFFCh already in magnified state, can't set size
  8002. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  8003.       magnify the display
  8004.     scaling factors greater than 2 are only available in MAGic Deluxe
  8005. SeeAlso: AX=0001h
  8006. --------B-4A---------------------------------
  8007. INT 4A C - SYSTEM - USER ALARM HANDLER
  8008. Desc:    This interrupt is invoked by the BIOS when a real-time clock alarm
  8009.       occurs; an application may use it to perform an action at a
  8010.       predetermined time.
  8011. Note:    this interrupt is called from within a hardware interrupt handler,
  8012.       so all usual precautions against reentering DOS must be taken
  8013. SeeAlso: INT 1A/AH=06h
  8014. --------h-4A---------------------------------
  8015. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  8016. SeeAlso: INT 49"Z100",INT 4B"Z100"
  8017. --------b-4A---------------------------------
  8018. INT 4A - TI Professional PC - KEYBOARD DEVICE SERVICE ROUTINE
  8019.     no details available
  8020. SeeAlso: INT 47"TI Professional",INT 48"TI Professional"
  8021. SeeAlso: INT 49"TI Professional",INT 4C"TI Professional",INT 4D/AH=00h
  8022. SeeAlso: INT 5B"TI Professional"
  8023. --------O-4A---------------------------------
  8024. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  8025.     AL = function code
  8026.         FAh transfer data between 80186 and 65C12 I/O processor
  8027.     DS:BX -> control block (see #1867)
  8028. Return: FLAGS destroyed
  8029.     control block updated
  8030. Note:    there are more functions than are listed here, but details are not
  8031.       available
  8032. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  8033.  
  8034. Format of BBC Master control block for function FAh:
  8035. Offset    Size    Description    (Table 1867)
  8036.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  8037.  01h    BYTE    number of parameters read from I/O processor (01h)
  8038.  02h    DWORD    I/O processor address
  8039.  06h    DWORD    80186 segment:offset address
  8040.  0Ah    WORD    number of bytes to transfer
  8041.  0Ch    BYTE    operation type
  8042.         00h write to 65C12 at 24 us/byte
  8043.         01h read from 65C12 at 24 us/byte
  8044.         02h write to 65C12 at 26 us/word
  8045.         03h read from 65C12 at 26 us/word
  8046.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  8047.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  8048.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  8049.         (see #1868)
  8050.  
  8051. Bitfields for 65C12 memory access control:
  8052. Bit(s)    Description    (Table 1868)
  8053.  7    unused
  8054.  6    always use main screen memory if I/O addr 3000h-7FFFh (overrides bit 5)
  8055.  5    use shadow screen memory if screen address specified
  8056.  4    use current ROM rather than ROM selected by bits 3-0 (only if I/O
  8057.       address between 8000h and BFFFh)
  8058.  3-0    paged ROM number
  8059. --------h-4B---------------------------------
  8060. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  8061. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  8062. --------b-4B---------------------------------
  8063. INT 4B - TI Professional PC - PARALLEL PORT DEVICE SERVICE ROUTINE
  8064.     no details available
  8065. SeeAlso: INT 40"TI Professional",INT 48"TI Professional"
  8066. SeeAlso: INT 49"TI Professional",INT 4C"TI Professional",INT 4D/AH=00h
  8067. --------d-4B---------------------------------
  8068. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  8069.     ES:DI -> CAM Control Block (see #1880 at INT 4F/AX=8100h)
  8070. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  8071.       to avoid conflicting with the IBM SCSI interface and the Virtual
  8072.       DMA specification
  8073.     the installation check for the driver is the string "SCSI_CAM" eight
  8074.       bytes past the INT 4Bh handler
  8075.     the only driver to date reported to use the CAM interface on INT 4B
  8076.       instead of INT 4F is from Future Domain (which has drivers for CAM
  8077.       on either interrupt)
  8078. SeeAlso: INT 4F/AX=8100h
  8079. Index:    installation check;Common Access Method SCSI interface
  8080. --------O-4B---------------------------------
  8081. INT 4B - Acorn BBC Master 512 - "OSBYTE" - MISC FUNCTIONS USING REGISTER PARAMS
  8082.     AL = function code
  8083.     BL = first parameter
  8084.     BH = second parameter (if needed)
  8085. Return: BL = first return parameter
  8086.     BH = second return parameter
  8087.     CF depends on function
  8088. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4C"Acorn"
  8089. --------d-4B80-------------------------------
  8090. INT 4B - IBM SCSI interface
  8091.     AH = 80h
  8092.     AL = 00h-10h (Corel PowerSCSI INT4BCAM.SYS)
  8093.     further details not yet available
  8094. --------d-4B8102DX0000-----------------------
  8095. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  8096.     AX = 8102h
  8097.     DX = 0000h
  8098. Return: CF clear if successful
  8099.         AH = major version number
  8100.         AL = minor version number
  8101.         BX = product number (see #1869)
  8102.         CX = product revision number
  8103.         always 0000h for QMAPS and HPMM.SYS
  8104.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  8105.         DX = flags (see #1871)
  8106.         SI:DI = maximum DMA buffer size
  8107.     CF set on error
  8108.         AL = error code (see #1870)
  8109. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  8110.       apparently not always the case
  8111. SeeAlso: INT 2C/AX=002Bh,INT 31
  8112. Index:    installation check;Virtual DMA Spec
  8113.  
  8114. (Table 1869)
  8115. Values for VDS product number:
  8116.  0000h    for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  8117.  0001h    for Microsoft's EMM386.EXE
  8118.  0003h    for Windows 3.x WIN386.EXE
  8119.  0300h    OS/2 (all versions to date)
  8120.  0EDCh    for DR-DOS 6.0 EMM386.SYS
  8121.  4560h    ("E`") for Qualitas' 386MAX
  8122.  4D43h    ("MC") for V Communications' Memory Commander
  8123.  5145h    ("QE") for Quarterdeck's QEMM-386
  8124.  524Dh    ("RM") for Helix's Netroom RM386
  8125.  
  8126. (Table 1870)
  8127. Values for VDS error code:
  8128.  01h    region not in contiguous memory
  8129.  02h    region crossed a physical alignment boundary
  8130.  03h    unable to lock pages
  8131.  04h    no buffer available
  8132.  05h    region too large for buffer
  8133.  06h    buffer currently in use
  8134.  07h    invalid memory region
  8135.  08h    region was not locked
  8136.  09h    number of physical pages greater than table length
  8137.  0Ah    invalid buffer ID
  8138.  0Bh    copy out of buffer range
  8139.  0Ch    invalid DMA channel number
  8140.  0Dh    disable count overflow
  8141.  0Eh    disable count underflow
  8142.  0Fh    function not supported
  8143.  10h    reserved flag bits set in DX
  8144.  
  8145. Bitfields for VDS flags:
  8146. Bit(s)    Description    (Table 1871)
  8147.  0    PC/XT bus (DMA in first megabyte only)
  8148.  1    physical buffer/remap region in first megabyte
  8149.  2    automatic remap enabled
  8150.  3    all memory is physically contiguous
  8151.  4-15    reserved (zero)
  8152. --------d-4B8103-----------------------------
  8153. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  8154.     AX = 8103h
  8155.     DX = flags (see #1872)
  8156.     ES:DI -> DMA descriptor structure (see #1873,#1874,#1875)
  8157. Return: CF clear if successful
  8158.         DDS physical address field filled in
  8159.         DDS buffer ID field filled (0000h if no buffer allocated)
  8160.     CF set on error
  8161.         AL = error code (see #1870)
  8162.         DDS region size field filled wth maximum contiguous length in bytes
  8163. BUGS:    Windows 3.0 does not correctly support automatic remapping or copying
  8164.       in enhanced mode
  8165.     Windows 3.0 in enhanced mode does not return a correct code on error
  8166. SeeAlso: AX=8104h,AX=8105h
  8167.  
  8168. Bitfields for VDS flags:
  8169. Bit(s)    Description    (Table 1872)
  8170.  0    reserved (zero)
  8171.  1    data should be copied into buffer (ignored if 2 set)
  8172.  2    buffer should not be allocated if region noncontiguous or crosses
  8173.       physical alignment boundary specified by 4-5
  8174.  3    don't attempt automatic remap
  8175.  4    region must not cross 64K physical alignment boundary
  8176.  5    region must not cross 128K physical alignment boundary
  8177.  6-15    reserved (zero)
  8178.  
  8179. Format of DMA descriptor structure (DDS):
  8180. Offset    Size    Description    (Table 1873)
  8181.  00h    DWORD    region size
  8182.  04h    DWORD    offset
  8183.  08h    WORD    segment/selector
  8184.  0Ah    WORD    buffer ID
  8185.  0Ch    DWORD    physical address
  8186.  
  8187. Format of Extended DMA descriptor structure (EDDS):
  8188. Offset    Size    Description    (Table 1874)
  8189.  00h    DWORD    region size
  8190.  04h    DWORD    offset
  8191.  08h    WORD    segment/selector
  8192.  0Ah    WORD    reserved
  8193.  0Ch    WORD    number available
  8194.  0Eh    WORD    number used
  8195.  10h    DWORD    region 0 physical address
  8196.  14h    DWORD    region 0 size in bytes
  8197.  18h    DWORD    region 1 physical address
  8198.  1Ch    DWORD    region 1 size in bytes
  8199.     ...
  8200.  
  8201. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  8202. Offset    Size    Description    (Table 1875)
  8203.  00h    DWORD    region size
  8204.  04h    DWORD    offset
  8205.  08h    WORD    segment/selector
  8206.  0Ah    WORD    reserved
  8207.  0Ch    WORD    number available
  8208.  0Eh    WORD    number used
  8209.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  8210.  14h    DWORD    page table entry 1
  8211.     ...
  8212. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  8213.       is present and locked
  8214. --------d-4B8104-----------------------------
  8215. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  8216.     AX = 8104h
  8217.     DX = flags
  8218.         bit 0: reserved (zero)
  8219.         bit 1: data should be copied out of buffer
  8220.         bits 2-15 reserved (zero)
  8221.     ES:DI -> DMA descriptor structure (see #1873,#1874) with region size,
  8222.           physical address, and buffer ID fields set
  8223. Return: CF clear if successful
  8224.         DDS physical address field set
  8225.         DDS buffer ID field set (0000h if no buffer allocated)
  8226.     CF set on error
  8227.         AL = error code (see #1870)
  8228.         DDS region size field filled wth maximum contiguous length in bytes
  8229. Note:    Windows 3.0 does not check whether the region extends beyond the end of
  8230.       a segment
  8231. BUG:    Windows 3.0 in enhanced mode does not return a correct code on error
  8232. SeeAlso: AX=8103h,AX=8106h
  8233. --------d-4B8105-----------------------------
  8234. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  8235.     AX = 8105h
  8236.     DX = flags (see #1876)
  8237.     ES:DI -> Extended DMA descriptor structure (see #1874,#1875)
  8238.           region size, linear segment, linear offset, and number avail
  8239.           fields set
  8240. Return: CF clear if successful
  8241.         EDDS number used field set
  8242.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  8243.     CF set on error
  8244.         AL = error code (see #1870)
  8245.         EDDS region size field filled with max length in bytes that can be
  8246.           locked and described in the EDDS table
  8247. BUG:    Windows 3.0 in enhanced mode may return zero instead of the physical
  8248.       page address for pages which were originally not present
  8249. SeeAlso: AX=8103h,AX=8106h
  8250.  
  8251. Bitfields for VDS flags:
  8252. Bit(s)    Description    (Table 1876)
  8253.  0-5    reserved (zero)
  8254.  6    EDDS should be returned with page table entries
  8255.  7    only present pages should be locked (not-present pages receive entry
  8256.       of 0000h)
  8257.  8-15    reserved (zero)
  8258. --------d-4B8106-----------------------------
  8259. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  8260.     AX = 8106h
  8261.     DX = flags (see #1877)
  8262.     ES:DI -> Extended DMA descriptor structure (see #1874,#1875) returned
  8263.           by AX=8105h
  8264. Return: CF clear if successful
  8265.     CF set on error
  8266.         AL = error code (see #1870)
  8267. Note:    according to the Microsoft version of the VDS specification, the
  8268.       actual scatter/gather list is ignored, while according to the IBM
  8269.       version of the specification, "the result of a LOCK operation"
  8270.       must be provided to this function
  8271. SeeAlso: AX=8104h,AX=8105h
  8272.  
  8273. Bitfields for VDS flags:
  8274. Bit(s)    Description    (Table 1877)
  8275.  0-5    reserved (zero)
  8276.  6    EDDS contains page table entries
  8277.  7    EDDS may contain not-present pages (entry = 0000h)
  8278.  8-15    reserved (zero)
  8279. --------d-4B8107-----------------------------
  8280. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  8281.     AX = 8107h
  8282.     DX = flags
  8283.         bit 0: reserved (zero)
  8284.         bit 1: data should be copied into buffer
  8285.         bits  2-15 reserved (zero)
  8286.     ES:DI -> DMA descriptor structure (see #1873) with region size set
  8287.           (also region offset and region segment if DX bit 1 set)
  8288. Return: CF clear if successful
  8289.         DDS physical address and buffer ID set
  8290.         DDS region size filled with length of buffer
  8291.     CF set on error
  8292.         AL = error code (see #1870)
  8293. SeeAlso: AX=8108h
  8294. --------d-4B8108-----------------------------
  8295. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  8296.     AX = 8108h
  8297.     DX = flags
  8298.         bit 0: reserved (zero)
  8299.         bit 1: data should be copied out of buffer
  8300.         bits 2-15 reserved (zero)
  8301.     ES:DI -> DMA descriptor structure (see #1873,#1874) with buffer ID set
  8302.           (also region size/region offset/segment if DX bit 1 set)
  8303. Return: CF clear if successful
  8304.     CF set on error
  8305.         AL = error code (see #1870)
  8306. BUG:    under Windows 3.0 Enhanced mode, you must specify that data be copied
  8307.       for this function to work correctly
  8308. SeeAlso: AX=8107h
  8309. --------d-4B8109DX0000-----------------------
  8310. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  8311.     AX = 8109h
  8312.     DX = 0000h
  8313.     ES:DI -> DMA descriptor structure (see #1873,#1874) with buffer ID,
  8314.           region segment/offset, and region size fields set
  8315.     BX:CX = starting offset into DMA buffer
  8316. Return: CF clear if successful
  8317.     CF set on error
  8318.         AL = error code (see #1870)
  8319. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  8320. SeeAlso: AX=810Ah
  8321. --------d-4B810ADX0000-----------------------
  8322. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  8323.     AX = 810Ah
  8324.     DX = 0000h
  8325.     ES:DI -> DMA descriptor structure (see #1873,#1875) with buffer ID,
  8326.           region segment/offset, and region size fields set
  8327.     BX:CX = starting offset into DMA buffer
  8328. Return: CF clear if successful
  8329.     CF set on error
  8330.         AL = error code (see #1870)
  8331. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  8332. SeeAlso: AX=8109h
  8333. --------d-4B810B-----------------------------
  8334. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  8335.     AX = 810Bh
  8336.     BX = DMA channel number
  8337.     DX = 0000h
  8338. Return: CF clear if successful
  8339.     CF set on error
  8340.         AL = error code (see #1870)
  8341. SeeAlso: AX=810Ch
  8342. --------d-4B810C-----------------------------
  8343. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  8344.     AX = 810Ch
  8345.     BX = DMA channel number
  8346.     DX = 0000h
  8347. Return: CF clear if successful
  8348.         ZF set if disable count decremented to zero
  8349.     CF set on error
  8350.         AL = error code (see #1870)
  8351. SeeAlso: AX=810Bh
  8352. --------Q-4B810D-----------------------------
  8353. INT 4B - QEMM-386 - BUG
  8354.     AX = 810Dh
  8355. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  8356.       call
  8357. --------h-4C---------------------------------
  8358. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  8359. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  8360. --------b-4C---------------------------------
  8361. INT 4C - TI Professional PC - CLOCK/ANALOG INTERFACE
  8362.     no details available
  8363. SeeAlso: INT 40"TI Professional",INT 49"TI Professional"
  8364. SeeAlso: INT 4A"TI Professional",INT 4B"TI Professional",INT 4D/AH=00h
  8365. SeeAlso: INT 58"TI Professional"
  8366. --------O-4C---------------------------------
  8367. INT 4C - Acorn BBC Master 512 - "OSCLI" - INTERPRET COMMAND LINE
  8368.     DS:BX -> CR-terminated command string
  8369. Return: FLAGS destroyed
  8370. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4B"Acorn"
  8371. --------h-4D---------------------------------
  8372. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  8373. SeeAlso: INT 4C"Z100",INT 4E"Z100"
  8374. --------B-4D00-------------------------------
  8375. INT 4D - TI Professional PC - DISK - RESET DISK SYSTEM
  8376.     AH = 00h
  8377.     DL = drive (if bit 7 is set both hard disks and floppy disks reset)
  8378. Return: AH = status (see #0140 at INT 13/AH=01h)
  8379.     CF clear if successful (returned AH=00h)
  8380.     CF set on error
  8381. Note:    this function is the same as INT 13/AH=00h on a standard PC BIOS
  8382. SeeAlso: AH=01h,AH=02h,AH=08h,AH=0Bh,INT 13/AH=00h,INT 46"TI Professional"
  8383. SeeAlso: INT 48"TI Professional",INT 4A"TI Professional"
  8384. --------B-4D01-------------------------------
  8385. INT 4D - TI Professional PC - DISK - GET STATUS OF LAST OPERATION
  8386.     AH = 01h
  8387.     DL = drive (bit 7 set for hard disk)
  8388. Return: CF clear if status unchanged
  8389.     CF set if status changed since last call
  8390.     AH = 00h
  8391.     AL = status of previous operation (see #0140 at INT 13/AH=01h)
  8392. Notes:    this function is nearly the same as INT 13/AH=01h on a standard PC BIOS
  8393.     the TI's BIOS tranparently performs a number of retries, and an error
  8394.       status is only reported if all of the retries fail.  To get the error
  8395.       status if the operation succeeded on a retry, use AH=07h instead
  8396. SeeAlso: AH=00h,AH=07h,INT 13/AH=01h
  8397. --------B-4D02-------------------------------
  8398. INT 4D - TI Professional PC - DISK - READ SECTOR(S) INTO MEMORY
  8399.     AH = 02h
  8400.     AL = number of sectors to read (must be nonzero)
  8401.     CH = low eight bits of cylinder number
  8402.     CL = sector number 1-63 (bits 0-5)
  8403.          high two bits of cylinder (bits 6-7, hard disk only)
  8404.     DH = head number
  8405.     DL = drive number (bit 7 set for hard disk)
  8406.     ES:BX -> data buffer
  8407. Return: CF set on error
  8408.         if AH = 11h (corrected ECC error), AL = burst length
  8409.     CF clear if successful
  8410.     AH = status (see #0140 at INT 13/AH=01h)
  8411.     AL = number of sectors transferred
  8412.     ES:BX -> buffer for last sector processed (including one with errors)
  8413. SeeAlso: AH=00h,AH=01h,AH=03h,AH=04h,INT 13/AH=02h
  8414. --------B-4D03-------------------------------
  8415. INT 4D - TI Professional PC - DISK - WRITE SECTOR(S) FROM MEMORY
  8416.     AH = 03h
  8417.     AL = number of sectors to write (must be nonzero)
  8418.     CH = low eight bits of cylinder number
  8419.     CL = sector number 1-63 (bits 0-5)
  8420.          high two bits of cylinder (bits 6-7, hard disk only)
  8421.     DH = head number
  8422.     DL = drive number (bit 7 set for hard disk)
  8423.     ES:BX -> buffer containing data
  8424. Return: CF set on error
  8425.         if AH = 11h (corrected ECC error), AL = burst length
  8426.     CF clear if successful
  8427.     AH = status (see #0140 at INT 13/AH=01h)
  8428.     AL = number of sectors transferred
  8429.     ES:BX -> buffer for last sector processed (including one with errors)
  8430. SeeAlso: AH=00h,AH=01h,AH=02h,AH=04h,INT 13/AH=03h
  8431. --------B-4D04-------------------------------
  8432. INT 4D - TI Professional PC - DISK - VERIFY DISK SECTOR CRC(S)
  8433.     AH = 04h
  8434.     AL = number of sectors to verify (must be nonzero)
  8435.     CH = low eight bits of cylinder number
  8436.     CL = sector number 1-63 (bits 0-5)
  8437.          high two bits of cylinder (bits 6-7, hard disk only)
  8438.     DH = head number
  8439.     DL = drive number (bit 7 set for hard disk)
  8440.     ES:BX -> data buffer
  8441. Return: CF set on error
  8442.         if AH = 11h (corrected ECC error), AL = burst length
  8443.     CF clear if successful
  8444.     AH = status (see #0140 at INT 13/AH=01h)
  8445.     AL = number of sectors transferred
  8446.     ES:BX -> buffer for last sector processed (including one with errors)
  8447. Note:    even though no data is transferred, ES:BX must still be valid
  8448. SeeAlso: AH=00h,AH=01h,AH=02h,AH=06h,INT 13/AH=04h
  8449. --------B-4D06-------------------------------
  8450. INT 4D - TI Professional PC - DISK - VERIFY DISK SECTOR(S)
  8451.     AH = 06h
  8452.     AL = number of sectors to verify (must be nonzero)
  8453.     CH = low eight bits of cylinder number
  8454.     CL = sector number 1-63 (bits 0-5)
  8455.          high two bits of cylinder (bits 6-7, hard disk only)
  8456.     DH = head number
  8457.     DL = drive number (bit 7 set for hard disk)
  8458.     ES:BX -> data buffer
  8459. Return: CF set on error
  8460.         if AH = 11h (corrected ECC error), AL = burst length
  8461.     CF clear if successful
  8462.     AH = status (see #0140 at INT 13/AH=01h)
  8463.     AL = number of sectors transferred
  8464.     ES:BX -> buffer for last sector processed (including one with errors)
  8465. Note:    even though no data is transferred, ES:BX must still be valid because
  8466.       an actual comparison with disk data is performed, not just the CRC
  8467.       check of the standard PC BIOS or INT 4D/AH=04h
  8468. SeeAlso: AH=00h,AH=01h,AH=02h,AH=04h,INT 13/AH=04h
  8469. --------B-4D07-------------------------------
  8470. INT 4D - TI Professional PC - DISK - GET RETRY STATUS OF LAST OPERATION
  8471.     AH = 07h
  8472.     DL = drive (bit 7 set for hard disk)
  8473. Return: CF clear if status unchanged
  8474.     CF set if status changed since last call
  8475.     AH = 00h
  8476.     AL = status of previous operation (see #0140 at INT 13/AH=01h)
  8477. Notes:    this function is nearly the same as INT 13/AH=01h on a standard PC BIOS
  8478.     the TI's BIOS tranparently performs a number of retries; this function
  8479.       returns the error status of a failed operation even if the operation
  8480.       succeeded on a retry
  8481. SeeAlso: AH=00h,AH=01h,INT 13/AH=01h
  8482. --------B-4D08-------------------------------
  8483. INT 4D - TI Professional PC - DISK - SET STANDARD DEVICE INTERFACE TABLE
  8484.     AH = 08h
  8485.     DL = drive number (00h-03h)
  8486.     AL = drive type
  8487.         00h single-sided 48 tpi (40-track, 8 sectors, 512 bytes/sector)
  8488.         01h double-sided 48 tpi (40-track, 8 sectors, 512 bytes/sector)
  8489.         02h single-sided 96 tpi (80-track, 8 sectors, 512 bytes/sector)
  8490.         03h double-sided 96 tpi (80-track, 8 sectors, 512 bytes/sector)
  8491. Return: nothing???
  8492. SeeAlso: AH=00h,AH=09h
  8493. --------B-4D09-------------------------------
  8494. INT 4D - TI Professional PC - DISK - SET DEVICE INTERFACE TABLE ADDRESS
  8495.     AH = 09h
  8496.     DL = drive number (00h-07h)
  8497.     ES:BX -> Device Interface Table (see #1878)
  8498. Return: nothing???
  8499. SeeAlso: AH=00h,AH=08h,AH=0Ah,INT 1E
  8500.  
  8501. Format of TI Professional PC Device Interface Table:
  8502. Offset    Size    Description    (Table 1878)
  8503.  00h    DWORD    -> entry point for disk routine
  8504.  04h    WORD    bytes per sector
  8505.  06h    BYTE    sectors per track
  8506.  07h    BYTE    number of heads
  8507.  08h    BYTE    number of cylinders
  8508.  09h    BYTE    retry count
  8509.  0Ah    BYTE    precompensation start
  8510. SeeAlso: #0572 at INT 1E
  8511. --------B-4D0A-------------------------------
  8512. INT 4D - TI Professional PC - DISK - GET DEVICE INTERFACE TABLE ADDRESS
  8513.     AH = 0Ah
  8514.     DL = drive number (00h-07h)
  8515. Return:    AH = status
  8516.     ES:BX -> Device Interface Table (see #1878)
  8517. SeeAlso: AH=00h,AH=08h,AH=09h,INT 1E
  8518. --------B-4D0B-------------------------------
  8519. INT 4D - TI Professional PC - DISK - TURN OFF ALL DRIVES
  8520.     AH = 0Bh
  8521. Return: AH = 00h
  8522. Note:    used for diagnostics or to conserve power
  8523. SeeAlso: AH=00h
  8524. --------h-4E---------------------------------
  8525. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  8526. SeeAlso: INT 4D"Z100",INT 4F"Z100"
  8527. --------b-4E---------------------------------
  8528. INT 4E - TI Professional PC - TIME-OF-DAY CLOCK DEVICE SERVICE ROUTINE
  8529.     no details available
  8530. SeeAlso: INT 40"TI Professional",INT 48"TI Professional"
  8531. SeeAlso: INT 4A"TI Professional",INT 4F"TI Professional"
  8532. --------h-4F---------------------------------
  8533. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  8534. SeeAlso: INT 4E"Z100"
  8535. --------b-4F---------------------------------
  8536. INT 4F - TI Professional PC - SYSTEM CONFIGURATION CALL
  8537.     no details available
  8538. SeeAlso: INT 40"TI Professional",INT 49"TI Professional"
  8539. SeeAlso: INT 4B"TI Professional",INT 4D/AH=00h,INT 4E"TI Professional"
  8540. --------d-4F8100-----------------------------
  8541. INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM
  8542.     AX = 8100h
  8543.     ES:BX -> CAM Control Block (CCB) (see #1880)
  8544. Return: AH = status
  8545.         00h successful
  8546.         01h invalid CCB address (0000h:0000h)
  8547. Note:    the SCSI Interface Module (SIM) may complete the requested function
  8548.       and invoke the completion callback function before this call returns
  8549. SeeAlso: AX=8200h,INT 2F/AX=7F01h,INT 4B"Common Access Method"
  8550.  
  8551. (Table 1879)
  8552. Values for CAM function code:
  8553.  00h    NOP
  8554.  01h    execute SCSI I/O
  8555.  02h    get device type
  8556.  03h    path inquiry
  8557.  04h    release SIM queue
  8558.  05h    set async callback
  8559.  06h    set device type
  8560.  07h-0Fh reserved
  8561.  10h    abort SCSI command
  8562.  11h    reset SCSI bus
  8563.  12h    reset SCSI device
  8564.  13h    terminate I/O process
  8565.  14h-1Fh reserved
  8566.  20h    engine inquiry
  8567.  21h    execute engine request
  8568.  22h-2Fh reserved
  8569.  30h    enable logical unit number
  8570.  31h    execute target I/O
  8571.  32h-7Fh reserved
  8572.  80h-FFh vendor-specific functions
  8573.  
  8574. Format of CAM Control Block:
  8575. Offset    Size    Description    (Table 1880)
  8576.  00h    DWORD    physical address of this CCB
  8577.  04h    WORD    CAM control block length
  8578.  06h    BYTE    function code (see #1879)
  8579.  07h    BYTE    CAM status (see #1883)
  8580.  08h    BYTE    SCSI status
  8581.  09h    BYTE    path ID (FFh = XPT)
  8582.  0Ah    BYTE    target ID
  8583.  0Bh    BYTE    logical unit number
  8584.  0Ch    WORD    CAM flags (see #1881)
  8585.  0Eh    BYTE    CAM address flags (see #1882)
  8586.  0Fh    BYTE    target-mode flags (see #1884)
  8587. ---function 02h---
  8588.  10h    DWORD    pointer to 36-byte buffer for inquiry data or 0000h:0000h
  8589.  14h    BYTE    peripheral device type of target logical unit number
  8590. ---function 03h---
  8591.  10h    BYTE    version number (00h-07h prior to rev 1.7, 08h = rev 1.7,
  8592.         09h-FFh = rev no, i.e. 23h = rev 2.3)
  8593.  11h    BYTE    SCSI capabilities (see #1885)
  8594.  12h    BYTE    target mode support
  8595.         bit 7: processor mode
  8596.         bit 6: phase-cognizant mode
  8597.         bit 5-0: reserved
  8598.  13h    BYTE    miscellaneous flags
  8599.         bit 7: scanned high to low instead of low to high
  8600.         bit 6: removables not included in scan
  8601.         bit 5: inquiry data not kept by XPT
  8602.         bits 4-0: reserved
  8603.  14h    WORD    engine count
  8604.  16h 14 BYTEs    vendor-specific data
  8605.  24h    DWORD    size of private data area
  8606.  28h    DWORD    asynchronous event capabilities (see #1886)
  8607.  2Ch    BYTE    highest path ID assigned
  8608.  2Dh    BYTE    SCSI device ID of initiator
  8609.  2Eh  2 BYTEs    reserved
  8610.  30h 16 BYTEs    SIM vendor ID
  8611.  40h 16 BYTEs    HBA (host bus adaptor) vendor ID
  8612.  50h  4 BYTEs    operating-system dependant usage
  8613. ---functions 00h,04h,11h,12h---
  8614.  no additional fields
  8615. ---function 05h---
  8616.  10h    DWORD    asynchronous event enables (see function 03h above)
  8617.  14h    DWORD    pointer to asynchronous callback routine (see #1888)
  8618.  18h    DWORD    pointer to peripheral driver buffer
  8619.  1Ch    BYTE    size of peripheral buffer
  8620. ---function 06h---
  8621.  10h    BYTE    peripheral device type of target
  8622. ---functions 10h,13h---
  8623.  10h    DWORD    pointer to CCB to be aborted
  8624. ---function 20h---
  8625.  10h    WORD    engine number
  8626.  12h    BYTE    engine type
  8627.         00h buffer memory
  8628.         01h lossless compression
  8629.         02h lossy compression
  8630.         03h encryption
  8631.  13h    BYTE    engine algorithm ID
  8632.         00h vendor-unique
  8633.         01h LZ1 variation 1 (STAC)
  8634.         02h LZ2 variation 1 (HP DCZL)
  8635.         03h LZ2 variation 2 (Infochip)
  8636.  14h    DWORD    engine memory size
  8637. ---function 21h---
  8638.  10h    DWORD    pointer to peripheral driver
  8639.  14h  4 BYTEs    reserved
  8640.  18h    DWORD    OS-dependent request-mapping info
  8641.  1Ch    DWORD    address of completion callback routine
  8642.  20h    DWORD    pointer to scatter/gather list or data buffer
  8643.  24h    DWORD    length of data transfer
  8644.  28h    DWORD    pointer to engine buffer data
  8645.  2Ch  2 BYTEs    reserved
  8646.  2Eh    WORD    number of scatter/gather entries
  8647.  30h    DWORD    maximum destination data length
  8648.  34h    DWORD    length of destination data
  8649.  38h    DWORD    source residual length
  8650.  3Ch 12 BYTEs    reserved
  8651.  48h    DWORD    OS-dependent timeout value
  8652.  4Ch  4 BYTEs    reserved
  8653.  50h    WORD    engine number
  8654.  52h    WORD    vendor-unique flags
  8655.  54h  4 BYTEs    reserved
  8656.  58h  N BYTEs    private data area for SIM
  8657. ---function 30h---
  8658.  10h    WORD    group 6 vendor-unique CDB length
  8659.  12h    WORD    group 7 vendor-unique CDB length
  8660.  14h    DWORD    pointer to target CCB list
  8661.  18h    WORD    number of target CCBs
  8662. ---other functions---
  8663.  10h    DWORD    pointer to peripheral driver
  8664.  14h    DWORD    pointer to next CCB
  8665.  18h    DWORD    OS-dependent request mapping information
  8666.  1Ch    DWORD    address of completion callback routine (see #1887)
  8667.  20h    DWORD    pointer to scatter/gather list or data buffer
  8668.  24h    DWORD    length of data transfer
  8669.  28h    DWORD    pointer to sense info buffer
  8670.  2Ch    BYTE    length of sense info buffer
  8671.  2Dh    BYTE    CDB length
  8672.  2Eh    WORD    number of scatter/gather entries
  8673.  30h  4 BYTEs    reserved
  8674.  34h    BYTE    SCSI status
  8675.  35h  3 BYTEs    reserved
  8676.  38h    DWORD    residual length
  8677.  40h 12 BYTEs    Command Descriptor Block (CDB)
  8678.  44h    DWORD    OS-dependent timeout value
  8679.  48h    DWORD    pointer to message buffer
  8680.  4Ch    WORD    length of message buffer
  8681.  4Eh    WORD    vendor-unique flags
  8682.  50h    BYTE    tag queue action
  8683.  51h  3 BYTEs    reserved
  8684.  54h  N BYTEs    private data area for SIM
  8685.  
  8686. Bitfields for CAM flags:
  8687. Bit(s)    Description    (Table 1881)
  8688.  0    CDB is a pointer
  8689.  1    tagged queue action enable
  8690.  2    linked CDB
  8691.  3    disable callback on completion
  8692.  4    scatter/gather
  8693.  5    disable autosense
  8694.  7-6    direction (00 reserved, 01 in, 10 out, 11 no data transfer)
  8695.  9-8    reserved
  8696.  10    engine synchronize
  8697.  11    SIM queue freeze
  8698.  12    SIM queue priority
  8699.     1 head insertion
  8700.     0 tail insertion (normal)
  8701.  13    disable synchronous transfers    / exclusive
  8702.  14    initiate synchronous transfers    \ mutually
  8703.  15    disable disconnect
  8704.  
  8705. Bitfields for CAM address flags:
  8706. Bit(s)    Description    (Table 1882)
  8707.  7    SG list/data (0 = host, 1 = engine)
  8708.  6    CDB pointer    (6-1: 0=virtual addr, 1=phys addr)
  8709.  5    SG list/data
  8710.  4    sense buffer
  8711.  3    message buffer
  8712.  2    next CCB
  8713.  1    callback on completion
  8714.  0    reserved
  8715.  
  8716. (Table 1883)
  8717. Values for CAM status:
  8718.  00h    request in progress
  8719.  01h    request successful
  8720.  02h    host aborted request
  8721.  03h    unable to abort request
  8722.  04h    request completed with error
  8723.  05h    CAM is busy
  8724.  06h    invalid request
  8725.  07h    invalid path ID
  8726.  08h    no such SCSI device
  8727.  09h    unable to terminate I/O process
  8728.  0Ah    timeout on target selection
  8729.  0Bh    timeout on command
  8730.  0Dh    receive message rejection
  8731.  0Eh    sent/received SCSI bus reset
  8732.  0Fh    detected uncorrectable parity error
  8733.  10h    Autosense request failed
  8734.  11h    no HBA detected
  8735.  12h    data over/underrun
  8736.  13h    bus freed unexpectedly
  8737.  14h    target bus phase sequence failure
  8738.  15h    CCB too small
  8739.  16h    requested capability not available
  8740.  17h    sent bus device reset
  8741.  18h    terminate I/O process
  8742.  38h    invalid LUN
  8743.  39h    invalid target ID
  8744.  3Ah    unimplemented function
  8745.  3Bh    nexus not established
  8746.  3Ch    invalid initiator ID
  8747.  3Dh    received SCSI Command Descriptor Block
  8748.  3Eh    LUN already enabled
  8749.  3Fh    SCSI bus busy
  8750. Note:    bit 6 set to indicate frozen SIM queue
  8751.     bit 7 set to indicate valid autosense
  8752.  
  8753. Bitfields for CAM target-mode flags:
  8754. Bit(s)    Description    (Table 1884)
  8755.  7    data buffer valid
  8756.  6    status valid
  8757.  5    message buffer valid
  8758.  4    reserved
  8759.  3    phase-cognizant mode
  8760.  2    target CCB available
  8761.  1    disable autodisconnect
  8762.  0    disable autosave/restore
  8763.  
  8764. Bitfields for SCSI capabilities:
  8765. Bit(s)    Description    (Table 1885)
  8766.  7    modify data pointers
  8767.  6    wide bus (32 bits)
  8768.  5    wide bus (16 bits)
  8769.  4    synchronous transfers
  8770.  3    linked commands
  8771.  2    reserved
  8772.  1    tagged queueing
  8773.  0    soft reset
  8774.  
  8775. Bitfields for CAM asynchronous event capabilities:
  8776. Bit(s)    Description    (Table 1886)
  8777.  31-24    vendor-specific
  8778.  23-8    reserved
  8779.  7    new devices found during rescan
  8780.  6    SIM module deregistered
  8781.  5    SIM module registered
  8782.  4    sent bus device reset to target
  8783.  3    SCSI AEN
  8784.  2    reserved
  8785.  1    unsolicited reselection
  8786.  0    unsolicited SCSI bus reset
  8787.  
  8788. (Table 1887)
  8789. Values completion callback function is called with:
  8790.     interrupts disabled
  8791.     ES:BX -> completed CCB
  8792.  
  8793. (Table 1888)
  8794. Values asynchronous callback function is called with:
  8795.     AH = opcode
  8796.     AL = path ID generating callback
  8797.     DH = target ID causing event
  8798.     DL = LUN causing event
  8799.     CX = data byte count (if applicable)
  8800.     ES:BX -> data buffer (if applicable)
  8801. Return: all registers preserved
  8802. --------d-4F8200CX8765-----------------------
  8803. INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK
  8804.     AX = 8200h
  8805.     CX = 8765h
  8806.     DX = CBA9h
  8807. Return: AH = 00h if installed
  8808.         CX = 9ABCh
  8809.         DX = 5678h
  8810.         ES:DI -> "SCSI_CAM"
  8811. SeeAlso: AX=8100h,INT 4B"Common Access Method"
  8812. --------N-50---------------------------------
  8813. INT 50 - TIL Xpert AIM (X.25)
  8814.     AH = function
  8815. --------H-50---------------------------------
  8816. INT 50 - IRQ0 relocated by DESQview
  8817. Range:    INT 50 to INT F8, selected automatically
  8818. Notes:    this is the default location for older versions; DESQview v2.26+
  8819.       searches for unused ranges of interrupts and uses the lowest
  8820.       available range in its list for relocating these IRQs and the next
  8821.       lowest for relocating IRQ8-IRQ15
  8822.     a range of eight interrupts starting at a multiple of 8 is considered
  8823.       available if all vectors are identical and it has not been excluded
  8824.       with an /XB:nn commandline switch
  8825.     the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if < two of these
  8826.       are available, F8h and then 50h are used anyway)
  8827.     the list of ranges for v2.31+ is 68h,78h,88h-B8h,F8h (if < two of these
  8828.       are available, F8h and then F0h are used anyway)
  8829. SeeAlso: INT 08"IRQ0",INT 51"DESQview",INT 54"DESQview",INT 58"DESQview"
  8830. SeeAlso: INT D8"Screen Thief"
  8831. --------H-50---------------------------------
  8832. INT 50 - IRQ0 relocated by IBM 3278 emulation control program
  8833. SeeAlso: INT 51"IBM 3278"
  8834. --------H-50---------------------------------
  8835. INT 50 - IRQ0 relocated by OS/2 v1.x
  8836. SeeAlso: INT 51"OS/2"
  8837. ----------50---------------------------------
  8838. INT 50 - TI Professional PC - FATAL SOFTWARE ERROR TRAP
  8839.     no details available
  8840. Note:    for system use only
  8841. SeeAlso: INT 40"TI Professional",INT 4F"TI Professional"
  8842. SeeAlso: INT 51"TI Professional",INT 53"TI Professional"
  8843. --------V-500000-----------------------------
  8844. INT 50 - Vanderaart TEXT WINDOWS, PC Thuis Shell - OPEN TEXT WINDOW
  8845.     AX = 0000h
  8846.     ES:BX -> name string or ES:0000h if none
  8847.     CH,CL = row,column of upper left corner
  8848.     DH,DL = row,column of lower right corner
  8849. Return: AX = window handle or
  8850.         0000h if not installed
  8851.         FFFFh on error
  8852. SeeAlso: AX=0001h,AX=0002h"TEXT WINDOWS"
  8853. --------V-500001-----------------------------
  8854. INT 50 - Vanderaart TEXT WINDOWS, PC Thuis Shell - CLOSE TEXT WINDOW
  8855.     AX = 0001h
  8856.     DI = window handle
  8857. SeeAlso: AX=0000h
  8858. --------V-500002-----------------------------
  8859. INT 50 - Vanderaart TEXT WINDOWS - PUT CHARACTER IN WINDOW
  8860.     AX = 0002h
  8861.     BL = character
  8862.     BH = attribute
  8863.     DL = column
  8864.     DH = row
  8865.     DI = window handle
  8866. Return: AX = status
  8867.         0000h if successful
  8868.         FFFFh if outside window
  8869. SeeAlso: AX=0000h
  8870. --------l-500002-----------------------------
  8871. INT 50 - PC Thuis Organizer Shell - PLOT TEXT
  8872.     AX = 0002h
  8873.     ES:BX -> text string
  8874.     DH,DL = row,column of upper left corner
  8875.     DI = window handle
  8876. Return: AX = status
  8877.         0000h successful (text fits in window)
  8878.         FFFFh error
  8879. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  8880.       published in the June/July 1990 issue of PC Thuis Power magazine
  8881. --------V-500003-----------------------------
  8882. INT 50 - Vanderaart TEXT WINDOWS - OUTPUT LINE TO WINDOW
  8883.     AX = 0003h
  8884.     ES:BX -> text string
  8885.     CX = string length (0000h if ASCIZ string)
  8886.     DL = position (FFh centered, else flush left)
  8887.     DH = starting row
  8888.     DI = window handle
  8889. Return: AX = status
  8890.         0000h successful
  8891.         FFFFh did not fit in window
  8892. --------l-500003-----------------------------
  8893. INT 50 - PC Thuis Organizer Shell - WRITE FILE
  8894.     AX = 0003h
  8895.     ES:BX -> data to be written
  8896.     CX = number of bytes to write
  8897.     DS:SI -> filename
  8898. Return: AX = status
  8899.         0000h successful
  8900.         FFFFh error
  8901. SeeAlso: AX=0004h"Shell"
  8902. --------V-500004-----------------------------
  8903. INT 50 - Vanderaart TEXT WINDOWS - GET KEY
  8904.     AX = 0004h
  8905.     CH = type
  8906.         00h any key
  8907.         01h 'J' or 'N' (Dutch for yes/no)
  8908. Return: AX = key
  8909. SeeAlso: INT 16/AH=00h
  8910. --------l-500004-----------------------------
  8911. INT 50 - PC Thuis Organizer Shell - READ FILE
  8912.     AX = 0004h
  8913.     ES:BX -> buffer for data
  8914.     CX = number of bytes to read or 0000h for entire file
  8915.     DL = file type
  8916.         01h setting shell
  8917.         02h setting sterm
  8918.         03h INT21 file
  8919.     DS:SI -> filename
  8920. Return: AX = status
  8921.         0000h successful
  8922.         FFFFh error
  8923. Note:    file type numbers are maintained by John Vanderaart; if a new file type
  8924.       is needed, a type number should be requested from him through the
  8925.       magazine:
  8926.         PC Thuis BV
  8927.         Spaarne 55
  8928.         2011 CE HAARLEM
  8929.         The Netherlands
  8930. SeeAlso: AX=0003h"Shell"
  8931. --------V-500005-----------------------------
  8932. INT 50 - Vanderaart TEXT WINDOWS - CHANGE ATTRIBUTE
  8933.     AX = 0005h
  8934.     BL = new attribute
  8935.     CH,CL = row,column of upper left corner
  8936.     DH,DL = row,column of lower right corner
  8937.     DI = window handle
  8938. --------l-500005-----------------------------
  8939. INT 50 - PC Thuis Organizer Shell - PROMPT YES/NO
  8940.     AX = 0005h
  8941.     ES:BX -> prompt string (ES:0000h if no prompt)
  8942. Return: AX = key pressed
  8943.         0000h "J" (Dutch "Ja" = "Yes")
  8944.         FFFFh "N" (Dutch "Nee" = "No")
  8945. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  8946.       published in the June/July 1990 issue of PC Thuis Power magazine
  8947. SeeAlso: AX=0008h"PC Thuis"
  8948. --------V-500006-----------------------------
  8949. INT 50 - Vanderaart TEXT WINDOWS - EDIT LINE IN WINDOW
  8950.     AX = 0006h
  8951.     ES:BX -> text string
  8952.     CH = type of input (see #1889)
  8953.     DH,DL = row,column of upper left corner
  8954.     DI = window handle
  8955. Return: AX = key which terminated entry
  8956.         0000h Enter
  8957.         0001h Esc
  8958.         0002h Down arrow
  8959.         0003h Up arrow
  8960.         0004h F10
  8961.  
  8962. (Table 1889)
  8963. Values for type of input to Vanderaart Text Windows:
  8964.  00h    everything
  8965.  01h    uppercase only
  8966.  02h    positive numbers
  8967.  03h    Dutch postal code ("9999 AA")
  8968.  04h    'J' or 'N' (Dutch yes/no)
  8969.  05h    telephone or FAX number
  8970.  06h    positive or negative number
  8971.  07h    date (dd/mm/yy)
  8972.  08h    money
  8973.  09h    '1' through '8'
  8974.  0Ah    '1' through '4'
  8975.  0Bh    uppercase filenames
  8976. --------l-500006-----------------------------
  8977. INT 50 - PC Thuis Organizer Shell - ALERT USER
  8978.     AX = 0006h
  8979.     ES:BX -> string
  8980. --------l-500007-----------------------------
  8981. INT 50 - PC Thuis Organizer Shell - DO LINE
  8982.     AX = 0007h
  8983.     ES:BX -> text string
  8984.     CX = string length in bytes (0000h if NUL-terminated)
  8985.     DL = FFh to center string, else flush left
  8986.     DH = upper left row
  8987.     DI = window handle
  8988. Return: AX = status
  8989.         0000h successful
  8990.         FFFFh error
  8991. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  8992.       published in the June/July 1990 issue of PC Thuis Power magazine
  8993. SeeAlso: AX=0008h
  8994. --------l-500008-----------------------------
  8995. INT 50 - PC Thuis Organizer Shell - DO MENU
  8996.     AX = 0008h
  8997.     ES:BX -> menu structure
  8998. Return: AL = index 1 or FFh if not selected
  8999.     AH = index 2 or FFh if not selected
  9000.     BL = index 3 or FFh if not selected
  9001.     BH = index 4 or FFh if not selected
  9002. SeeAlso: AX=0005h"PC Thuis",AX=0007h,AX=000Ch
  9003. --------l-500009-----------------------------
  9004. INT 50 - PC Thuis Organizer Shell - MESSAGE ON
  9005.     AX = 0009h
  9006.     ES:BX -> message string
  9007. SeeAlso: AX=000Ah
  9008. --------l-50000A-----------------------------
  9009. INT 50 - PC Thuis Organizer Shell - MESSAGE OFF
  9010.     AX = 000Ah
  9011. SeeAlso: AX=0009h
  9012. --------l-50000B-----------------------------
  9013. INT 50 - PC Thuis Organizer Shell - CHANGE ATTRIBUTE
  9014.     AX = 000Bh
  9015.     BL = new attribute
  9016.     CH,CL = row,column of upper left corner
  9017.     DH,DL = row,column of lower right corner
  9018.     DI = window handle
  9019. --------l-50000C-----------------------------
  9020. INT 50 - PC Thuis Organizer Shell - DO REQUEST
  9021.     AX = 000Ch
  9022.     ES:BX -> request structure
  9023. Return: AX = status
  9024.         0000h confirmed
  9025.         FFFFh denied
  9026. SeeAlso: AX=0008h
  9027. --------l-50000D-----------------------------
  9028. INT 50 - PC Thuis Organizer Shell - EDIT LINE
  9029.     AX = 000Dh
  9030.     ES:BX -> text string
  9031.     CL = length
  9032.     CH = input type (see #1890)
  9033.     DH,DL = row,column of upper left corner
  9034.     DI = window handle
  9035. Return: AX = result code
  9036. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  9037.       published in the June/July 1990 issue of PC Thuis Power magazine
  9038.  
  9039. Bitfields for input type:
  9040. Bit(s)    Description    (Table 1890)
  9041.  0    force uppercase
  9042.  1    integer
  9043.  2    no spaces allowed
  9044.  3    no cursor keys
  9045. --------l-50000E-----------------------------
  9046. INT 50 - PC Thuis Organizer Shell - PLOT CHARACTER
  9047.     AX = 000Eh
  9048.     BL = character
  9049.     BH = attribute
  9050.     DH,DL = row,column at which to plot
  9051.     DI = window handle
  9052. Return: AX = status
  9053.         0000h successful
  9054.         FFFFh errror
  9055. --------l-50000F-----------------------------
  9056. INT 50 - PC Thuis Organizer Shell - EMPTY WINDOW
  9057.     AX = 000Fh
  9058.     BL = character
  9059.     BH = attribute
  9060.     DI = window handle
  9061. --------l-500010-----------------------------
  9062. INT 50 - PC Thuis Organizer Shell - TRACE MENU
  9063.     AX = 0010h
  9064.     ES:BX -> first menu structure
  9065.     CL = hotkey to look up
  9066. Return: AL = index 1 or FFh if not selected
  9067.     AH = index 2 or FFh if not selected
  9068.     BL = index 3 or FFh if not selected
  9069.     BH = index 4 or FFh if not selected
  9070. Index:    hotkeys;PC Thuis Organizer Shell
  9071. --------l-500011-----------------------------
  9072. INT 50 - PC Thuis Organizer Shell - MOVE MEMORY
  9073.     AX = 0011h
  9074.     DS:SI -> source
  9075.     ES:DI -> destination
  9076.     CX = number of bytes to move (0000h = until NUL string terminator???)
  9077. SeeAlso: AX=0012h
  9078. --------l-500012-----------------------------
  9079. INT 50 - PC Thuis Organizer Shell - COMPARE MEMORY
  9080.     AX = 0012h
  9081.     DS:SI -> source
  9082.     ES:DI -> destination
  9083.     CX = number of bytes to compare (0000h=until NUL string terminator???)
  9084. Return: AX = status
  9085.         0000h same
  9086.         FFFFh different
  9087. SeeAlso: AX=0011h
  9088. --------l-500013-----------------------------
  9089. INT 50 - PC Thuis Organizer Shell - GET KEY
  9090.     AX = 0013h
  9091.     CH = type flags
  9092.         bit 0: force uppercase
  9093.         bit 1: integer
  9094.         bit 2: no spaces
  9095. Return: AX = keystroke
  9096. --------l-500014-----------------------------
  9097. INT 50 - PC Thuis Organizer Shell - SCROLL WINDOW
  9098.     AX = 0014h
  9099.     BL = direction
  9100.         06h up
  9101.         07h down
  9102.     BH = attribute
  9103.     DI = window handle
  9104. SeeAlso: INT 10/AH=06h,INT 10/AH=07h
  9105. --------l-500015-----------------------------
  9106. INT 50 - PC Thuis Organizer Shell - GET MEMORY HANDLE
  9107.     AX = 0015h
  9108.     BL = handle size
  9109.         00h 65536 bytes (64K)
  9110.         01h 65535 bytes (64K-1)
  9111.         02h 32768 bytes (32K)
  9112.         03h 32767 bytes (32K-1)
  9113. Return: AX = segment
  9114. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  9115.       published in the June/July 1990 issue of PC Thuis Power magazine
  9116. SeeAlso: INT 21/AH=48h
  9117. --------H-51---------------------------------
  9118. INT 51 - IRQ1 relocated by DESQview
  9119. Range:    INT 51 to INT F9, selected automatically
  9120. Note:    this is the default location for older versions; see INT 50"DESQview"
  9121.       for details of interrupt relocation
  9122. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  9123. --------H-51---------------------------------
  9124. INT 51 - IRQ1 relocated by IBM 3278 emulation control program
  9125. SeeAlso: INT 50"IBM 3278",INT 54"IBM 3278"
  9126. --------H-51---------------------------------
  9127. INT 51 - IRQ1 relocated by OS/2 v1.x
  9128. SeeAlso: INT 50"OS/2",INT 54"OS/2"
  9129. ----------51---------------------------------
  9130. INT 51 - TI Professional PC - RESTART TIMING EVENT
  9131.     no details available
  9132. Note:    for system use only
  9133. SeeAlso: INT 50"TI Professional",INT 52"TI Professional"
  9134. --------H-52---------------------------------
  9135. INT 52 - IRQ2 relocated by DESQview
  9136. Range:    INT 52 to INT FA, selected automatically
  9137. Note:    this is the default location for older versions; see INT 50"DESQview"
  9138.       for details of interrupt relocation
  9139. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  9140. --------H-52---------------------------------
  9141. INT 52 - IRQ2 relocated by IBM 3278 emulation control program, OS/2 v1.x
  9142. SeeAlso: INT 50"IBM 3278",INT 51"OS/2"
  9143. ----------52---------------------------------
  9144. INT 52 - TI Professional PC - CANCEL TIMING EVENT
  9145.     no details available
  9146. Note:    for system use only
  9147. SeeAlso: INT 51"TI Professional",INT 53"TI Professional"
  9148. --------H-53---------------------------------
  9149. INT 53 - IRQ3 relocated by DESQview
  9150. Range:    INT 53 to INT FB, selected automatically
  9151. Note:    this is the default location for older versions; see INT 50"DESQview"
  9152.       for details of interrupt relocation
  9153. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  9154. --------H-53---------------------------------
  9155. INT 53 - IRQ3 relocated by IBM 3278 emulation control program, OS/2 v1.x
  9156. SeeAlso: INT 50"IBM 3278",INT 51"OS/2"
  9157. ----------53---------------------------------
  9158. INT 53 - TI Professional PC - SVC INTERFACE
  9159.     no details available
  9160. Note:    for use by multitaskers
  9161. SeeAlso: INT 50"TI Professional",INT 54"TI Professional"
  9162. --------N-53---------------------------------
  9163. INT 53 - WEB??? - API
  9164.     BX = function
  9165.         0000h ???
  9166.         AX = ???
  9167.         Return: AX = ???
  9168.         0004h ???
  9169.         0009h ???
  9170.         0015h
  9171.         AX = ???
  9172.         DX = ???
  9173.         0017h
  9174. Return: ???
  9175. Notes:    the installation check consists of looking for the signature "WEBCO"
  9176.       immediately prior to the interrupt handler
  9177.     the above calls are made by Show Partner F/X v3.6 (see INT 10/AH=53h)
  9178. Index:    installation check;unknown|installation check;WEBCO
  9179. --------H-54---------------------------------
  9180. INT 54 - IRQ4 relocated by DESQview
  9181. Range:    INT 54 to INT FC, selected automatically
  9182. Note:    this is the default location for older versions; see INT 50"DESQview"
  9183.       for details of interrupt relocation
  9184. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  9185. --------H-54---------------------------------
  9186. INT 54 - IRQ4 relocated by IBM 3278 emulation control program, OS/2 v1.x
  9187. SeeAlso: INT 51"IBM 3278",INT 51"OS/2"
  9188. ----------54---------------------------------
  9189. INT 54 - TI Professional PC - ACTIVATE TASK SUBROUTINE
  9190.     no details available
  9191. Note:    for use by multitaskers
  9192. SeeAlso: INT 50"TI Professional",INT 53"TI Professional"
  9193. --------X-545400-----------------------------
  9194. INT 54 U - Toshiba PCMCIA2 - INSTALLATION CHECK
  9195.     AX = 5400h
  9196. Return: AX = 0054h if installed
  9197.         CX:DX -> INT function handler
  9198. --------H-55---------------------------------
  9199. INT 55 - IRQ5 relocated by DESQview
  9200. Range:    INT 55 to INT FD, selected automatically
  9201. Note:    this is the default location for older versions; see INT 50"DESQview"
  9202.       for details of interrupt relocation
  9203. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  9204. --------H-55---------------------------------
  9205. INT 55 - IRQ5 relocated by IBM 3278 emulation control program, OS/2 v1.x
  9206. SeeAlso: INT 51"IBM 3278",INT 51"OS/2"
  9207. --------b-55---------------------------------
  9208. INT 55 - TI Professional PC - RESERVED FOR FUTURE USE
  9209.     no details available
  9210. SeeAlso: INT 50"TI Professional",INT 56"TI Professional"
  9211. --------H-56---------------------------------
  9212. INT 56 - IRQ6 relocated by DESQview
  9213. Range:    INT 56 to INT FE, selected automatically
  9214. Note:    this is the default location for older versions; see INT 50"DESQview"
  9215.       for details of interrupt relocation
  9216. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  9217. --------H-56---------------------------------
  9218. INT 56 - IRQ6 relocated by IBM 3278 emulation control program, OS/2 v1.x
  9219. SeeAlso: INT 51"IBM 3278",INT 51"OS/2"
  9220. --------b-56---------------------------------
  9221. INT 56 - TI Professional PC - RESERVED FOR FUTURE USE
  9222.     no details available
  9223. SeeAlso: INT 50"TI Professional",INT 55"TI Professional"
  9224. --------H-57---------------------------------
  9225. INT 57 - IRQ7 relocated by DESQview
  9226. Range:    INT 57 to INT FF, selected automatically
  9227. Note:    this is the default location for older versions; see INT 50"DESQview"
  9228.       for details of interrupt relocation
  9229. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  9230. --------H-57---------------------------------
  9231. INT 57 - IRQ7 relocated by IBM 3278 emulation control program, OS/2 v1.x
  9232. SeeAlso: INT 51"IBM 3278",INT 51"OS/2"
  9233. --------b-57---------------------------------
  9234. INT 57 - TI Professional PC - CRT MAPPING HOOK
  9235.     no details available
  9236. SeeAlso: INT 49"TI Professional",INT 50"TI Professional"
  9237. --------H-58---------------------------------
  9238. INT 58 - IRQ8 relocated by DESQview 2.26+
  9239. Range:    INT 58 to INT F8, selected automatically
  9240. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  9241. SeeAlso: INT 50"DESQview",INT 59"DESQview",INT 70
  9242. --------H-58---------------------------------
  9243. INT 58 - IRQ0 relocated by DoubleDOS
  9244. SeeAlso: INT 08
  9245. --------b-58---------------------------------
  9246. INT 58 - TI Professional PC - SYSTEM TIMER 25ms HOOK
  9247.     no details available
  9248. SeeAlso: INT 43"TI Professional",INT 4C"TI Professional"
  9249. SeeAlso: INT 5A"TI Professional"
  9250. --------H-59---------------------------------
  9251. INT 59 - IRQ9 relocated by DESQview 2.26+
  9252. Range:    INT 59 to INT F9, selected automatically
  9253. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  9254. SeeAlso: INT 50"DESQview",INT 58"DESQview",INT 5A"DESQview",INT 71
  9255. --------H-59---------------------------------
  9256. INT 59 - IRQ1 relocated by DoubleDOS
  9257. SeeAlso: INT 09
  9258. --------b-59---------------------------------
  9259. INT 59 - TI Professional PC - COMMON ROM HARDWARE INTERRUPT EXIT VECTOR
  9260. Desc:    all hardware interrupts on the TI Pro jump indirectly to the handler
  9261.       pointed at by this interrupt vector to finish their handling of
  9262.       the hardware interrupt
  9263. Notes:    the default handler decrements the interrupt count, restores registers
  9264.       (including the stack pointer), sends an EOI to the interrupt
  9265.       controller, and finally does an IRET
  9266.     can be used by multitaskers which need to get control on a regular
  9267.       basis
  9268. SeeAlso: INT 40"TI Professional",INT 47"TI Professional"
  9269. SeeAlso: INT 53"TI Professional"
  9270. --------V-59---------------------------------
  9271. INT 59 - GSS Computer Graphics Interface (GSS*CGI)
  9272.     DS:DX -> block of 5 array pointers
  9273. Return: CF set on error
  9274.         AX = error code
  9275.     CF clear if successful
  9276.         AX = return code
  9277. Note:    INT 59 is the means by which GSS*CGI language bindings communicate with
  9278.       GSS*CGI device drivers and the GSS*CGI device driver controller.
  9279.     also used by the IBM Graphic Development Toolkit
  9280. --------H-5A---------------------------------
  9281. INT 5A - IRQ10 relocated by DESQview 2.26+
  9282. Range:    INT 5A to INT FA, selected automatically
  9283. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  9284. SeeAlso: INT 50"DESQview",INT 59"DESQview",INT 5B"DESQview",INT 72
  9285. --------H-5A---------------------------------
  9286. INT 5A - IRQ2 relocated by DoubleDOS
  9287. SeeAlso: INT 0A
  9288. --------N-5A---------------------------------
  9289. INT 5A - PC Cluster adapter BIOS entry address
  9290.     ???
  9291. Return: ???
  9292. SeeAlso: INT 5B"PC Cluster"
  9293. --------b-5A---------------------------------
  9294. INT 5A - TI Professional PC - SYSTEM TIMER 100ms HOOK
  9295.     no details available
  9296. Note:    this interrupt is invoked on every fourth timer interrupt
  9297. SeeAlso: INT 43"TI Professional",INT 4C"TI Professional"
  9298. SeeAlso: INT 58"TI Professional"
  9299. --------!---Section--------------------------
  9300.