home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 (Alt) / The_Hacker_Chronicles_Volume_II-CD2.iso / misc / interrup.f < prev    next >
Encoding:
Text File  |  1995-01-03  |  252.7 KB  |  6,912 lines

  1. Interrupt List, part 6 of 8
  2. This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
  3. ----------2FC0-------------------------------
  4. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - API
  5.     AH = C0h
  6.     AL = function code (01h to 15h)
  7. Return: ???
  8. SeeAlso: AX=C000h"MTEZ",AX=CB00h"MTEZ"
  9. ----------2FC000-----------------------------
  10. INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK
  11.     AX = C000h
  12. Return: AL = FFh
  13.     ES:BX -> FAR entry point
  14.     ES:SI -> signature string "LINKSUP$"
  15. Note:    LSL.COM may use any multiplex number between C0h and FFh; it searches
  16.       for itself in that range, and installs using the first free multiplex
  17.       number in the range if not already loaded.
  18.  
  19. Call entry point with:
  20.     BX = 0002h get entry points
  21.         ES:SI -> buffer for entry point record (see below)
  22.         Return: ES:SI buffer filled
  23.  
  24. Format of entry point record:
  25. Offset    Size    Description
  26.  00h    DWORD    pointer to ??? entry point in LSL
  27.  04h    DWORD    pointer to ??? entry point in LSL
  28. ----------2FC000-----------------------------
  29. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - INSTALLATION CHECK
  30.     AX = C000h
  31.     BX = 444Bh
  32.     CX = 4A4Eh
  33. Return: AL = status
  34.         00h not installed, OK to install
  35.         FFh installed
  36.         BX = 646Bh
  37.         CX = 6A6Eh
  38. Note:    this TSR will use any free multiplex number from C0h to FFh
  39. SeeAlso: AH=C0h"MTEZ"
  40. ----------2FC050-----------------------------
  41. INT 2F U - Explosiv 2.00 - INSTALLATION CHECK
  42.     AX = C050h
  43. Return: AL = 51h if installed
  44. Notes:    Explosiv is a shareware animated screen blanker for DOS and Windows 3
  45.       by Reidar Gresseth and Chris Hook
  46.     AH=C0h is the default multiplex number, but may be reconfigured to
  47.       any value from C0h to C9h
  48. SeeAlso: AX=C052h
  49. ----------2FC052-----------------------------
  50. INT 2F U - Explosiv 2.00 - UNINSTALL
  51.     AX = C052h
  52.     DX:BX = address to return to on successful uninstall
  53. Return: at specified address if successful
  54.     AL = 53h on error
  55. Note:    specified return address must have the segment of the caller's PSP
  56. SeeAlso: AX=C050h
  57. ----------2FC054-----------------------------
  58. INT 2F U - Explosiv 2.00 - GET ???
  59.     AX = C054h
  60. Return: AL = ???
  61. Note:    returns value set by AX=C057h
  62. SeeAlso: AX=C057h
  63. ----------2FC055-----------------------------
  64. INT 2F U - Explosiv 2.00 - SET BLANKING INTERVAL
  65.     AX = C055h
  66.     BX = new interval in clock ticks
  67. ----------2FC056-----------------------------
  68. INT 2F U - Explosiv 2.00 - SET ???
  69.     AX = C056h
  70.     BL = ???
  71. ----------2FC057-----------------------------
  72. INT 2F U - Explosiv 2.00 - SET ???
  73.     AX = C057h
  74.     BL = ???
  75. SeeAlso: AX=C054h
  76. ----------2FC058-----------------------------
  77. INT 2F U - Explosiv 2.00 - SET ???
  78.     AX = C058h
  79.     BL = ???
  80. ----------2FC059-----------------------------
  81. INT 2F U - Explosiv 2.00 - CLEAR ???
  82.     AX = C059h
  83. Note:    clears flag set by AX=C05Ah
  84. SeeAlso: AX=C05Ah
  85. ----------2FC05A-----------------------------
  86. INT 2F U - Explosiv 2.00 - SET ???
  87.     AX = C05Ah
  88.     BL = ???
  89. Note:    sets flag cleared by AX=C059h then stores BL
  90. SeeAlso: AX=C059h,AX=C05Bh
  91. ----------2FC05B-----------------------------
  92. INT 2F U - Explosiv 2.00 - SET ???
  93.     AX = C05Bh
  94.     BL = ???
  95. SeeAlso: AX=C05Ah,AX=C05Ch
  96. ----------2FC05C-----------------------------
  97. INT 2F U - Explosiv 2.00 - SET ???
  98.     AX = C05Ch
  99.     BL = ???
  100. SeeAlso: AX=C05Bh
  101. ----------2FC900BP0000-----------------------
  102. INT 2F U - ThunderByte??? - INSTALLATION CHECK
  103.     AX = C900h
  104.     BP = 0000h
  105. Return: AL = FFh if installed
  106.         BP >= 0014h
  107. Note:    called by TBSCANX
  108. SeeAlso: AX=C987h,AX=CA00h
  109. ----------2FC987-----------------------------
  110. INT 2F U - ThunderByte??? - DISINFECT FILE???
  111.     AX = C987h
  112.     BX:DX -> filename
  113.     BX:CX -> virus name
  114. Return: AX = status
  115.         0000h successful???
  116. Note:    called by TBSCANX
  117. SeeAlso: AX=CA00h
  118. ----------2FC9FF-----------------------------
  119. INT 2F - STACKMAN - INSTALLATION BROADCAST
  120.     AX = C9FFh
  121.     BL = BCD version number
  122.     CX = number of stacks
  123.     DX = stack size in bytes
  124. Notes:    called by STACKMAN when it goes resident to inform interested TSRs that
  125.       its API is available
  126.     the installation check consists of testing for the string "STACKXXX" at
  127.       offset 0Ah from the INT B4 handler
  128. SeeAlso: INT B4"STACKMAN",INT B5"STACKMAN"
  129. ----------2FCA00BX5442-----------------------
  130. INT 2F - TBSCANX - INSTALLATION CHECK
  131.     AX = CA00h
  132.     BX = 5442h ('TB')
  133. Return:    AL = 00h not installed
  134.        = FFh installed
  135.         BX = 7462h ('tb') if BX was 5442h on entry
  136. Note:    TBSCANX is a resident virus scanning module by Frans Veldman.  Programs
  137.       may perform virus checks on themselves, other program files, or their
  138.       data files by invoking the TBSCANX API.
  139. SeeAlso: AX=4653h,AX=C900h
  140. ----------2FCA01-----------------------------
  141. INT 2F - TBSCANX - GET STATUS
  142.     AX = CA01h
  143. Return: AH = BCD version number (v2.2+)
  144.        = CAh for versions before 2.2
  145.     AL = state (00h = disabled, 01h = enabled)
  146.     CX = number of signatures which will be searched
  147. ---v2.0---
  148.     BX = EMS handle, 0000h if not using EMS
  149. ---v2.3+---
  150.     BX = segment of swap area, 0000h if not swapped
  151.     DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS
  152. SeeAlso: AX=CA02h
  153. ----------2FCA02-----------------------------
  154. INT 2F - TBSCANX - SET STATE
  155.     AX = CA02h
  156.     BL = new state (00h = disabled, 01h = enabled)
  157. SeeAlso: AX=CA01h
  158. ----------2FCA03-----------------------------
  159. INT 2F - TBSCANX - SCAN BUFFER
  160.     AX = CA03h
  161.     CX = size of buffer
  162.     DS:DX -> buffer containing data to scan
  163. Return: CF clear if no virus signatures found
  164.         BX,ES destroyed
  165.     CF set if signature found
  166.         ES:BX -> ASCIZ virus name (v2.3+)
  167.         DS:DX -> ASCIZ virus name (v2.0)
  168.     AX,CX,DX destroyed (v2.3+)
  169.     all other registers except CS:IP and SS:SP destroyed (v2.0)
  170. SeeAlso: AX=CA04h
  171. ----------2FCA04-----------------------------
  172. INT 2F - TBSCANX - SCAN FILE
  173.     AX = CA04h
  174.     DS:DX -> filename
  175. Return: CF clear if no virus signatures found
  176.         BX,ES destroyed
  177.     CF set if signature found
  178.         ES:BX -> ASCIZ virus name
  179.     AX,CX,DX destroyed
  180. Note:    this function requires at least 4K free memory
  181. SeeAlso: AX=CA03h
  182. ----------2FCAFEBX0000-----------------------
  183. INT 2F U - THELP v3.0 - INSTALLATION CHECK
  184.     AX = CAFEh
  185.     BX = 0000h
  186. Return: BX = segment of resident code if installed
  187.        = 0000h if not installed
  188. SeeAlso: AX=5453h
  189. ----------2FCB00-----------------------------
  190. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  191.     AX = CB00h
  192. Return: AL = status
  193.         00h not installed, OK to install
  194.         01h not installed, not OK to install
  195.         FFh installed
  196. Note:    AH = CBh is the default identifier, but may be reconfigured
  197. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  198. ----------2FCB00BX4D53-----------------------
  199. INT 2F - MTEZ XpressFax CASMGR - INSTALLATION CHECK
  200.     AX = CB00h
  201.     BX = 4D53h
  202.     CX = 4949h
  203. Return: AL = status
  204.         00h not installed, OK to install
  205.         01h not installed, not OK to install
  206.         FFh installed
  207.              BX = 6D73h
  208.         CX = 6969h
  209. Note:    this function is equivalent to the standard CASMGR installation check,
  210.       but uses the additional magic values to identify which CAS is
  211.       installed
  212. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB0Eh,AX=CB16h
  213. ----------2FCB01-----------------------------
  214. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  215.     AX = CB01h
  216.     DS:DX -> ASCIZ name of task control file
  217. Return: AX >= 0: event handle
  218.        < 0: error code
  219. Note:    files needed for an event must be kept until task is complete or error
  220. SeeAlso: AX=CB0Bh,AX=CB15h
  221.  
  222. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  223.   Class 00h    --- FAX warnings
  224.     Subcode 00h    no error
  225.         02h    bad scanline count
  226.         03h    page sent with errors, could not retransmit
  227.         04h    received data lost
  228.         05h    invalid or missing logo file
  229.         06h    filename does not match nonstandard format (NSF) header
  230.         07h    file size does not match NSF header
  231.   Class 01h    --- DOS warnings (data was sent)
  232.     Subcode 01h    invalid function
  233.         05h    access denied
  234.         06h    invalid handle
  235.         others    see INT 21/AH=59h
  236.   Class 02h    --- fatal errors (data not sent)
  237.     Subcode    00h    multiplex handler failed
  238.         01h    unknown command
  239.         02h    bad event handle
  240.         03h    FIND NEXT attempted before FIND FIRST
  241.         04h    no more events
  242.         07h    invalid queue type
  243.         08h    bad control file
  244.         09h    communication board busy
  245.         0Ah    invalid command parameter
  246.         0Bh    can't uninstall resident code
  247.         0Ch    file exists
  248.         80h    unknown task type
  249.         81h    bad phone number
  250.         82h    bad .PCX file header
  251.         83h    unexpected EOF
  252.         84h    unexpected disconnect
  253.         85h    too many dialing retries
  254.         86h    no file specified for send
  255.         87h    communication board timeout
  256.         88h    received too many pages (>1023) of data
  257.         89h    manual connect initiated too long ago
  258.         8Ah    hardware command set error
  259.         8Bh    bad NonStandard Format (NSF) header file
  260.   Class 03h    --- fatal DOS errors
  261.     Subcode 02h    file not found
  262.         03h    path not found
  263.         others    see INT 21/AH=59h
  264.   Class 04h    --- FAX errors
  265.     Subcode 01h    remote unit not Group 3 compatible
  266.         02h    remote unit did not send capabilities
  267.         03h    other FAX machine incompatible
  268.         04h    other FAX incapable of file transfers
  269.         05h    exceeded retrain or FAX resend limit
  270.         06h    line noise or failure to agree on bit rate
  271.         07h    remote disconnected after receiving data
  272.         08h    no response from remote after sending data
  273.         09h    remote's capabilities incompatible
  274.         0Ah    no dial tone (v1.2+)
  275.         0Bh    invalid response from remote unit after sending data
  276.         0Dh    phone line dead or remote unit disconnected
  277.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  278.         11h    invalid command from remote after receiving data
  279.         15h    tried to receive from incompatible hardware
  280.         5Ch    received data overflowed input buffer
  281.         5Dh    remote unexpectedly stopped sending data
  282.         5Eh    other FAX machine jammed (no data sent)
  283.         5Fh    remote took too long to send fax scan line
  284.         63h    can't get through to remote unit
  285.         64h    user canceled event
  286.   Class 05h    --- application-specific (v1.2+)
  287.   ---Intel FAXPOP.EXE
  288.     Subcode 00h    tried to send while in graphics mode
  289.         01h    insufficient disk space
  290.         02h    internal buffer overflow
  291.   Class 06h    --- CAS implementation-specific (v1.2+)
  292. ----------2FCB02-----------------------------
  293. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  294.     AX = CB02h
  295. Return: AX >= 0: event handle of aborted event
  296.        < 0: error code (see AX=CB01h)
  297. Note:    termination could take up to 30 seconds
  298. SeeAlso: AX=CB08h,AX=CB10h
  299. ----------2FCB05-----------------------------
  300. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  301.     AX = CB05h
  302.     CX = status of events to find
  303.         0000h successful completion
  304.         0001h waiting to be processed
  305.         0002h number has been dialed
  306.         0003h connection established, sending
  307.         0004h connection established, receiving
  308.         0005h event aborted
  309.         FFFFh find any event, regardless of status
  310.         other negative values, match error code
  311.     DH = direction
  312.         00h chronological order, earliest to latest
  313.         01h reverse chronological order, latest to earliest
  314.     DL = queue to search
  315.         00h task queue
  316.         01h receive queue
  317.         02h log queue
  318. Return: AX = 0000h successful
  319.         BX = event handle for found event
  320.        < 0       error code (see AX=CB01h)
  321. SeeAlso: AX=CB06h,AX=CB07h
  322. ----------2FCB06-----------------------------
  323. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  324.     AX = CB06h
  325.     DL = queue to search
  326.         00h task queue
  327.         01h receive queue
  328.         02h log queue
  329. Return: AX = 0000h successful
  330.         BX = event handle for found event
  331.        < 0       error code (see AX=CB01h)
  332. Note:    direction of search is same as preceding FIND FIRST call
  333. SeeAlso: AX=CB05h
  334. ----------2FCB07-----------------------------
  335. INT 2F - Communicating Applications Specification - OPEN FILE
  336.     AX = CB07h
  337.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  338.     CX = receive file number (ignored for task queue and log queue)
  339.         0000h  open receive control file
  340.         N       open Nth received data file
  341.     DL = queue
  342.         00h task queue
  343.         01h receive queue control file or received file, as given by CX
  344.         02h log queue
  345.         03h group file in task queue (v1.2+)
  346.         04h group file in log queue (v1.2+)
  347. Return: AX = 0000h successful
  348.         BX = DOS file handle for requested file
  349.        < 0       error code (see AX=CB01h)
  350. Note:    the returned file handle has been opened in read-only mode and should
  351.       be closed with INT 21/AH=3Eh after use
  352. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  353. ----------2FCB08-----------------------------
  354. INT 2F - Communicating Applications Specification - DELETE FILE
  355.     AX = CB08h
  356.     BX = event handle
  357.     CX = receive file number
  358.         0000h delete ALL received files and receive control file
  359.         N      delete Nth received file
  360.     DL = queue
  361.         00h delete control file in task queue and corresponding group file
  362.         if it exists
  363.         01h delete file in receive queue, as given by CX
  364.         02h delete control file in log queue (individual deletions not
  365.         recommended, to maintain integrity of log) and corresponding
  366.         group file if it exists
  367. Return: AX = 0000h successful
  368.        < 0       error code (see AX=CB01h)\
  369. SeeAlso: AX=CB02h,AX=CB09h
  370. ----------2FCB09-----------------------------
  371. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  372.     AX = CB09h
  373.     DL = queue
  374.         00h delete all control files in task queue, including all group
  375.         files
  376.         01h delete all files in receive queue
  377.         02h delete all control files in log queue, including all group
  378.         files
  379. Return: AX = 0000h successful
  380.        < 0       error code (see AX=CB01h)
  381. SeeAlso: AX=CB08h
  382. ----------2FCB0A-----------------------------
  383. INT 2F - Communicating Applications Specification - GET EVENT DATE
  384.     AX = CB0Ah
  385.     BX = event handle
  386.     DL = queue
  387.         00h task queue
  388.         01h receive queue
  389.         02h log queue
  390. Return: AX = 0000h successful
  391.         CX = year
  392.         DH = month
  393.         DL = day
  394.        < 0       error code (see AX=CB01h)
  395. SeeAlso: AX=CB0Bh,AX=CB0Ch
  396. ----------2FCB0B-----------------------------
  397. INT 2F - Communicating Applications Specification - SET TASK DATE
  398.     AX = CB0Bh
  399.     BX = event handle (task event only)
  400.     CX = year
  401.     DH = month
  402.     DL = day
  403. Return: AX = 0000h successful
  404.        < 0       error code (see AX=CB01h)
  405. Note:    setting a task's date and time to before the current date and time
  406.       causes it to execute immediately
  407. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  408. ----------2FCB0C-----------------------------
  409. INT 2F - Communicating Applications Specification - GET EVENT TIME
  410.     AX = CB0Ch
  411.     BX = event handle
  412.     DL = queue
  413.         00h task queue
  414.         01h receive queue
  415.         02h log queue
  416. Return: AX = 0000h successful
  417.         CH = hour
  418.         CL = minute
  419.         DH = second
  420.         DL = 00h
  421.        < 0       error code (see AX=CB01h)
  422. SeeAlso: AX=CB0Ah,AX=CB0Dh
  423. ----------2FCB0D-----------------------------
  424. INT 2F - Communicating Applications Specification - SET TASK TIME
  425.     AX = CB0Dh
  426.     BX = event handle (task events only)
  427.     CH = hour
  428.     CL = minute
  429.     DH = second
  430.     DL unused
  431. Return: AX = 0000h successful
  432.        < 0       error code (see AX=CB01h)
  433. Note:    setting a task's date and time to before the current date and time
  434.       causes it to execute immediately
  435. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  436. ----------2FCB0E-----------------------------
  437. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  438.     AX = CB0Eh
  439.     DS:DX -> 256-byte buffer
  440. Return: AX = 0000h successful
  441.         buffer filled
  442.        < 0       error code (see AX=CB01h)
  443.  
  444. Format of external data block:
  445. Offset    Size    Description
  446.  00h    BYTE    CAS major version
  447.  01h    BYTE    CAS minor version
  448.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  449.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  450.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  451.  60h 32 BYTEs    ASCIZ default sender name
  452.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  453.  95h 107 BYTEs    reserved
  454. ----------2FCB0F-----------------------------
  455. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  456.     AX = CB0Fh
  457.     DL = subfunction
  458.         00h get current autoreceive state
  459.         01h set autoreceive state
  460.         DH = number of rings before answer, 00h = never
  461. Return: AX = 0000h autoreceive disabled
  462.        = N       number of rings before answer
  463.        < 0       error code (see AX=CB01h)
  464. ----------2FCB10-----------------------------
  465. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  466.     AX = CB10h
  467.     DS:DX -> 512-byte buffer
  468. Return: AX = 0000h successful
  469.         BX = event handle of current event or negative error code if
  470.             no current event
  471.         buffer filled
  472.        < 0       error code (see AX=CB01h)
  473. SeeAlso: AX=CB02h,AX=CB0Dh
  474.  
  475. Format of status area:
  476. Offset    Size    Description
  477.  00h    BYTE    event type
  478.         00h send
  479.         01h receive
  480.         02h polled send
  481.         03h polled receive
  482.         04h to 7Fh reserved
  483.         FFh serious hardware error
  484.  01h    BYTE    transfer type
  485.         00h 200x200 dpi, FAX mode
  486.         01h 100x200 dpi, FAX mode
  487.         02h file transfer mode
  488.         03h to 7Fh reserved
  489.  02h    WORD    event status 
  490.         0000h completed successfully
  491.         0001h waiting
  492.         0002h number dialed
  493.         0003h connected, sending
  494.         0004h connected, receiving
  495.         0005h aborted
  496.         0006h to 007Fh reserved
  497.         0080h to 7FFFh application-specific events
  498.         8000h to FFFFh error codes
  499.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  500.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  501.  08h    WORD    number of files to transfer, max 7FFFh
  502.  0Ah    WORD    offset of file transfer record
  503.  0Ch 47 BYTEs    ASCIZ phone number to call
  504.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  505.  7Bh    BYTE    reserved (00h)
  506.  7Ch    BYTE    connect time, seconds
  507.  7Dh    BYTE    connect time, minutes
  508.  7Eh    BYTE    connect time, hours
  509.  7Fh    DWORD    total number of pages in all files
  510.  83h    DWORD    pages already transmitted 
  511.  87h    WORD    number of files already transmitted
  512.  89h    BYTE    cover page flag
  513.         00h don't transmit cover page
  514.         01h transmit cover page
  515.         02h to 7Fh reserved
  516.  8Ah    WORD    total number of transmission errors
  517.  8Ch 78 BYTEs    reserved (zeros)
  518.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  519.  EFH 32 BYTEs    ASCIZ destination name
  520. 10Fh 32 BYTEs    ASCIZ sender name
  521. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  522. 17Fh 128 BYTEs    file transfer record for current event (see below)
  523.  
  524. Format of file transfer record:
  525. Offset    Size    Description
  526.  00h    BYTE    file type (ignored unless FAX)
  527.         00h ASCII
  528.         01h PCX
  529.         02h DCX
  530.         03h to 7Fh reserved
  531.  01h    BYTE    text size for ASCII FAX file
  532.         00h = 80 columns by 66 lines (11 inches)
  533.         01h = 132 columns by 88 lines (11 inches)
  534.         02h to 7Fh reserved
  535.  02h    BYTE    status of file
  536.         00h untouched
  537.         01h opened
  538.         02h moved
  539.         03h deleted
  540.         04h not yet received
  541.         05h to 7Fh reserved
  542.  03h    DWORD    bytes already transmitted
  543.  07h    DWORD    file size in bytes
  544.  0Bh    WORD    pages alread transmitted
  545.  0Dh    WORD    number of pages in file
  546.  0Fh 80 BYTEs    ASCIZ filename
  547.  5Fh    BYTE    1/8 inch page length
  548.         if page length below set to 01h through 7Fh, this value 
  549.         specifies additional 1/8 inch increments to page length
  550.  60h    BYTE    page length
  551.         00h = 11 inches
  552.         01h to 7Fh = page length is this number of inches plus value of
  553.             1/8 inch field above
  554.         80h to FEh reserved
  555.         FFh = ASCII pages ending with formfeed
  556.  61h 31 BYTEs    reserved (zeros)
  557. ----------2FCB11-----------------------------
  558. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  559.     AX = CB11h
  560.     DL = queue to get status of
  561.         00h task queue
  562.         01h receive queue
  563.         02h log queue
  564.         03h send events (v1.2+)
  565.         04h receive events (v1.2+)
  566. Return: AX >= 0     total number of changes made to queue, modulo 32768
  567.         BX = number of control files currently in queue
  568.         CX = number of received files (zero for task and log queues)
  569.     AX < 0    error code (see AX=CB01h)
  570. SeeAlso: AX=CB12h
  571. ----------2FCB11DL03-------------------------
  572. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  573.     AX = CB11h
  574.     DL = 03h
  575. Return: AX = number of successful sends since resident manager started
  576.     BX = number of unsuccessful sends, including warnings
  577. SeeAlso: AX=CB11h/DL=04h
  578. ----------2FCB11DL04-------------------------
  579. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  580.     AX = CB11h
  581.     DL = 04h
  582. Return:    AX = number of received file events since resident manager started
  583.     BX = number of received FAX events
  584. SeeAlso: AX=CB11h/DL=03h
  585. ----------2FCB12-----------------------------
  586. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  587.     AX = CB12h
  588.     DS:DX -> 128-byte status buffer
  589. Return: AX = 0000h successful
  590.         buffer filled with hardware-dependent status information
  591.        < 0       error code (see AX=CB01h)
  592. SeeAlso: AX=CB10h,AX=CB11h
  593.  
  594. Format of status buffer for Intel Connection CoProcessor:
  595. Offset    Size    Description
  596.  00h    BYTE    bit flags
  597.         bit 7: hardware busy sending or receiving
  598.         bit 6: last page of data
  599.         bit 5: no data on current page
  600.         bit 4: retransmit request for current page being transmitted
  601.         bit 3: NSF mode active
  602.         bits 2-0: reserved
  603.  01h    BYTE    number of kilobytes of free buffer space
  604.  02h    BYTE    page buffer status
  605.         bit 7: Connection CoProcessor has documents to send
  606.         bits 6-0: number of pages in buffer
  607.  03h    BYTE    number of retries left for dialing number
  608.  04h    BYTE    page number to retransmit
  609.  05h    BYTE    communications status
  610.         bit 7: originating call
  611.         bit 6: FAX message to be sent
  612.         bit 5: on line
  613.         bit 4: ring detected and receive enabled
  614.         bit 3: buffer dumped on receive
  615.         bits 2-0: hardware sequence state
  616.             000 idle
  617.             001 dial
  618.             010 answer
  619.             011 transmit
  620.             100 receive
  621.             101 pre-message
  622.             110 post-message
  623.             111 disconnect
  624.  06h    BYTE    baud rate
  625.         bit 7: reserved
  626.         bits 6-4: baud rate
  627.             000 = 300 baud    (V.21 SDLC or HDLC mode)
  628.             100 = 2400 baud (V.27 ter)
  629.             101 = 4800 baud (V.27 ter)
  630.             110 = 7200 baud (V.29)
  631.             111 = 9600 baud (V.29)
  632.         bits 3-0: reserved, should be 0110
  633.  07h  3 BYTEs    reserved
  634.  0Ah    BYTE    hardware status
  635.         bit 7: modem option installed
  636.         bit 6: Connection CoProcessor has control of DAA (not latched)
  637.         bit 5: on line (not latched)
  638.         bit 4: ring detected (not latched)
  639.         bit 3: data in command buffer (not latched)
  640.         bit 2: set if using DMA channel 1, clear if using DMA channel 3
  641.         bit 1: line length compensation bit 1 set (not latched)
  642.         bit 0: line length compensation bit 0 set (not latched)
  643.  0Bh    BYTE    switch states
  644.         bit 7: reserved
  645.         bit 6: unused
  646.         bit 5: spare switch open
  647.         bit 4: FAX ADR1 switch open
  648.         bit 3: FAX ADR0 switch open
  649.         bit 2: alternate interrupt switch open
  650.         bit 1: COM SEL 1 switch open
  651.         bit 0: COM SEL 0 switch open
  652.             Note: valid combinations of bits 0-2 are
  653.                 000  COM2 IRQ3 IObase 2F8h
  654.                 001  COM1 IRQ4 IObase 3F8h
  655.                 010  COM4 IRQ3 IObase 2E8h
  656.                 011  COM3 IRQ4 IObase 3E8h
  657.                 110  COM4 IRQ2 IObase 2E8h
  658.                 111  COM3 IRQ5 IObase 3E8h
  659.  0Ch    BYTE    bit flags
  660.         bit 7: reserved
  661.         bit 6: auxiliary relay forced ON
  662.         bit 5: modem select relay forced ON
  663.         bit 4: offhook relay forced ON
  664.         bit 3: 9600 bps enabled
  665.         bit 2: 7200 bps enabled
  666.         bit 1: 4800 bps enabled
  667.         bit 0: 2400 bps enabled
  668.  0Dh    BYTE    reserved
  669.  0Eh    WORD    error count (only valid while busy, reset when idle)
  670.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  671.  14h    BYTE    'A' if Connection CoProcessor board present
  672.  15h  9 BYTEs    reserved
  673.  1Eh 21 BYTEs    ASCIZ CCITT identification
  674.  33h 77 BYTEs    reserved
  675.  
  676. Format of status buffer for Intel SatisFAXtion board:
  677. Offset    Size    Description
  678.  00h    BYTE    connection status flags
  679.         bit 7: busy in T.30 CCITT fax protocol
  680.         bit 6: data on current page/file (only used for block xfers)
  681.         bit 5: retransmission of last page requested
  682.         bit 4: in file transfer mode
  683.         bit 3: data in buffer
  684.         bit 2: data buffer dumped on receive
  685.         bit 1: 200x100 dpi resolution instead of 200x200 dpi
  686.         bit 0: data modem in use, FAX image modem not available
  687.  01h    BYTE    board state
  688.         bit 7: reserved
  689.         bit 6: handset jack active, data and FAX modems not available
  690.         bits 5-3: current bit rate
  691.             000     300 bps (V.21 HDLC)
  692.             100 2400 bps (V.27 ter)
  693.             101 4800 bps (V.27 ter)
  694.             110 7200 bps (V.29)
  695.             111 9600 bps (V.29)
  696.         bits 2-0: T.30 CCITT protocol state
  697.             000 idle
  698.             001 dialing
  699.             010 answering
  700.             011 transmitting
  701.             100 receiving
  702.             101 pre-message
  703.             110 post-message
  704.             111 disconnect
  705.  02h    BYTE    number of KB free in buffer
  706.  03h    BYTE    number of pages or files in buffer
  707.  04h    BYTE    number of redials remaining on current number
  708.  05h    BYTE    FAX page number to retransmit
  709.  06h    BYTE    current page/file in block transfer
  710.  07h    BYTE    number of rings received (only if auto-answer enabled)
  711.  08h    WORD    error count
  712.  0Ah    DWORD    length of file being transferred
  713.  0Eh  6 BYTEs    reserved
  714.  14h    BYTE    'B' is SatisFAXtion board present
  715.  15h 13 BYTEs    ASCIZ transfer agent name
  716.  22h  5 BYTEs    ASCIZ transfer agent version number
  717.  27h 13 BYTEs    ASCIZ resident loader name
  718.  34h  5 BYTEs    ASCIZ resident loader version number
  719.  39h 21 BYTEs    ASCIZ remote CSID
  720.  4Eh 13 BYTEs    ASCIZ resident manager name
  721.  5Bh  5 BYTEs    ASCIZ resident manager version number
  722.  60h 32 BYTEs    reserved
  723. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  724.       by examining the byte at offset 14h
  725. ----------2FCB13DL00-------------------------
  726. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  727.     AX = CB13h
  728.     DL = 00h
  729. Return: AX = 0040h in progress
  730.        >= 0       passed
  731.        < 0       hardware-dependent failure code (see below)
  732. SeeAlso: AX=CB13h/DL=01h
  733.  
  734. Intel Connection CoProcessor failure codes:
  735.     bit 3: 9600 bps FAX modem module failed
  736.     bit 2: SDLC chip failed
  737.     bit 1: RAM failed
  738.     bit 0: ROM checksum failed
  739.  
  740. Intel SatisFAXtion failure codes:
  741.     bit 1: 2400 bps data modem failed
  742.     bit 0: 9600 bps FAX modem failed
  743. ----------2FCB13DL01-------------------------
  744. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  745.     AX = CB13h
  746.     DL = 01h
  747. Return: AX = 0000h successfully started
  748.        < 0       error code (see AX=CB01h)
  749. SeeAlso: AX=CB13h/DL=00h
  750. ----------2FCB14-----------------------------
  751. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  752.     AX = CB14h
  753.     BX = event handle
  754.     CX = receive file number
  755.          0001h first received file
  756.          N       Nth received file
  757.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  758. Return: AX = 0000h successful
  759.        < 0       error code (see AX=CB01h)
  760. ----------2FCB15-----------------------------
  761. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  762.     AX = CB15h
  763.     DS:DX -> variable-length data area (see below)
  764. Return: AX >= 0    event handle
  765.        < 0    error code (see AX=CB01h)
  766. SeeAlso: AX=CB01h
  767.  
  768. Format of data area:
  769. Offset    Size    Description
  770.  00h    BYTE    transfer type
  771.         00h = 200x200 dpi, fax mode
  772.         01h = 100x200 dpi, fax mode
  773.         02h = file transfer mode
  774.         03h to 7Fh reserved
  775.  01h    BYTE    text size
  776.         00h = 80 columns
  777.         01h = 132 columns
  778.         02h to 7Fh reserved
  779.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  780.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  781.  06h 32 BYTEs    ASCIZ destination name
  782.  26h 80 BYTEs    ASCIZ name of file to send
  783.  76h 47 BYTEs    ASCIZ phone number to dial
  784.  A5h 64 BYTEs    ASCIZ application-specific tag string
  785.  E5h    BYTE    reserved (00h)
  786.  E6h    BYTE    cover page
  787.         00h don't send cover page
  788.         01h send cover page
  789.         02h to 7Fh reserved
  790.  E7h 23 BYTEs    reserved (zeros)
  791.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  792.         set to 01h)
  793. ----------2FCB16BX1234-----------------------
  794. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  795.     AX = CB16h
  796.     BX = 1234h
  797.     CX = 5678h
  798.     DX = 9ABCh
  799. Return: AX = 0000h successful
  800.        < 0       error code
  801. Note:    the MTEZ XpressFax CASMGR ignores the values in BX,CX, and DX
  802. SeeAlso: AX=C000h"MTEZ",AX=CB00h
  803. ----------2FCB17-----------------------------
  804. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  805.     AX = CB17h
  806.     BX = event handle
  807.     CL = cover page status
  808.         00h not read
  809.         01h read by user
  810. Return: AX = 0000h successful
  811.        < 0       error code
  812. ----------2FCB80-----------------------------
  813. INT 2F - Intel SatisFAXtion CASMGR - ???
  814.     AX = CB80h
  815.     ???
  816. Return: ???
  817. ----------2FCB81-----------------------------
  818. INT 2F - Intel SatisFAXtion CASMGR - ???
  819.     AX = CB81h
  820.     ???
  821. Return: ???
  822. ----------2FCB82-----------------------------
  823. INT 2F - Intel SatisFAXtion CASMGR - ???
  824.     AX = CB82h
  825.     ???
  826. Return: ???
  827. ----------2FCBDCBL56-------------------------
  828. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  829.     AX = CBDCh
  830.     BL = 56h
  831.     BH = line number (starts with 1)
  832.     CX:DX -> 32-byte status buffer or 80 character string
  833. Return: AX = number of cards installed, or FFFFh on error
  834. Program: Comwave manufacturers the Microfax line of fax cards which are a high-
  835.       performance multi-card FAX solution for OEMs.
  836. Note:    defaults to AH=CBh but can be changed
  837. SeeAlso: AX=CBDDh,AX=DA00h
  838. ----------2FCBDDBL56-------------------------
  839. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  840.     AX = CBDDh
  841.     BL = 56h
  842.     BH = ?
  843.     CX:DX -> command to execute
  844. Return: AX = status
  845.         0000h success
  846.         FFFFh on error
  847. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  848. ----------2FCC--SI5453-----------------------
  849. INT 2F U - Qualitas Qcach v4.00
  850.     AH = CCh
  851.     SI = 5453h or 7473h
  852.     AL = ???
  853.     DL = 00h or ???
  854. Return: SI = 7473h
  855.     ???
  856. ----------2FCD00-----------------------------
  857. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  858.     AX = CD00h
  859. Return: AL = 00h not installed, OK to install
  860.          01h not installed, not OK to install
  861.          FFh installed
  862. SeeAlso: AX=CD02h"Image"
  863. ----------2FCD00-----------------------------
  864. INT 2F - SWELL.EXE - INSTALLATION CHECK
  865.     AX = CD00h
  866. Return: AX = 00FFh installed
  867.         BH = major version
  868.         BL = minor version
  869. Note:    SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  870.       process with INT 21/AH=4Bh
  871. ----------2FCD01-----------------------------
  872. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  873.     AX = CD01h
  874.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  875. Return: AL = 00h successful
  876.         CX:BX -> internal character device name
  877.        = 80h error
  878. ----------2FCD01-----------------------------
  879. INT 2F - SWELL.EXE - SUSPEND ONCE
  880.     AX = CD01h
  881. Return: AX = 0000h
  882. SeeAlso: AX=CD02h"SWELL"
  883. ----------2FCD02-----------------------------
  884. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  885.     AX = CD02h
  886. Return: AL = 00h/01h successful
  887.         BH = major version number (BCD)
  888.         BL = minor version number (BCD)
  889.        = 80h error
  890. Note:    if return AL = 01h, the IPI supports network redirection
  891. SeeAlso: AX=CD00h"Image"
  892. ----------2FCD02-----------------------------
  893. INT 2F - SWELL.EXE - SUSPEND
  894.     AX = CD02h
  895. Return: AX = 0000h
  896. SeeAlso: AX=CD03h"SWELL"
  897. ----------2FCD03-----------------------------
  898. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  899.     AX = CD03h
  900.     BX = scan line
  901.     CX = requested density in dots per inch (300, 600, or 1200)
  902. Return: AL = 00h succesful
  903.         CX = density at which scan line was mapped
  904.         ES:DI -> start of scan line
  905.     AL = 80h unsuccessful
  906.        = 81h scan line out of range
  907.        = 82h unsupported scan line density
  908.        = 83h out of memory
  909. SeeAlso: AX=CD04h"Image"
  910. ----------2FCD03-----------------------------
  911. INT 2F - SWELL.EXE - ACTIVATE
  912.     AX = CD03h
  913. Return: AX = 0000h
  914. SeeAlso: AX=CD02h"SWELL"
  915. ----------2FCD04-----------------------------
  916. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  917.     AX = CD04h
  918.     CX:BX -> structure (see below)
  919. Return: AL = 00h successful
  920.        = 80h unsuccessful
  921.        = 81h scan line out of range
  922.        = 82h unsupported scan line density
  923.        = 83h out of memory
  924.        = 84h unrecognized source
  925.        = 85h initialization error
  926. SeeAlso: AX=CD03h"Image"
  927.  
  928. Format of structure:
  929. Offset    Size    Description
  930.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  931.  02h    DWORD    pointer to image data
  932.  06h    WORD    scan line on which to place
  933.  08h    WORD    bit offset from start of scan line at which to place
  934.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  935.  0Ch    WORD    width in bits of data
  936.  0Eh    WORD    source logical page number
  937.  10h    WORD    source handle (only if source in expanded memory)
  938.  12h    WORD    source offset (only if source in expanded memory)
  939. ----------2FCD04-----------------------------
  940. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  941.     AX = CD04h
  942. Return: AX = 0000h
  943. SeeAlso: AX=CD05h"SWELL"
  944. ----------2FCD05-----------------------------
  945. INT 2F - Intel Image Processing Interface - PRINT PAGE
  946.     AX = CD05h
  947. Return: AL = 00h successful
  948.        = 80h unsuccessful
  949. Note:    page image is retained, so multiple calls will print multiple copies of
  950.       the page
  951. SeeAlso: AX=CD06h"Image"
  952. ----------2FCD05-----------------------------
  953. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  954.     AX = CD05h
  955. Return: AX = 0000h
  956. SeeAlso: AX=CD04h"SWELL"
  957. ----------2FCD06-----------------------------
  958. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  959.     AX = CD06h
  960. Return: AL = 00h successful
  961.        = 80h unsuccessful
  962. Note:    palette is reset to default
  963. SeeAlso: AX=CD09h"Image"
  964. ----------2FCD06-----------------------------
  965. INT 2F - SWELL.EXE - UNINSTALL
  966.     AX = CD06h
  967. Return: AX = 0000h uninstalled
  968.        = 8002h programs still swapped, not uninstalled
  969. ----------2FCD07-----------------------------
  970. INT 2F - Intel Image Processing Interface - reserved
  971.     AX = CD07h
  972. ----------2FCD07-----------------------------
  973. INT 2F - SWELL.EXE - GET INFO
  974.     AX = CD07h
  975.     ES:BX -> 32-byte buffer for info
  976. Return: AX = 0000h successful
  977.         ES:BX buffer filled
  978.        = 8001h buffer wrong size
  979.  
  980. Format of info buffer:
  981. Offset    Size    Description
  982.  00h    WORD    20h  (total size of buffer)
  983.  02h    BYTE    suspend-once mode active if nonzero
  984.  03h    BYTE    00h active, 01h suspended
  985.  04h    BYTE    00h quiet, 01h verbose
  986.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  987.  06h 26 BYTEs    unused???
  988. ----------2FCD08-----------------------------
  989. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  990.     AX = CD08h
  991.     CX:BX -> structure (see below)
  992. Return: AL = 00h successful
  993.        = 80h unsuccessful
  994.        = 81h scan line out of range
  995.        = 82h unsupported scan line density
  996.        = 83h out of memory
  997.        = 84h unrecognized source
  998.        = 85h initialization error
  999. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  1000.  
  1001. Format of structure:
  1002. Offset    Size    Description
  1003.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  1004.  02h    DWORD    pointer to image data
  1005.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  1006.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  1007.  0Ah    WORD    left cropping (currently must be zero)
  1008.  0Ch    WORD    top cropping (currently must be zero)
  1009.  0Eh    WORD    width (currently must be 8000h)
  1010.  10h    WORD    height (currently must be 8000h)
  1011.  12h    WORD    horizontal size of image in 1200 dpi units
  1012.  14h    WORD    vertical size of image in 1200 dpi units
  1013.  16h    WORD    aspect ratio (currently reserved)
  1014.  18h    WORD    initialization flag (if 01h, initialization is performed)
  1015.  1Ah    WORD    pixels per line of source data
  1016.  1Ch    WORD    number of scan lines in source data
  1017.  1Eh    WORD    number of scan lines in packet
  1018.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  1019.  22h    WORD    pixels per byte (1,2,4, or 8)
  1020.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  1021.  26h    WORD    source page number (if in expanded memory)
  1022.  28h    WORD    source handle (if in expanded memory)
  1023.  2Ah    WORD    source offset (if in expanded memory)
  1024. ----------2FCD08-----------------------------
  1025. INT 2F - SWELL.EXE - UNUSED
  1026.     AX = CD08h
  1027. Return: AX = FFFFh (error)
  1028. ----------2FCD09-----------------------------
  1029. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  1030.     AX = CD09h
  1031.     CX:BX -> structure (see below)
  1032. Return: AL = 00h successful
  1033.        = 80h unsuccessful
  1034. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  1035.  
  1036. Format of structure:
  1037. Offset    Size    Description
  1038.  00h    BYTE    style
  1039.         44h ('D') diamond style
  1040.         4Ch ('L') line style
  1041.  01h    BYTE    reserved (00h)
  1042.  02h    WORD    frequency in lines per inch [sic]
  1043.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  1044.  04h    WORD    screen angle in degrees (-360 to 360)
  1045.         currently coerced to nearest of -45, 0, 45, or 90
  1046. ----------2FCD09-----------------------------
  1047. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  1048.     AX = CD09h
  1049. Return: AX = 0000h
  1050. SeeAlso: AX=CD0Ah"SWELL"
  1051. ----------2FCD0A-----------------------------
  1052. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  1053.     AX = CD0Ah
  1054.     CX:BX -> palette structure (see below)
  1055. Return: AL = 00h successful
  1056.        = 80h unsuccessful
  1057. SeeAlso: AX=CD09h"Image Processing"
  1058.  
  1059. Format of palette structure:
  1060. Offset    Size    Description
  1061.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  1062.  01h    2**N    palette translation values, one per possible pixel value
  1063. ----------2FCD0A-----------------------------
  1064. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  1065.     AX = CD0Ah
  1066. Return: AX = 0000h
  1067. SeeAlso: AX=CD09h"SWELL"
  1068. ----------2FCF00-----------------------------
  1069. INT 2F - TEMPLEXX - INSTALLATION CHECK
  1070.     AX = CF00h
  1071. Return: AL = FFh if installed
  1072. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  1073. Note:    values in AL other than 00h cause an immediate return without modifying
  1074.       any registers
  1075. ----------2FD000-----------------------------
  1076. INT 2F - MDEBUG display driver - GET DRIVER STATUS
  1077.     AX = D000h
  1078. Return: CF set on error
  1079.         all other registers must be unchanged)
  1080.     CF clear if successful
  1081.         AL = FFh
  1082.         AH = driver semaphor
  1083.         00h driver is not active
  1084.         01h driver is active
  1085.         BX = CS of the driver
  1086.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  1087.         DL = buffer semaphor
  1088.         00h driver is not pending
  1089.         01h driver is pending between functions 02h and 03h
  1090.         DH = show semaphor
  1091.         00h driver is not pending
  1092.         01h driver is pending between functions 04h and 05h
  1093. Notes:    MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,
  1094.       including a memory monitor, an interpreter and a disassembler
  1095.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1096.       FFh; the default is D0h for the display driver and D1h for the
  1097.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  1098.       numbers used)
  1099.     this function MUST be reentrant, as MDEBUG calls it after every popup
  1100.       before any other actions.  The handler should not change any
  1101.       registers if the display is in an unsupported mode or in a mode
  1102.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  1103.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  1104.       not call any of the other functions for this popup session.
  1105.     MDEBUG will not call the other functions if the returned version is
  1106.       less than the actual version of MDEBUG.
  1107.     if the driver is reentrant, DL and DH should be 00h
  1108. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  1109. ----------2FD000-----------------------------
  1110. INT 2F - ZWmous - INSTALLATION CHECK
  1111.     AX = D000h
  1112. Return: AX = 5A57h ("ZW") if installed
  1113.         BX = segment of resident code
  1114. Note:    ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  1115.       with many non-mouse applications by entering the letter under the
  1116.       mouse cursor on button presses
  1117. SeeAlso: INT 33/AX=0003h
  1118. ----------2FD000-----------------------------
  1119. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  1120.     AX = D000h
  1121. Return: AL = FF if CD/Networker TSR is loaded
  1122.     BX = 4D44h ("MD") signature
  1123.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  1124.     DX = bitmap identifying all loaded CD/Networker TSRs.
  1125. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  1126.       resident redirector TSR and a transient program that controls the
  1127.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  1128.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  1129. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  1130. ----------2FD001-----------------------------
  1131. INT 2F - MDEBUG display driver - INITIALIZE DRIVER
  1132.     AX = D001h
  1133. Return: CF set on error
  1134.     AL = driver semaphor
  1135.     AH = buffer semaphor
  1136. Notes:    MDEBUG calls this function after every succesful call of the function
  1137.       00h. The function should reset all internal data and the status of
  1138.       the driver. If this function returns an error, MDEBUG will not call
  1139.       the other functions in this popup session.
  1140.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1141.       FFh; the default is D0h for the display driver and D1h for the
  1142.       command driver
  1143. SeeAlso: AX=D000h
  1144. ----------2FD002-----------------------------
  1145. INT 2F - MDEBUG display driver - SAVE GRAPHIC DATA
  1146.     AX = D002h
  1147. Return: CF set on error
  1148.     CF clear if successful
  1149.         display memory saved and display switched to one of the text modes
  1150.           02h, 03h or 07h.
  1151. Note:    MDEBUG calls this function only once every popup session before
  1152.       displaying its windows.
  1153. SeeAlso: AX=D000h,AX=D003h
  1154. ----------2FD002BX4D44-----------------------
  1155. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  1156.     AX = D002h
  1157.     BX = 4D44h
  1158.     DX = bitmap identifying one loaded CD/Networker TSR
  1159. Return: ES:DI -> data area owned by TSR
  1160. Note:    the format of the data area changes with each minor revision, so it
  1161.       cannot be counted on
  1162. SeeAlso: AX=D000h"Lotus"
  1163. ----------2FD003-----------------------------
  1164. INT 2F - MDEBUG display driver - RESTORE GRAPHIC DATA
  1165.     AX = D003h
  1166. Return: CF set on error
  1167.     CF clear if successful
  1168.         display restored to the mode it was in before calling AX=D002h and
  1169.           the display memory is restored
  1170. Note:    MDEBUG calls this function only once every popup session just before
  1171.      it exits to normal DOS.
  1172. SeeAlso: AX=D000h,AX=D002h
  1173. ----------2FD004-----------------------------
  1174. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  1175.     AX = D004h
  1176. Return: CF set on error
  1177.     CF clear if successful
  1178.         display switched to mode it was in before calling AX=D002h and the
  1179.           display memory is restored
  1180. Note:    This function needn't save the display memory before changing it.
  1181. SeeAlso: AX=D000h,AX=D005h
  1182. ----------2FD005-----------------------------
  1183. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  1184.     AX = D005h
  1185. Return: CF set on error
  1186.     CF clear if successful
  1187.         display restored to mode it was in before calling AX=D004h
  1188. Note:    This function needn't save or change the display memory
  1189. SeeAlso: AX=D000h,AX=D004h
  1190. ----------2FD0-------------------------------
  1191. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  1192.     AH = D0h
  1193.     AL = 06h-7Fh
  1194. Note:    these functions are reserved for future use
  1195. ----------2FD0-------------------------------
  1196. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  1197.     AH = D0h
  1198.     AL = 80h-FFh
  1199. Note:    these functions numbers are reserved for user defined features (e.g.
  1200.       communication between the transient und resident parts of the driver)
  1201. ----------2FD100-----------------------------
  1202. INT 2F - MDEBUG command driver - GET STATUS
  1203.     AX = D100h
  1204.     BX = version of MDEBUG (BH = major, BL = minor)
  1205.     CX = command driver counter
  1206. ---v1.60+---
  1207.     DS:SI -> MDEBUG identification table (see below)
  1208.     ES = segment of display memory used by MDEBUG
  1209.     DI = size of video mode used by MDEBUG
  1210.         (high byte = lines, low byte = columns)
  1211. Return: DL = FFh
  1212.     BX = version number of the driver if it is less than the version in BX,
  1213.          else unchanged
  1214.     CX incremented
  1215. Notes:    MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,
  1216.       including a memory monitor, an interpreter, and a disassembler
  1217.     called by MDEBUG at start of popup session; if the version number
  1218.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  1219.       not call any of the other functions during this popup session
  1220.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1221.       FFh; the default is D0h for the display driver and D1h for the
  1222.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  1223.       actually used)
  1224.     this function must end with a far call to the old INT 2F handler after
  1225.       changing the registers
  1226.     this function MUST be reentrant
  1227.     command drivers must also declare the following data at the given
  1228.       offsets in the code segment
  1229.         100h  3 BYTEs    JMP-command in .COM-files
  1230.         103h    BYTE    NOP-command (90h)
  1231.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  1232.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  1233.                 each driver must have a unique name
  1234.     MDEBUG will pass every key and command to the command driver(s) before
  1235.       checking for a valid internal command
  1236. SeeAlso: AX=D000h,AX=D101h
  1237.  
  1238. Format of MDEBUG identification table:
  1239. Offset    Size    Description
  1240.  -2    WORD    entry offset
  1241.  00h    WORD    CS of MDEBUG
  1242.  02h    DWORD    old INT 08h vector
  1243.  06h    DWORD    old INT 09h vector
  1244.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  1245.  0Eh    BYTE    length of version string
  1246.  0Fh  N BYTEs    version string
  1247. ----------2FD101-----------------------------
  1248. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  1249.     AX = D101h
  1250.     CX = command driver counter
  1251. Return: DL = FFh if successful
  1252.         CX incremented
  1253.          else error: all registers unchanged
  1254. Note:    this function must end with a  far call to the old INT 2F handler after
  1255.       changing the registers
  1256.     this function must be reentrant
  1257. ----------2FD102-----------------------------
  1258. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  1259.     AX = D102h
  1260.     BL = first character of the interpreter command
  1261.     BH = last character of the interpreter command (or blank)
  1262.     DS:SI -> parameter for the interpreter command as ASCIZ string
  1263.     DS:DI -> MDEBUG data structure (see below)
  1264. Return: AL = FFh
  1265.     CF set on error
  1266.         AH = error number
  1267.         01h syntax error
  1268.         02h first shell of the command.com is activ
  1269.         03h esc pressed
  1270.         04h break pressed
  1271.         05h DOS is busy
  1272.         06h command ended
  1273.         07h division by zero
  1274.         08h invalid display driver
  1275.         09h invalid command driver
  1276.         0Ah error 8 and 9
  1277.         0Bh unknown error
  1278.         0Ch new error
  1279.             DS:SI -> ASCIZ error message (max 30 characters)
  1280.            else unknown error
  1281.     CF clear if successful
  1282.         AH = return code
  1283.         00h continue processing the command line
  1284.         01h leave MDEBUG popup session
  1285.         02h leave MDEBUG popup session and automatically popup again
  1286.             if the InDOS flag is zero
  1287.         03h not used (same as 00h)
  1288.         04h not used (same as 00h)
  1289.         05h put new command line into the input buffer,
  1290.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1291.         06h process new command line
  1292.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1293.            else unknown status, but continue processing commmand line
  1294. Note:    this function must end with a far call to the old INT 2F handler (with
  1295.       registers unchanged) if the driver does not support the interpreter
  1296.       command in BX.  Otherwise, the driver must not chain to the old
  1297.       INT 2F.
  1298.  
  1299. Format of MDEBUG data structure:
  1300. Offset    Size    Description
  1301.  00h    WORD    register SE
  1302.  02h    WORD    register OF
  1303.  04h    WORD    register FS
  1304.  06h    WORD    register FO
  1305.  08h    WORD    register AX
  1306.  0Ah    WORD    register BX
  1307.  0Ch    WORD    register CX
  1308.  0Eh    WORD    register DX
  1309.  10h    WORD    register SI
  1310.  12h    WORD    register DI
  1311.  14h    WORD    register DS
  1312.  16h    WORD    register ES
  1313.  18h    WORD    register BP
  1314.  1Ah    WORD    register SS
  1315.  1Ch    WORD    register SP
  1316.  1Eh    WORD    register FL (flags)
  1317.  20h    WORD    register R0
  1318.  22h    WORD    register R1
  1319.  24h    WORD    register R2
  1320.  26h    WORD    register R3
  1321.  28h    WORD    register R4
  1322.  2Ah    WORD    register R5
  1323.  2Ch    WORD    register R6
  1324.  2Eh    WORD    register R7
  1325.  30h    WORD    register R8
  1326.  32h    WORD    register CS, return-address
  1327.  34h    WORD    register IP, return-address
  1328.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  1329.          saved monitor address (v1.70)
  1330.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  1331.         (original register values at popup entry of MDEBUG)
  1332.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1333.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  1334.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1335.  6Ah    DWORD    address of the DOS-invars-table
  1336.  6Eh    DWORD    address of the InDOS flag
  1337.  72h    WORD    offset of the register which is used for the segment of the
  1338.         first monitor window
  1339.  74h    WORD    offset of the register which is used for the offset of the
  1340.         first monitor window
  1341.  76h    WORD    name of the register which is used for the segment of the
  1342.         first monitor segment
  1343.  78h    WORD    name of the register which is used for the offset of the first
  1344.         monitor window     
  1345.  7Ah    WORD    pseudo register 1
  1346.  7Ch    WORD    pseudo register 2
  1347. ----------2FD103-----------------------------
  1348. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  1349.     AX = D103h
  1350.     BX = key code (like result of an interrupt 16h call)
  1351.     CX = 0 -> the cursor is in the ASCII column of the monitor
  1352.     CX = 1 -> the cursor is in one of the hex fields of the monitor
  1353.     DS:SI -> MDEBUG data structure (see AX=D102h)
  1354.     ES:DI -> actual byte in the monitor
  1355. Return: AL = FFh
  1356.     AH = return code
  1357.         00h key processed, read next key
  1358.         01h leave MDEBUG popup session
  1359.         02h leave MDEBUG popup session and automatically popup again if DOS
  1360.         is not busy
  1361.         03h signal an error (beep)
  1362.         04h driver has redefined the key, proceed with the new key
  1363.         BX = new key code
  1364.         MDEBUG will not pass the new key to the command driver(s)
  1365.        else treat like code 00h
  1366. Note:    this function must end with a far call to the old INT 2F handler (with
  1367.       registers unchanged) if the driver does not support the key in BX.
  1368.       Otherwise, the driver must not chain to the old INT 2F.
  1369. SeeAlso: AX=D104h
  1370. ----------2FD104-----------------------------
  1371. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  1372.     AX = D104h
  1373.     DS:SI -> MDEBUG data structure (see AX=D102h)
  1374. Return: AL = FFh
  1375.     AH = return code
  1376.         00h key processed, read next key
  1377.         01h leave MDEBUG popup session
  1378.         02h leave MDEBUG popup session and automactically popup again if
  1379.         DOS is not busy
  1380.         03h signal an error (beep)
  1381.         04h driver has redefined the key, proceed with the new key
  1382.         BX = new key code
  1383.         MDEBUG won't pass the new key to the command driver(s)
  1384.         05h put new command line into the input buffer
  1385.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1386.         06h process new command line
  1387.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1388.        else treat like code 00h
  1389. Note:    this function must end with a far call to the old INT 2F handler if the
  1390.       driver does not support the key in BX.  Otherwise, the driver must
  1391.       not chain to the old INT 2F.
  1392. SeeAlso: AX=D103h
  1393. ----------2FD1-------------------------------
  1394. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1395.     AH = D1h
  1396.     AL = 05h-0Ah
  1397. Note:    these functions are reserved for future use
  1398. ----------2FD110-----------------------------
  1399. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  1400.     AX = D110h
  1401. Return: DL = FFh
  1402.     ES:BX -> next program in the chain for INT 2F
  1403.     CX = code segment of this driver
  1404.     DI = offset of driver identification table (see below) (v1.60+)
  1405. Notes:    only called by the transient part of the driver
  1406.     must be reentrant and the driver must not chain this function to the
  1407.       old INT 2F
  1408.  
  1409. Format of the driver identification table:
  1410. Offset    Size    Description
  1411.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  1412.                          ^- Note: ASCII 129,German U-umlaut
  1413.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  1414.          each driver must have a unique name
  1415. ----------2FD111-----------------------------
  1416. INT 2F - MDEBUG command driver - START DRIVER
  1417.     AX = D111h
  1418. Return: DL = FFh
  1419. Notes:    only called by the transient part of the driver to inform the resident
  1420.       part that it is installed
  1421.     the function must be reentrant and the driver mustn't chain this
  1422.       function to the old INT 2F
  1423. SeeAlso: AX=D101h,AX=D112h
  1424. ----------2FD112-----------------------------
  1425. INT 2F - MDEBUG command driver - END DRIVER
  1426.     AX = D112h
  1427. Return: DL = FFh
  1428. Notes:    only called by the transient part of the driver to inform the resident
  1429.       part that it will be released after this function
  1430.     the function must be reentrant and the driver mustn't chain this
  1431.       function to the old INT 2F
  1432. SeeAlso: AX=D101h,AX=D111h
  1433. ----------2FD1-------------------------------
  1434. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1435.     AH = D1h
  1436.     AL = 13h-7Fh
  1437. Note:    these functions are reserved for future use
  1438. ----------2FD1-------------------------------
  1439. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  1440.     AH = D1h
  1441.     AL = 80h-FFh
  1442. Note:    these functions are reserved for user defined features (e.g.
  1443.       communication between the transient und resident parts of the    driver)
  1444. ----------2FD200BX5144-----------------------
  1445. INT 2F U - Quarterdeck - QEMM/QRAM/VIDRAM/MANIFEST v5.0+ - INSTALLATION CHECK
  1446.     AX = D200h
  1447.     BX = 5144h ("QD")
  1448.     CX = 4D45h ("ME")
  1449.     DX = 4D30h ("M0")
  1450. Return: AL = FFh installed      
  1451.     if BX,CX,DX registers were as specified on entry:
  1452.         BX = 4D45h ("ME")
  1453.         CX = 4D44h ("MD")
  1454.         DX = 5652h ("VR")
  1455. Notes:    QEMM/QRAM/VIDRAM/MANIFEST/etc will search for a free AH value from D2h
  1456.       through FFh, then C0h through D1h
  1457.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  1458.       Quarterdeck product, it just chains to the previous INT 2F handler
  1459. ----------2FD201BX4849-----------------------
  1460. INT 2F U - Quarterdeck - GET QD HIMEM PRESENCE
  1461.     AX = D201h
  1462.     BX = 4849h ("HI")
  1463.     CX = 4D45h ("ME")
  1464.     DX = 4D51h ("MQ")
  1465. Return: BX = 4F4Bh ("OK")
  1466.     ES:DI -> HIMEM entry point
  1467. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1468.       through FFh, then C0h through D1h
  1469. SeeAlso: AX=D201h/BX=5145h
  1470. ----------2FD201BX4849-----------------------
  1471. INT 2F U - Quarterdeck - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  1472.     AX = D201h
  1473.     BX = 4849h ("HI")
  1474.     CX = 5241h ("RA")
  1475.     DX = 4D30h ("M0")
  1476. Return: BX = 4F4Bh ("OK")
  1477.     CX = segment of start of HIRAM chain
  1478.     DX = QEMM/QRAM code segment
  1479. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1480.       through FFh, then C0h through D1h
  1481.     QEMM and QRAM both responded the same
  1482.     the HIRAM memory chain has the same format as the regular DOS 4.0
  1483.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  1484.       have the block header program name field set to "UMB"; blocks whose
  1485.       "owner" field is set to the QEMM/QRAM code segment returned in DX
  1486.       are locked out regions such as video memory and ROMs.
  1487. ----------2FD201BX4D41-----------------------
  1488. INT 2F U - Quarterdeck - MANIFEST v1.0+ - INSTALLATION CHECK
  1489.     AX = D201h
  1490.     BX = 4D41h ("MA")
  1491.     CX = 4E49h ("NI")
  1492.     DX = 4645h ("FE")
  1493. Return: BX = 5354h ("ST")
  1494. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1495.       through FFh, then C0h through D1h
  1496. ----------2FD201BX4D45-----------------------
  1497. INT 2F U - Quarterdeck - DVDOS4GX.DVR - ???
  1498.     AX = D201h
  1499.     BX = 4D45h ("ME")
  1500.     CX = 5155h ("QU")
  1501.     DX = 5044h ("PD")
  1502. Return: ???
  1503. Notes:    AH=D2h is the default; use the Quarterdeck installation check described
  1504.       under AX=D200h
  1505.     called by QEMM 6.03
  1506. ----------2FD201BX5145-----------------------
  1507. INT 2F U - Quarterdeck - QEMM v5.0+ - INSTALLATION CHECK
  1508.     AX = D201h
  1509.     BX = 5145h ("QE")
  1510.     CX = 4D4Dh ("MM")
  1511.     DX = 3432h ("42")
  1512. Return: BX = 4F4Bh ("OK")
  1513.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  1514. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1515.       through FFh, then C0h through D1h
  1516.     this call is not available under QEMM v6.00 unless Windows3 support
  1517.       has been disabled with the NW3 switch to QEMM386.SYS
  1518. SeeAlso: AX=D201h/BX=4849h,INT 67/AH=3Fh
  1519. ----------2FD201BX5649-----------------------
  1520. INT 2F U - Quarterdeck - VIDRAM v5.0+ - INSTALLATION CHECK
  1521.     AX = D201h
  1522.     BX = 5649h ("VI")
  1523.     CX = 4452h ("DR")
  1524.     DX = 414dh ("AM")
  1525. Return: BX = 4F4Bh ("OK")
  1526.     ES:DI -> VIDRAM entry point
  1527. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1528.       through FFh, then C0h through D1h
  1529.  
  1530. Call VIDRAM entry point with:
  1531.     AH = 00h get status
  1532.         Return: AL = VIDRAM state (see below)
  1533.             BL = bit 0: ???
  1534.                  bits 1-7 not used
  1535.             BH = flags???
  1536.                 bit 4: high RAM exists in video area???
  1537.             CL = current monitor (01h = mono, 80h = color)
  1538.             SI = current top of memory (paragraph)???
  1539.             DI = segment of ???
  1540.     AH = 01h setup
  1541.         AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
  1542.         BL = bit 0: ???
  1543.              bits 1-7 not used
  1544.         BH = flags???
  1545.         CL = monitor (01h = monochrome, 80h = color)
  1546.         SI = new top of memory (paragraph)???
  1547.     AH = 02h get ???
  1548.         Return: ES:DI -> ??? data
  1549. Return: CF set on error
  1550.     CF clear if successful
  1551. ----------2FD300BX4562-----------------------
  1552. INT 2F U - TeleReplica - INSTALLATION CHECK
  1553.     AX = D300h
  1554.     BX = 4562h
  1555.     CX = 2745h
  1556.     DX = serial port I/O base address??? (03F8h for v3.9)
  1557. Return: SI = segment of resident code
  1558.     AX = 251Dh
  1559.     BX = DF21h
  1560.     CX = F321h
  1561.     DX = ???
  1562. ----------2FD3CB-----------------------------
  1563. INT 2F U - LapLink Quick Connect v6 - API
  1564.     AX = D3CBh
  1565.     CX = function
  1566.         0002h get ???
  1567.         Return: BX:AX -> ???
  1568.             CL = ???
  1569.             CH = ???
  1570.             DX = ???
  1571.             DI = COM1 I/O port???
  1572.             SI = COM2 I/O port???
  1573.         0003h initialization???
  1574.         0004h ???
  1575.         0005h initialization???
  1576.         0006h reset/clear ???
  1577.         Return: AX = 0000h
  1578.             ES:DI -> next byte after ??? cleared by this call
  1579.         0007h initialization???
  1580.         0008h uninstall
  1581.         Return: BX = status
  1582.                 0000h successful
  1583.                 FFFFh incomplete, stub remains in memory
  1584. Return: CX = 534Bh (except function 0002h)
  1585. ----------2FD44D-----------------------------
  1586. INT 2F - 4DOS.COM v2.1+ - API
  1587.     AX = D44Dh
  1588.     BH = function
  1589.         00h installation check
  1590.         Return: AX = 44DDh
  1591.             BL = minor version number
  1592.             BH = major version number
  1593.             CX = PSP segment address for current invocation
  1594.             DL = 4DOS shell number (0 for the first (root) shell,
  1595.                  updated each time a new copy is loaded)
  1596.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  1597.         Return: nothing
  1598.         (internal, v4.0) ???
  1599.         Return: ES:BX -> data area (see below)
  1600.         02h ???
  1601.         DX = ???
  1602.     ---v2.1-3.03 only---
  1603.         03h EXEC program
  1604.         CX:DX -> EXEC record
  1605.         FEh deallocate shell number (passed through to root shell)
  1606.         ???
  1607.         FFh allocate shell number (passed through to root shell)
  1608. Note:    bug in v3.00 will crash system if unrecognized value in BH
  1609. SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h
  1610.  
  1611. Format of EXEC record:
  1612. Offset    Size    Description
  1613.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  1614.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  1615.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  1616.  
  1617. Format of 4DOS v4.0 data area:
  1618. Offset    Size    Description
  1619.  00h  2 BYTEs    ???
  1620.  06h    WORD    XMS handle for swapping
  1621.     ???
  1622. ----------2FD44E-----------------------------
  1623. INT 2F - 4DOS v3.0+ - AWAITING USER INPUT
  1624.     AX = D44Eh
  1625. ---4DOS v3.01+---
  1626.     BX = 0000h 4DOS is ready to display prompt
  1627.        = 0001h 4DOS has displayed the prompt, about to accept user input
  1628. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  1629. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  1630. SeeAlso: AX=D44Dh
  1631. ----------2FD44FBX0000-----------------------
  1632. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  1633.     AX = D44Fh
  1634.     BX = 0000h
  1635. Return: AX = 44DDh if installed
  1636. SeeAlso: AX=D44Fh/BX=0001h
  1637. ----------2FD44FBX0001-----------------------
  1638. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  1639.     AX = D44Fh
  1640.     BX = 0001h
  1641.     CX = number of keystrokes (01h-FFh)
  1642.     DS:DX -> keystroke list (one word per keystroke)
  1643. Return: AX = status
  1644.         0000h successful
  1645.         nonzero failed
  1646.     BX,CX,DX destroyed
  1647. Notes:    the keystrokes are the exact values to return from subsequent calls to
  1648.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  1649.         0000h causes subfunctions 01h and 11h to indicate an empty
  1650.             keyboard buffer
  1651.         FFFFh is followed by a word indicating the number of clock
  1652.             ticks to delay before the next faked keystroke
  1653.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  1654.       invocation, and does not range-check CX; it will overwrite memory
  1655.       following the resident portion if CX is greater than 100h.
  1656. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  1657. ----------2FD600-----------------------------
  1658. INT 2F - HEART.COM - INSTALLATION CHECK
  1659.     AX = D600h
  1660. Return: AX = 0303h (two hearts) if installed
  1661.         ES:DI -> buffer (see below)
  1662. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  1663. Notes:    Once the host program has identified the address of the data area, it
  1664.       can change this to indicate safe/critical, alternate colours, etc.
  1665.     The entries for the color table are in char/attrib form.  Every two
  1666.       entries form a pair which is alternated between 68 times a minute.
  1667.       The first half of the table is for color videos, the second mono.
  1668.       Within each half, the first half is for the safe chars, and the
  1669.       second for the critical chars.
  1670.  
  1671. Format of buffer:
  1672. Offset    Size    Description
  1673.  00h  8 WORDs    table of colors/attributes (see notes above)
  1674.  10h    BYTE    flags
  1675.         bit 0: program is in critical section, so flash double
  1676.             exclamation mark
  1677.         bit 1: program is in safe code, so flash the heart character
  1678.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  1679.         of second line)
  1680. ----------2FD600-----------------------------
  1681. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  1682.     AX = D600h
  1683. Return: AL = D6h if installed
  1684. Note:    VSWAP is the resident portion of VEDIT's "swapper" capability.
  1685.           VEDIT is a programmer's text editor by Greenview Data.
  1686. SeeAlso: AX=D601h,AX=D602h
  1687. ----------2FD601-----------------------------
  1688. INT 2F U - VEDIT VSWAP - ???
  1689.     AX = D601h
  1690.     BL = subfunction number???
  1691. Return: BL = return code ???
  1692.     ES = resident portion's data??? segment
  1693.     DX = resident portion's code segment
  1694. SeeAlso: AX=D600h"VSWAP"
  1695. ----------2FD602-----------------------------
  1696. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  1697.     AX = D602h
  1698.     other registers set as for INT 21/AX=4B00h
  1699. Return: CF set on error
  1700.         AL = error code
  1701.         82h = failure due to ???
  1702.     CF clear on success
  1703. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  1704. ----------2FD701-----------------------------
  1705. INT 2F - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER
  1706.     AX = D701h
  1707. Return: AX = 0000h installed
  1708.         BX = interrupt number (60h to 66h)
  1709.        nonzero not present
  1710. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  1711.       necessary to examine the four bytes preceding the handlers for
  1712.       INT 60 through INT 66 for the string "BANV"
  1713. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  1714. ----------2FD702-----------------------------
  1715. INT 2F U - BANYAN VINES v4+ - PCPRINT interface
  1716.     AX = D702h
  1717.     BX = function
  1718.     ???
  1719. Return: ???
  1720. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  1721. ----------2FD703-----------------------------
  1722. INT 2F U - BANYAN VINES v4+ - MAIL interface
  1723.     AX = D703h
  1724.     BX = function
  1725.     ???
  1726. Return: ???
  1727. SeeAlso: AX=D702h,AX=D704h
  1728. ----------2FD704-----------------------------
  1729. INT 2F U - BANYAN VINES v4+ - Streettalk Directory Assistance interface
  1730.     AX = D704h
  1731.     BX = function
  1732.     ???
  1733. Return: ???
  1734. SeeAlso: AX=D703h,INT 61/AX=0007h"Banyan"
  1735. ----------2FD800-----------------------------
  1736. INT 2F - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  1737.     AX = D800h
  1738. Return:    AL = FFh if installed
  1739.         DX = version number??? (0100h in 1.00)
  1740.         BX = data segment of resident copy???
  1741.         ES:DI = FAR entry point for API routines
  1742.             Load BX = function number and call for various
  1743.             functions.    Functions 00h - 10h supported in 1.00.
  1744. SeeAlso: AX=7A00h,AX=D880h
  1745. ----------2FD880-----------------------------
  1746. INT 2F - Novell NetWare Lite - SERVER.EXE - INSTALLATION CHECK
  1747.     AX = D880h
  1748. Return:    AL = FFh if installed
  1749.         DX = version number??? (0100h in 1.00)
  1750.         BX = Data segment of resident copy???
  1751.         CL = 01h if SERVER is active
  1752.            = 00h if SERVER is disabled
  1753. SeeAlso: AX=7A00h,AX=D800h
  1754. ----------2FDA00-----------------------------
  1755. INT 2F - ZyXEL ZFAX - INSTALLATION CHECK
  1756.     AX = DA00h
  1757. Return: AH = enabled state (00h = enabled, 01h = disabled)
  1758.     AL = 5Ah installed
  1759. Note:    ZFAX is the bundled FAX software which comes with the ZyXEL model
  1760.       fax modems.
  1761. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h
  1762. ----------2FDA01-----------------------------
  1763. INT 2F - ZyXEL ZFAX - UNINSTALL
  1764.     AX = DA01h
  1765. Return: AL = 00h Success
  1766.          01h Failure
  1767. SeeAlso: AX=DA00h
  1768. ----------2FDA02-----------------------------
  1769. INT 2F - ZyXEL ZFAX - DISABLE
  1770.     AX = DA02h
  1771. Return: AL = 00h
  1772. SeeAlso: AX=DA03h
  1773. ----------2FDA03-----------------------------
  1774. INT 2F - ZyXEL ZFAX - ENABLE
  1775.     AX = DA03h
  1776. Return: AL = 00h
  1777. SeeAlso: AX=DA02h
  1778. ----------2FDA55-----------------------------
  1779. INT 2F U - TRAP.COM - INSTALLATION CHECK
  1780.     AX = DA55h
  1781.     DL = interrupt number
  1782.     DH = ???
  1783. Return: if installed
  1784.         AH = interrupt number
  1785.         AL = ???
  1786.         ES:BX -> ???
  1787. Notes:    TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  1788.     a separate copy of TRAP is loaded for each interrupt to be traced; thus
  1789.       the interrupt number is part of the installation check
  1790. ----------2FDC00-----------------------------
  1791. INT 2F - GOLD.COM - INSTALLATION CHECK
  1792.     AX = DC00h
  1793. Return: AL = 00h not installed
  1794.        = FFh installed
  1795. Note:    GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  1796.       for F1; the purpose is to improve Kermit's VTxxx emulation
  1797. ----------2FDC01-----------------------------
  1798. INT 2F - GOLD.COM - GET STATE
  1799.     AX = DC01h
  1800. Return:    AL = status
  1801.         00h off
  1802.         01h on
  1803. SeeAlso: AX=DC00h,AX=DC02h
  1804. ----------2FDC02-----------------------------
  1805. INT 2F - GOLD.COM - SET STATE
  1806.     AX = DC02h
  1807.     DL = new state
  1808.         00h off
  1809.         01h on
  1810. Return: AL = 00h (OK)
  1811. SeeAlso: AX=DC01h
  1812. ----------2FDD-------------------------------
  1813. INT 2F - SoftCom programs - API
  1814.     AH = DDh
  1815.     AL = FEh get info
  1816.         Return: ES:BX -> TSR info list (see below)
  1817.     AL = program identifier
  1818.         BH = function
  1819.         FDh get version
  1820.             Return: BX = version
  1821.         FFh installation check
  1822.             Return: AL = FFh if installed
  1823.                 BX = version
  1824.                 ES = segment of resident code
  1825.         others vary by program
  1826. Return: AL = status
  1827.         bit 7 set on error
  1828.         AL = 81h unknown function
  1829.  
  1830. Format of TSR info list:
  1831. Offset    Size    Description
  1832.  00h  9 BYTEs    blank-padded ASCIZ program name
  1833.  09h    BYTE    program ID
  1834.  0Ah    WORD    program's PSP segment
  1835.  0Ch    WORD    program version (major in high byte)
  1836.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  1837.  12h    BYTE    number of interrupts hooked
  1838.  13h  5 BYTEs    interrupt numbers hooked by program
  1839.  18h  8 BYTEs    reserved
  1840. ----------2FDE00BX4445-----------------------
  1841. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  1842.     AX = DE00h
  1843.     BX = 4445h ("DE")
  1844.     CX = 5844h ("XD")
  1845.     DX = 4931h ("I1")
  1846. Return: AL = FFh if installed (even if other registers do not match)
  1847.     if BX,CX, and DX were as specified on entry,
  1848.         BX = 4845h ("HE")
  1849.         CX = 5245h ("RE")
  1850.         DX = 4456h ("DV")
  1851. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  1852.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  1853.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  1854.       issue DESQview API calls other than those allowed from hardware ints
  1855. SeeAlso: AX=DE02h,INT 15/AX=5400h
  1856. ----------2FDE01-----------------------------
  1857. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  1858.     AX = DE01h
  1859.     BX = driver ID
  1860.     other registers as needed by driver
  1861. Notes:    XDI drivers should pass this call through to previous handler if ID
  1862.       does not match
  1863.     DESQview never calls this function
  1864. ----------2FDE01BX4450-----------------------
  1865. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  1866.     AX = DE01h
  1867.     BX = 4450h ("DP")
  1868.     CX = 4D49h ("MI")
  1869.     DX = 3039h ("09")
  1870. Return: AL = FFh if installed
  1871.         BX = 4D42h ("MB")
  1872.         CX = 4921h ("I!")
  1873.         DX = 8F4Fh
  1874.         ES:DI -> filename of DPMI host overlay
  1875. Note:    the installation check consists of testing for the existence of the
  1876.       character device QDPMI$$$
  1877. ----------2FDE01BX5242-----------------------
  1878. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  1879.     AX = DE01h
  1880.     BX = 5242h ("RB")
  1881.     CX:DX = program identifier
  1882.         656F7000h ("eop",0) for DVeop
  1883. Return: AX = 5242h ("RB") if installed
  1884.         ES:BX -> data or entry point
  1885.         CX = version number (CH = major, CL = minor)
  1886.  
  1887. Call DVeop entry point with:
  1888.     ES:DI -> callback address or 0000h:0000h to remove callback
  1889. Return: AX = status
  1890.         0000h failed (callback table full or attempted to remove non-
  1891.             existent callback)
  1892.         0001h successful
  1893.         ES:DI -> chaining address
  1894.     BX,CX,DX destroyed
  1895. Notes:    the callback function is called with a simulated interrupt when the
  1896.       DESQview window containing it is closed; it should perform all
  1897.       necessary cleanup and then perform a FAR jump to the chaining address
  1898.       or an IRET if the chaining address is 0000h:0000h
  1899.     if the program wishes to remove itself before the window is closed, it
  1900.       should call the DVeop entry point with the previously returned
  1901.       chaining address and ignore the returned chaining address.
  1902. ----------2FDE01BX7474-----------------------
  1903. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  1904.     AX = DE01h
  1905.     BX = 7474h
  1906.     CL = function
  1907.         00h installation check
  1908.         Return: AL = FFh
  1909.         01h get process handle
  1910.         DX = keys on Open Window menu (DL = first, DH = second)
  1911.         Return: AX = process handle or 0000h if not running
  1912.         02h (v1.3+) set TMAN handle
  1913.         DX = TMAN process handle
  1914.         03h (v1.3+) set open keys to ignore on next CL=01h call
  1915.         DX = keys on Open Window menu (DL = first, DH = second)
  1916. Return: BX = 4F4Bh ("OK")
  1917.     DL destroyed
  1918. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  1919.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  1920. ----------2FDE01BX7575-----------------------
  1921. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  1922.     AX = DE01h
  1923.     BX = 7575h
  1924.     CX = function
  1925.         0000h installation check
  1926.         Return: AX = 00FFh if installed
  1927.         0001h turn on notification (currently unused)
  1928.         Return: AX = 0001h
  1929.         0002h turn off notification (currently unused)
  1930.         Return: AX = 0001h
  1931.         0003h get process information
  1932.         Return: AX = status
  1933.                 0000h failed
  1934.                 0001h successful
  1935.                 BX = last instantaneous time slice
  1936.                     in 1/100s (v1.10)
  1937.                     in 1/18s (v1.11+)
  1938.                 CX = number of processes
  1939.                 DX = number of "(starting)" records (v2.00+)
  1940.                 SI = number of records in process info array
  1941.                      (v2.00+) (always 15 for v1.x)
  1942.                 ES:DI -> process info array (see below)
  1943.         0004h get version
  1944.         Return: AH = major version
  1945.             AL = minor version
  1946.         0005h (v1.10+) get time since DESQview started
  1947.         Return: DX:AX = 1/100s since DV start (v1.10)
  1948.             DX:AX = 1/18s since DV start (v1.11+)
  1949.         0006h (v1.10+) get number of task switches
  1950.         Return: DX:AX = total task switches
  1951.             CX = task switches in last instantaneous interval
  1952. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  1953.       Daniel J. Bodoh
  1954.     for v1.00, function 0003h allocates common memory, which the caller
  1955.       must deallocate after reading the process information; only the
  1956.       currently used records are placed in the buffer
  1957.     for v1.10+, function 0003h merely returns a pointer to the internal
  1958.       array of process information; the caller should make a copy of the
  1959.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  1960.       those records with bit 7 of the first byte set are valid.
  1961.  
  1962. Format of information for one process (v1.00):
  1963. Offset    Size    Description
  1964.  00h    BYTE    flags
  1965.         bit 7: process slot is valid
  1966.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  1967.          Open Windows menu, else undefined
  1968.  03h    WORD    Switch Windows window number
  1969.  05h    WORD    segment of process handle
  1970.  07h    WORD    number of tasks owned by process
  1971.  09h    WORD    mapping context of process
  1972.  0Bh    DWORD    hook for other programs
  1973.  
  1974. Format of information for one process (v1.10-v2.00):
  1975. Offset    Size    Description
  1976.  00h    BYTE    flags
  1977.         bit 7: valid record
  1978.             6: (v2.00+) record is allocated; if bit 7 clear, process
  1979.                 is "(starting)" and only offsets 01h and 09h are valid
  1980.             5: (v2.00+) this app currently owns the CPU
  1981.             4: reserved (0)
  1982.             3: DESQview system task
  1983.             2: reserved (0)
  1984.             1: task has keyboard (currently unused)
  1985.             0: task swapped out (currently unused)
  1986.  01h    WORD    Open Window keys
  1987.  03h    WORD    Switch Windows number
  1988.  05h    WORD    segment of process handle
  1989.  07h    WORD    number of tasks for process
  1990.  09h    WORD    process mapping context
  1991.  0Bh    DWORD    time process started (relative to start of DESQview)
  1992.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  1993.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  1994.  17h    DWORD    total CPU time since process started
  1995.  1Bh    DWORD    CPU time at start of current instantaneous interval
  1996.  1Fh    DWORD    CPU time in current instantaneous interval
  1997.  23h    DWORD    hook for other programs
  1998. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  1999. ----------2FDE01BXFFFE-----------------------
  2000. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  2001.     AX = DE01h
  2002.     BX = FFFEh
  2003.     CX = 4D47h ("MG")
  2004.     DX = 0052h (0,"R")
  2005. Return: AL = FFh
  2006.     DX = 584Dh
  2007. ----------2FDE02-----------------------------
  2008. INT 2F - DESQview v2.26+ External Device Interface - DV INITIALIZATION COMPLETE
  2009.     AX = DE02h
  2010.     BX = mapping context of DESQview
  2011.     DX = handle of DESQview system task
  2012. Note:    driver should pass this call to previous handler after doing its work
  2013. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  2014. ----------2FDE03-----------------------------
  2015. INT 2F - DESQview v2.26+ External Device Interface - DV TERMINATION
  2016.     AX = DE03h
  2017.     BX = mapping context of DESQview
  2018.     DX = handle of DESQview system task
  2019. Notes:    driver should pass this call to previous handler before doing its work
  2020.     DESQview makes this call when it is exiting, but before unhooking any
  2021.       interrupt vectors
  2022. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  2023. ----------2FDE04-----------------------------
  2024. INT 2F - DESQview v2.26+ External Device Interface - ADD PROCESS
  2025.     AX = DE04h
  2026.     BX = mapping context of new process
  2027.     DX = handle of process
  2028. Return: nothing
  2029. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  2030.       (see below) from "common" memory to control access to XMS memory
  2031.     all DOS, BIOS, and DV API calls are valid in handler
  2032.     driver should pass this call to previous handler after processing it
  2033. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  2034.  
  2035. Format of XMS XDI structure:
  2036. Offset    Size    Description
  2037.  00h    DWORD    pointer to 10-byte record???
  2038.  04h    DWORD    pointer to next XMS XDI structure
  2039.  08h    WORD    mapping context
  2040.  0Ah    BYTE    ???
  2041.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  2042.         (FAR jump to next field)
  2043.  10h  6 BYTEs    FAR handler for XMS driver entry point
  2044.         (consists of a FAR CALL followed by RETF)
  2045. ----------2FDE05-----------------------------
  2046. INT 2F - DESQview v2.26+ External Device Interface - REMOVE PROCESS
  2047.     AX = DE05h
  2048.     BX = mapping context of process
  2049.     DX = handle of last task in process
  2050. Return: nothing
  2051. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  2052.     driver should pass this call to previous handler before processing it
  2053.     all DOS, BIOS, and DV API calls except those generating a task switch
  2054.       are valid in handler
  2055. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  2056. ----------2FDE06-----------------------------
  2057. INT 2F - DESQview v2.26+ External Device Interface - CREATE TASK
  2058.     AX = DE06h
  2059.     BX = mapping context of process containing task
  2060.     DX = handle of new task
  2061. Notes:    driver should pass this call to previous handler after processing it
  2062.     all DOS, BIOS, and DV API calls are valid in handler
  2063. ----------2FDE07-----------------------------
  2064. INT 2F - DESQview v2.26+ External Device Interface - TERMINATE TASK
  2065.     AX = DE07h
  2066.     BX = mapping context of process containing task
  2067.     DX = handle of task
  2068. Notes:    driver should pass this call to previous handler before processing it
  2069.     all DOS, BIOS, and DV API calls except those generating a task switch
  2070.       are valid in handler
  2071. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  2072. ----------2FDE08-----------------------------
  2073. INT 2F - DESQview v2.26+ External Device Interface - SAVE STATE
  2074.     AX = DE08h
  2075.     BX = mapping context of task being switched from
  2076.     DX = handle of task being switched from
  2077. Notes:    invoked prior to task swap, interrupts, etc
  2078.     driver should pass this call to previous handler after processing it
  2079. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  2080. ----------2FDE09-----------------------------
  2081. INT 2F - DESQview v2.26+ External Device Interface - RESTORE STATE
  2082.     AX = DE09h
  2083.     BX = mapping context of task being switched to
  2084.     DX = handle of task being switched to
  2085. Notes:    state is restored except for interrupts
  2086.     driver should pass this call to previous handler before processing it
  2087. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  2088. ----------2FDE0A-----------------------------
  2089. INT 2F - DESQview v2.26+ External Device Interface - CHANGE KEYBOARD FOCUS
  2090.     AX = DE0Ah
  2091.     BX = mapping context of task receiving focus
  2092.     DX = handle of running task
  2093. Notes:    driver should pass this call to previous handler before processing it
  2094.     this call often occurs inside a keyboard interrupt
  2095. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  2096. ----------2FDE0B-----------------------------
  2097. INT 2F - DESQview v2.26+ External Device Interface - DVP PROCESSING COMPLETE
  2098.     AX = DE0Bh
  2099.     BX = mapping context of DESQview system task
  2100.     CX = number of system memory paragraphs required for the use of all
  2101.         XDI drivers (DV will add this to system memory in DVP buffer)
  2102.     DX = handle of DESQview system task
  2103.     SI = mapping context of new process if it starts
  2104.     ES:DI -> DVP buffer
  2105. Return: CX incremented as needed
  2106. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  2107.     driver should pass this call to previous handler before processing it
  2108. ----------2FDE0C-----------------------------
  2109. INT 2F - DESQview v2.26+ External Device Interface - SWAP OUT PROCESS
  2110.     AX = DE0Ch
  2111.     BX = mapping context of task being swapped out
  2112.     DX = handle of DESQview system task
  2113. Note:    driver should pass this call to previous handler after processing it
  2114. ----------2FDE0D-----------------------------
  2115. INT 2F - DESQview v2.26+ External Device Interface - SWAP IN PROCESS
  2116.     AX = DE0Dh
  2117.     BX = mapping context of process just swapped in
  2118.     DX = handle of DESQview system task
  2119. Note:    driver should pass this call to previous handler before processing it
  2120. ----------2FDE0E-----------------------------
  2121. INT 2F - DESQview v2.26+ External Device Interface - DVP START FAILED
  2122.     AX = DE0Eh
  2123.     BX = mapping context of DESQview system task
  2124.     DX = handle of DESQview system task
  2125.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2126. Note:    driver should pass this call to previous handler after processing it
  2127. ----------2FDE0F-----------------------------
  2128. INT 2F - DESQview v2.50+ External Device Interface - INITIALIZE DV
  2129.     AX = DE0Fh
  2130. Note:    DESQview 2.50+ calls this function just before it completes its
  2131.       initialization.  At the time of the call, DESQview has not yet
  2132.       changed any interrupt vectors
  2133. SeeAlso: AX=DE02h
  2134. ----------2FDE10-----------------------------
  2135. INT 2F - DESQview v2.50+ External Device Interface - FREE TASK
  2136.     AX = DE10h
  2137.     BX = mapping context of process
  2138.     DX = task handle of process
  2139. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  2140.       similar to AX=DE07h but allows the XDI handler to make calls which
  2141.       cause context switches
  2142. SeeAlso: AX=DE06h,AX=DE07h
  2143. ----------2FDF--BX4448-----------------------
  2144. INT 2F U - HyperDisk v4.20+ - INSTALLATION CHECK
  2145.     AH = DFh
  2146.     BX = 4448h ('DH')
  2147. Return: AL = FFh if installed
  2148.         CX = 5948h ('YH')
  2149.         BX:DX -> ??? in resident portion if BX=4448h on entry
  2150. Note:    HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2151. SeeAlso: INT 13/AX=8EEDh
  2152. ----------2FE000-----------------------------
  2153. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  2154.      AX = E000h
  2155. Return: AX = 4A52h ("JR") if present
  2156. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  2157.       apparent DOS version analogously to MSDOS SETVER
  2158. Note:    this installation check differs from the usual one of returning AL=FFh
  2159. SeeAlso: AX=E001h,INT 21/AH=52h
  2160. ----------2FE001-----------------------------
  2161. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  2162.     AX = E001h
  2163. Return: AH = major version
  2164.     AL = minor version
  2165. SeeAlso: AX=E000h
  2166. ----------2FE002-----------------------------
  2167. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  2168.     AX = E002h
  2169. Return: AL = FFh if successful
  2170.         BH = major DOS version
  2171.         BL = minor DOS version
  2172.         CH = DOS version flag
  2173.         CL = OEM number
  2174.         DH = major DR-DOS version number (FFh if unknown)
  2175.         DL = minor DR-DOS version number (FFh if unknown)
  2176. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  2177. ----------2FE003-----------------------------
  2178. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  2179.     AX = E003h
  2180.     BH = new major DOS version
  2181.     BL = new minor DOS version
  2182.     CH = new DOS version flag
  2183.     CL = new DOS revision number
  2184.     DH = new OEM number
  2185. SeeAlso: AX=E002h
  2186. ----------2FE004-----------------------------
  2187. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  2188.     AX = E004h
  2189. Return: AL = FFh if successful
  2190. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  2191. ----------2FE005-----------------------------
  2192. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  2193.     AX = E005h
  2194. Return: AL = FFh if successful
  2195. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  2196. ----------2FE006-----------------------------
  2197. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  2198.     AX = E006h
  2199. Return: AL = FFh if successful
  2200.         BL = status
  2201.             01h resident and active
  2202.         02h resident and inactive
  2203. ----------2FE007-----------------------------
  2204. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  2205.     AX = E007h
  2206. Return: AL = FFh if successful
  2207.         BL = status
  2208.         00h if TaskMAX not loaded before SETDRVER
  2209.         FFh if TaskMAX was loaded before SETDRVER
  2210. SeeAlso: AX=E003h
  2211. ----------2FE0-------------------------------
  2212. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  2213.     AH = E0h
  2214.     AL = 08h-10h
  2215. ----------2FE300-----------------------------
  2216. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  2217.     AX = E300h
  2218. Return: AL = 00h not installed
  2219.          FEh if installed but suspended (v3.0+)
  2220.          FFh installed
  2221. Notes:    ANARKEY.COM is a commandline recall program by Steven Calwas
  2222.     E3h is the default function number, but can be set to any value from
  2223.       C0h to FFh
  2224. SeeAlso: AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h,AX=E307h
  2225. ----------2FE301-----------------------------
  2226. INT 2F U - ANARKEY.COM v2+ - GET ???
  2227.     AX = E301h
  2228. Return: DX:BX -> ???
  2229. SeeAlso: AX=E300h
  2230.  
  2231. Format of returned data structure for ANARKEY v2.0:
  2232. Offset    Size    Description
  2233.  -7   7 BYTEs    signature ('ANARKEY')
  2234.  00h    WORD    ??? (I see 0001h in v2.0)
  2235.  02h    WORD    ??? (I see 0001h in v2.0)
  2236.  04h    WORD    ??? (I see 0 in v2.0)
  2237.  06h    WORD    PSP segment of next program loaded
  2238.  
  2239. Format of returned data structure for ANARKEY v3+:
  2240. Offset    Size    Description
  2241.  -1    BYTE    multiplex number
  2242.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  2243.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  2244.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  2245.  05h    WORD    PSP segment of next program loaded
  2246. ----------2FE302-----------------------------
  2247. INT 2F U - ANARKEY.COM v3+ - ???
  2248.     AX = E302h
  2249.     BL = ???
  2250. Return: ???
  2251. SeeAlso: AX=E300h
  2252. ----------2FE303-----------------------------
  2253. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  2254.     AX = E303h
  2255.     BL = function
  2256.         01h    toggle insert mode
  2257.         02h    display contents of history buffer
  2258.         03h    write history buffer to file
  2259.         ES:DX -> file name
  2260.         04h    clear history buffer
  2261.         05h    undefine all aliases
  2262.         06h    show aliases
  2263.         07h    list programs using Unix switchar
  2264.         08h    jump to bottom of history buffer    
  2265.         09h (v4.0) add string to history buffer
  2266.         ES:DX -> ASCIZ string
  2267.         0Ah (v4.0) ???
  2268.         ES:DX -> ???
  2269.         0Bh (v4.0) copy string to edit buffer for use as next input line
  2270.         ES:DX -> ASCIZ string
  2271.         0Ch (v4.0) ???
  2272.         0Dh (v4.0) copy ??? to ???
  2273.         0Eh (v4.0) ???
  2274.         0Fh (v4.0) ???
  2275.         10h (v4.0) set ??? flag
  2276.         11h (v4.0) display error message about running in EMS under Windows
  2277. Return: ???
  2278. SeeAlso: AX=E300h
  2279. ----------2FE304-----------------------------
  2280. INT 2F U - ANARKEY.COM v2+ - ???
  2281.     AX = E304h
  2282.     BL = ???
  2283. Return: ???
  2284. SeeAlso: AX=E300h
  2285. ----------2FE305-----------------------------
  2286. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  2287.     AX = E305h
  2288.     BL = new state
  2289.         01h suspended
  2290.         00h enabled
  2291. SeeAlso: AX=E300h
  2292. ----------2FE306-----------------------------
  2293. INT 2F U - ANARKEY.COM v4.0 - GET ???
  2294.     AX = E306h
  2295. Return: AX = ???
  2296. SeeAlso: AX=E300h
  2297. ----------2FE307-----------------------------
  2298. INT 2F U - ANARKEY.COM v4.0 - GET ???
  2299.     AX = E307h
  2300. Return: AX = ???
  2301.     BL = ???
  2302. SeeAlso: AX=E300h
  2303. ----------2FE44D-----------------------------
  2304. INT 2F - NDOS - API
  2305.     AX = E44Dh
  2306. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  2307.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  2308.       check returns AX=44EEh instead of AX=44DDh
  2309. SeeAlso: AX=D44Dh,AX=E44Eh
  2310. ----------2FE44EBX0000-----------------------
  2311. INT 2F - NDOS - AWAITING USER INPUT
  2312.     AX = E44Eh
  2313.     BX = 0000h NDOS is ready to display prompt
  2314.        = 0001h NDOS has displayed the prompt, about to accept user input
  2315. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  2316. SeeAlso: AX=E44Dh
  2317. ----------2FED00-----------------------------
  2318. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  2319.     AX = ED00h
  2320.     BL = DOS extender
  2321.         01h 286dosx v1.3+ (Software Development Kit)
  2322.         02h 286dosx v1.3+ (Run-Time Kit)
  2323.         03h 386dosx v4.0+ (SDK)
  2324.         04h 386dosx v4.0+ (RTK)
  2325. Return: AL = status
  2326.         00h not installed
  2327.         FFh installed
  2328.         SI = 5048h ("PH")
  2329.         DI = 4152h ("AR")
  2330.         CH = major version number
  2331.         CL = minor version number
  2332.         DX = flags
  2333.             bit 0: running under DPMI
  2334.             1: running under Phar Lap VMM
  2335. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  2336. ----------2FED80-----------------------------
  2337. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  2338.     AX = ED80h
  2339.     BL = DOS extender ID (see AX=ED00h)
  2340.     SI = 5048h ("PH")
  2341.     DI = 4152h ("AR")
  2342.     ???
  2343. Return: ???
  2344. ----------2FEE00-----------------------------
  2345. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  2346.     AX = EE00h
  2347. Return: AL = FFh if installed
  2348. Note:    GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  2349. ----------2FF000-----------------------------
  2350. INT 2F U - 4MAP - INSTALLATION CHECK
  2351.     AX = F000h
  2352. Return: AX = 00FFh
  2353. Notes:    returns AX=00FFh for any value of AL not listed here
  2354.     4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  2355. ----------2FF001-----------------------------
  2356. INT 2F U - 4MAP - GET KEY MAPPINGS
  2357.     AX = F001h
  2358. Return: ES:BX -> key mappings
  2359. SeeAlso: AX=F000h
  2360. ----------2FF002-----------------------------
  2361. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  2362.     AX = F002h
  2363.     BL = character to insert
  2364. Return: AX = status
  2365.         0000h successful
  2366.         0001h buffer full
  2367. SeeAlso: AX=F000h,AX=F003h
  2368. ----------2FF003-----------------------------
  2369. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  2370.     AX = F003h
  2371.     BL = character to insert
  2372. Return: AX = status
  2373.         0000h successful
  2374.         0001h buffer full
  2375. SeeAlso: AX=F000h,AX=F002h
  2376. ----------2FF1-------------------------------
  2377. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  2378.     AH = F1h
  2379.     AL <> F1h
  2380. Return: AL = F1h if installed
  2381. Note:    MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  2382.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  2383.       TSR at a time is brought back into memory at the user's request.
  2384. ----------2FF100-----------------------------
  2385. INT 2F - DOS EXTENDER INSTALLATION CHECK
  2386.     AX = F100h
  2387. Return: AL = FFh if DOS extender present
  2388.         SI = 444Fh ("DO")
  2389.         DI = 5358h ("SX")
  2390. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  2391. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  2392. ----------2FF700-----------------------------
  2393. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  2394.     AX = F700h
  2395. Return: AL = 00h not installed
  2396.          FFh installed
  2397. Note:    AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  2398. ----------2FF701-----------------------------
  2399. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  2400.     AX = F701h
  2401.     BX:CX = 32-bit count of 55ms timer ticks
  2402. ----------2FFB-------------------------------
  2403. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  2404.     AH = FBh
  2405. ----------2FFB00-----------------------------
  2406. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  2407.     AX = FB00h
  2408. Return: AX = 00FFh if installed
  2409. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2410. SeeAlso: INT 10/AH=38h,INT 14/AX=F0F1h
  2411. ----------2FFB00-----------------------------
  2412. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  2413.     AX = FB00h
  2414. Return: AX = FFFFh if installed
  2415.         BX = version (BCD, BH=major, BL=minor)
  2416. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  2417. ----------2FFB01-----------------------------
  2418. INT 2F U - AutoBraille v1.1A - ???
  2419.     AX = FB01h
  2420.     ???
  2421. Return: ???
  2422. ----------2FFB01-----------------------------
  2423. INT 2F U - Jot-It! v1.50 - GET USER NAME
  2424.     AX = FB01h
  2425. Return: DX:BX -> ASCIZ user name
  2426. SeeAlso: AX=FB02h"Jot-It"
  2427. ----------2FFB02-----------------------------
  2428. INT 2F U - AutoBraille v1.1A - ???
  2429.     AX = FB02h
  2430. Return: AH = ???
  2431.     AL = ???
  2432. ----------2FFB02-----------------------------
  2433. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  2434.     AX = FB02h
  2435. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  2436. SeeAlso: AX=FB01h"Jot-It"
  2437. ----------2FFB03-----------------------------
  2438. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  2439.     AX = FB03h
  2440. Return: AX = ???
  2441. ----------2FFB03-----------------------------
  2442. INT 2F U - Jot-It! v1.50 - UNINSTALL
  2443.     AX = FB03h
  2444. Return: resident code removed from memory
  2445. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  2446.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  2447. SeeAlso: AX=FB00h"Jot-It"
  2448. ----------2FFB-------------------------------
  2449. INT 2F U - AutoBraille v1.1A - SET ???
  2450.     AH = FBh
  2451.     AL = 04h-08h
  2452. Return: AX = 0000h
  2453. ----------2FFB-------------------------------
  2454. INT 2F U - AutoBraille v1.1A - SET ???
  2455.     AH = FBh
  2456.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  2457. Return: ???
  2458. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2459. ----------2FFB-------------------------------
  2460. INT 2F U - AutoBraille v1.1A - SET ???
  2461.     AH = FBh
  2462.     AL = 10h-1Fh
  2463.     ???
  2464. Return: ???
  2465. ----------2FFB20-----------------------------
  2466. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  2467.     AX = FB20h
  2468.     BL = flags to set
  2469. SeeAlso: AX=FB21h"AutoBraille"
  2470. ----------2FFB21-----------------------------
  2471. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  2472.     AX = FB21h
  2473.     BL = flags to clear
  2474. SeeAlso: AX=FB20h"AutoBraille"
  2475. ----------2FFB22-----------------------------
  2476. INT 2F U - AutoBraille v1.1A - SET ???
  2477.     AX = FB22h
  2478.     BL = ???
  2479. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2480. ----------2FFB28-----------------------------
  2481. INT 2F U - AutoBraille v1.1A - ???
  2482.     AX = FB28h
  2483.     BX = ???
  2484.     ???
  2485. Return: ???
  2486. SeeAlso: AX=FB29h"AutoBraille"
  2487. ----------2FFB29-----------------------------
  2488. INT 2F U - AutoBraille v1.1A - ???
  2489.     AX = FB29h
  2490.     BX = ???
  2491.     ???
  2492. Return: ???
  2493. SeeAlso: AX=FB28h"AutoBraille"
  2494. ----------2FFB-------------------------------
  2495. INT 2F U - AutoBraille v1.1A - SET ???
  2496.     AH = FBh
  2497.     AL = 2Bh-34h
  2498.     BX = ???
  2499. ----------2FFB35-----------------------------
  2500. INT 2F U - AutoBraille v1.1A - SET ???
  2501.     AX = FB35h
  2502.     BL = ???
  2503. ----------2FFB36-----------------------------
  2504. INT 2F U - AutoBraille v1.1A - SET ???
  2505.     AX = FB36h
  2506.     BL = ???
  2507. ----------2FFB37-----------------------------
  2508. INT 2F U - AutoBraille v1.1A - SET ???
  2509.     AX = FB37h
  2510.     BL = ???
  2511. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2512. ----------2FFB42BX0001-----------------------
  2513. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  2514.     AX = FB42h
  2515.     BX = 0001h
  2516. Return: AX = version number??? (AL=major, AH=minor)
  2517.     CX = next-selector increment
  2518. ---BC2.0---
  2519.     ES:BX -> 80-byte buffer for ???
  2520.     DX = DPMI version
  2521. ---BC3.0---
  2522.     BX = ??? (0000h)
  2523.     DX = ???
  2524.     ES:SI -> list of valid selectors ???
  2525. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2526.       as version 1.000, while the version distributed with BC++ 3.0
  2527.       identifies itself as version 1.0; the former is 10864 bytes, the
  2528.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  2529.       the BC3.0 version also adds a DPMI host and DOS extender
  2530.     the BC++ 2.0 version displays an error message if called with BX
  2531.       values other than 0001h-0008h
  2532. ----------2FFB42BX0002-----------------------
  2533. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  2534.     AX = FB42h
  2535.     BX = 0002h
  2536.     CX = size in bytes
  2537.     DX = bit flags
  2538.         bit 2: set to allocate DOS memory, clear for DPMI memory
  2539.     SI = selector of descriptor to be modified to access allocated memory
  2540.     DI = selector of a second descriptor to be modified
  2541. Return: AX = ??? or 0000h on error
  2542.     CX:DX = linear base address of DPMI memory block
  2543.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  2544.     ???
  2545. Note:    two segment descriptors may be set if a code and an aliased data
  2546.       segment are required; if only one descriptor is needed, SI should
  2547.       equal DI on entry
  2548. BUG:    when allocating DOS memory, the code computes the linear address by
  2549.       multiplying the segment number by 4 rather than shifting by 4
  2550. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h
  2551. ----------2FFB42BX0002-----------------------
  2552. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  2553.     AX = FB42h
  2554.     BX = 0002h
  2555.     ES:SI -> memory block info (see below)
  2556. Return: ???
  2557. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2558.       as version 1.000, while the version distributed with BC++ 3.0
  2559.       identifies itself as version 1.0; the former is 10864 bytes, the
  2560.       latter 22180 bytes.
  2561. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h
  2562.  
  2563. Format of memory block info:
  2564. Offset    Size    Description
  2565.  00h    WORD    flags
  2566.         bit 0: set if data segment rather than code segment
  2567.         bit 1: information valid
  2568.         bit 2: set if DOS memory block rather than DPMI memory block
  2569.         bit 4: ???
  2570.         bit 15: set if no LDT selectors for memory block???
  2571.  02h    DWORD    block size in bytes
  2572. ---DPMI memory block---
  2573.  06h    DWORD    DPMI memory block handle
  2574. ---DOS memory block---
  2575.  06h    WORD    real-mode segment of memory block
  2576.  08h    WORD    selector of memory block
  2577. ---
  2578.  0Ah    DWORD    linear address of memory
  2579.  0Eh    WORD    memory operation error code
  2580.          0008h no more free LDT descriptors
  2581. ---if flags bit 0 clear---
  2582.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  2583.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  2584. ---if flags bit 0 set---
  2585.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  2586.  12h    WORD    unused???
  2587. ----------2FFB42BX0003-----------------------
  2588. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  2589.     AX = FB42h
  2590.     BX = 0003h
  2591. Return: DX:AX = size of largest free block in paragraphs
  2592.         0000h:0000h on error (BC3.0 version only)
  2593. Note:    AX and DX are destroyed on error, but no other error indicator is
  2594.       returned, under the BC++ 2.0 version of DPMILOAD
  2595. SeeAlso: AX=FB42h/BX=0002h
  2596. ----------2FFB42BX0004-----------------------
  2597. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  2598.     AX = FB42h
  2599.     BX = 0004h
  2600.     DS:DX -> ASCIZ filename of protected-mode executable
  2601. Return: CX = selector of ??? or 0000h
  2602. ---BC3.0---
  2603.     DX = status (0000h,FFF4h,others???) (see below)
  2604. Note:    the filename may also be terminated by a CR rather than a NUL under the
  2605.       BC++ 3.0 version of DPMILOAD
  2606.  
  2607. Values for status:
  2608.  0000h    successful
  2609.  0001h    ??? failure
  2610.  0002h    invalid selector
  2611.  0004h    unknown error
  2612.  0008h    no more LDT descriptors available???
  2613.  FFDEh    unable to set descriptor
  2614.  FFDFh    unable to get segment base address
  2615.  FFE0h    ???
  2616.  FFF2h    invalid parameter value
  2617.  FFF4h    component of filename too long (name not in 8.3 format)
  2618.  FFF5h    pathname too long (>79 chars)
  2619.  FFF6h    ???
  2620.  FFF8h    ???
  2621.  FFF9h    index out of range
  2622.  FFFAh    ???
  2623.  FFFCh    invalid access to code segment???
  2624.  FFFEh    ???
  2625.  FFFFh    general error
  2626. ----------2FFB42BX0005-----------------------
  2627. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  2628.     AX = FB42h
  2629.     BX = 0005h
  2630.     CX = selector of DPMILOAD data (see below)
  2631.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  2632. Return: DX = status (see AX=FB42h/BX=0004h)
  2633.         0000h successful
  2634.         AX:BX -> ??? FAR function (called with two words on top of stk)
  2635.         else
  2636.         BX destroyed
  2637. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  2638.  
  2639. Format of DPMILOAD data:
  2640. Offset    Size    Description
  2641.  00h 12 BYTEs    ???
  2642.  0Ch    WORD    ??? bit flags
  2643.  0Eh 14 BYTEs    ???
  2644.  1Ch    WORD    number of memory control records
  2645.  1Eh 25 BYTEs    ???
  2646.  37h    BYTE    ??? bit flags
  2647.          bit 4: data valid???
  2648.  38h  4 BYTEs    ???
  2649.  3Ch    WORD    ???
  2650.  3Eh 12 BYTEs    ???
  2651.  46h    BYTE    ??? counter
  2652.  47h    BYTE    ???
  2653.  48h    BYTE    ???
  2654.  49h    BYTE    ???
  2655.  4Ah    WORD    ???
  2656.  4Ch  2 BYTEs    ???
  2657.  4Eh    WORD    offset of array of 64-byte memory control records
  2658.  52h    WORD    offset of name list (see below)
  2659.  54h  4 BYTEs    ???
  2660.  58h    WORD    offset of array of 6-byte objects
  2661.  5Ah  8 BYTEs    ???
  2662.  62h  9 BYTEs    ASCIZ name for ???
  2663.  6Bh  9 BYTEs    ASCIZ name for ???
  2664.      ???
  2665.  
  2666. Format of name list entry [array]:
  2667. Offset    Size    Description
  2668.  00h    BYTE    length of name (00h if end of array)
  2669.  01h  N BYTEs    name
  2670.  N+1    WORD    1-based index into array of unknown 6-byte objects
  2671.  
  2672. Format of 6-byte objects:
  2673. Offset    Size    Description
  2674.  00h    BYTE    ???
  2675.  01h    BYTE    ???
  2676.  02h    BYTE    ???
  2677.  03h    BYTE    1-based index of memory control record
  2678.  04h    WORD    ???
  2679.  
  2680. Format of memory control record:
  2681. Offset    Size    Description
  2682.  00h 20 BYTEs    memory block info (see AX=FB42h/BX=0002h)
  2683.  14h  6 BYTEs    ???
  2684.  1Ah    BYTE    ???
  2685.  1Bh  2 BYTEs    ???
  2686.  1Dh    BYTE    ??? bit flags
  2687.  1Eh 14 BYTEs    ???
  2688.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  2689.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  2690.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  2691.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  2692.  3Ch  4 BYTEs    ???
  2693. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  2694.       the pointers at offsets 34h and 38h
  2695. ----------2FFB42BX0006-----------------------
  2696. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  2697.     AX = FB42h
  2698.     BX = 0006h
  2699.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  2700.     DX = 1-based index into array of ??? 6-byte objects
  2701. Return: DX = status (see AX=FB42h/BX=0004h)
  2702.         0000h successful
  2703.         AX:BX -> ??? FAR function (called with two words on top of stk)
  2704.         else
  2705.         BX destroyed
  2706. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  2707. ----------2FFB42BX0007-----------------------
  2708. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  2709.     AX = FB42h
  2710.     BX = 0007h
  2711.     CX = selector of ???
  2712. Return: ???
  2713. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2714.       as version 1.000, while the version distributed with BC++ 3.0
  2715.       identifies itself as version 1.0; the former is 10864 bytes, the
  2716.       latter 22180 bytes.
  2717. ----------2FFB42BX0007-----------------------
  2718. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2719.     AX = FB42h
  2720.     BX = 0007h
  2721.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  2722.     ???
  2723. Return: DX = status (see AX=FB42h/BX=0004h)
  2724.         0000h successful    
  2725.         AX = ???
  2726. ----------2FFB42BX0008-----------------------
  2727. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  2728.     AX = FB42h
  2729.     BX = 0008h
  2730.     CX = bit flags
  2731.         bit 2: set if DPMI memory, clear if DOS memory
  2732.     DX = selector of DOS memory block
  2733.     SI:DI = handle of DPMI memory block
  2734. Return: DX = 0000h on error, unchanged if succcessful
  2735. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2736.       as version 1.000, while the version distributed with BC++ 3.0
  2737.       identifies itself as version 1.0; the former is 10864 bytes, the
  2738.       latter 22180 bytes.
  2739. SeeAlso: AX=FB42h/BX=0002h
  2740. ----------2FFB42BX0008-----------------------
  2741. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  2742.     AX = FB42h
  2743.     BX = 0008h
  2744.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  2745. Return: ???
  2746. SeeAlso: AX=FB42h/BX=0009h
  2747. ----------2FFB42BX0009-----------------------
  2748. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  2749.     AX = FB42h
  2750.     BX = 0009h
  2751.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  2752.     ???
  2753. Return: ???
  2754. SeeAlso: AX=FB42h/BX=0008h"3.0"
  2755. ----------2FFB42BX000A-----------------------
  2756. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  2757.     AX = FB42h
  2758.     BX = 000Ah
  2759.     CX = 0001h
  2760.     DX = ???
  2761.     SI = ???
  2762. Return: after user exits subshell
  2763. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  2764.       function is not available in protected mode.
  2765.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  2766.       version also adds a DPMI host and DOS extender.
  2767. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  2768. ----------2FFB42BX000B-----------------------
  2769. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  2770.     AX = FB42h
  2771.     BX = 000Bh
  2772. ----------2FFB42BX000C-----------------------
  2773. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  2774.     AX = FB42h
  2775.     BX = 000Ch ???
  2776.     ES:SI -> memory block info ??? (see AX=FB42h/BX=0002h"3.0")
  2777. Return: DX = status???
  2778. SeeAlso: AX=FB42h/BX=000Fh
  2779. ----------2FFB42BX000D-----------------------
  2780. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  2781.     AX = FB42h
  2782.     BX = 000Dh
  2783.     CX = number of words to copy from protected-mode to real mode stack
  2784.     DL = interrupt number
  2785.     DH = flags
  2786.         bit 0: reset the interrupt controller and A20 line
  2787.     ES:DI -> real-mode call structure (see INT 31/AX=0300h)
  2788. Return: CX = status
  2789.         0000h successful
  2790.         0001h failed
  2791. SeeAlso: INT 31/AX=0300h
  2792. ----------2FFB42BX000E-----------------------
  2793. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  2794.     AX = FB42h
  2795.     BX = 000Eh
  2796.     DS:DX -> ASCIZ or CR-terminated name of ???
  2797. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) corresponding to
  2798.         name, 0000h on error
  2799. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  2800. ----------2FFB42BX000F-----------------------
  2801. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  2802.     AX = FB42h
  2803.     BX = 000Fh
  2804.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  2805. Return: ???
  2806. SeeAlso: AX=FB42h/BX=000Ch
  2807. ----------2FFB42BX0010-----------------------
  2808. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  2809.     AX = FB42h
  2810.     BX = 0010h
  2811.     DX = segment number
  2812. Return: CX = status (see also AX=FB42h/BX=0004h)
  2813.         0000h successful
  2814.         DX = selector number for descriptor
  2815.         0008h failed
  2816. SeeAlso: AX=FB42h/BX=0023h
  2817. ----------2FFB42BX0011-----------------------
  2818. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2819.     AX = FB42h
  2820.     BX = 0011h
  2821.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  2822.     ???
  2823. Return: DX = status (see also AX=FB42h/BX=0004h)
  2824.         0000h successful
  2825.         AX:BX -> ??? name
  2826.         0002h invalid selector
  2827.         FFFEh ??? error
  2828. ----------2FFB42BX0012-----------------------
  2829. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2830.     AX = FB42h
  2831.     BX = 0012h
  2832.     CX = selector for ???
  2833. Return: CX = selector for ???
  2834. ----------2FFB42BX0013-----------------------
  2835. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2836.     AX = FB42h
  2837.     BX = 0013h
  2838.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  2839.     DX = 1-based index of ???
  2840. Return: CX = status (see also AX=FB42h/BX=0004h)
  2841.         0000h successful
  2842.         BX = ??? or 0000h
  2843.         0002h invalid selector
  2844.         FFF9h ??? error
  2845. ----------2FFB42BX0014-----------------------
  2846. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2847.     AX = FB42h
  2848.     BX = 0014h ???
  2849.         CX = 0001h
  2850.         Return: BX = 0000h
  2851. Note:    unlike most of the DPMILOAD functions, this call is available only in
  2852.       real or V86 mode
  2853. SeeAlso: AX=FB42h/BX=000Ah
  2854. ----------2FFB42BX0015-----------------------
  2855. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2856.     AX = FB42h
  2857.     BX = 0015h uninstall
  2858.     CX = 0001h
  2859. Return: ???
  2860. Note:    unlike most of the DPMILOAD functions, this call is available only in
  2861.       real or V86 mode
  2862. SeeAlso: AX=FB42h/BX=000Ah
  2863. ----------2FFB42BX0016-----------------------
  2864. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  2865.     AX = FB42h
  2866.     BX = 0016h
  2867.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  2868. Return: DX = status (see also AX=FB42h/BX=0004h)
  2869.         0000h successful
  2870.         CX = ???
  2871. ----------2FFB42BX0017-----------------------
  2872. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2873.     AX = FB42h
  2874.     BX = 0017h
  2875.     CX = ???
  2876.     DX = ???
  2877.     ???
  2878. Return: DX = status (0000h,0001h) (see below)
  2879. ----------2FFB42BX0018-----------------------
  2880. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  2881.     AX = FB42h
  2882.     BX = 0018h
  2883.     CX = ???
  2884. ----------2FFB42BX0019-----------------------
  2885. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2886.     AX = FB42h
  2887.     BX = 0019h
  2888.     CX = selector for ???
  2889.     ???
  2890. Return: DX = status (see also AX=FB42h/BX=0004h)
  2891.         0000h successful
  2892.         CX = selector for ???
  2893. ----------2FFB42BX001A-----------------------
  2894. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2895.     AX = FB42h
  2896.     BX = 001Ah
  2897.     CX = selector for ???
  2898.     ???
  2899. Return: DX = status (see also AX=FB42h/BX=0004h)
  2900.         0000h successful
  2901.         0004h failed
  2902.     CX:BX -> ???
  2903. ----------2FFB42BX001B-----------------------
  2904. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2905.     AX = FB42h
  2906.     BX = 001Bh
  2907.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  2908.     DX = offset of ???
  2909. Return: DX = status (see also AX=FB42h/BX=0004h)
  2910.         0000h successful
  2911.         BX = selector for ???
  2912.         CX = selector for ???
  2913.         0002h invalid selector
  2914. ----------2FFB42BX001C-----------------------
  2915. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2916.     AX = FB42h
  2917.     BX = 001Ch
  2918.     ES = selector for DPMILOAD data (see AX=FB42h/BX=0005h)
  2919.     CX = 1-based index of ???
  2920.     DX = 1-based index of ???
  2921. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  2922. ----------2FFB42BX001D-----------------------
  2923. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  2924.     AX = FB42h
  2925.     BX = 001Dh
  2926. Return: CX:DX = ???
  2927. ----------2FFB42BX001E-----------------------
  2928. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2929.     AX = FB42h
  2930.     BX = 001Eh
  2931.     CX = ???
  2932.     ???
  2933. Return: DX = status (see also AX=FB42h/BX=0004h)
  2934.         0000h successful
  2935.         FFF7h ??? error
  2936.     CX:BX -> ???
  2937. ----------2FFB42BX001F-----------------------
  2938. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  2939.     AX = FB42h
  2940.     BX = 001Fh
  2941.     DS:DX -> 8-character name of ???
  2942.     ???
  2943. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) for ???
  2944.         0000h on error
  2945. SeeAlso: AX=FB42h/BX=000Eh
  2946. ----------2FFB42BX0020-----------------------
  2947. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  2948.     AX = FB42h
  2949.     BX = 0020h
  2950. Return: DX = ??? (always 0000h)
  2951. ----------2FFB42BX0021-----------------------
  2952. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  2953.     AX = FB42h
  2954.     BX = 0021h
  2955.     CL = exception number (00h-1Fh)
  2956. Return: DX = status (see also AX=FB42h/BX=0004h)
  2957.         0000h successful
  2958.         AX:BX = selector:offset of handler
  2959.         FFF2h unable to get exception handler vector
  2960. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  2961. ----------2FFB42BX0022-----------------------
  2962. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  2963.     AX = FB42h
  2964.     BX = 0022h
  2965.     CL = exception number (00h-1Fh)
  2966.     SI:DX = selector:offset of new handler
  2967. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  2968. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  2969. ----------2FFB42BX0023-----------------------
  2970. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  2971.     AX = FB42h
  2972.     BX = 0023h
  2973.     CX = selector
  2974. Return: DX = status (see also AX=FB42h/BX=0004h)
  2975.         0000h successful
  2976.         CX = real-mode segment number
  2977.         FFF2h descriptor has invalid base address for real-mode segment
  2978. SeeAlso: AX=FB42h/BX=0010h
  2979. ----------2FFB42BX0024-----------------------
  2980. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  2981.     AX = FB42h
  2982.     BX = 0024h
  2983.     CL = interrupt number
  2984. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  2985.     AX:BX = selector:offset of handler
  2986. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  2987. ----------2FFB42BX0025-----------------------
  2988. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  2989.     AX = FB42h
  2990.     BX = 0025h
  2991.     CL = interrupt number
  2992.     SI:DX = selector:offset of new handler
  2993. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  2994. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  2995. ----------2FFB42BX0026-----------------------
  2996. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2997.     AX = FB42h
  2998.     BX = 0026h
  2999.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3000.     DX = 1-based index of ???
  3001.     ???
  3002. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  3003.         0000h successful
  3004.             BX = offset of ??? within data structure
  3005. ----------2FFB42BX0027-----------------------
  3006. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3007.     AX = FB42h
  3008.     BX = 0027h
  3009.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3010.     DX = offset of ???
  3011. Return: DX = status (see also AX=FB42h/BX=0004h)
  3012.         0000h successful
  3013.         BX = ???
  3014. ----------2FFB42BX0080-----------------------
  3015. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3016.     AX = FB42h
  3017.     BX = 0080h
  3018.     ???
  3019. Return: AX = ???
  3020.     ???
  3021. ----------2FFB42BX0081-----------------------
  3022. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3023.     AX = FB42h
  3024.     BX = 0081h
  3025.     ???
  3026. Return: AX = ???
  3027.     ???
  3028. ----------2FFB43-----------------------------
  3029. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  3030.     AX = FB43h
  3031.     BX = subfunction (at least 0000h-000Eh)
  3032. Notes:    this function is only present in protected mode; it does nothing but
  3033.       an immediate IRET
  3034.     DPMILOAD.EXE itself calls various subfunctions:
  3035.         subfunction 0004h is called with CX=selector of ???, DI=selector
  3036.             of DPMILOAD data
  3037.         subfunction 0008h is called with CX=selector of DPMILOAD data
  3038. ----------2FFB64-----------------------------
  3039. INT 2F U - AutoBraille v1.1A - GET ???
  3040.     AX = FB64h
  3041. Return: AX = ??? (0006h seen)
  3042. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3043. ----------2FFBA1BX0081-----------------------
  3044. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  3045.     AX = FBA1h
  3046.     BX = 0081h
  3047.     ES:DI -> 16-byte buffer
  3048. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  3049. Note:    TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.  It was
  3050.       present only in Borland C++ 2.0; with version 3.0, the DOS extender
  3051.       was moved into DPMILOAD.
  3052. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h 
  3053. SeeAlso: INT 21/AX=4403h"TKERNEL"
  3054. ----------2FFBA1BX0082-----------------------
  3055. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  3056.     AX = FBA1h
  3057.     BX = 0082h
  3058.     ES:DI -> response buffer (see below)
  3059. Return: ES:DI buffer filled
  3060. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  3061.  
  3062. Format of response buffer:
  3063. Offset    Size    Description
  3064.  00h  4 BYTEs    signature "IABH"
  3065.  04h    DWORD    pointer to FAR extender entry point
  3066.  
  3067. Call entry point with:
  3068.     AX = function number
  3069.         0000h initialize???
  3070.             STACK:    WORD  ???
  3071.         Return: AX = status???
  3072.             STACK unchanged
  3073.         0001h get version???
  3074.             Return: AX = 0200h for v2.0.34
  3075.         0002h get ???
  3076.             Return: AX = ??? (011Eh or 0182h seen)
  3077.         0003h load protected-mode executable
  3078.             STACK:    DWORD -> ASCIZ filename of executable
  3079.             DWORD    ???
  3080.             DWORD -> program arguments (counted string plus CR)
  3081.             DWORD -> environment for protected-mode executable
  3082.                 (terminated with two consecutive NULs)
  3083.             DWORD -> WORD buffer for ???
  3084.         Return:    AX = status???
  3085.             STACK unchanged
  3086.         0004h get descriptor
  3087.         STACK:    WORD    selector for which to get descriptor
  3088.             WORD    segment number (when running in real mode)
  3089.             DWORD -> buffer for descriptor
  3090.         Return: CF clear if successful
  3091.                 buffer filled
  3092.             CF set on error
  3093.                 AX destroyed???
  3094.             STACK unchanged
  3095.         0005h ???
  3096.             STACK:    WORD     selector for ???
  3097.             WORD     subfunction number???
  3098.                 0000h run previously-loaded program???
  3099.                 0001h ??? (similar to 0000h)
  3100.                 0002h
  3101.                 0003h
  3102.                 0005h ??? (similar to 0000h and 0001h)
  3103.         Return: AX = status???
  3104.             STACK unchanged
  3105.         0006h ???
  3106.             STACK:    WORD ???
  3107.             DWORD -> WORD (call) max iterations of ???
  3108.                       (return) remaining iterations
  3109.         Return: AX = ???
  3110.             STACK unchanged
  3111.         0007h unused
  3112.             Return: AX = 0001h
  3113.         0008h unused
  3114.             Return: AX = 0001h
  3115.         0009h copy protected-mode memory into conventional memory
  3116.             STACK:    WORD     selector for source segment
  3117.             WORD    segment of source if in real mode???
  3118.             DWORD    offset of source
  3119.             WORD     number of bytes to copy
  3120.             DWORD -> low-memory destination
  3121.         Return: AX = status
  3122.             STACK unchanged
  3123.         000Ah copy conventional memory into protected-mode memory
  3124.             STACK:    WORD    selector for destination segment
  3125.             WORD     segment of destination if in real mode???
  3126.             DWORD    offset of destination
  3127.             WORD     number of bytes to copy
  3128.             DWORD -> low-memory source
  3129.         Return: AX = status
  3130.             STACK unchanged
  3131.         000Bh get ??? pointers
  3132.             STACK:    WORD desired pointer
  3133.                 0000h get ???
  3134.                 0002h get protected-mode CR3
  3135.                 0003h get 4K page table buffer pointer
  3136.                 else Return: DX:AX = FFFFh:FFFFh
  3137.         Return: DX:AX = requested pointer
  3138.             STACK unchanged
  3139.         000Ch set ??? pointers
  3140.             STACK:    WORD desired pointer
  3141.                 0000h set ???
  3142.                 0002h set protected-mode CR3
  3143.                 0003h set 4K page table buffer pointer
  3144.                 else ignore
  3145.             DWORD new value for pointer
  3146.         Return: STACK unchanged
  3147.         000Dh get ??? pointers
  3148.             STACK:    WORD desired pointer
  3149.                 0000h get ???
  3150.                 0001h get ???
  3151.                 0002h get ???
  3152.                 0003h get ???
  3153.                 0004h get ???
  3154.                 0005h get ???
  3155.                 0006h get ???
  3156.                 0007h get ???
  3157.                 else Return: DX:AX = FFFFh:FFFFh
  3158.         Return: DX:AX = desired pointer
  3159.             STACK unchanged
  3160.            000Eh set ??? pointer
  3161.             STACK:    WORD desired pointer
  3162.                 0000h set ???
  3163.                 0001h set ???
  3164.                 0002h set ???
  3165.                 0003h set ???
  3166.                 0004h set ???
  3167.                 0005h set ???
  3168.                 0006h set ???
  3169.                 0007h set ???
  3170.                 else Return: DX:AX = FFFFh:FFFFh
  3171.         Return: STACK unchanged
  3172.         000Fh get ???
  3173.             Return: AX = ??? (seen 0008h)
  3174.         0010h get ???
  3175.             Return: AX = ???
  3176.         0011h determine whether selector is valid
  3177.             STACK:    WORD    possible selector
  3178.         Return: AX = selector or 0000h if invalid
  3179.             STACK unchanged
  3180.         0012h get physical address
  3181.             STACK:    WORD    selector for desired segment
  3182.             WORD    segment number if in real mode
  3183.             DWORD    offset within segment
  3184.         Return: DX:AX = 32-bit physical address or 00000000h on error
  3185.             BX destroyed
  3186.             STACK unchanged
  3187.         0013h ???
  3188.         Note:    normally jumps to code for function 0012h
  3189.         0014h copy protected-mode memory to conventional memory, with ???
  3190.             STACK:    WORD    selector for source segment
  3191.             WORD    segment of source if in real mode???
  3192.             DWORD    offset of source
  3193.             WORD    number of bytes to copy
  3194.             DWORD -> low-memory destination
  3195.         Return: AX = status???
  3196.             STACK unchanged
  3197.         0015h copy conventional memory to protected-mode memory, with ???
  3198.             STACK:    WORD    selector for destination segment
  3199.             WORD    segment of destination if in real mode???
  3200.             DWORD    offset of destination
  3201.             WORD    number of bytes to copy
  3202.             DWORD -> low-memory source
  3203.         Return: AX = status???
  3204.             STACK unchanged
  3205.         0016h set ??? pointer
  3206.             STACK:    WORD    unused
  3207.             DWORD -> ??? or 0000h:0000h
  3208.         Return: AX = 0000h
  3209.             STACK unchanged
  3210.         0017h allocate real-mode procedure???
  3211.             STACK:    DWORD    ASCIZ name of procedure
  3212.             DWORD ???
  3213.             DWORD    address of subroutine to invoke
  3214.         Return: AX = status
  3215.                 0032h procedure by that name exists
  3216.                 0033h no more real-mode procedures available
  3217.             DX destroyed
  3218.             STACK unchanged
  3219.         0018h unused
  3220.             Return: AX = 0001h
  3221.         0019h get parameter block
  3222.             Return: DX:AX -> parameter block (format unknown at this time,
  3223.                 but 92h bytes)
  3224.                 (preceded by signature "!!PARAM-BLOCK!!")
  3225.         001Ah get ???
  3226.             Return: AX = ??? (0148h seen)
  3227.         001Bh free real-mode procedure???
  3228.             STACK:    DWORD -> ASCIZ name of procedure
  3229.         Return: ???
  3230.             STACK unchanged
  3231.         001Ch check whether packets from protected mode task pending
  3232.             Return: AX = 0001h if packets pending, 0000h if not
  3233.         001Dh set ???
  3234.             STACK:    DWORD ??? or 0000h:0000h
  3235.         Return: AX,BX destroyed
  3236.             STACK unchanged
  3237.         001Eh ???
  3238.             STACK:    WORD ??? (high byte ignored)
  3239.             DWORD -> data structure (see below)
  3240.         Return: AX,BX,CX,DX destroyed
  3241.             data structure updated
  3242.             STACK unchanged
  3243.         Format of data structure
  3244.         Offset    Size    Description
  3245.          00h  2 BYTEs    unused
  3246.          02h    WORD    ???
  3247.          04h    WORD    ???
  3248.          06h    WORD    ???
  3249.          08h  2 BYTEs    unused
  3250.          0Ah    WORD    ???
  3251.          0Ch    WORD    (call) ???
  3252.                  (return) offset of this data structure (BUG?)
  3253.         001Fh set ???
  3254.             STACK:    WORD ??? (set to 0001h if zero)
  3255.         Return: AX destroyed
  3256.             STACK unchanged
  3257.         0020h ???
  3258.             STACK:    DWORD -> ??? (8 bytes of data)
  3259.         Return: AX = ???
  3260.             STACK unchanged
  3261.         0021h ???
  3262.             STACK:    DWORD -> ??? (8 bytes of data)
  3263.             WORD    ???
  3264.             WORD    ???
  3265.         Return: AX = ???
  3266.             STACK unchanged
  3267.         0022h ???
  3268.             STACK:    DWORD -> ??? (8 bytes of data)
  3269.             DWORD -> 4-byte buffer for results
  3270.         Return: AX = ???
  3271.             STACK unchanged
  3272.         0023h ???
  3273.             STACK:    DWORD -> ??? (8 bytes of data)
  3274.         Return: AX = ???
  3275.             STACK unchanged
  3276.         0024h set ???
  3277.             STACK:    WORD ???
  3278.         Return: AX destroyed
  3279.             STACK unchanged
  3280.         0025h get ???
  3281.             Return: AX = ??? (value set with func 0024h)
  3282.         0026h BUG: jumps to hyperspace due to fencepost error
  3283.         FFFFh set DOS memory management functions
  3284.         BX:SI -> FAR routine for allocating DOS memory
  3285.             (called with AH=48h,BX=number of paragraphs to alloc;
  3286.              returns CF clear, AX=segment of allocated memory, or
  3287.                   CF set on error)
  3288.         CX:DI -> FAR routine for freeing DOS memory
  3289.             (called with AH=49h,ES=segment of block to free;
  3290.              returns CF set on error,AX=error code)
  3291.         Note: each of these pointers normally points at INT 21/RETF
  3292.         other Return: AX = 0001h
  3293. Note:    BX may be destroyed by any of the API calls
  3294. ----------2FFBA1BX0084-----------------------
  3295. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  3296.     AX = FBA1h
  3297.     BX = 0084h
  3298.     ES:DI -> response buffer (see below)
  3299. Return: ES:DI buffer filled
  3300. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  3301.  
  3302. Format of response buffer:
  3303. Offset    Size    Description
  3304.  00h  4 BYTEs    signature "IABH"
  3305.  04h    WORD    success indicator
  3306.         0001h failed (INT 2F hooked by another program)
  3307.         unchanged if successful
  3308.  06h    WORD    segment of ???
  3309.  08h    WORD    segment of ??? memory block to free if nonzero
  3310.  0Ah    WORD    segment of ??? memory block to free if nonzero
  3311. ----------2FFBFBES0000-----------------------
  3312. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  3313.     AX = FBFBh
  3314.     ES = 0000h
  3315. Return: ES nonzero if installed
  3316.         ES:BX -> entry point data structure (see below)
  3317. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  3318.  
  3319. Format of entry point data structure:
  3320. Offset    Size    Description
  3321.  00h  3 BYTEs    signature "FB "
  3322.  03h    BYTE    driver major version number???
  3323.  04h    DWORD    speech driver entry point
  3324.  08h 24 BYTEs    ???
  3325.  20h  ? BYTEs    data buffer for calling speech driver
  3326.  
  3327. Call driver entry point with:
  3328.     AL = function
  3329.         07h speak a string
  3330.             data buffer (see above) contains:
  3331.             BYTE  length of string
  3332.               N BYTEs string to speak
  3333. ----------2FFE00DI4E55-----------------------
  3334. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  3335.     AX = FE00h
  3336.     DI = 4E55h ("NU")
  3337.     SI = TSR identifier
  3338.         4346h ("CF") NCACHE-F (v5) / NCACHE (v6.0+)
  3339.         4353h ("CS") NCACHE-S (v5 only)
  3340.         4443h ("DC") DISKREET
  3341.         444Dh ("DM") DISKMON
  3342.         4653h ("FS") FILESAVE (v5) / EP (v6.0+)
  3343. Return: SI = TSR reply
  3344.         lowercase version of SI on entry (i.e. SI OR 2020h)
  3345.     AH = status
  3346.         00h installed but disabled internally
  3347.         01h installed and enabled
  3348.     AL = status
  3349.         00h    NCACHE-x or DISKREET installed
  3350.         01h FILESAVE / EP / DISKMON v6 installed
  3351.         45h    DISKMON v5 installed
  3352.     BX = length of *.INI file (DISKMON and FILESAVE/EP only) (see below)
  3353.     CX = segment of resident portion
  3354.         FFFFh if completely loaded high (NCACHE)
  3355. ---FILESAVE/EP---
  3356.     DL = ??? (apparently always 00h)
  3357. ---DISKMON---
  3358.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6])
  3359. Note:    the value returned in CX is incorrect for NCACHE 6.00
  3360. SeeAlso: AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  3361.  
  3362. Format of DISKMON.INI file:
  3363. Offset    Size    Description
  3364. -6Ch 108 BYTEs    (in memory copy only)
  3365.         list of filenames which are always protected:
  3366.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  3367.           MIO.SYS/IO.BIN, COMMAND.COM
  3368.  00h    BYTE    ??? always 01h
  3369.  01h    BYTE    disk light (00h off, 01h on)
  3370.  02h    BYTE    disk protection (00h off, 01h on)
  3371.  03h    BYTE    protected areas
  3372.         01h system area
  3373.         02h files
  3374.         03h system area and files
  3375.         04h entire disk
  3376.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  3377.  05h 27 BYTEs    filename extension list (9 entries)
  3378.         (lowercase, blank padded or = 000000h)
  3379.  20h 240 BYTEs    filename list (20 entries)
  3380.         (lowercase, name and extension blank padded, with '.')
  3381. Note:    CX:0508h -> copy in installed TSR (v5)
  3382.     CX:052Fh -> copy in installed TSR (v6)
  3383.  
  3384. Format of FILESAVE.INI / EP.INI file:
  3385. Offset    Size    Description
  3386.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  3387.  00h    BYTE    drives    A: - H:
  3388.  01h    BYTE    drives    I: - P:
  3389.  02h    BYTE    drives    Q: - X:
  3390.  03h    BYTE    drives    Y: - Z:
  3391.  04h    BYTE    which files to protect
  3392.         00h all files
  3393.         01h all files with extension in list
  3394.         02h all files except those with extension in list
  3395.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  3396.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  3397.  21h    WORD    number of days after which files are purged (0 = never)
  3398.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  3399. Note:    CX:03D2h -> copy in installed TSR (v5.0)
  3400.     CX:03F5h -> copy in installed TSR (v6.0)
  3401. ----------2FFE01DI4E55-----------------------
  3402. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  3403.     AX = FE01h
  3404.     DI = 4E55h ("NU")
  3405.     SI = TSR identifier (see AX=FE00h)
  3406. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3407.     AX = status
  3408.         0002h successful (DISKMON, FILESAVE, EP)
  3409.         FE00h successful (NCACHE-x, DISKREET)
  3410. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  3411.       report generated by the programs still indicates the previous state,
  3412.       and DISKMON.INI is not updated
  3413.     apparently has no effect on DISKREET
  3414. SeeAlso: AX=FE00h,AX=FE02h
  3415. ----------2FFE02DI4E55-----------------------
  3416. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  3417.     AX = FE02h
  3418.     DI = 4E55h ("NU")
  3419.     SI = TSR identifier (see AX=FE00h)
  3420. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3421.     AX = status
  3422.         0004h successful (DISKMON, FILESAVE)
  3423.         FE00h successful (NCACHE-x, DISKREET)
  3424. Note:    (see AX=FE01h)
  3425. SeeAlso: AX=FE00h,AX=FE01h
  3426. ----------2FFE03DI4E55-----------------------
  3427. INT 2F U - NORTON UTILITIES 5.0+ TSRs - internal - ???
  3428.     AX = FE03h
  3429.     DI = 4E55h ("NU")
  3430.     SI = TSR identifier (see AX=FE00h)
  3431. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3432.     AX = status
  3433.         0006h successful???
  3434. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  3435.     reportedly dangerous
  3436. SeeAlso: AX=FE00h
  3437. ----------2FFE04DI4E55-----------------------
  3438. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  3439.     AX = FE04h
  3440.     DI = 4E55h ("NU")
  3441.     SI = TSR identifier (see AX=FE00h)
  3442. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  3443.     AX = status
  3444.         0008h successful???
  3445. SeeAlso: AX=FE00h
  3446. ----------2FFE05DI4E55-----------------------
  3447. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  3448.     AX = FE05h
  3449.     DI = 4E55h ("NU")
  3450.     SI = TSR identifier (see AX=FE00h)
  3451. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  3452.     AX = status
  3453.         000Ah successful???
  3454. Note:    reportedly dangerous
  3455. SeeAlso: AX=FE00h
  3456. ----------2FFF00-----------------------------
  3457. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  3458.     AX = FF00h
  3459. Return: AL = 00h not installed, OK to install
  3460.        = 01h not installed, not OK to install
  3461.        = FFh installed
  3462. SeeAlso: AX=FF01h,INT 21/AH=FFh"Topware",INT 7A"Topware"
  3463. ----------2FFF01-----------------------------
  3464. INT 2F - Topware Network Operating System - GET VERSION
  3465.     AX = FF01h
  3466. Return: AX = version
  3467. SeeAlso: AX=FF00h
  3468. ----------30---------------------------------
  3469. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  3470.    the CALL 5 entry point does a FAR jump to here
  3471. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  3472.       memory
  3473. SeeAlso: INT 21/AH=26h
  3474. ----------31---------------------------------
  3475. INT 31 - overwritten by CP/M jump instruction in INT 30
  3476. ----------310000-----------------------------
  3477. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  3478.     AX = 0000h
  3479.     CX = number of descriptors to allocate
  3480. Return: CF clear if successful
  3481.         AX = base selector
  3482.     CF set on error
  3483.         AX = error code (DPMI 1.0+)
  3484.         0000h-7FFFh DOS error passed through by DPMI
  3485.         8001h unsupported function
  3486.         8002h object in wrong state for function
  3487.         8003h system integrity would be endangered
  3488.         8004h deadlock detected
  3489.         8005h pending serialization request cancelled
  3490.         8010h out of DPMI internal resources
  3491.         8011h descriptor unavailable
  3492.         8012h linear memory unavailable
  3493.         8013h physical memory unavailable
  3494.         8014h backing store unavailable
  3495.         8015h callback unavailable
  3496.         8016h handle unavailable
  3497.         8017h maximum lock count exceeded
  3498.         8018h shared memory already serialized exclusively by another
  3499.         8019h shared memory already serialized shared by another client
  3500.         8021h invalid value for numeric or flag parameter
  3501.         8022h invalid segment selector
  3502.         8023h invalid handle
  3503.         8024h invalid callback
  3504.         8025h invalid linear address
  3505.         8026h request not supported by hardware
  3506. Notes:    DPMI is the DOS Protected-Mode Interface
  3507.     the base and limit of the returned descriptors will be 0, and the type
  3508.       will be "data"
  3509.     add the value returned by INT 31/AX=0003h to move to subsequent
  3510.       descriptors if multiple descriptors were allocated
  3511.     not supported by MS Windows 3.0 in Standard mode
  3512. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  3513. ----------310001-----------------------------
  3514. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  3515.     AX = 0001h
  3516.     BX = selector to free
  3517. Return: CF clear if successful
  3518.     CF set on error
  3519.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  3520. Notes:    only one descriptor is freed per call
  3521.     the program's initial CS, DS, and SS descriptors may be freed
  3522.     (DPMI 1.0+) any segment registers containing the freed selector are
  3523.       set to 0000h
  3524.     not supported by MS Windows 3.0 in Standard mode
  3525. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  3526. ----------310002-----------------------------
  3527. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  3528.     AX = 0002h
  3529.     BX = real mode segment
  3530. Return: CF clear if successful
  3531.         AX = selector corresponding to real mode segment (64K limit)
  3532.     CF set on error
  3533.         AX = error code (DPMI 1.0+) (8011h) (see AX=0000h)
  3534. Notes:    multiple calls for the same real mode segment return the same selector
  3535.     the returned descriptor can never be modified or freed
  3536.     not supported by MS Windows 3.0 in Standard mode
  3537. ----------310003-----------------------------
  3538. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  3539.     AX = 0003h
  3540. Return: CF clear
  3541.         AX = value to add to get next sequential selector
  3542. Notes:    the increment will be a power of two
  3543.     not supported by MS Windows 3.0 in Standard mode
  3544. SeeAlso: AX=0000h
  3545. ----------310004-----------------------------
  3546. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  3547.     AX = 0004h
  3548.     BX = selector to lock (prevent paging)
  3549. Return: ???
  3550. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  3551.       specification, this function is called by MS Windows TASKMAN,
  3552.       PROGMAN, and KERNEL
  3553. SeeAlso: AX=0005h,AX=0600h
  3554. ----------310005-----------------------------
  3555. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  3556.     AX = 0005h
  3557.     BX = selector to unlock (permit paging)
  3558. Return: ???
  3559. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  3560.       specification, this function is called by MS Windows TASKMAN,
  3561.       PROGMAN, and KERNEL
  3562. SeeAlso: AX=0004h,AX=0601h
  3563. ----------310006-----------------------------
  3564. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  3565.     AX = 0006h
  3566.     BX = selector
  3567. Return: CF clear if successful
  3568.         CX:DX = linear base address of segment
  3569.     CF set on error
  3570.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  3571. Note:    not supported by MS Windows 3.0 in Standard mode
  3572. SeeAlso: AX=0007h
  3573. ----------310007-----------------------------
  3574. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  3575.     AX = 0007h
  3576.     BX = selector
  3577.     CX:DX = linear base address
  3578. Return: CF clear if successful
  3579.     CF set on error
  3580.         AX = error code (DPMI 1.0+) (8022h,8025h) (see AX=0000h)
  3581. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  3582.     only the low 24 bits of the address will be used by 16-bit DPMI
  3583.       implementations even on a 386 or higher
  3584.     DPMI 1.0+ automatically reloads any segment registers containing the
  3585.       selector being modified
  3586.     not supported by MS Windows 3.0 in Standard mode
  3587. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  3588. SeeAlso: INT 21/AH=E9h"OS/286"
  3589. ----------310008-----------------------------
  3590. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  3591.     AX = 0008h
  3592.     BX = selector
  3593.     CX:DX = segment limit
  3594. Return: CF clear if successful
  3595.     CF set on error
  3596.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  3597. Notes:    CX must be zero for 16-bit DPMI implementations
  3598.     limits greater than 1MB must be page aligned (low 12 bits set)
  3599.     only modify descriptors allocated with INT 31/AX=0000h
  3600.     DPMI 1.0+ automatically reloads any segment registers containing the
  3601.       selector being modified
  3602.     not supported by MS Windows 3.0 in Standard mode
  3603. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AH=E9h"OS/286"
  3604. ----------310009-----------------------------
  3605. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  3606.     AX = 0009h
  3607.     BX = selector
  3608.     CL = access rights/type byte
  3609.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  3610. Return: CF clear if successful
  3611.     CF set on error
  3612.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  3613. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  3614.     DPMI 1.0+ automatically reloads any segment registers containing the
  3615.       selector being modified
  3616.     not supported by MS Windows 3.0 in Standard mode
  3617. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h
  3618. ----------31000A-----------------------------
  3619. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  3620.     AX = 000Ah
  3621.     BX = selector
  3622. Return: CF clear if successful
  3623.         AX = new data selector
  3624.     CF set on error
  3625.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  3626. Notes:    fails if selector in BX is not a code segment or is invalid
  3627.     use INT 31/AX=0001h to free new selector
  3628.     future changes to the original selector will not be reflected in the
  3629.       returned alias selector
  3630.     not supported by MS Windows 3.0 in Standard mode
  3631. SeeAlso: AX=0001h
  3632. ----------31000B-----------------------------
  3633. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  3634.     AX = 000Bh
  3635.     BX = LDT selector
  3636.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  3637. Return: CF clear if successful
  3638.         buffer filled
  3639.     CF set on error
  3640.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  3641. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  3642.     not supported by MS Windows 3.0 in Standard mode
  3643. SeeAlso: AX=000Ch
  3644. ----------31000C-----------------------------
  3645. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  3646.     AX = 000Ch
  3647.     BX = LDT selector
  3648.     ES:(E)DI -> 8-byte buffer containing descriptor
  3649. Return:    CF clear if successful
  3650.     CF set on error
  3651.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  3652. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  3653.     only modify descriptors allocated with INT 31/AX=0000h
  3654.     DPMI 1.0+ automatically reloads any segment registers containing the
  3655.       selector being modified
  3656.     not supported by MS Windows 3.0 in Standard mode
  3657. SeeAlso: AX=000Bh
  3658. ----------31000D-----------------------------
  3659. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  3660.     AX = 000Dh
  3661.     BX = LDT selector
  3662. Return: CF clear if successful
  3663.         descriptor allocated
  3664.     CF set on error
  3665.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  3666. Notes:    free descriptor with INT 31/AX=0001h
  3667.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  3668.       some may already be in use by other applications under DPMI 0.9;
  3669.       DPMI 1.0 guarantees 16 descriptors per client
  3670.     not supported by MS Windows 3.0 in Standard mode
  3671. SeeAlso: AX=0000h,AX=0001h
  3672. ----------31000E-----------------------------
  3673. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  3674.     AX = 000Eh
  3675.     CX = number of descriptors to copy
  3676.     ES:(E)DI -> descriptor buffer (see below)
  3677. Return: CF clear if successful
  3678.         descriptors copied
  3679.     CF set on error
  3680.         AX = error code (8022h) (see AX=0000h)
  3681.         CX = number of descriptors successfully copied
  3682. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  3683.     if the function fails, the first CX descriptors are valid; the
  3684.       remainder are not modified
  3685. SeeAlso: AX=000Bh,AX=000Fh
  3686.  
  3687. Format of descriptor buffer entry (one per descriptor to get):
  3688. Offset    Size    Description
  3689.  00h    WORD    selector (set by client)
  3690.  02h    QWORD    descriptor (set by host)
  3691. ----------31000F-----------------------------
  3692. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  3693.     AX = 000Fh
  3694.     CX = number of descriptors to copy
  3695.     ES:(E)DI -> descriptor buffer (see below)
  3696. Return: CF clear if successful
  3697.         descriptors copied
  3698.     CF set on error
  3699.         AX = error code (8021h,8022h,8025h) (see AX=0000h)
  3700.         CX = number of descriptors successfully copied
  3701. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  3702.     if the function fails, the first CX descriptors are valid; the
  3703.       remainder are not modified
  3704.     DPMI 1.0+ automatically reloads any segment registers containing a
  3705.       selector being modified
  3706. SeeAlso: AX=000Ch,AX=000Eh
  3707.  
  3708. Format of descriptor buffer entry (one per descriptor to set):
  3709. Offset    Size    Description
  3710.  00h    WORD    selector
  3711.  02h    QWORD    descriptor
  3712. ----------310100-----------------------------
  3713. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  3714.     AX = 0100h
  3715.     BX = number of paragraphs to allocate
  3716. Return: CF clear if successful
  3717.         AX = real mode segment of allocated block
  3718.         DX = first selector for allocated block
  3719.     CF set on error
  3720.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  3721.          (DPMI 1.0+) DPMI error code (8011h) (see AX=0000h)
  3722.         BX = size (in paragraphs) of largest available block
  3723. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  3724.       if the caller is a 16-bit program
  3725.     never modify or deallocate returned descriptors
  3726.     not supported by MS Windows 3.0 in Standard mode
  3727. SeeAlso: AX=0101h,AX=0501h
  3728. ----------310101-----------------------------
  3729. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  3730.     AX = 0101h
  3731.     DX = selector of block
  3732. Return: CF set if successful
  3733.     CF set on error
  3734.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  3735. Notes:    all descriptors allocated for the block are automatically freed
  3736.     DPMI 1.0+ automatically zeros any segment registers containing a
  3737.       selector freed by this function
  3738.     not supported by MS Windows 3.0 in Standard mode
  3739. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  3740. ----------310102-----------------------------
  3741. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  3742.     AX = 0102h
  3743.     BX = new block size in paragraphs
  3744.     DX = selector of block
  3745. Return: CF clear if successful
  3746.     CF set on error
  3747.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  3748.          (DPMI 1.0+) DPMI error code (8011h,8022h) (see AX=0000h)
  3749.         BX = maximum block size (in paragraphs) possible
  3750. Notes:    increasing the size of a block past a 64K boundary will fail if the
  3751.       next descriptor in the LDT is already in use
  3752.     shrinking a block past a 64K boundary will cause some selectors to be
  3753.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  3754.       a selector freed by this function
  3755.     not supported by MS Windows 3.0 in Standard mode
  3756. SeeAlso: AX=0100h
  3757. ----------310200-----------------------------
  3758. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  3759.     AX = 0200h
  3760.     BL = interrupt number
  3761. Return: CF clear
  3762.     CX:DX = segment:offset of real mode interrupt handler
  3763. Note:    the DPMI implementation is required to support all 256 vectors
  3764. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  3765. ----------310201-----------------------------
  3766. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  3767.     AX = 0201h
  3768.     BL = interrupt number
  3769.     CX:DX = segment:offset of real mode handler
  3770. Return: CF clear
  3771. Note:    all memory that may be touched by a hardware interrupt handler must be
  3772.       locked down with INT 31/AX=0600h    
  3773. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  3774. ----------310202-----------------------------
  3775. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  3776.     AX = 0202h
  3777.     BL = exception number (00h-1Fh)
  3778. Return:    CF clear if successful
  3779.         CX:(E)DX = selector:offset of handler
  3780.     CF set on error
  3781.         AX = error code (DPMI 1.0+) (8021h) (see AX=0000h)
  3782. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  3783.     DPMI 1.0+ supports this function only for backward compatibility; use
  3784.        AX=0210h or AX=0211h instead
  3785.     not supported by MS Windows 3.0 in Standard mode
  3786. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  3787. ----------310203-----------------------------
  3788. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  3789.     AX = 0203h
  3790.     BL = exception number (00h-1Fh)
  3791.     CX:(E)DX = selector:offset of handler
  3792. Return: CF clear if successful
  3793.     CF set on error
  3794.         AX = error code (DPMI 1.0+) (8021h,8022h) (see AX=0000h)
  3795. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  3796.       stack frame on chaining to the next exception handler
  3797.     the handler should return using a FAR return
  3798.     all fault stack frames contain an error code, but it is only valid for
  3799.       exceptions 08h and 0Ah-0Eh
  3800.     handlers will only be called if the exception occurs in protected mode,
  3801.       and the DPMI host does not transparently handle the exception
  3802.     the handler may change certain values on the stack frame (see below)
  3803.     DPMI 1.0+ supports this function only for backward compatibility; use
  3804.        AX=0212h or AX=0213h instead
  3805.     not supported by MS Windows 3.0 in Standard mode
  3806. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  3807.  
  3808. Format of stack frame for 16-bit programs: (offset from SS:SP)
  3809. Offset    Size    Description
  3810.  00h    DWORD    return CS:IP (do not change)
  3811.  04h    WORD    error code
  3812.  06h    DWORD    CS:IP of exception
  3813.  0Ah    WORD    flags
  3814.  0Ch    DWORD    SS:SP
  3815.  
  3816. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  3817. Offset    Size    Description
  3818.  00h    DWORD    return EIP (do not change)
  3819.  04h    WORD    return CS selector (do not change)
  3820.  06h    WORD    reserved (do not change)
  3821.  08h    DWORD    error code
  3822.  0Ch    DWORD    EIP of exception
  3823.  10h    WORD    CS selector of exception
  3824.  12h    WORD    reserved (do not change)
  3825.  14h    DWORD    EFLAGS
  3826.  18h    DWORD    ESP
  3827.  1Ch    WORD    SS
  3828.  1Eh    WORD    reserved (do not change)
  3829. ----------310204-----------------------------
  3830. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  3831.     AX = 0204h
  3832.     BL = interrupt number
  3833. Return:    CF clear
  3834.     CX:(E)DX = selector:offset of handler
  3835. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  3836.     DPMI implementations are required to support all 256 vectors
  3837.     not supported by MS Windows 3.0 in Standard mode
  3838. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2F/AX=FB42h/BX=0024h
  3839. ----------310205-----------------------------
  3840. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  3841.     AX = 0205h
  3842.     BL = interrupt number
  3843.     CX:(E)DX = selector:offset of handler
  3844. Return: CF clear if successful
  3845.     CF set on error
  3846.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  3847. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  3848.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  3849.       to the next handler
  3850.     DPMI implementations are required to support all 256 vectors
  3851.     hardware interrupts are reflected to the virtual machine's primary
  3852.       client, software interrupts to the current client
  3853.     not supported by MS Windows 3.0 in Standard mode
  3854. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2F/AX=FB42h/BX=0025h
  3855. ----------310210-----------------------------
  3856. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  3857.     AX = 0210h
  3858.     BL = exception number (00h-1Fh)
  3859. Return: CF clear if successful
  3860.         CX:(EDX) = selector:offset of exception handler
  3861.     CF set on error
  3862.         AX = error code (8021h) (see AX=0000h)
  3863. Note:    DPMI host reflects exception to current client's handler
  3864. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  3865. ----------310211-----------------------------
  3866. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  3867.     AX = 0211h
  3868.     BL = exception number (00h-1Fh)
  3869. Return: CF clear if successful
  3870.         CX:(EDX) = selector:offset of exception handler
  3871.     CF set on error
  3872.         AX = error code (8021h) (see AX=0000h)
  3873. Notes:    returns address of protected-mode handler for real-mode exception
  3874.     DPMI host performs a switch to protected mode, reflects the exception
  3875.       to the virtual machine's primary client, and returns to real mode
  3876.       on the handler's completion
  3877. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  3878. ----------310212-----------------------------
  3879. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  3880.     AX = 0212h
  3881.     BL = exception or fault number (00h-1Fh)
  3882.     CX:(E)DX = exception handler selector:offset
  3883. Return: CF clear if successful
  3884.     CF set on error
  3885.         AX = error code (8021h,8022h) (see AX=0000h)
  3886. Note:    DPMI host sends exception to current client's handler
  3887. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  3888. ----------310213-----------------------------
  3889. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  3890.     AX = 0213h
  3891.     BL = exception or fault number (00h-1Fh)
  3892.     CX:(E)DX = exception handler selector:offset
  3893. Return: CF clear if successful
  3894.     CF set on error
  3895.         AX = error code (8021h,8022h) (see AX=0000h)
  3896. Notes:    specifies address of protected-mode handler for real-mode exception
  3897.     DPMI host performs a switch to protected mode, reflects the exception
  3898.       to the virtual machine's primary client, and returns to real mode
  3899.       on the handler's completion
  3900. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  3901. ----------310300-----------------------------
  3902. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  3903.     AX = 0300h
  3904.     BL = interrupt number
  3905.     BH = flags
  3906.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  3907.            reserved, must be 0 (DPMI 1.0+)
  3908.         others must be 0
  3909.     CX = number of words to copy from protected mode to real mode stack
  3910.     ES:(E)DI = selector:offset of real mode call structure (see below)
  3911. Return:    CF clear if successful
  3912.         real mode call structure modified (all fields except SS:SP, CS:IP
  3913.           filled with return values from real mode interrupt)
  3914.     CF set on error
  3915.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  3916.     protected mode stack unchanged
  3917. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  3918.     CS:IP in the real mode call structure is ignored for this call,
  3919.       instead, the indicated interrupt vector is used for the address
  3920.     the flags in the call structure are pushed on the real mode stack to
  3921.       form an interrupt stack frame, and the trace and interrupt flags are
  3922.       clear on entry to the handler
  3923.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  3924.     the real mode handler must return with the stack in the same state as
  3925.       it was on being called
  3926. SeeAlso: AX=0302h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  3927. SeeAlso: INT 2F/AX=FB42h/BX=000Dh
  3928.  
  3929. Format of real mode call structure:
  3930. Offset    Size    Description
  3931.  00h    DWORD    EDI
  3932.  04h    DWORD    ESI
  3933.  08h    DWORD    EBP
  3934.  0Ch    DWORD    reserved (00h)
  3935.  10h    DWORD    EBX
  3936.  14h    DWORD    EDX
  3937.  18h    DWORD    ECX
  3938.  1Ch    DWORD    EAX
  3939.  20h    WORD    flags
  3940.  22h    WORD    ES
  3941.  24h    WORD    DS
  3942.  26h    WORD    FS
  3943.  28h    WORD    GS
  3944.  2Ah    WORD    IP
  3945.  2Ch    WORD    CS
  3946.  2Eh    WORD    SP
  3947.  30h    WORD    SS
  3948. ----------310301-----------------------------
  3949. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  3950.     AX = 0301h
  3951.     BH = flags
  3952.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  3953.            reserved, must be 0 (DPMI 1.0+)
  3954.         others must be 0
  3955.     CX = number of words to copy from protected mode to real mode stack
  3956.     ES:DI / ES:EDI = selector:offset of real mode call structure
  3957.             (see INT 31/AX=0300h)
  3958. Return: CF clear if successful
  3959.         real mode call structure modified (all fields except SS:SP, CS:IP
  3960.           filled with return values from real mode interrupt)
  3961.     CF set on error
  3962.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  3963.     protected mode stack unchanged
  3964. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  3965.     the real mode procedure must exit with a FAR return
  3966.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  3967.     the real mode handler must return with the stack in the same state as
  3968.       it was on being called
  3969. SeeAlso: AX=0300h,AX=0302h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  3970. ----------310302-----------------------------
  3971. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  3972.     AX = 0302h
  3973.     BH = flags
  3974.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  3975.            reserved, must be 0 (DPMI 1.0+)
  3976.         others must be 0
  3977.     CX = number of words to copy from protected mode to real mode stack
  3978.     ES:DI / ES:EDI = selector:offset of real mode call structure
  3979.             (see INT 31/AX=0300h)
  3980. Return:    CF clear if successful
  3981.         real mode call structure modified (all fields except SS:SP, CS:IP
  3982.           filled with return values from real mode interrupt)
  3983.     CF set on error
  3984.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  3985.     protected mode stack unchanged
  3986. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  3987.     the flags in the call structure are pushed on the real mode stack to
  3988.       form an interrupt stack frame, and the trace and interrupt flags are
  3989.       clear on entry to the handler
  3990.     the real mode procedure must exit with an IRET
  3991.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  3992.     the real mode handler must return with the stack in the same state as
  3993.       it was on being called
  3994. SeeAlso: AX=0300h
  3995. ----------310303-----------------------------
  3996. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  3997.     AX = 0303h
  3998.     DS:SI / DS:ESI = selector:offset of procedure to call
  3999.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4000.             (see AX=0300h)
  4001. Return: CF clear if successful
  4002.         CX:DX = segment:offset of real mode call address
  4003.     CF set on error
  4004.         AX = error code (DPMI 1.0+) (8015h) (see AX=0000h)
  4005. Notes:    the real mode call structure is static, causing reentrancy problems;
  4006.       its contents are only valid at the time of a callback
  4007.     the called procedure must modify the real mode CS:IP before returning
  4008.     values are returned to real mode by modifying the real mode call struc
  4009.     DPMI hosts must provide at least 16 callbacks per client
  4010. SeeAlso: AX=0304h,AX=0C00h
  4011.  
  4012. Values callback procedure is called with:
  4013.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  4014.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4015.     SS:SP / SS:ESP = locked protected mode API stack
  4016.     interrupts disabled
  4017. Return: (with IRET)
  4018.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  4019. ----------310304-----------------------------
  4020. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  4021.     AX = 0304h
  4022.     CX:DX = real mode callback address
  4023. Return: CF clear if successful
  4024.     CF set on error
  4025.         AX = error code (DPMI 1.0+) (8024h) (see AX=0000h)
  4026. SeeAlso: AX=0303h
  4027. ----------310305-----------------------------
  4028. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  4029.     AX = 0305h
  4030. Return: CF clear
  4031.     AX = size in bytes of state buffer
  4032.     BX:CX = real mode address of procedure to save/restore state
  4033.     SI:DI / SI:EDI = protected mode procedure to save/restore state
  4034. Notes:    the buffer size will be zero if it is not necessary to preserve state
  4035.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  4036.     this function is only needed if using the raw mode switch service
  4037. SeeAlso: AX=0306h
  4038.  
  4039. Values to call state-save procedures with:
  4040.     AL = direction
  4041.         00h save state
  4042.         01h restore state
  4043.     ES:DI / ES:EDI -> state buffer
  4044. Return: all registers preserved
  4045. ----------310306-----------------------------
  4046. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  4047.     AX = 0306h
  4048. Return:    CF clear
  4049.     BX:CX -> procedure to switch from real to protected mode
  4050.     SI:DI / SI:EDI -> procedure to switch from protected to real mode
  4051. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  4052.     the caller must save and restore the state of the task with AX=0305h
  4053.     not supported by MS Windows 3.0 in Standard mode
  4054. SeeAlso: AX=0305h
  4055.  
  4056. Values to JUMP at mode-switch procedures with:
  4057.     AX = new DS
  4058.     CX = new ES
  4059.     DX = new SS
  4060.     BX / EBX = new SP / ESP
  4061.     SI = new CS
  4062.     DI / EDI = new IP / EIP
  4063. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  4064.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  4065.     interrupts will stay disabled during the entire mode switch if they
  4066.       are disabled on entry to the mode-switch procedure
  4067. ----------310400-----------------------------
  4068. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  4069.     AX = 0400h
  4070. Return: CF clear
  4071.     AH = major version of DPMI spec supported
  4072.     AL = two-digit minor version of DPMI spec supported
  4073.     BX = flags
  4074.         bit 0: running under an 80386 (32-bit) implementation
  4075.         bit 1: processor returns to real mode for reflected interrupts
  4076.            instead of V86 mode
  4077.         bit 2: virtual memory supported
  4078.         bit 3: reserved (undefined)
  4079.         others reserved (zero)
  4080.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4081.     DH = curr value of virtual master interrupt controller base interrupt
  4082.     DL = curr value of virtual slave interrupt controller base interrupt
  4083. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 67/AX=DE0Ah
  4084. ----------310401-----------------------------
  4085. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  4086.     AX = 0401h
  4087.     ES:(E)DI -> 128-byte buffer (see below)
  4088. Return: CF clear if successful
  4089.         AX = capabilities
  4090.         bit 0: paged accessed/dirty supported (see AX=0506h,AX=0507h)
  4091.             1: exceptions restartability supported
  4092.             2: device mapping supported (see AX=0508h)
  4093.             3: conventional memory mapping supported (see AX=0509h)
  4094.             4: demand zero-fill supported
  4095.             5: write-protect client capability supported
  4096.             6: write-protect host capability supported
  4097.             7-15: reserved
  4098.         CX = reserved (00h)
  4099.         DX = reserved (00h)
  4100.         buffer filled
  4101.     CF set on error (DPMI 0.9 only)
  4102. SeeAlso: AX=0400h
  4103.  
  4104. Format of buffer:
  4105. Offset    Size    Description
  4106.  00h    BYTE    host major version number
  4107.  01h    BYTE    host minor version number
  4108.  02h 126 BYTEs    ASCIZ host vendor name
  4109. ----------310500-----------------------------
  4110. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  4111.     AX = 0500h
  4112.     ES:DI / ES:EDI -> buffer for memory information (see below)
  4113. Return: CF clear
  4114. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  4115.     this function must be considered advisory because other applications
  4116.       may affect the results at any time after the call
  4117.     fields not supported by the DPMI implementation are filled with
  4118.       FFFFFFFFh
  4119.     DPMI 1.0+ supports this function solely for backward compatibility; use
  4120.       AX=050Bh instead
  4121. SeeAlso: AX=0501h,AX=0604h
  4122.  
  4123. Format of memory information:
  4124. Offset    Size    Description
  4125.  00h    DWORD    largest available block in bytes
  4126.  04h    DWORD    maximum unlocked page allocation
  4127.  08h    DWORD    maximum locked page allocation
  4128.  0Ch    DWORD    total linear address space in pages
  4129.  10h    DWORD    total unlocked pages
  4130.  14h    DWORD    free pages
  4131.  18h    DWORD    total physical pages
  4132.  1Ch    DWORD    free linear address space in pages
  4133.  20h    DWORD    size of paging file/partition in pages
  4134.  24h 12 BYTEs    reserved
  4135. ----------310501-----------------------------
  4136. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  4137.     AX = 0501h
  4138.     BX:CX = size in bytes
  4139. Return: CF clear if successful
  4140.         BX:CX = linear address of block
  4141.         SI:DI = memory block handle for resizing and freeing block
  4142.     CF set on error
  4143.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see AX=0000h)
  4144. Notes:    no selectors are allocated
  4145.     the memory block is allocated unlocked (can be locked with AX=0600h)
  4146.     allocations are often page granular (see AX=0604h)
  4147. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  4148. ----------310502-----------------------------
  4149. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  4150.     AX = 0502h
  4151.     SI:DI = handle of memory block
  4152. Return: CF clear if successful
  4153.     CF set on error
  4154.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4155. Note:    any selectors allocated for the memory block must also be freed,
  4156.       preferably before freeing the memory block
  4157. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  4158. ----------310503-----------------------------
  4159. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  4160.     AX = 0503h
  4161.     BX:CX = new size in bytes (nonzero)
  4162.     SI:DI = handle of memory block
  4163. Return: CF clear if successful
  4164.         BX:CX = new linear address
  4165.         SI:DI = new handle of memory block
  4166.     CF set on error
  4167.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  4168.         (see AX=0000h)
  4169. Notes:    any selectors pointing at the block must be updated
  4170.     the previous memory block handle becomes invalid
  4171.     an error is returned if the new size is 0
  4172. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  4173. ----------310504-----------------------------
  4174. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  4175.     AX = 0504h
  4176.     EBX = page-aligned linear address of memory block (00000000h if any
  4177.         address is acceptable)
  4178.     ECX = size in bytes (nonzero)
  4179.     EDX = flags
  4180.         bit 0: set to create committed pages instead of uncommitted pages
  4181.         bits 1-31: reserved (0)
  4182. Return: CF clear if successful
  4183.         EBX = linear address of memory block
  4184.         ESI = memory block handle
  4185.     CF set on error
  4186.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see AX=0000h)
  4187. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4188. SeeAlso: AX=0501h,AX=0505h
  4189. ----------310505-----------------------------
  4190. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  4191.     AX = 0505h
  4192.     ESI = memory block handle
  4193.     ECX = new size in bytes (nonzero)
  4194.     EDX = flags
  4195.         bit 0: create committed pages rather than uncommitted pages
  4196.         bit 1: segment descriptor update required
  4197.         ES:EBX -> buffer containing array of WORDs with selectors
  4198.         EDI = number of selectors in array
  4199.         bits 2-31: reserved (0)
  4200. Return: CF clear if successful
  4201.         EBX = new linear base address
  4202.         ESI = new memory block handle
  4203.     CF set on error
  4204.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see AX=0000h)
  4205. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4206.     the old memory block handle becomes invalid
  4207.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  4208.       all descriptors for selectors in the update buffer which fall within
  4209.       the memory block
  4210. SeeAlso: AX=0503h,AX=0504h
  4211. ----------310506-----------------------------
  4212. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  4213.     AX = 0506h
  4214.     ESI = memory block handle
  4215.     EBX = offset in memory block of first page
  4216.     ECX = number of pages
  4217.     ES:EDX -> array of WORDs to hold page attributes (see below)
  4218. Return: CF clear if successful
  4219.         buffer filled
  4220.     CF set on error
  4221.         AX = error code (8001h,8023h,8025h) (see AX=0000h)
  4222. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4223.     if EBX is not page-aligned, it will be rounded down
  4224. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  4225.  
  4226. Format of page attribute words:
  4227.  bits 0-2    page type
  4228.         000 uncommitted
  4229.         001 committed
  4230.         010 mapped (see AX=0508h,AX=0509h)
  4231.         other currently unused
  4232.  bit 3        page is read/write rather than read-only
  4233.  bit 4        accessed/dirty bits supplied in bits 5 and 6
  4234.  bit 5        page has been accessed (only valid if bit 4 set)
  4235.  bit 6        page has been written (only valid if bit 4 set)
  4236.  bits 7-15    reserved (0)
  4237. ----------310507-----------------------------
  4238. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  4239.     AX = 0507h
  4240.     ESI = memory block handle
  4241.     EBX = offset in memory block of first page
  4242.     ECX = number of pages
  4243.     ES:EDX -> array of WORDs with new page attributes (see AX=0506h)
  4244. Return: CF clear if successful
  4245.     CF set on error
  4246.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  4247.         (see AX=0000h)
  4248.         ECX = number of pages which have been set
  4249. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4250.     if EBX is not page-aligned, it will be rounded down
  4251. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  4252. ----------310508-----------------------------
  4253. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  4254.     AX = 0508h
  4255.     ESI = memory block handle
  4256.     EBX = page-aligned offset within memory block of page(s) to be mapped
  4257.     ECX = number of pages to map
  4258.     EDX = page-aligned physical address of device
  4259. Return: CF clear if successful
  4260.     CF set on error
  4261.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  4262. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4263.     support of this function is optional; hosts are also allowed to support
  4264.       the function for some devices but not others
  4265. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  4266. ----------310509-----------------------------
  4267. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  4268.     AX = 0509h
  4269.     ESI = memory block handle
  4270.     EBX = page-aligned offset within memory block of page(s) to map
  4271.     ECX = number of pages to map
  4272.     EDX = page-aligned linear address of conventional (below 1M) memory
  4273. Return: CF clear if successful
  4274.     CF set on error
  4275.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  4276. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4277.     support of this function is optional
  4278. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  4279. ----------31050A-----------------------------
  4280. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  4281.     AX = 050AH
  4282.     SI:DI = memory block handle
  4283. Return: CF clear if successful
  4284.         SI:DI = size in bytes
  4285.         BX:CX = base address
  4286.     CF set on error
  4287.         AX = error code (8023h) (see AX=0000h)
  4288. SeeAlso: AX=0501h,AX=0504h
  4289. ----------31050B-----------------------------
  4290. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  4291.     AX = 050Bh
  4292.     ES:(E)DI -> 128-byte buffer for memory information (see below)
  4293. Return: CF clear if successful
  4294.     CF set on error (DPMI 0.9 only)
  4295. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  4296. SeeAlso: AX=0500h
  4297.  
  4298. Format of memory information:
  4299. Offset    Size    Description
  4300.  00h    DWORD    total allocated bytes of physical memory controlled by host
  4301.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  4302.  08h    DWORD    total available bytes of virtual memory controlled by host
  4303.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  4304.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  4305.  14h    DWORD    total allocated bytes of virtual memory for current client
  4306.  18h    DWORD    total available bytes of virtual memory for current client
  4307.  1Ch    DWORD    total locked bytes for current client
  4308.  20h    DWORD    maximum locked bytes for current client
  4309.  24h    DWORD    highest linear address available to current client
  4310.  28h    DWORD    largest available memory block in bytes
  4311.  2Ch    DWORD    minimum allocation unit in bytes
  4312.  30h    DWORD    allocation alignment unit size in bytes
  4313.  34h 76 BYTEs    reserved (00h)
  4314. ----------310600-----------------------------
  4315. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  4316.     AX = 0600h
  4317.     BX:CX = starting linear address
  4318.     SI:DI = size of region in bytes
  4319. Return: CF clear if successful
  4320.     CF set on error
  4321.         none of the memory is locked
  4322.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see AX=0000h)
  4323. Notes:    pages at beginning and end will be locked if the region overlaps them
  4324.     may be called multiple times for a given page; the DPMI host keeps a
  4325.       lock count for each page
  4326. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  4327. ----------310601-----------------------------
  4328. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  4329.     AX = 0601h
  4330.     BX:CX = starting linear address
  4331.     SI:DI = size of region in bytes
  4332. Return: CF clear if successful
  4333.     CF set on error
  4334.         none of the memory is unlocked
  4335.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  4336. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  4337.     memory whose lock count has not reached zero remains locked
  4338. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  4339. ----------310602-----------------------------
  4340. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  4341.     AX = 0602h
  4342.     BX:CX = starting linear address
  4343.     SI:DI = size of region in bytes
  4344. Return: CF clear if successful
  4345.     CF set on error    
  4346.         none of the memory is made pageable
  4347.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  4348. Notes:    must relock all unlocked real mode memory before terminating process
  4349.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  4350.     pages at beginning and end will be unlocked if the region overlaps them
  4351.     pageability of real mode pages is binary, not a count
  4352. SeeAlso: AX=0600h,AX=0603h
  4353. ----------310603-----------------------------
  4354. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  4355.     AX = 0603h
  4356.     BX:CX = starting linear address
  4357.     SI:DI = size of region in bytes
  4358. Return: CF clear if successful
  4359.     CF set on error    
  4360.         none of the memory is relocked
  4361.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see AX=0000h)
  4362. Notes:    pages at beginning and end will be relocked if the region overlaps them
  4363.     pageability of real mode pages is binary, not a count
  4364. SeeAlso: AX=0602h
  4365. ----------310604-----------------------------
  4366. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  4367.     AX = 0604h
  4368. Return: CF clear if successful
  4369.         BX:CX = page size in bytes
  4370.     CF set on error
  4371.         AX = error code (DPMI 1.0+)
  4372.         8001h unsupported, 16-bit host
  4373. ----------310700-----------------------------
  4374. INT 31 P - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  4375.     AX = 0700h
  4376.     BX:CX = starting linear page number
  4377.     SI:DI = number of pages to mark as paging candidates
  4378. Return: ???
  4379. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4380.       specification, this function is called by MS Windows TASKMAN,
  4381.       PROGMAN, and KERNEL
  4382. SeeAlso: AX=0701h,AX=0702h
  4383. ----------310701-----------------------------
  4384. INT 31 P - DPMI 0.9+ - DISCARD PAGES
  4385.     AX = 0701h
  4386.     BX:CX = starting linear page number
  4387.     SI:DI = number of pages to discard
  4388. Return: ???
  4389. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4390.       specification, this function is called by MS Windows TASKMAN,
  4391.       PROGMAN, and KERNEL
  4392. SeeAlso: AX=0700h,AX=0703h
  4393. ----------310702-----------------------------
  4394. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  4395.     AX = 0702h
  4396.     BX:CX = starting linear address
  4397.     SI:DI = number of bytes to mark as paging candidates
  4398. Return: CF clear if successful
  4399.     CF set on error
  4400.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  4401. Notes:    this function is advisory, and does not force immediate paging
  4402.     partial pages will not be discarded
  4403. SeeAlso: AX=0700h,AX=0703h
  4404. ----------310703-----------------------------
  4405. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  4406.     AX = 0703h
  4407.     BX:CX = starting linear address
  4408.     SI:DI = number of bytes to mark as discarded
  4409. Return: CF clear if successful
  4410.     CF set on error
  4411.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  4412. Notes:    this function is advisory, and may be ignored by DPMI implementations
  4413.     partial pages will not be discarded
  4414. SeeAlso: AX=0701h,AX=0702h
  4415. ----------310800-----------------------------
  4416. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  4417.     AX = 0800h
  4418.     BX:CX = physical address (should be above 1 MB)
  4419.     SI:DI = size in bytes
  4420. Return:    CF clear if successful
  4421.         BX:CX = linear address which maps the requested physical memory
  4422.     CF set on error
  4423.         AX = error code (DPMI 1.0+) (8003h,8021h) (see AX=0000h)
  4424. Notes:    implementations may refuse this call because it can circumvent protects
  4425.     the caller must build an appropriate selector for the memory
  4426.     do not use for memory mapped in the first megabyte
  4427. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  4428. ----------310801-----------------------------
  4429. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  4430.     AX = 0801h
  4431.     BX:CX = linear address returned by AX=0800h
  4432. Return: CF clear if successful
  4433.     CF set on error
  4434.         AX = error code (8025h) (see AX=0000h)
  4435. Note:    should be called at end of access to device mapped with AX=0800h
  4436. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  4437. ----------310900-----------------------------
  4438. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  4439.     AX = 0900h
  4440. Return: CF clear
  4441.     virtual interrupts disabled
  4442.     AL = 00h if previously disabled
  4443.        = 01h if previously enabled
  4444.     AH preserved
  4445. Notes:    the previous state may be restored simply by executing another INT 31
  4446.     a CLI instruction may be used if the previous state is unimportant,
  4447.       but should be assumed to be very slow due to trapping by the host
  4448. SeeAlso: AX=0901h,AX=0902h
  4449. ----------310901-----------------------------
  4450. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  4451.     AX = 0901h
  4452. Return: CF clear
  4453.     virtual interrupts enabled
  4454.     AL = 00h if previously disabled
  4455.        = 01h if previously enabled
  4456.     AH preserved
  4457. Notes:    the previous state may be restored simply by executing another INT 31
  4458.     a STI instruction may be used if the previous state is unimportant,
  4459.       but should be assumed to be very slow due to trapping by the host
  4460. SeeAlso: AX=0900h,AX=0902h
  4461. ----------310902-----------------------------
  4462. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  4463.     AX = 0902h
  4464. Return: CF clear
  4465.     AL = 00h if disabled
  4466.        = 01h if enabled
  4467. Note:    should be used rather than PUSHF because that instruction yields the
  4468.       physical interrupt state rather than the per-client virtualized
  4469.       interrupt flag
  4470. SeeAlso: AX=0900h,AX=0901h
  4471. ----------310A00-----------------------------
  4472. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  4473.     AX = 0A00h
  4474.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  4475. Return: CF clear if successful
  4476.         ES:DI / ES:EDI -> FAR extended API entry point
  4477.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  4478.     CF set on error
  4479.         AX = error code (DPMI 1.0+) (8001h) (see AX=0000h)
  4480. Notes:    extended API parameters are vendor-specific
  4481.     DPMI 1.0+ supports this function solely for backward compatibility; use
  4482.       INT 2F/AX=168Ah instead
  4483. SeeAlso: INT 2F/AX=168Ah
  4484. ----------310B00-----------------------------
  4485. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  4486.     AX = 0B00h
  4487.     BX:CX = linear address
  4488.     DL = size (1,2,4 bytes)
  4489.     DH = type (00h execute, 01h write, 02h read/write)
  4490. Return: CF clear if successful
  4491.         BX = watchpoint handle
  4492.     CF set on error
  4493.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see AX=0000h)
  4494. SeeAlso: AX=0212h,AX=0601h
  4495. ----------310B01-----------------------------
  4496. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  4497.     AX = 0B01h
  4498.     BX = watchpoint handle
  4499. Return: CF clear if successful
  4500.     CF set on error
  4501.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4502. Note:    the watchpoint handle is freed
  4503. SeeAlso: AX=0B00h
  4504. ----------310B02-----------------------------
  4505. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  4506.     AX = 0B02h
  4507.     BX = watchpoint handle
  4508. Return: CF clear if successful
  4509.         AX = status flags
  4510.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  4511.     CF set on error
  4512.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4513. SeeAlso: AX=0B00h,AX=0B03h
  4514. ----------310B03-----------------------------
  4515. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  4516.     AX = 0B03h
  4517.     BX = watchpoint handle
  4518. Return: CF clear if successful
  4519.     CF set on error
  4520.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4521. SeeAlso: AX=0B02h
  4522. ----------310C00-----------------------------
  4523. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  4524.     AX = 0C00h
  4525.     ES:(E)DI -> resident service provider structure (see below)
  4526. Return: CF clear if successful
  4527.     CF set on error
  4528.         AX = error code (8015h,8021h,8025h) (see AX=0000h)
  4529. Note:    calling this function declares an intent to provide resident
  4530.       protected mode services after terminating with AX=0C01h
  4531. SeeAlso: AX=0303h,AX=0C01h
  4532.  
  4533. Format of resident service provider structure:
  4534. Offset    Size    Description
  4535.  00h    QWORD    descriptor for 16-bit data segment
  4536.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  4537.  10h    WORD    offset of 16-bit callback procedure
  4538.  12h  2 BYTEs    reserved
  4539.  14h    QWORD    descriptor for 32-bit data segment
  4540.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  4541.  24h    DWORD    offset of 32-bit callback procedure
  4542. ----------310C01-----------------------------
  4543. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  4544.     AX = 0C01h
  4545.     BL = return code
  4546.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  4547. Return: never
  4548. Notes:    should only be used if the program will only provide services to
  4549.       other DPMI programs
  4550.     any protected mode memory remains allocated to the program unless
  4551.       explicitly freed before this call
  4552.     must first call AX=0C00h or program will simply be terminated
  4553. SeeAlso: AX=0C00h,INT 21/AH=31h
  4554. ----------310D00-----------------------------
  4555. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  4556.     AX = 0D00h
  4557.     ES:(E)DI -> shared memory allocation request structure (see below)
  4558. Return: CF clear if successful
  4559.         request structure updated
  4560.     CF set on error
  4561.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see AX=0000h)
  4562. Note:    first 16 bytes of memory block will be initialized to zeros on the
  4563.       first allocation
  4564. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  4565.  
  4566. Format of shared memory allocation request structure:
  4567. Offset    Size    Description
  4568.  00h    DWORD    requested length of shared memory block in bytes
  4569.  04h    DWORD    (return) allocated length of block
  4570.  08h    DWORD    (return) shared memory handle
  4571.  0Ch    DWORD    (return) linear address of memory block
  4572.  10h  6 BYTEs    selector:offset32 of ASCIZ name for memory block
  4573.         (name max 128 bytes)
  4574.  16h  2 BYTEs    reserved
  4575.  18h  4 BYTEs    reserved (00h)
  4576. ----------310D01-----------------------------
  4577. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  4578.     AX = 0D01h
  4579.     SI:DI = shared memory block handle
  4580. Return: CF clear if successful
  4581.     CF set on error
  4582.         AX = error code (8023h) (see AX=0000h)
  4583. Notes:    handle becomes invalid after this call
  4584.     DPMI maintains separate global and virtual machine use counts for each
  4585.       shared memory block; when the global use counts reaches zero, the
  4586.       block is finally destroyed
  4587. SeeAlso: AX=0502h,AX=0D00h
  4588. ----------310D02-----------------------------
  4589. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  4590.     AX = 0D02h
  4591.     SI:DI = shared memory block handle
  4592.     DX = flags
  4593.         bit 0: return immediately rather than suspending if serialization
  4594.             unavailable
  4595.         1: shared rather than exclusive serialization
  4596.         2-15: reserved (0)
  4597. Return: CF clear if successful
  4598.     CF set on error
  4599.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see AX=0000h)
  4600. Notes:    an exclusive serialization blocks any other serialization attempts for
  4601.       the same block by another virtual machine; a shared serialization
  4602.       blocks attempts at exclusive serialization by another virtual machine
  4603.     hosts are not required to detect deadlock
  4604.     a client's interrupt handler can cancel a serialization call which
  4605.       caused it to block by calling AX=0D03h
  4606. SeeAlso: AX=0D00h,AX=0D03h
  4607. ----------310D03-----------------------------
  4608. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  4609.     AX = 0D03h
  4610.     SI:DI = shared memory block handle
  4611.     DX = flags
  4612.         bit 0: release shared serialization rather than exclusive serialztn
  4613.         bit 1: free pending serialization
  4614.         bits 2-15: reserved (0)
  4615. Return: CF clear if successful
  4616.     CF set on error
  4617.         AX = error code (8002h,8023h) (see AX=0000h)
  4618. SeeAlso: AX=0D00h,AX=0D02h
  4619. ----------310E00-----------------------------
  4620. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  4621.     AX = 0E00h
  4622. Return: CF clear
  4623.     AX = coprocessor status
  4624.         bit 0: numeric coprocessor enabled for current client
  4625.         bit 1: client is emulating coprocessor
  4626.         bit 2: numeric coprocessor is present
  4627.         bit 3: host is emulating coprocessor instructions
  4628.         bits 4-7: coprocessor type
  4629.         0000 none
  4630.         0010 80287
  4631.         0011 80387
  4632.         0100 80486 with numeric coprocessor
  4633.         other reserved
  4634.         bits 8-15: not used
  4635. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  4636. SeeAlso: AX=0E01h
  4637. ----------310E01-----------------------------
  4638. INT 31 P - DPMI 1.0+ - SET EMULATION
  4639.     AX = 0E01h
  4640.     BX = coprocessor flag bits
  4641.         bit 0: enable numeric coprocessor for current client
  4642.         bit 1: client will emulate coprocessor
  4643.         bits 2-15: not used
  4644. Return: CF clear if successful
  4645.     CF set on error
  4646.         AX = error code (8026h) (see AX=0000h)
  4647. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  4648. SeeAlso: AX=0E00h
  4649. ----------32---------------------------------
  4650. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  4651. SeeAlso: INT 60"VIRUS"
  4652. ----------330000-----------------------------
  4653. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  4654.     AX = 0000h
  4655. Return: AX = status
  4656.         0000h hardware/driver not installed
  4657.         FFFFh hardware/driver installed
  4658.     BX = number of buttons
  4659.         0000h other than two
  4660.         0002h two buttons (many drivers)
  4661.         0003h Mouse Systems/Logitech three-button mouse
  4662.         FFFFh two buttons
  4663. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  4664.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  4665.       and then call this function.    Logitech drivers v5.01 and v6.00
  4666.       reportedly do not correctly use Hercules graphics in dual-monitor
  4667.       systems, while version 4.10 does.
  4668.     the Logitech mouse driver contains the signature string "LOGITECH" 
  4669.       three bytes past the interrupt handler; many of the Logitech mouse
  4670.       utilities check for this signature.
  4671. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  4672. ----------330001-----------------------------
  4673. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  4674.     AX = 0001h
  4675. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh
  4676. ----------330002-----------------------------
  4677. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  4678.     AX = 0002h
  4679. Note:    multiple calls to hide the cursor will require multiple calls to
  4680.       function 01h to unhide it.
  4681. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  4682. ----------330003-----------------------------
  4683. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  4684.     AX = 0003h
  4685. Return: BX = button status
  4686.        bit 0  left button pressed if 1
  4687.        bit 1  right button pressed if 1
  4688.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4689.     CX = column
  4690.     DX = row
  4691. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  4692. ----------330004-----------------------------
  4693. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  4694.     AX = 0004h
  4695.     CX = column
  4696.     DX = row
  4697. Note:    the row and column are truncated to the next lower multiple of the cell
  4698.       size; however, some versions of the Microsoft documentation
  4699.       incorrectly state that the coordinates are rounded
  4700. SeeAlso: AX=0003h,INT 62/AX=0081h
  4701. ----------330005-----------------------------
  4702. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  4703.     AX = 0005h
  4704.     BX = button
  4705.         0000h left
  4706.         0001h right
  4707.         0002h middle (Mouse Systems/Logitech mouse)
  4708. Return: AX = button states
  4709.         bit 0 left button pressed if 1
  4710.         bit 1 right button pressed if 1
  4711.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4712.     BX = number of times specified button has been pressed since last call
  4713.     CX = column at time specified button was last pressed
  4714.     DX = row at time specified button was last pressed
  4715. SeeAlso: AX=0006h,INT 62/AX=007Ch
  4716. ----------330006-----------------------------
  4717. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  4718.     AX = 0006h
  4719.     BX = button
  4720.         0000h left
  4721.         0001h right
  4722.         0002h middle (Mouse Systems/Logitech mouse)
  4723. Return: AX = button states
  4724.         bit 0 left button pressed if 1
  4725.         bit 1 right button pressed if 1
  4726.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4727.     BX = number of times specified button has been released since last call
  4728.     CX = column at time specified button was last released
  4729.     DX = row at time specified button was last released
  4730. SeeAlso: AX=0005h,INT 62/AX=007Ch
  4731. ----------330007-----------------------------
  4732. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  4733.     AX = 0007h
  4734.     CX = minimum column
  4735.     DX = maximum column
  4736. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  4737. ----------330008-----------------------------
  4738. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  4739.     AX = 0008h
  4740.     CX = minimum row
  4741.     DX = maximum row
  4742. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  4743. ----------330009-----------------------------
  4744. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  4745.     AX = 0009h
  4746.     BX = column of cursor hot spot in bitmap (-16 to 16)
  4747.     CX = row of cursor hot spot (-16 to 16)
  4748.     ES:DX -> bitmap
  4749.         16 words screen mask
  4750.         16 words cursor mask
  4751.             each word defines the sixteen pixels of a row, low bit
  4752.             rightmost
  4753. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh
  4754. ----------33000A-----------------------------
  4755. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  4756.     AX = 000Ah
  4757.     BX = hardware/software text cursor
  4758.         0000h software
  4759.         CX = screen mask
  4760.         DX = cursor mask
  4761.         0001h hardware
  4762.         CX = start scan line
  4763.         DX = end scan line
  4764. Note:    when the software cursor is selected, the char/attribute data at the
  4765.       current screen position is ANDed with the screen mask and then XORed
  4766.       with the cursor mask
  4767. SeeAlso: AX=0009h,INT 62/AX=007Eh
  4768. ----------33000B-----------------------------
  4769. INT 33 - MS MOUSE - READ MOTION COUNTERS
  4770.     AX = 000Bh
  4771. Return: CX = number of mickeys mouse moved horizontally since last call
  4772.     DX = number of mickeys mouse moved vertically
  4773. Notes:    a mickey is the smallest increment the mouse can sense
  4774.     positive values indicate down/right
  4775. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  4776. ----------33000C-----------------------------
  4777. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  4778.     AX = 000Ch
  4779.     CX = call mask
  4780.          bit 0 call if mouse moves
  4781.          bit 1 call if left button pressed
  4782.          bit 2 call if left button released
  4783.          bit 3 call if right button pressed
  4784.          bit 4 call if right button released
  4785.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  4786.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  4787.     ES:DX -> FAR routine
  4788. Notes:    when the subroutine is called, it is passed the following values:
  4789.       AX = condition mask (same bit assignments as call mask)
  4790.       BX = button state
  4791.       CX = cursor column
  4792.       DX = cursor row
  4793.       SI = horizontal mickey count
  4794.       DI = vertical mickey count
  4795.     some versions of the Microsoft documentation incorrectly state that CX
  4796.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  4797.       and DI
  4798. SeeAlso: AX=0018h
  4799. ----------33000D-----------------------------
  4800. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  4801.     AX = 000Dh
  4802. SeeAlso: AX=000Eh,INT 10/AH=04h
  4803. ----------33000E-----------------------------
  4804. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  4805.     AX = 000Eh
  4806. SeeAlso: AX=000Dh
  4807. ----------33000F-----------------------------
  4808. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  4809.     AX = 000Fh
  4810.     CX = number of mickeys per 8 pixels horizontally (default 8)
  4811.     DX = number of mickeys per 8 pixels vertically (default 16)
  4812. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  4813. ----------330010-----------------------------
  4814. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  4815.     AX = 0010h
  4816.     CX,DX = X,Y coordinates of upper left corner
  4817.     SI,DI = X,Y coordinates of lower right corner
  4818. Note:    mouse cursor is hidden in the specified region, and needs to be
  4819.       explicitly turned on again
  4820. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  4821. ----------330010-----------------------------
  4822. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  4823.     AX = 0010h
  4824.     ES:DX -> update region list (see below)
  4825. Notes:    mouse cursor is hidden in the specified region, and needs to be
  4826.       explicitly turned on again
  4827.     this version of the call is described in an August 1988 version of the
  4828.       Genius Mouse programmer's reference; it has been changed to conform
  4829.       to the Microsoft version shown above by version 9.06 (and possibly
  4830.       earlier versions)
  4831. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  4832.  
  4833. Format of update region list:
  4834. Offset    Size    Description
  4835.  00h    WORD    left-most column
  4836.  02h    WORD    top-most row
  4837.  04h    WORD    right-most column
  4838.  06h    WORD    bottom-most row
  4839. ----------330011-----------------------------
  4840. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  4841.     AX = 0011h
  4842. Return: AX = FFFFh
  4843.     BX = number of buttons
  4844. SeeAlso: AX=0000h
  4845. ----------330012-----------------------------
  4846. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  4847.     AX = 0012h
  4848.     BH = cursor width in words
  4849.     CH = rows in cursor
  4850.     BL = horizontal hot spot (-16 to 16)
  4851.     CL = vertical hot spot (-16 to 16)
  4852.     ES:DX -> bit map of screen and cursor maps
  4853. Return: AX = FFFFh if successful
  4854. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  4855. ----------330013-----------------------------
  4856. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  4857.     AX = 0013h
  4858.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  4859. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  4860. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  4861. ----------330014-----------------------------
  4862. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  4863.     AX = 0014h
  4864.     CX = call mask (see AX=000Ch)
  4865.     ES:DX -> FAR routine 
  4866. Return: CX = call mask of previous interrupt routine
  4867.     ES:DX = FAR address of previous interrupt routine
  4868. SeeAlso: AX=000Ch,AX=0018h
  4869. ----------330015-----------------------------
  4870. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  4871.     AX = 0015h
  4872. Return: BX = size of buffer needed to store driver state
  4873. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  4874. ----------330016-----------------------------
  4875. INT 33 - MS MOUSE - SAVE DRIVER STATE
  4876.     AX = 0016h
  4877.     BX = size of buffer (see AX=0015h)
  4878.     ES:DX -> buffer for driver state
  4879. Note:    although not documented, many drivers appear to require BX on input
  4880. SeeAlso: AX=0015h,AX=0017h
  4881. ----------330017-----------------------------
  4882. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  4883.     AX = 0017h
  4884.     BX = size of buffer (see AX=0015h)
  4885.     ES:DX -> buffer containing saved state
  4886. Notes:    although not documented, many drivers appear to require BX on input
  4887.     some mouse drivers range-check the values in the saved state based on
  4888.       the current video mode; thus, the video mode should be restored
  4889.       before the mouse driver's state is restored
  4890. SeeAlso: AX=0015h,AX=0016h
  4891. ----------330018-----------------------------
  4892. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  4893.     AX = 0018h
  4894.     CX = call mask
  4895.          bit 0 call if mouse moves
  4896.          bit 1 call if left button pressed
  4897.          bit 2 call if left button released
  4898.          bit 3 call if right button pressed
  4899.          bit 4 call if right button released
  4900.          bit 5 call if shift button pressed during event
  4901.          bit 6 call if ctrl key pressed during event
  4902.          bit 7 call if alt key pressed during event
  4903.     ES:DX -> FAR routine
  4904. Return: AX = 0018h if successful
  4905.        = FFFFh on error
  4906. Notes:    when the subroutine is called, it is passed the following values:
  4907.       AX = condition mask (same bit assignments as call mask)
  4908.       BX = button state
  4909.       CX = cursor column
  4910.       DX = cursor row
  4911.       SI = horizontal mickey count
  4912.       DI = vertical mickey count
  4913.     up to three handlers can be defined by separate calls to this function
  4914. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  4915. ----------330019-----------------------------
  4916. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  4917.     AX = 0019h
  4918.     CX = call mask (see AX=0018h)
  4919. Return: BX:DX = user interrupt vector
  4920.     CX = call mask (0000h if not found)
  4921. Note:    attempts to find a user event handler (defined by function 18h)
  4922.       whose call mask matches CX
  4923. SeeAlso: AX=0018h
  4924. ----------33001A-----------------------------
  4925. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  4926.     AX = 001Ah
  4927.     BX = horizontal speed \
  4928.     CX = vertical speed   / (see AX=000Fh)
  4929.     DX = double speed threshold (see AX=0013h)
  4930. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  4931. ----------33001B-----------------------------
  4932. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  4933.     AX = 001Bh
  4934. Return: BX = horizontal speed
  4935.     CX = vertical speed
  4936.     DX = double speed threshold
  4937. SeeAlso: AX=000Bh,AX=001Ah
  4938. ----------33001C-----------------------------
  4939. INT 33 - MS MOUSE - SET INTERRUPT RATE
  4940.     AX = 001Ch
  4941.     BX = rate
  4942.         00h no interrupts allowed
  4943.         01h 30 per second
  4944.         02h 50 per second
  4945.         03h 100 per second
  4946.         04h 200 per second
  4947. Notes:    only available on InPort mouse
  4948.     values greater than 4 may cause unpredictable driver behavior
  4949. ----------33001D-----------------------------
  4950. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  4951.     AX = 001Dh
  4952.     BX = display page number
  4953. Note:    the cursor will be displayed on the specified page
  4954. SeeAlso: AX=001Eh
  4955. ----------33001E-----------------------------
  4956. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  4957.     AX = 001Eh
  4958. Return: BX = display page number
  4959. SeeAlso: AX=001Dh
  4960. ----------33001F-----------------------------
  4961. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  4962.     AX = 001Fh
  4963. Return: AX = 001Fh unsuccessful
  4964.          FFFFh successful
  4965.     ES:BX = vector for INT 33h before mouse driver was first installed
  4966. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  4967.     if you restore Int 33h to ES:BX, driver will be completely disabled
  4968. SeeAlso: AX=0020h
  4969. ----------330020-----------------------------
  4970. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  4971.     AX = 0020h
  4972. Return: AX = 0020h unsuccessful (or driver not installed)
  4973.          FFFFh successful
  4974. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  4975.       which were removed by function 1Fh
  4976. SeeAlso: AX=001Fh
  4977. ----------330021-----------------------------
  4978. INT 33 - MS MOUSE - SOFTWARE RESET
  4979.     AX = 0021h
  4980. Return: AX = FFFFh if mouse driver installed
  4981.         BX = number of buttons (FFFFh = two buttons)
  4982.          0021h if mouse driver not installed
  4983. Note:    identical to funtion 00h, but does not reset the mouse
  4984. SeeAlso: AX=0000h
  4985. ----------330022-----------------------------
  4986. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  4987.     AX = 0022h
  4988.     BX = language
  4989.         00h English
  4990.         01h French
  4991.         02h Dutch
  4992.         03h German
  4993.         04h Swedish
  4994.         05h Finnish
  4995.         06h Spanish
  4996.         07h Portugese
  4997.         08h Italian
  4998. Note:    only available on international versions of the driver, US versions
  4999.       ignore this call
  5000. SeeAlso: AX=0023h
  5001. ----------330023-----------------------------
  5002. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  5003.     AX = 0023h
  5004. Return:    BX = language (see AX=0022h)
  5005. Note:    the US version of the driver always returns zero 
  5006. SeeAlso: AX=0022h
  5007. ----------330024-----------------------------
  5008. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  5009.     AX = 0024h
  5010. Return: AX = FFFFh on error
  5011.     otherwise,
  5012.         BH = major version
  5013.         BL = minor version
  5014.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  5015.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  5016. SeeAlso: AX=004Dh,AX=006Dh
  5017. ----------330025-----------------------------
  5018. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  5019.     AX = 0025h
  5020. Return: AX = general information
  5021.         bit 15: driver loaded as device driver rather than TSR
  5022.         bit 14: driver is newer integrated type
  5023.         bits 13,12: current cursor type
  5024.                 00 software text cursor
  5025.             01 hardware text cursor
  5026.             1X graphics cursor
  5027.         bits 11-8: interrupt rate (see AX=001Ch)
  5028.         bits 7-0:  count of currently-active Mouse Display Drivers (MDD),
  5029.                 the newer integrated driver type
  5030.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  5031.     CX = mouse code active flag (for OS/2)
  5032.     DX = mouse driver busy flag (for OS/2)
  5033. ----------330026-----------------------------
  5034. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  5035.     AX = 0026h
  5036. Return: BX = mouse-disabled flag
  5037.     CX = maximum virtual X (for current video mode)
  5038.     DX = maximum virtual Y
  5039. SeeAlso: AX=0031h
  5040. ----------330026-----------------------------
  5041. INT 33 - Genius Mouse 9.06 - ???
  5042.     AX = 0026h
  5043. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  5044. ----------330027-----------------------------
  5045. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  5046.     AX = 0027h
  5047. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  5048.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  5049.     CX = horizontal mickeys moved since last call
  5050.     DX = vertical mickeys moved since last call
  5051. SeeAlso: AX=000Bh
  5052. ----------330028-----------------------------
  5053. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  5054.     AX = 0028h
  5055.     CX = new video mode (call is NOP if 0000h)
  5056.     DH = Y font size (00h = default)
  5057.     DL = X font size (00h = default)
  5058. Return: CL = status (00h = successful)
  5059. Note:    DX is ignored unless the selected video mode supports font size control
  5060. SeeAlso: AX=0029h,INT 10/AH=00h
  5061. ----------330029-----------------------------
  5062. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  5063.     AX = 0029h
  5064.     CX = previous video mode
  5065.         0000h get first supported video mode
  5066.         other get next supported mode after mode CX
  5067. Return: CX = first/next video mode (0000h = no more video modes)
  5068.     BS:DX -> description of video mode or 0000h:0000h if none
  5069. Notes:    the enumerated video modes may be in any order and may repeat
  5070.     the description string (if available) is terminated by '$' followed by
  5071.       a NUL byte
  5072. SeeAlso: AX=0028h
  5073. ----------33002A-----------------------------
  5074. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  5075.     AX = 002Ah
  5076. Return: AX = internal counter controlling cursor visibility
  5077.     BX = cursor hot spot column
  5078.     CX = cursor hot spot row
  5079.     DX = mouse type (00h none, 01h bus, 02h serial, 03h InPort, 04h IBM,
  5080.              05h Hewlett-Packard)
  5081. Note:    the hot spot location is relative to the upper left corner of the
  5082.       cursor block and may range from -128 to +127 both horizontally and
  5083.       vertically
  5084. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  5085. ----------33002B-----------------------------
  5086. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  5087.     AX = 002Bh
  5088.     BX = active acceleration profile
  5089.         0001h-0004h or FFFFh to restore default curves
  5090.     ES:SI -> buffer containing acceleration profile data (see below)
  5091. Return: AX = success flag
  5092. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  5093.  
  5094. Format of acceleration profile data:
  5095. Offset    Size    Description
  5096.  00h    BYTE    length of acceleration profile 1
  5097.  01h    BYTE    length of acceleration profile 2
  5098.  02h    BYTE    length of acceleration profile 3
  5099.  03h    BYTE    length of acceleration profile 4
  5100.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  5101.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  5102.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  5103.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  5104.  84h 32 BYTEs    speedup factor for acceleration profile 1
  5105.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5106.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  5107.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5108.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  5109.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5110.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  5111.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5112. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  5113. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  5114. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  5115. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  5116. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  5117.       unused bytes in the speedup factor fields are filled with 10h
  5118. ----------33002C-----------------------------
  5119. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  5120.     AX = 002Ch
  5121. Return: AX = status (0000h success)
  5122.     BX = currently-active acceleration profile
  5123.     ES:SI -> acceleration profile data (see AX=002Bh)
  5124. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  5125. ----------33002D-----------------------------
  5126. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  5127.     AX = 002Dh
  5128.     BX = acceleration level
  5129.         0001h-0004h to set profile, or FFFFh to get current profile
  5130. Return: AX = status
  5131.         0000h successful
  5132.             ES:SI -> 16-byte blank-padded name of acceleration profile
  5133.         FFFEh invalid acceleration curve number
  5134.             ES:SI destroyed
  5135.     BX = active acceleration curve number
  5136. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  5137. ----------33002E-----------------------------
  5138. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  5139.     AX = 002Eh
  5140.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  5141.     ES:SI -> 64-byte buffer for profile names (16 bytes per name)
  5142. Return: AX = status (0000h success)
  5143.     ES:SI buffer filled with default names if BL nonzero on entry
  5144. Note:    not supported by Logitech driver v6.10
  5145. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  5146. ----------33002F-----------------------------
  5147. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  5148.     AX = 002Fh
  5149. Return: AX = status
  5150. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  5151. SeeAlso: INT 2F/AH=53h
  5152. ----------330030-----------------------------
  5153. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  5154.     AX = 0030h
  5155.     CX = command
  5156.         0000h get status of BallPoint device
  5157.         other set rotation angle and masks
  5158.         BX = rotation angle (-32768 to 32767 degrees)
  5159.         CH = primary button mask
  5160.         CL = secondary button mask
  5161. Return: AX = button status (FFFFh if no BallPoint)
  5162.         bit 5: button 1
  5163.         bit 4: button 2
  5164.         bit 3: button 3
  5165.         bit 2: button 4
  5166.         other: zero
  5167.     BX = rotation angle (0-360 degrees)
  5168.     CH = primary button mask
  5169.     CL = secondary button mask
  5170. ----------330031-----------------------------
  5171. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  5172.     AX = 0031h
  5173. Return: AX = virtual X minimum
  5174.     BX = virtual Y minimum
  5175.     CX = virtual X maximum
  5176.     DX = virtual Y maximum
  5177. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  5178.       the default is minimum = 0 and maximum = absolute maximum
  5179.       (see AX=0026h)
  5180. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  5181. ----------330032-----------------------------
  5182. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  5183.     AX = 0032h
  5184. Return: AX = active function flags (FFFFh for v8.10)
  5185.         bit 15: function 0025h supported
  5186.         bit 14: function 0026h supported
  5187.         ...
  5188.         bit 0: function 0034h supported
  5189.     BX = ??? (0000h) officially unused
  5190.     CX = ??? (E000h) officially unused
  5191.     DX = ??? (0000h) officially unused
  5192. ----------330033-----------------------------
  5193. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  5194.     AX = 0033h
  5195.     CX = size of buffer
  5196.         0000h get required buffer size
  5197.         Return: AX = 0000h
  5198.             CX = required size (0154h for Logitech v6.10, 0159h
  5199.                 for MS v8.10-8.20)
  5200.         other
  5201.             ES:DX -> buffer of CX bytes
  5202.         Return: AX = 0000h
  5203.             CX = number of bytes returned
  5204.             ES:DX buffer filled (see below)
  5205. SeeAlso: AX=002Bh
  5206.  
  5207. Format of data buffer:
  5208. Offset    Size    Description
  5209.  00h    BYTE    mouse type
  5210.  01h    BYTE    current language
  5211.  02h    BYTE    horizontal sensitivity (00h-64h)
  5212.  03h    BYTE    vertical sensitivity (00h-64h)
  5213.  04h    BYTE    double-speed threshold (00h-64h)
  5214.  05h    BYTE    ballistic curve (01h-04h)
  5215.  06h    BYTE    interrupt rate (01h-04h)
  5216.  07h    BYTE    cursor override mask
  5217.  08h    BYTE    laptop adjustment
  5218.  09h    BYTE    memory type (00h-02h)
  5219.  0Ah    BYTE    SuperVGA support (00h,01h)
  5220.  0Bh    BYTE    rotation angle
  5221.  0Ch    BYTE    ???
  5222.  0Dh    BYTE    primary button (01h-04h)
  5223.  0Eh    BYTE    secondary button (01h-04h)
  5224.  0Fh    BYTE    click lock enabled (00h,01h)
  5225.  10h 324 BYTEs    acceleration profile data (see AX=002Bh)
  5226. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  5227. ----------330034-----------------------------
  5228. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  5229.     AX = 0034h
  5230. Return: AX = status (0000h successful)
  5231.     ES:DX -> ASCIZ initialization (.INI) file name
  5232. ----------330035-----------------------------
  5233. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  5234.     AX = 0035h
  5235.     BX = function
  5236.         FFFFh get current settings
  5237.             Return: AX = 0000h
  5238.             BH = style (see below)
  5239.             BL = size (see below)
  5240.             CH = threshold
  5241.             CL = active flag (00h disabled, 01h enabled)
  5242.             DX = delay
  5243.         other
  5244.             BH = style (00h normal, 01h reverse, 02h transparent)
  5245.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  5246.         CH = threshold (00h-64h)
  5247.         CL = active flag (00h disable size change, 01h enable)
  5248.         DX = delay (0000h-0064h)
  5249.         Return: AX = 0000h
  5250. Note:    not supported by Logitech driver v6.10
  5251. SeeAlso: AX=0012h,AX=002Ah
  5252. ----------330042-----------------------------
  5253. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  5254.     AX = 0042h
  5255. Return: AX = FFFFh successful
  5256.         BX = buffer size in bytes for functions 50h and 52h
  5257.        = 0000h MSMOUSE not installed
  5258.        = 0042h functions 42h, 50h, and 52h not supported
  5259. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5260. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  5261. ----------330043-----------------------------
  5262. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CONFIGURE MOUSE???
  5263.     AX = 0043h
  5264.     CX:BX -> ??? buffer (see below)
  5265.     DL = ???
  5266. Return: ???
  5267. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  5268.     this function is also supported by the Genius Mouse 9.06 driver
  5269.  
  5270. Format of buffer:
  5271. Offset    Size    Description
  5272.  00h    WORD    I/O port address
  5273.  02h      BYTE    ???
  5274.  03h    BYTE    interrupt number
  5275.  04h    BYTE    interrupt mask for interrupt controller
  5276.  05h  5 BYTEs    ???
  5277. ----------330044CXCDEF-----------------------
  5278. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  5279.     AX = 0044h
  5280.     CX = CDEFh
  5281. Return: AX = new state of ???
  5282. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5283. SeeAlso: AX=0045h
  5284. ----------330045CXCDEF-----------------------
  5285. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  5286.     AX = 0045h
  5287.     CX = CDEFh
  5288. Return: AX = new state of ???
  5289. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5290. SeeAlso: AX=0044h
  5291. ----------330047-----------------------------
  5292. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET BUTTON ASSIGNMENTS
  5293.     AX = 0047h
  5294.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  5295. Return: ???
  5296. Note:    also supported by Genius Mouse 9.06 driver
  5297. SeeAlso: AX=0067h
  5298. ----------330048BXCDEF-----------------------
  5299. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET ???
  5300.     AX = 0048h
  5301.     BX = CDEFh
  5302. Return: CX = ???
  5303.     BH = ???
  5304.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  5305. Note:    also supported by Genius Mouse 9.06 driver
  5306. ----------33004B-----------------------------
  5307. INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK
  5308.     AX = 004Bh
  5309. Return: ES:DI -> signature/description string if installed
  5310. Note:    the signature string in v7.04d is
  5311.       "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  5312. ----------33004CBXCDEF-----------------------
  5313. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ??? FLAG
  5314.     AX = 004Ch
  5315.     BX = CDEFh
  5316. Note:    also supported by Genius Mouse 9.06
  5317. SeeAlso: AX=006Ch
  5318. ----------33004D-----------------------------
  5319. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  5320.     AX = 004Dh
  5321. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft"
  5322. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  5323.       mouse drivers
  5324.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  5325.       follows the above copyright message (KYE Corp. manufactures the
  5326.       driver)
  5327. SeeAlso: AX=0024h,AX=006Dh
  5328. ----------33004F-----------------------------
  5329. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ENABLE MOUSE
  5330.     AX = 004Fh
  5331. Return: nothing
  5332. Note:    also supported by Genius Mouse 9.06
  5333. SeeAlso: AX=0043h,AX=0053h
  5334. ----------330050-----------------------------
  5335. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  5336.     AX = 0050h
  5337.     BX = buffer size (ignored by some driver versions)
  5338.     ES:DX -> buffer
  5339. Return: AX = FFFFh if successful
  5340. Notes:    the buffer must be large enough to hold the entire state, or following
  5341.       data will be overwritten by state data in versions which ignore BX;
  5342.       use INT 33/AX=0042h to get the required size
  5343.     this function is also supported by the Genius Mouse 9.06 driver
  5344. SeeAlso: AX=0042h,AX=0052h
  5345. ----------330052-----------------------------
  5346. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  5347.     AX = 0052h
  5348.     BX = buffer size (ignored by some driver versions)
  5349.     ES:DX -> buffer
  5350. Return: AX = FFFFh if successful
  5351. Note:    also supported by Genius Mouse 9.06 driver
  5352. SeeAlso: AX=0050h
  5353. ----------330053-----------------------------
  5354. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - DISABLE MOUSE
  5355.     AX = 0053h
  5356. Return: nothing
  5357. Note:    also supported by Genius Mouse 9.06
  5358. SeeAlso: AX=0043h,AX=004Fh
  5359. ----------330054CXCDEF-----------------------
  5360. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SELECT ULTRARES ACCELERATION LEVEL
  5361.     AX = 0054h
  5362.     CX = CDEFh
  5363.     BX = ??? (NOP if <= 0000h)
  5364. Return: ???
  5365. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5366. SeeAlso: AX=005Ah
  5367. ----------330055-----------------------------
  5368. INT 33 - Kraft Mouse - GET ???
  5369.     AX = 0055h
  5370. Return: CX = ???
  5371.     DX = ???
  5372.     ES = ???
  5373. ----------330058-----------------------------
  5374. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  5375.     AX = 0058h
  5376. Return: AX = CS of driver
  5377.     CX:BX = original INT 33 vector
  5378.     DX = ???
  5379. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5380. ----------33005A-----------------------------
  5381. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ULTRARES ACCELERATIONS
  5382.     AX = 005Ah
  5383.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  5384.     DX:SI -> buffer containing thresholds??? (CX words)
  5385.     DX:BX -> buffer containing acceleration values???
  5386.         (9*14h words, only first CX of each 14h used)
  5387.     ???
  5388. Return: CF clear
  5389.     ???
  5390. Note:    this function is also supported by Genius Mouse 9.06
  5391. SeeAlso: AX=0054h
  5392. ----------330061BXCDEF-----------------------
  5393. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  5394.     AX = 0061h
  5395.     BX = CDEFh
  5396. Return: CX = ???
  5397. Note:    also supported by Genius Mouse 9.06
  5398. ----------330067-----------------------------
  5399. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET MOUSE BUTTONS???
  5400.     AX = 0067h         
  5401. Return: BL = number of buttons???
  5402. Note:    also supported by Genius Mouse 9.06
  5403. SeeAlso: AX=0047h
  5404. ----------33006CBXCDEF-----------------------
  5405. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CLEAR ??? FLAG
  5406.     AX = 006Ch
  5407.     BX = CDEFh
  5408. Note:    also supported by Genius Mouse 9.06
  5409. SeeAlso: AX=004Ch   
  5410. ----------33006D-----------------------------
  5411. INT 33 - MS MOUSE - GET VERSION STRING
  5412.     AX = 006Dh
  5413. Return: ES:DI -> Microsoft version number of resident driver (see below)
  5414. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  5415.       drivers
  5416.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  5417.       Microsoft version as 7.00 even though they do not support any of the
  5418.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  5419.       (the Genius Mouse driver supports function 0026h, but it differs
  5420.       from the Microsoft function)
  5421. SeeAlso: AX=0024h,AX=004Dh,AX=266Ch
  5422.  
  5423. Format of Microsoft version number:
  5424. Offset    Size    Description
  5425.  00h    BYTE    major version
  5426.  01h    BYTE    minor version (BCD)
  5427. ----------330070BXABCD-----------------------
  5428. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  5429.     AX = 0070h
  5430.     BX = ABCDh
  5431. Return: AX = ABCDh if installed
  5432.         BX:CX -> data structure (see below)
  5433. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  5434.     the v7.01 POPUP.COM and menu drivers also check for the signature
  5435.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  5436.     if POPUP is not loaded, the returned data structure contains the proper
  5437.       signature at offset 00h, but not at offset 08h
  5438.  
  5439. Format of data structure:
  5440. Offset    Size    Description
  5441.  00h    WORD    signature ABCDh
  5442.  02h    DWORD    pointer to info structure???
  5443.  06h  2 BYTEs    ???
  5444.  08h    WORD    signature ABCDh
  5445.  
  5446. Format of info structure:
  5447. Offset    Size    Description
  5448.  00h    WORD    driver version
  5449.  02h  8 BYTEs    ???
  5450.  0Ah    WORD    segment of ???
  5451.      ???
  5452. ----------330072BXABCD-----------------------
  5453. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  5454.     AX = 0072h
  5455.     BX = ABCDh
  5456. Return: ???
  5457. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5458. ----------330073BXCDEF-----------------------
  5459. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET BUTTON ASSIGNMENTS
  5460.     AX = 0073h
  5461.     BX = CDEFh
  5462.     ES:DX -> 3-byte buffer for button assignments
  5463. Return: CX = number of buttons???
  5464.     ES:DX buffer filled (default is "LMR")
  5465. Note:    also supported by Genius Mouse 9.06
  5466. SeeAlso: AX=0067h
  5467. ----------33012E-----------------------------
  5468. INT 33 - MS MOUSE v8.10+ - ???
  5469.     AX = 012Eh
  5470.     BL = ???
  5471. Return: AX = 0000h
  5472. Note:    not supported by Logitech driver v6.10
  5473. SeeAlso: AX=002Eh,AX=022Eh
  5474. ----------33022E-----------------------------
  5475. INT 33 - MS MOUSE v8.10+ - ???
  5476.     AX = 022Eh
  5477.     BL = ???
  5478. Return: AX = 0000h
  5479. Note:    not supported by Logitech driver v6.10
  5480. SeeAlso: AX=002Eh,AX=012Eh
  5481. ----------33136C-----------------------------
  5482. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5483.     AX = 136Ch
  5484.     BX = ???
  5485. Return: AX = ???
  5486.     BX = ???
  5487. ----------33146C-----------------------------
  5488. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  5489.     AX = 146Ch
  5490.     BL = function
  5491.         00h set ???
  5492.             BH = new value (zero/nonzero to clear/set)
  5493.         else get ???
  5494.             Return: ???
  5495. ----------33156C-----------------------------
  5496. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  5497.     AX = 156Ch
  5498. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  5499.     ES:SI -> version string, terminated with CRLF
  5500. ----------33166C-----------------------------
  5501. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5502.     AX = 166Ch
  5503.     BL = ???
  5504.         00h ???
  5505.         01h ???
  5506.         other ???
  5507.             BH = new value of ???
  5508.         Return: AX = FFFFh
  5509. ----------33176C-----------------------------
  5510. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5511.     AX = 176Ch
  5512.     ???
  5513. Return: ???
  5514. ----------33186C-----------------------------
  5515. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5516.     AX = 186Ch
  5517.     ???
  5518. Return: ???
  5519. ----------33196C-----------------------------
  5520. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5521.     AX = 196Ch
  5522.     ???
  5523. Return: ???
  5524. ----------331A6C-----------------------------
  5525. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  5526.     AX = 1A6Ch
  5527. Return: AX = FFFFh
  5528.     BX = ???
  5529.     CX = ???
  5530. SeeAlso: AX=1B6Ch
  5531. ----------331B6C-----------------------------
  5532. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  5533.     AX = 1B6Ch
  5534.     BX = new value for ??? (0000h-0003h)
  5535. Return: AX = FFFFh
  5536. SeeAlso: AX=1A6Ch
  5537. ----------331C6C-----------------------------
  5538. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5539.     AX = 1C6Ch
  5540.     BX = ???
  5541.         <42h ???
  5542.         =42h ???
  5543.         >42h ???
  5544.             ES:DI -> ???
  5545.             Return: AX = ???
  5546. ----------331D6C-----------------------------
  5547. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  5548.     AX = 1D6Ch
  5549. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  5550. SeeAlso: AX=1E6Ch
  5551. ----------331E6C-----------------------------
  5552. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  5553.     AX = 1E6Ch
  5554.     BX = direction (0=north, 1=south, 2=east, 3=west)
  5555. SeeAlso: AX=1D6Ch
  5556. ----------331F6C-----------------------------
  5557. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  5558.     AX = 1F6Ch
  5559. Return: BX = 0=off, 1=on
  5560.     CX = 1=low, 2=high
  5561. SeeAlso: AX=002Ch,AX=236Ch
  5562. ----------33206C-----------------------------
  5563. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  5564.     AX = 206Ch
  5565.     BX = parameter (00h = right, FFh = left)
  5566. SeeAlso: AX=216Ch
  5567. ----------33216C-----------------------------
  5568. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  5569.     AX = 216Ch
  5570. Return: BX = parameter (00h = right, FFh = left)
  5571. SeeAlso: AX=206Ch
  5572. ----------33226C-----------------------------
  5573. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  5574.     AX = 226Ch
  5575. Note:    this only frees memory; does not restore hooked interrupts
  5576. ----------33236C-----------------------------
  5577. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  5578.     AX = 236Ch
  5579.     BX = 0=off, 1=on
  5580.     CX = 1=low, 2=high
  5581. SeeAlso: AX=002Ch,AX=1F6Ch
  5582. ----------33246C-----------------------------
  5583. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  5584.     AX = 246Ch
  5585.     ES:DX -> parameter table buffer (see below)
  5586. Return: AX = FFFFh if driver installed for serial mouse
  5587. SeeAlso: AX=0000h,AX=256Ch
  5588.  
  5589. Format of parameter table:
  5590. Offset    Size    Description
  5591.  00h    WORD    baud rate divided by 100  (serial mouse only)
  5592.  02h    WORD    emulation          (serial mouse only)
  5593.  04h    WORD    report rate          (serial mouse only)
  5594.  06h    WORD    firmware revision      (serial mouse only)
  5595.  08h    WORD    0              (serial mouse only)
  5596.  0Ah    WORD    port              (serial mouse only)
  5597.  0Ch    WORD    physical buttons
  5598.  0Eh    WORD    logical buttons
  5599. ----------33256CBX00h -----------------------
  5600. INT 33 - LOGITECH MOUSE - SET PARAMETERS
  5601.     AX = 256Ch
  5602.     BX = 00h set baud rate (serial mouse only)
  5603.         CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  5604.        = 01h set emulation (serial mouse only)
  5605.         CX = emulation
  5606.             0 = 5 byte packed binary
  5607.             1 = 3 byte packed binary
  5608.             2 = hexadecimal
  5609.             3 = relative bit pad
  5610.             4 = not supported
  5611.             5 = MM Series
  5612.             6 = not supported
  5613.             7 = Microsoft
  5614.        = 02h set report rate (serial mouse only)
  5615.         CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  5616.        = 03h set port (serial mouse only)
  5617.         CX = port (1, 2)
  5618.        = 04h set mouse logical buttons
  5619.         CX = buttons (2, 3)
  5620. Return: AX = FFFFh if driver installed for serial mouse
  5621. SeeAlso: AX=246Ch,AX=276Ch
  5622. ----------33266C-----------------------------
  5623. INT 33 - LOGITECH MOUSE - GET VERSION???
  5624.     AX = 266Ch
  5625. Return: BX = 'SS'
  5626.     CH = '4'  major version number
  5627.     CL = '1'  minor version number
  5628. SeeAlso: AX=006Dh
  5629. ----------33276C-----------------------------
  5630. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  5631.     AX = 276Ch
  5632. SeeAlso: AX=256Ch
  5633. ----------333000-----------------------------
  5634. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  5635.     AX = 3000h
  5636. Return: AX = FFFFh if installed
  5637.         BX = version number (BH = major, BL = minor)
  5638. Program: SMD is a programmer's library by Andy Hakim which provides a
  5639.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  5640.       SMD-based TSR which replaces the block mouse cursor in text
  5641.       applications.
  5642. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  5643. ----------333001-----------------------------
  5644. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  5645.     AX = 3001h
  5646. Return: AX = status (0000h = disabled, 0001h = enabled)
  5647. Note:    SMD remains disabled if running under Desqview or in graphics mode
  5648. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  5649. ----------333002-----------------------------
  5650. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  5651.     AX = 3002h
  5652. Return: AX = status (0000h = disabled, 0001h = enabled)
  5653. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  5654. ----------333003-----------------------------
  5655. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  5656.     AX = 3003h
  5657.     BL = data structure selector
  5658.         00h Primary Bitmap (used for 25 line mode)
  5659.         01h Secondary Bitmap (used for 43/50 line modes)
  5660.         02h Sacrifice Character Map
  5661.         03h Program Information
  5662. Return: ES:DI -> selected data structure
  5663. SeeAlso: AX=3000h
  5664.  
  5665. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]
  5666. Offset    Size    Description
  5667.  00h    BYTE    vertical size of bitmap (00h - 10h)
  5668.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  5669.  02h    BYTE    vertical hotspot position (00h - 10h)
  5670.  03h    BYTE    horizontal hotspot position (00h - 10h)
  5671.  04h 16 WORDs    cursor bitmap data
  5672.  14h 16 WORDs    screen bitmap data
  5673.  
  5674. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]
  5675. Offset    Size    Description
  5676.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  5677.  01h    BYTE    actual character for the corresponding position on the screen
  5678.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  5679.  03h    BYTE         | 0h | 1h | 2h |      cursor
  5680.  04h    BYTE         |----+----+----|
  5681.  05h    BYTE         | 3h | 4h | 5h |
  5682.  06h    BYTE         |----+----+----|
  5683.  07h    BYTE         | 6h | 7h | 8h |
  5684.  08h    BYTE         +--------------+
  5685.  
  5686. Format of Program Information [SMD_INFO_STRUCT]
  5687. Offset    Size    Description
  5688.  00h    WORD    segment of old interrupt 33h handler
  5689.  02h    WORD    offset of old interrupt 33h handler
  5690.  04h    WORD    PSP of SMD
  5691.  06h    BYTE    ENABLE/DISABLE manual setting status
  5692.  07h    BYTE    ENABLE/DISABLE internal usage status
  5693. ----------33---------------------------------
  5694. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  5695.     AX = 3004
  5696. SeeAlso: AX=3000h
  5697. ----------33---------------------------------
  5698. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  5699.     AX = 3005
  5700. SeeAlso: AX=3000h
  5701. ----------334F00-----------------------------
  5702. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  5703.     AX = 4F00h
  5704. Return: AX = 004Fh if supported
  5705.     BX = ???
  5706.     ES:DI -> ???
  5707. SeeAlso: AX=4F01h
  5708. ----------334F01-----------------------------
  5709. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5710.     AX = 4F01h
  5711.     ES = ???
  5712. Return: AX = 004Fh if supported
  5713.     ES:DI -> ???
  5714. SeeAlso: AX=4F00h
  5715. ----------34---------------------------------
  5716. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  5717. Note:    the floating-point emulators in Borland and Microsoft languages and
  5718.       Lahey FORTRAN use this interrupt
  5719. SeeAlso: INT 35,INT 3E
  5720. ----------35---------------------------------
  5721. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  5722. Note:    the floating-point emulators in Borland and Microsoft languages and
  5723.       Lahey FORTRAN use this interrupt
  5724. SeeAlso: INT 34,INT 36
  5725. ----------36---------------------------------
  5726. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  5727. Note:    the floating-point emulators in Borland and Microsoft languages and
  5728.       Lahey FORTRAN use this interrupt
  5729. SeeAlso: INT 35,INT 37
  5730. ----------37---------------------------------
  5731. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  5732. Note:    the floating-point emulators in Borland and Microsoft languages and
  5733.       Lahey FORTRAN use this interrupt
  5734. SeeAlso: INT 36,INT 38
  5735. ----------38---------------------------------
  5736. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  5737. Note:    the floating-point emulators in Borland and Microsoft languages and
  5738.       Lahey FORTRAN use this interrupt
  5739. SeeAlso: INT 37,INT 39
  5740. ----------3802-------------------------------
  5741. INT 38 - PC-MOS/386 v3.0 - GET MOS INTERNAL DATA POINTER
  5742.     AH = 02h
  5743. Return: AX = 0000h
  5744.     ES:BX -> ??? internal data structure
  5745. Program: PC-MOS/386 is a multitasking/multiuser MSDOS-compatible operating
  5746.       system by Software Links, Inc.
  5747. SeeAlso: AH=04h,AH=10h,INT 21/AX=3000h
  5748. ----------3804-------------------------------
  5749. INT 38 - PC-MOS/386 v3.0 - GET TASK CONTROL BLOCK
  5750.     AH = 04h
  5751. Return: ES = segment of Task Control Block (TCB) (see below)
  5752. SeeAlso: AH=02h
  5753.  
  5754. Format of Task Control Block:
  5755. Offset    Size    Description
  5756.  00h  2 BYTEs    signature "HT"
  5757.  02h 23 BYTEs    ???
  5758.  19h    BYTE    task time slice
  5759.  1Ah  7 BYTEs    ???
  5760.  21h 11 BYTEs    name of currently executing task
  5761.  2Ch 79 BYTEs    ???
  5762.  7Bh  4 BYTEs    user name
  5763.  7Fh    BYTE    current output class
  5764.  80h  7 BYTEs    protection access rights, 2 bits per class (writeable!)
  5765.     ???
  5766. ----------380703-----------------------------
  5767. INT 38 - PC-MOS/386 v3.0 - WAIT FOR KEYPRESS OR TIMEOUT
  5768.     AX = 0703h
  5769.     CX = timeout (in seconds???)
  5770. Return: AH bit 0 set if key pressed, clear otherwise
  5771. SeeAlso: INT 16/AH=00h
  5772. ----------3810-------------------------------
  5773. INT 38 - PC-MOS/386 v3.0 - ENTER NATIVE 386 EXECUTION MODE
  5774.     AH = 10h
  5775.     CX = NCA (???) length in bytes (at least 1024???)
  5776.     DX = NCA segment
  5777. Return: in protected mode
  5778.     all segment registers converted to appropriate selectors
  5779. Note:    MSDOS calls are available in protected mode
  5780. SeeAlso: AH=11h,AH=12h,INT 2F/AX=1687h,INT 67/AX=DE0Ch
  5781. ----------3811-------------------------------
  5782. INT 38 - PC-MOS/386 v3.0 - ALLOCATE NATIVE MODE MEMORY BLOCK
  5783.     AH = 11h
  5784.     EBX = block length
  5785. Return: ES = selector for allocated block
  5786. SeeAlso: AH=10h,AH=12h
  5787. ----------3812-------------------------------
  5788. INT 38 - PC-MOS/386 v3.0 - FREE NATIVE MODE MEMORY BLOCK
  5789.     AH = 12h
  5790.     ES = selector for block to free
  5791. SeeAlso: AH=10h,AH=11h
  5792. ----------39---------------------------------
  5793. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  5794. Note:    the floating-point emulators in Borland and Microsoft languages and
  5795.       Lahey FORTRAN use this interrupt
  5796. SeeAlso: INT 38,INT 3A
  5797. ----------3A---------------------------------
  5798. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  5799. Note:    the floating-point emulators in Borland and Microsoft languages and
  5800.       Lahey FORTRAN use this interrupt
  5801. SeeAlso: INT 39,INT 3B
  5802. ----------3B---------------------------------
  5803. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  5804. Note:    the floating-point emulators in Borland and Microsoft languages and
  5805.       Lahey FORTRAN use this interrupt
  5806. SeeAlso: INT 3A,INT 3C
  5807. ----------3C---------------------------------
  5808. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  5809. Notes:    the floating-point emulators in Borland and Microsoft languages and
  5810.       Lahey FORTRAN use this interrupt
  5811.     the generated code is  CD 3C xy mm ....
  5812.       where xy is a modified ESC instruction and mm is the modR/M byte.
  5813.       The xy byte appears to be encoded as
  5814.         s s 0 1 1 x x x   or    s s 0 0 0 x x x
  5815.       where "ss" specifies the segment override:
  5816.         00 -> DS:
  5817.         01 -> SS:
  5818.         10 -> CS:
  5819.         11 -> ES:
  5820. SeeAlso: INT 3B,INT 3D
  5821. ----------3D---------------------------------
  5822. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  5823. Notes:    the floating-point emulators in Borland and Microsoft languages use
  5824.       this interrupt
  5825.     this vector is modified but not restored by Direct Access v4.0, and
  5826.       may be left dangling by other programs written with the same version
  5827.       of compiled BASIC
  5828. SeeAlso: INT 3C,INT 3E
  5829. ----------3E---------------------------------
  5830. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  5831. Notes:    the two bytes following the INT 3E instruction are the subcode and
  5832.       a NOP (90h), except for subcodes DCh and DEh, where the second byte
  5833.       is a register count (01h-08h)
  5834.     this vector is modified but not restored by Direct Access v4.0, and
  5835.       may be left dangling by other programs written with the same version
  5836.       of compiled BASIC
  5837. SeeAlso: INT 3D
  5838.  
  5839. Subcode        Function
  5840.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  5841.        top of the stack prior to the INT 3E with the 8087 register contents
  5842.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  5843.        of 8086 stack
  5844.  E0h    round TOS and R1 to single precision, compare, pop twice
  5845.        returns AX=8087 status word, FLAGS=8087 condition bits
  5846.  E2h    round TOS and R1 to double precision, compare, pop twice
  5847.        returns AX=8087 status word, FLAGS=8087 condition bits
  5848.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  5849.       field to the undocumented value 01h; this results in actually
  5850.       rounding to single precision
  5851.  E4h    compare TOS/R1 with two POP's
  5852.        returns FLAGS=8087 condition bits
  5853.  E6h    compare TOS/R1 with POP
  5854.        returns FLAGS=8087 condition bits
  5855.  E8h    FTST (check TOS value)
  5856.        returns FLAGS=8087 condition bits
  5857.  EAh    FXAM (check TOS value)
  5858.        returns AX=8087 status word
  5859.  ECh    sine(ST0)
  5860.  EEh    cosine(ST0)
  5861.  F0h    tangent(ST0)
  5862.  F2h    arctangent(ST0)
  5863.  F4h    ST0 = ln(ST0)
  5864.  F6h    ST0 = log2(ST0)
  5865.  F8h    ST0 = log10(ST0)
  5866.  FAh    ST0 = e**ST0
  5867.  FCh    ST0 = 2**ST0
  5868.  FEh    ST0 = 10**ST0
  5869. ----------3F---------------------------------
  5870. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  5871. Notes:    INT 3F is the default, and may be overridden while linking
  5872.     this vector is modified but not restored by Direct Access v4.0, and
  5873.       may be left dangling by other programs written with the same version
  5874.       of compiled BASIC
  5875. SeeAlso: INT FE"OVERLAY"
  5876. ----------3F---------------------------------
  5877. INT 3F - Microsoft Dynamic Link Library manager
  5878. SeeAlso: INT 21/AH=4Bh
  5879. ----------40---------------------------------
  5880. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  5881. SeeAlso: INT 13,INT 63
  5882. ----------40---------------------------------
  5883. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  5884. SeeAlso: INT 41"Z100",INT FF"Z100"
  5885. ----------40---------------------------------
  5886. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  5887.     AL = operation
  5888.         00h close file
  5889.         40h open file for reading
  5890.         80h open file for writing
  5891.         C0h open file for random access
  5892.     DS:BX -> CR-terminated filename
  5893. Return: AL = file handle (00h if file closed or could not be opened)
  5894. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  5895.       6502-based Master 128 which uses the original CPU as an I/O processor
  5896. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  5897. ----------41---------------------------------
  5898. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  5899. Note:    the default parameter table array is located at F000h:E401h in 100%
  5900.       compatible BIOSes; the pointer may be overridden by the hard disk
  5901.       controller's BIOS to support drive formats unknown to the ROM BIOS
  5902. SeeAlso: INT 13/AH=09h,INT 1E,INT 46
  5903.  
  5904. Format of fixed disk parameters:
  5905. Offset    Size    Description
  5906.  00h    WORD    number of cylinders
  5907.  02h    BYTE    number of heads
  5908.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  5909.  05h    WORD    starting write precompensation cylinder number
  5910.  07h    BYTE    maximum ECC burst length (XT only)
  5911.  08h    BYTE    control byte
  5912.            bits 0-2: drive option (XT only, 0 for others)
  5913.            bit 3:    set if more than 8 heads (AT and later only)
  5914.            bit 4:    always 0
  5915.            bit 5:    set if manufacturer's defect map on max cylinder+1
  5916.                  (AT and later only)
  5917.            bit 6:    disable ECC retries
  5918.            bit 7:    disable access retries
  5919.  09h    BYTE    standard timeout (XT only, 0 for others)
  5920.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  5921.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  5922.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  5923.  0Eh    BYTE    number of sectors per track (AT and later only)
  5924.  0Fh    BYTE    reserved
  5925. ----------41---------------------------------
  5926. INT 41 - Z100 - Master 8259 - Processor Swap
  5927. SeeAlso: INT 40"Z100",INT 42"Z100"
  5928. ----------41---------------------------------
  5929. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  5930.     AL = function
  5931.         01h put bytes sequentially
  5932.         02h put bytes, ignoring sequential pointer
  5933.         03h get bytes sequentially
  5934.         04h get bytes, ignoring sequential pointer
  5935.         05h get media title and boot option
  5936.         06h get current device and directory
  5937.         07h get current library and device
  5938.         08h search directory
  5939.     DS:BX -> control block (see below)
  5940. Return: CF clear if successful
  5941.     CF set on error
  5942.     AL = 00h if operation attempted
  5943.     AL unchanged if unsupported function
  5944. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  5945.  
  5946. Format of control block:
  5947. Offset    Size    Description
  5948.  00h    BYTE    file handle
  5949.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  5950.  05h    DWORD    number of bytes to be transferred
  5951.  09h    DWORD    transfer address
  5952. ----------4112-------------------------------
  5953. INT 41 P - MS Windows debugging kernel - "OutputDebugString"
  5954.     AH = 12h
  5955.     ???
  5956. Return: ???
  5957. SeeAlso: AH=50h
  5958. ----------4150-------------------------------
  5959. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  5960.     AH = 50h
  5961.     ???
  5962. Return: ???
  5963. SeeAlso: AH=12h
  5964. ----------42---------------------------------
  5965. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  5966. SeeAlso: INT 10
  5967. Note:    not used by PS/2 built-in VGA or XGA
  5968. ----------42---------------------------------
  5969. INT 42 - Z100 - Master 8259 - Timer
  5970. SeeAlso: INT 41"Z100",INT 43"Z100"
  5971. ----------42---------------------------------
  5972. INT 42 - Acorn BBS Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  5973.     AL = byte to be written
  5974.     BH = file handle
  5975. Return: flags destroyed
  5976. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  5977. ----------43---------------------------------
  5978. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  5979.    points at graphics data for characters 00h-7Fh of the current font
  5980. SeeAlso: INT 1F,INT 44"VIDEO"
  5981. ----------43---------------------------------
  5982. INT 43 - Z100 - Master 8259 - Slave 8259 input
  5983. Note:    slave runs in special fully nested mode
  5984. SeeAlso: INT 42"Z100",INT 44"Z100"
  5985. ----------43---------------------------------
  5986. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  5987.     BH = file handle
  5988. Return: CF clear if successful
  5989.         AL = byte read from file
  5990.     CF set on error
  5991. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  5992. ----------44---------------------------------
  5993. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  5994.    points at graphics data for current character font
  5995. SeeAlso: INT 1F,INT 43"VIDEO"
  5996. ----------44---------------------------------
  5997. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  5998. ----------44---------------------------------
  5999. INT 44 - IBM 3270-PC High Level Language API
  6000.     DS:SI -> parameter control block
  6001. ----------44---------------------------------
  6002. INT 44 - Z100 - Master 8259 - Serial A
  6003. SeeAlso: INT 43"Z100",INT 45"Z100"
  6004. ----------44---------------------------------
  6005. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  6006.     AH = 00h
  6007.         AL = function
  6008.         00h get current filing system
  6009.             Return: AL = filing system (see below)
  6010.         01h get address of commandline tail
  6011.             Return: BX buffer filled with address of command tail
  6012.                     in I/O processor address space
  6013.                     (use INT 4A/AL=05h to retrieve)
  6014.         FFh flush all files onto secondary storage
  6015.     AH = file handle
  6016.         AL = function
  6017.         00h get sequential pointer for file
  6018.         01h set sequential pointer for file
  6019.         02h get length of file
  6020.     BX -> 4-byte data buffer
  6021. Return: BX buffer updated if appropriate
  6022. Note:    the commandline tail is terminated with a carriage return (0Dh)
  6023. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 45"Acorn",INT 4A"Acorn"
  6024.  
  6025. Values for filing system:
  6026.  00h none
  6027.  01h 1200 bps cassette
  6028.  02h 300 bps cassette
  6029.  03h ROM FS
  6030.  04h DFS
  6031.  05h ANFS/NFS
  6032.  06h TFS
  6033.  08h ADFS
  6034. ----------45---------------------------------
  6035. INT 45 - Z100 - Master 8259 - Serial B
  6036. SeeAlso: INT 44"Z100",INT 46"Z100"
  6037. ---------------------------------------------
  6038. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  6039.     AL = function
  6040.         00h save block of memory as file
  6041.         01h update directory entry for existing file
  6042.         02h set load address for existing file
  6043.         03h set execution address for existing file
  6044.         04h set attributes for existing file
  6045.         05h read directory
  6046.         06h delete file
  6047.         FFh load file
  6048.     DS:BX -> control block (see below)
  6049. Return: FLAGS destroyed
  6050.     AL = file type
  6051.         00h not found
  6052.         01h file found
  6053.         02h directory found
  6054.         FFh    protected file
  6055. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  6056.  
  6057. Format of control block:
  6058. Offset    Size    Description
  6059.  00h    WORD    address of CR-terminated filename
  6060.  02h    DWORD    load address of file
  6061.  06h    DWORD    execution address of file
  6062.  0Ah    DWORD    start address of data to save
  6063.  0Eh    DWORD    end address of data to save, or file attributes
  6064.          file attributes in low byte:
  6065.             bit 0: no owner read access
  6066.             bit 1: no owner write access
  6067.             bit 2: not executable by owner
  6068.             bit 3: not deletable by owner
  6069.             bit 4: no public read access
  6070.             bit 5: no public write access
  6071.             bit 6: not executable with public access
  6072.             bit 7: not deletable with public access
  6073.         other three bytes are filing-system specific file attributes
  6074. ----------46---------------------------------
  6075. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  6076. SeeAlso: INT 13/AH=09h,INT 41
  6077. ----------46---------------------------------
  6078. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  6079. SeeAlso: INT 45"Z100",INT 47"Z100"
  6080. ----------46---------------------------------
  6081. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  6082. Return: CF clear if successful
  6083.         AL = character read
  6084.     CF set on error
  6085.         AL = error code
  6086. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  6087. ----------47---------------------------------
  6088. INT 47 - Z100 - Master 8259 - Printer
  6089. SeeAlso: INT 46"Z100",INT 48"Z100"
  6090. ----------47---------------------------------
  6091. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  6092.     AL = character to be written
  6093. Return: FLAGS destroyed
  6094. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  6095. ----------478000-----------------------------
  6096. INT 47 - SQL Base - DATABASE ENGINE API
  6097.     AX = 8000h
  6098.     DS:BX -> parameter block, first word is function number
  6099. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  6100.  
  6101. Values for function number:
  6102.  01h    "SQLFINI" initalialize application's use of the database
  6103.  02h    "SQLFDON" application is done using the database
  6104.  03h    "SQLFCON" connect to a cursor/database
  6105.  04h    "SQLFDIS" disconnect from a cursor/database
  6106.  05h    "SQLFCOM" compile a SQL command
  6107.  06h    "SQLFEXE" execute a SQL command
  6108.  07h    "SQLFCEX" compile and execute a SQL command
  6109.  08h    "SQLFCMT" commit a transaction to the database
  6110.  09h    "SQLFDES" describe the items of a SELECT statement
  6111.  0Ah    "SQLFGFI" get fetch information
  6112.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  6113.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  6114.  0Dh    "SQLFEFB" enable fetch backwards
  6115.  0Eh    "SQLFPRS" position in result set
  6116.  0Fh    "SQLFURS" undo result set
  6117.  10h    "SQLFNBV" get number of bind variables
  6118.  11h    "SQLFBND" bind data variables
  6119.  12h    "SQLFBNN" bind numerics
  6120.  13h    "SQLFBLN" bind long number
  6121.  14h    "SQLFBLD" bind long data variables
  6122.  15h    "SQLFSRS" start restriction set processing
  6123.  16h    "SQLFRRS" restart restriction set processing
  6124.  17h    "SQLFCRS" close restriction set
  6125.  18h    "SQLFDRS" drop restriction set
  6126.  19h    "SQLFARF" apply Roll Forward journal
  6127.  1Ah    "SQLFERF" end Roll Forward journal
  6128.  1Bh    "SQLFSRF" start Roll Forward journal
  6129.  1Ch    "SQLFSTO" store a compiled SQL command
  6130.  1Dh    "SQLFRET" retrieve a compiled SQL command
  6131.  1Eh    "SQLFDST" drop a stored command
  6132.  1Fh    "SQLFCTY" get command type
  6133.  20h    "SQLFEPO" get error position
  6134.  21h    "SQLFGNR" get number of rows
  6135.  22h    "SQLFNSI" get number of select items
  6136.  23h    "SQLFRBF" get Roll Back flag
  6137.  24h    "SQLFRCD" get return code
  6138.  25h    "SQLFROW" get number of ROWs
  6139.  26h    "SQLFSCN" set cursor name
  6140.  27h    "SQLFSIL" set isolation level
  6141.  28h    "SQLFSLP" set log parameters
  6142.  29h    "SQLFSSB" set select buffer
  6143.  2Ah    "SQLFSSS" set sort space
  6144.  2Bh    "SQLFRLO" read long
  6145.  2Ch    "SQLFWLO" write long
  6146.  2Dh    "SQLFLSK" long seek
  6147.  2Eh    "SQLFGLS" get long size
  6148.  2Fh    "SQLFELO" end long operation
  6149.  30h    "SQLFRBK" roll back a transaction from the database
  6150.  31h    "SQLFERR" error message
  6151.  32h    "SQLFCPY" copy
  6152.  33h    "SQLFR01" reserved
  6153.  34h    "SQLFSYS" system
  6154.  35h    "SQLFSTA" statistics
  6155.  36h    "SQLFR02" reserved
  6156.  37h    "SQLFXAD" extra add
  6157.  38h    "SQLFXCN" extra character to number
  6158.  39h    "SQLFXDA" extra date add
  6159.  3Ah    "SQLFXDP" extra date picture
  6160.  3Bh    "SQLFXDV" extra divide
  6161.  3Ch    "SQLFXML" extra multiply
  6162.  3Dh    "SQLFXNP" extra number picture
  6163.  3Eh    "SQLFXPD" extra picture date
  6164.  3Fh    "SQLFXSB" extra subtract
  6165.  40h    "SQLFINS" install database
  6166.  41h    "SQLFDIN" deinstall database
  6167.  42h    "SQLFDIR" directory of databases
  6168.  43h    "SQLFTIO" timeout
  6169.  44h    "SQLFFQN" get fully qualified column name
  6170.  45h    "SQLFEXP" explain execution plan
  6171.  46h    "SQLFFER" get full error
  6172.  47h    "SQLFBKP" begin online backup
  6173.  48h    "SQLFRDC" read backup data chunk
  6174.  49h    "SQLFEBK" end backup
  6175.  4Ah    "SQLFRES" begin restore from backup
  6176.  4Bh    "SQLFWDC" write backup data chunk for restore
  6177.  4Ch    "SQLFRRD" recover restored database to consistent state
  6178.  4Dh    "SQLFERS" end restore
  6179.  4Eh    "SQLFNRR" return number of result set rows
  6180.  4Fh    "SQLFSTR" start restriction mode
  6181.  50h    "SQLFSPR" stop restriction mode
  6182.  51h    "SQLFCNC" connect 2
  6183.  52h    "SQLFCNR" connect with no recovery
  6184.  53h    "SQLFOMS" set output message size
  6185.  54h    "SQLFIMS" set input message size
  6186.  55h    "SQLFSCP" set cache pages
  6187.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  6188.  57h    "SQLFLAB" get label info for items in SELECT statement
  6189.  58h    "SQLFCBV" clear bind variables
  6190.  59h    "SQLFGET" get database information
  6191.  5Ah    "SQLFSET" set database information
  6192.  5Bh    "SQLFTEC" translate error code
  6193. ----------478001-----------------------------
  6194. INT 47 - SQL Base - GET VERSION NUMBER
  6195.     AX = 8001h
  6196. Return: ???
  6197. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  6198. ----------48---------------------------------
  6199. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  6200. SeeAlso: INT 49"PCjr"
  6201. ----------48---------------------------------
  6202. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  6203. SeeAlso: INT 47"Z100",INT 49"Z100"
  6204. ----------48---------------------------------
  6205. INT 48 - Watstar PC Network data pointer 1
  6206. SeeAlso: INT 49"Watstar"
  6207. ----------48---------------------------------
  6208. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  6209. Return: FLAGS destroyed
  6210. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  6211. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  6212. ----------49---------------------------------
  6213. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  6214. SeeAlso: INT 48"PCjr"
  6215.  
  6216. Format of translation table:
  6217. Offset    Size    Description
  6218.  00h    BYTE    number of nonkeyboard scancodes in the table
  6219.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  6220.         representing the scancode mapped values relative to their
  6221.         input values within the range of 56h through 7Eh
  6222. ----------49---------------------------------
  6223. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  6224. SeeAlso: INT 48"Z100",INT 4A"Z100"
  6225. ----------49---------------------------------
  6226. INT 49 - Texas Instruments PC - VIDEO I/O???
  6227.     apparently provides direct video display on the TI Professional PC
  6228. ----------49---------------------------------
  6229. INT 49 - Watstar PC Network data pointer 2
  6230. SeeAlso: INT 49"Watstar"
  6231. ----------49---------------------------------
  6232. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  6233.     AL = character to be written
  6234. Return: FLAGS destroyed
  6235. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  6236. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  6237. ----------490001-----------------------------
  6238. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  6239.     AX = 0001h
  6240. Return: AX = status
  6241.         0000h cannot magnify current video mode
  6242.         0002h magnified (text mode)
  6243.         0003h magnified (graphics mode)
  6244.         FFFDh function works only in magnified mode
  6245.         FFFFh MAGic busy, retry later
  6246.     BX,CX,DX destroyed
  6247. Notes:    MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  6248.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  6249.     INT 49 is the default, but may be overridden on the commandline.  The
  6250.       actual interrupt in use may be found by searching for the signature
  6251.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  6252.       the interrupt handler (this is also the installation check).    MAGic
  6253.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  6254.       the interrupt handler's segment, followed by MAGic's TSR ID of
  6255.       "VMAG".
  6256. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0008h
  6257. ----------490002-----------------------------
  6258. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  6259.     AX = 0002h
  6260. Return: AX = status (see AX=0001h)
  6261.     BX,CX,DX destroyed
  6262. SeeAlso: AX=0001h
  6263. ----------490003-----------------------------
  6264. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  6265.     AX = 0003h
  6266.     BX = vertical position (character row [text] or pixel row [graphics])
  6267.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  6268. Return: AX = status
  6269.         0000h successful
  6270.         FFFFh MAGic busy, retry later
  6271.     BX,CX,DX destroyed
  6272. Note:    window is not moved if the position is inside the current window
  6273. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  6274. ----------490004-----------------------------
  6275. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  6276.     AX = 0004h
  6277.     BX = vertical position of upper left corner
  6278.     DX = horizontal position
  6279. Return: AX = status (see AX=0003h)
  6280.     BX,CX,DX destroyed
  6281. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  6282. ----------490005-----------------------------
  6283. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  6284.     AX = 0005h
  6285. Return: AX = status
  6286.         0000h successful
  6287.         BX = vertical position (char row or pixel row)
  6288.         DX = horizontal position (char column or 8-pixel units)
  6289.         FFFFh MAGic busy, retry later
  6290.         BX,DX destroyed
  6291.     CX destroyed
  6292. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  6293. ----------490006-----------------------------
  6294. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  6295.     AX = 0006h
  6296. Return: AX = status
  6297.         0000h successful
  6298.         BX = vertical size (char rows or pixel rows)
  6299.         DX = horizontal size (char cols or 8-pixel units)
  6300.         FFFFh MAGic busy, retry later
  6301.         BX,DX destroyed
  6302.     CX destroyed
  6303. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  6304. ----------490007-----------------------------
  6305. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  6306.     AX = 0007h
  6307. Return: AX = status
  6308.         0000h successful
  6309.         BX = vertical size (char rows or pixel rows)
  6310.         DX = horizontal size (char cols or 8-pixel units)
  6311.         FFFEh invalid function
  6312.         FFFFh MAGic busy, retry later
  6313.         BX,DX destroyed
  6314.     CX destroyed
  6315. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  6316.       AX=0000h is accepted and will branch into hyperspace
  6317. SeeAlso: AX=0001h,AX=0006h
  6318. ----------490008-----------------------------
  6319. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  6320.     AX = 0008h
  6321.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  6322. Return: AX = status
  6323.         0000h successful
  6324.         FFFBh scaling factor only available in MAGic Deluxe
  6325.         FFFCh already in magnified state, can't set size
  6326. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  6327.       magnify the display
  6328.     scaling factors greater than 2 are only available in MAGic Deluxe
  6329. SeeAlso: AX=0001h
  6330. ----------4A---------------------------------
  6331. INT 4A - SYSTEM - USER ALARM HANDLER
  6332.    This interrupt is invoked by the BIOS when a real-time clock alarm occurs.
  6333.    An application may use it to perform an action at a predetermined time;
  6334.    however, this interrupt is called from within a hardware interrupt handler,
  6335.    so all usual precautions against reentering DOS must be taken.
  6336. SeeAlso: INT 1A/AH=06h
  6337. ----------4A---------------------------------
  6338. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  6339. SeeAlso: INT 49"Z100",INT 4B"Z100"
  6340. ----------4A---------------------------------
  6341. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  6342.     AL = function code
  6343.         FAh transfer data between 80186 and 65C12 I/O processor
  6344.     DS:BX -> control block (see below)
  6345. Return: FLAGS destroyed
  6346.     control block updated
  6347. Note:    there are more functions than are listed here, but details are not
  6348.       available
  6349. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  6350.  
  6351. Format of control block for function FAh:
  6352. Offset    Size    Description
  6353.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  6354.  01h    BYTE    number of parameters read from I/O processor (01h)
  6355.  02h    DWORD    I/O processor address
  6356.  06h    DWORD    80186 segment:offset address
  6357.  0Ah    WORD    number of bytes to transfer
  6358.  0Ch    BYTE    operation type
  6359.          00h write to 65C12 at 24 us/byte
  6360.         01h read from 65C12 at 24 us/byte
  6361.         02h write to 65C12 at 26 us/word
  6362.         03h read from 65C12 at 26 us/word
  6363.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  6364.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  6365.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  6366.          bit 7: unused
  6367.         bit 6: always use main screen memory if I/O addr 3000h-7FFFh
  6368.             (overrides bit 5)
  6369.         bit 5: use shadow screen memory if screen address specified
  6370.         bit 4: use current ROM rather than ROM selected by bits 3-0
  6371.             (only if I/O address between 8000h and BFFFh)
  6372.         bits 3-0: paged ROM number
  6373. ----------4B---------------------------------
  6374. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  6375. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  6376. ----------4B---------------------------------
  6377. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  6378.     ES:DI -> CAM Control Block (see INT 4F/AX=8100h)
  6379. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  6380.       to avoid conflicting with the IBM SCSI interface and the Virtual
  6381.       DMA specification
  6382.     the installation check for the driver is the string "SCSI_CAM" eight
  6383.       bytes past the INT 4Bh handler
  6384.     it is not known whether any drivers actually implemented this
  6385.       interface on INT 4B instead of INT 4F
  6386. SeeAlso: INT 4F/AX=8100h
  6387. ----------4B---------------------------------
  6388. INT 4B - Acorn BBC Master 512 - "OSBYTE" - MISC FUNCTIONS USING REGISTER PARAMS
  6389.     AL = function code
  6390.     BL = first parameter
  6391.     BH = second parameter (if needed)
  6392. Return: BL = first return parameter
  6393.     BH = second return parameter
  6394.     CF depends on function
  6395. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4C"Acorn"
  6396. ----------4B80-------------------------------
  6397. INT 4B - IBM SCSI interface
  6398.     AH = 80h
  6399.     details not yet available
  6400. ----------4B8102DX0000-----------------------
  6401. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  6402.     AX = 8102h
  6403.     DX = 0000h
  6404. Return: CF clear if successful
  6405.         AH = major version number
  6406.         AL = minor version number
  6407.         BX = product number
  6408.         0000h for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  6409.         0001h for Microsoft's EMM386.EXE
  6410.         4560h ("E`") for Qualitas' 386MAX
  6411.         4D43h ("MC") for V Communication's Memory Commander
  6412.         5145h ("QE") for Quarterdeck's QEMM-386
  6413.         CX = product revision number
  6414.         always 0000h for QMAPS and HPMM.SYS
  6415.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  6416.         SI:DI = maximum DMA buffer size
  6417.         DX = flags
  6418.         bit 0: PC/XT bus (DMA in first megabyte only)
  6419.             1: physical buffer/remap region in first megabyte
  6420.             2: automatic remap enabled
  6421.             3: all memory is physically contiguous
  6422.          4-15: reserved (zero)
  6423.     CF set on error
  6424.         AL = error code (see below)
  6425. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  6426.       apparently not always the case
  6427. SeeAlso: INT 31
  6428.  
  6429. Values for error code:
  6430.  01h    region not in contiguous memory
  6431.  02h    region crossed a physical alignment boundary
  6432.  03h    unable to lock pages
  6433.  04h    no buffer available
  6434.  05h    region too large for buffer
  6435.  06h    buffer currently in use
  6436.  07h    invalid memory region
  6437.  08h    region was not locked
  6438.  09h    number of physical pages greater than table length
  6439.  0Ah    invalid buffer ID
  6440.  0Bh    copy out of buffer range
  6441.  0Ch    invalid DMA channel number
  6442.  0Dh    disable count overflow
  6443.  0Eh    disable count underflow
  6444.  0Fh    function not supported
  6445.  10h    reserved flag bits set in DX
  6446.  
  6447. Format of DMA descriptor structure (DDS):
  6448. Offset    Size    Description
  6449.  00h    DWORD    region size
  6450.  04h    DWORD    offset
  6451.  08h    WORD    segment/selector
  6452.  0Ah    WORD    buffer ID
  6453.  0Ch    DWORD    physical address
  6454.  
  6455. Format of Extended DMA descriptor structure (EDDS):
  6456. Offset    Size    Description
  6457.  00h    DWORD    region size
  6458.  04h    DWORD    offset
  6459.  08h    WORD    segment/selector
  6460.  0Ah    WORD    reserved
  6461.  0Ch    WORD    number available
  6462.  0Eh    WORD    number used
  6463.  10h    DWORD    region 0 physical address
  6464.  14h    DWORD    region 0 size in bytes
  6465.  18h    DWORD    region 1 physical address
  6466.  1Ch    DWORD    region 1 size in bytes
  6467.     ...
  6468.  
  6469. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  6470. Offset    Size    Description
  6471.  00h    DWORD    region size
  6472.  04h    DWORD    offset
  6473.  08h    WORD    segment/selector
  6474.  0Ah    WORD    reserved
  6475.  0Ch    WORD    number available
  6476.  0Eh    WORD    number used
  6477.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  6478.  14h    DWORD    page table entry 1
  6479.     ...
  6480. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  6481.       is present and locked
  6482. ----------4B8103-----------------------------
  6483. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  6484.     AX = 8103h
  6485.     DX = flags
  6486.         bit 0: reserved (zero)
  6487.         1: data should be copied into buffer (ignored if bit 2 set)
  6488.         2: buffer should not be allocated if region noncontiguous or
  6489.            crosses physical alignment boundary specified by bits 4-5
  6490.         3: don't attempt automatic remap
  6491.         4: region must not cross 64K physical alignment boundary
  6492.         5: region must not cross 128K physical alignment boundary
  6493.          6-15: reserved (zero)
  6494.     ES:DI -> DMA descriptor structure (see AX=8102h)
  6495. Return:    CF clear if successful
  6496.         DDS physical address field filled in
  6497.         DDS buffer ID field filled (0000h if no buffer allocated)
  6498.     CF set on error
  6499.         AL = error code (see AX=8102h)
  6500.         DDS region size field filled wth maximum contiguous length in bytes
  6501. SeeAlso: AX=8104h,AX=8105h
  6502. ----------4B8104-----------------------------
  6503. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  6504.     AX = 8104h
  6505.     DX = flags
  6506.         bit 0: reserved (zero)
  6507.         1: data should be copied out of buffer
  6508.          2-15: reserved (zero)
  6509.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size,
  6510.         physical address, and buffer ID fields set
  6511. Return: CF clear if successful
  6512.         DDS physical address field set
  6513.         DDS buffer ID field set (0000h if no buffer allocated)
  6514.     CF set on error
  6515.         AL = error code (see AX=8102h)
  6516.         DDS region size field filled wth maximum contiguous length in bytes
  6517. SeeAlso: AX=8103h,AX=8106h
  6518. ----------4B8105-----------------------------
  6519. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  6520.     AX = 8105h
  6521.     DX = flags
  6522.         bits 0-5: reserved (zero)
  6523.            6: EDDS should be returned with page table entries
  6524.            7: only present pages should be locked (not-present pages
  6525.             receive entry of 0000h)
  6526.         8-15: reserved (zero)
  6527.     ES:DI -> Extended DMA descriptor structure (see AX=8102h)
  6528.         region size, linear segment, linear offset, and number avail
  6529.         fields set
  6530. Return: CF clear if successful
  6531.         EDDS number used field set
  6532.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  6533.     CF set on error
  6534.         AL = error code (see AX=8102h)
  6535.         EDDS region size field filled with max length in bytes that can be
  6536.         locked and described in the EDDS table
  6537. SeeAlso: AX=8103h,AX=8106h
  6538. ----------4B8106-----------------------------
  6539. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  6540.     AX = 8106h
  6541.     DX = flags
  6542.         bits 0-5: reserved (zero)
  6543.            6: EDDS contains page table entries
  6544.            7: EDDS may contain not-present pages (entry = 0000h)
  6545.         8-15: reserved (zero)
  6546.     ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned
  6547.         by AX=8105h    
  6548. Return: CF clear if successful
  6549.     CF set on error
  6550.         AL = error code (see AX=8102h)
  6551. Note:    according to the Microsoft version of the VDS specification, the
  6552.       actual scatter/gather list is ignored, while according to the IBM
  6553.       version of the specification, "the result of a LOCK operation"
  6554.       must be provided to this function
  6555. SeeAlso: AX=8104h,AX=8105h
  6556. ----------4B8107-----------------------------
  6557. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  6558.     AX = 8107h
  6559.     DX = flags
  6560.         bit 0: reserved (zero)
  6561.         1: data should be copied into buffer
  6562.          2-15: reserved (zero)
  6563.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size set
  6564.         (also region offset and region segment if DX bit 1 set)
  6565. Return: CF clear if successful
  6566.         DDS physical address and buffer ID set
  6567.         DDS region size filled with length of buffer
  6568.     CF set on error
  6569.         AL = error code (see AX=8102h)
  6570. SeeAlso: AX=8108h
  6571. ----------4B8108-----------------------------
  6572. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  6573.     AX = 8108h
  6574.     DX = flags
  6575.         bit 0: reserved (zero)
  6576.         1: data should be copied out of buffer
  6577.          2-15: reserved (zero)
  6578.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set
  6579.         (also region size/region offset/segment if DX bit 1 set)
  6580. Return: CF clear if successful
  6581.     CF set on error
  6582.         AL = error code (see AX=8102h)
  6583. SeeAlso: AX=8107h
  6584. ----------4B8109DX0000-----------------------
  6585. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  6586.     AX = 8109h
  6587.     DX = 0000h
  6588.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  6589.         region segment/offset, and region size fields set
  6590.     BX:CX = starting offset into DMA buffer
  6591. Return: CF clear if successful
  6592.     CF set on error
  6593.         AL = error code (see AX=8102h)
  6594. SeeAlso: AX=810Ah
  6595. ----------4B810ADX0000-----------------------
  6596. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  6597.     AX = 810Ah
  6598.     DX = 0000h
  6599.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  6600.         region segment/offset, and region size fields set
  6601.     BX:CX = starting offset into DMA buffer
  6602. Return: CF clear if successful
  6603.     CF set on error
  6604.         AL = error code (see AX=8102h)
  6605. SeeAlso: AX=8109h
  6606. ----------4B810B-----------------------------
  6607. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  6608.     AX = 810Bh
  6609.     BX = DMA channel number
  6610.     DX = 0000h
  6611. Return: CF clear if successful
  6612.     CF set on error
  6613.         AL = error code (see AX=8102h)
  6614. SeeAlso: AX=810Ch
  6615. ----------4B810C-----------------------------
  6616. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  6617.     AX = 810Ch
  6618.     BX = DMA channel number
  6619.     DX = 0000h
  6620. Return: CF clear if successful
  6621.         ZF set if disable count decremented to zero
  6622.     CF set on error
  6623.         AL = error code (see AX=8102h)
  6624. SeeAlso: AX=810Bh
  6625. ----------4B810D-----------------------------
  6626. INT 4B - QEMM-386 - BUG
  6627.     AX = 810Dh
  6628. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  6629.       call
  6630. ----------4C---------------------------------
  6631. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  6632. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  6633. ----------4C---------------------------------
  6634. INT 4C - Acorn BBC Master 512 - "OSCLI" - INTERPRET COMMAND LINE
  6635.     DS:BX -> CR-terminated command string
  6636. Return: FLAGS destroyed
  6637. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4B"Acorn"
  6638. ----------4D---------------------------------
  6639. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  6640. SeeAlso: INT 4C"Z100",INT 4E"Z100"
  6641. ----------4E---------------------------------
  6642. INT 4E - TI Professional PC - DISK I/O
  6643.     used instead of INT 13 on the TI Professional PC
  6644. SeeAlso: INT 13
  6645. ----------4E---------------------------------
  6646. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  6647. SeeAlso: INT 4D"Z100",INT 4F"Z100"
  6648. ----------4F---------------------------------
  6649. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  6650. SeeAlso: INT 4E"Z100"
  6651. ----------4F8100-----------------------------
  6652. INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM
  6653.     AX = 8100h
  6654.     ES:BX -> CAM Control Block (CCB) (see below)
  6655. Return: AH = status
  6656.         00h successful
  6657.         01h invalid CCB address (0000h:0000h)
  6658. Note:    the SCSI Interface Module (SIM) may complete the requested function
  6659.       and invoke the completion callback function before this call returns
  6660. SeeAlso: AX=8200h,INT 4B"Common Access Method"
  6661.  
  6662. Format of CAM Control Block:
  6663. Offset    Size    Description
  6664.  00h    DWORD    physical address of this CCB
  6665.  04h    WORD    CAM control block length
  6666.  06h    BYTE    function code (see below)
  6667.  07h    BYTE    CAM status (see below)
  6668.  08h    BYTE    SCSI status
  6669.  09h    BYTE    path ID (FFh = XPT)
  6670.  0Ah    BYTE    target ID
  6671.  0Bh    BYTE    logical unit number
  6672.  0Ch    BYTE    CAM flags
  6673.         bits 7-6: direction
  6674.             00 reserved
  6675.             01 in
  6676.             10 out
  6677.             11 no data transfer
  6678.         bit 5: disable autosense
  6679.             4: scatter/gather
  6680.             3: disable callback on completion
  6681.             2: linked CDB
  6682.             1: tagged queue action enable
  6683.             0: CDB is a pointer
  6684.  0Dh    BYTE    CAM flags
  6685.         bit 7: disable disconnect
  6686.             6: initiate synchronous transfers  \ mutually
  6687.             5: disable synchronous transfers   / exclusive
  6688.             4: SIM queue priority
  6689.             1 head insertion
  6690.             0 tail insertion (normal)
  6691.         bit 3: SIM queue freeze
  6692.             2: engine synchronize
  6693.         bits 1-0: reserved
  6694.  0Eh    BYTE    CAM address flags
  6695.         bit 7: SG list/data (0 = host, 1 = engine)
  6696.         bit 6: CDB pointer    (bits 6-1: 0=virtual addr, 1=phys addr)
  6697.         bit 5: SG list/data
  6698.         bit 4: sense buffer
  6699.         bit 3: message buffer
  6700.         bit 2: next CCB
  6701.         bit 1: callback on completion
  6702.         bit 0: reserved
  6703.  0Fh    BYTE    target-mode flags
  6704.         bit 7: data buffer valid
  6705.         bit 6: status valid
  6706.         bit 5: message buffer valid
  6707.         bit 4: reserved
  6708.         bit 3: phase-cognizant mode
  6709.         bit 2: target CCB available
  6710.         bit 1: disable autodisconnect
  6711.         bit 0: disable autosave/restore
  6712. ---function 02h---
  6713.  10h    DWORD    pointer to 36-byte buffer for inquiry data or 0000h:0000h
  6714.  14h    BYTE    peripheral device type of target logical unit number
  6715. ---function 03h---
  6716.  10h    BYTE    version number (00h-07h prior to rev 1.7, 08h = rev 1.7,
  6717.         09h-FFh = rev no, i.e. 23h = rev 2.3)
  6718.  11h    BYTE    SCSI capabilities
  6719.         bit 7: modify data pointers
  6720.             6: wide bus (32 bits)
  6721.             5: wide bus (16 bits)
  6722.             4: synchronous transfers
  6723.             3: linked commands
  6724.             2: reserved
  6725.             1: tagged queueing
  6726.             0: soft reset
  6727.  12h    BYTE    target mode support
  6728.         bit 7: processor mode
  6729.             6: phase-cognizant mode
  6730.             5-0: reserved
  6731.  13h    BYTE    miscellaneous flags
  6732.         bit 7: scanned high to low instead of low to high
  6733.             6: removables not included in scan
  6734.             5: inquiry data not kept by XPT
  6735.             4-0: reserved
  6736.  14h    WORD    engine count
  6737.  16h 14 BYTEs    vendor-specific data
  6738.  24h    DWORD    size of private data area
  6739.  28h    DWORD    asynchronous event capabilities
  6740.         bits 31-24: vendor-specific
  6741.              23-8: reserved
  6742.             7: new devices found during rescan
  6743.             6: SIM module deregistered
  6744.             5: SIM module registered
  6745.             4: sent bus device reset to target
  6746.             3: SCSI AEN
  6747.             2: reserved
  6748.             1: unsolicited reselection
  6749.             0: unsolicited SCSI bus reset
  6750.  2Ch    BYTE    highest path ID assigned
  6751.  2Dh    BYTE    SCSI device ID of initiator
  6752.  2Eh  2 BYTEs    reserved
  6753.  30h 16 BYTEs    SIM vendor ID
  6754.  40h 16 BYTEs    HBA (host bus adaptor) vendor ID
  6755.  50h  4 BYTEs    operating-system dependant usage
  6756. ---functions 00h,04h,11h,12h---
  6757.  no additional fields
  6758. ---function 05h---
  6759.  10h    DWORD    asynchronous event enables (see function 03h above)
  6760.  14h    DWORD    pointer to asynchronous callback routine
  6761.  18h    DWORD    pointer to peripheral driver buffer
  6762.  1Ch    BYTE    size of peripheral buffer
  6763. ---function 06h---
  6764.  10h    BYTE    peripheral device type of target
  6765. ---functions 10h,13h---
  6766.  10h    DWORD    pointer to CCB to be aborted
  6767. ---function 20h---
  6768.  10h    WORD    engine number
  6769.  12h    BYTE    engine type
  6770.         00h buffer memory
  6771.         01h lossless compression
  6772.         02h lossy compression
  6773.         03h encryption
  6774.  13h    BYTE    engine algorithm ID
  6775.         00h vendor-unique
  6776.         01h LZ1 variation 1 (STAC)
  6777.         02h LZ2 variation 1 (HP DCZL)
  6778.         03h LZ2 variation 2 (Infochip)
  6779.  14h    DWORD    engine memory size
  6780. ---function 21h---
  6781.  10h    DWORD    pointer to peripheral driver
  6782.  14h  4 BYTEs    reserved
  6783.  18h    DWORD    OS-dependent request-mapping info
  6784.  1Ch    DWORD    address of completion callback routine
  6785.  20h    DWORD    pointer to scatter/gather list or data buffer
  6786.  24h    DWORD    length of data transfer
  6787.  28h    DWORD    pointer to engine buffer data
  6788.  2Ch  2 BYTEs    reserved
  6789.  2Eh    WORD    number of scatter/gather entries
  6790.  30h    DWORD    maximum destination data length
  6791.  34h    DWORD    length of destination data
  6792.  38h    DWORD    source residual length
  6793.  3Ch 12 BYTEs    reserved
  6794.  48h    DWORD    OS-dependent timeout value
  6795.  4Ch  4 BYTEs    reserved
  6796.  50h    WORD    engine number
  6797.  52h    WORD    vendor-unique flags
  6798.  54h  4 BYTEs    reserved
  6799.  58h  N BYTEs    private data area for SIM
  6800. ---function 30h---
  6801.  10h    WORD    group 6 vendor-unique CDB length
  6802.  12h    WORD    group 7 vendor-unique CDB length
  6803.  14h    DWORD    pointer to target CCB list
  6804.  18h    WORD    number of target CCBs
  6805. ---other functions---
  6806.  10h    DWORD    pointer to peripheral driver
  6807.  14h    DWORD    pointer to next CCB
  6808.  18h    DWORD    OS-dependent request mapping information
  6809.  1Ch    DWORD    address of completion callback routine
  6810.  20h    DWORD    pointer to scatter/gather list or data buffer
  6811.  24h    DWORD    length of data transfer
  6812.  28h    DWORD    pointer to sense info buffer
  6813.  2Ch    BYTE    length of sense info buffer
  6814.  2Dh    BYTE    CDB length
  6815.  2Eh    WORD    number of scatter/gather entries
  6816.  30h  4 BYTEs    reserved
  6817.  34h    BYTE    SCSI status
  6818.  35h  3 BYTEs    reserved
  6819.  38h    DWORD    residual length
  6820.  40h 12 BYTEs    Command Descriptor Block (CDB)
  6821.  44h    DWORD    OS-dependent timeout value
  6822.  48h    DWORD    pointer to message buffer
  6823.  4Ch    WORD    length of message buffer
  6824.  4Eh    WORD    vendor-unique flags
  6825.  50h    BYTE    tag queue action
  6826.  51h  3 BYTEs    reserved
  6827.  54h  N BYTEs    private data area for SIM
  6828.  
  6829. Values for CAM function code:
  6830.  00h NOP
  6831.  01h execute SCSI I/O
  6832.  02h get device type
  6833.  03h path inquiry
  6834.  04h release SIM queue
  6835.  05h set async callback
  6836.  06h set device type
  6837.  07h-0Fh reserved
  6838.  10h abort SCSI command
  6839.  11h reset SCSI bus
  6840.  12h reset SCSI device
  6841.  13h terminate I/O process
  6842.  14h-1Fh reserved
  6843.  20h engine inquiry
  6844.  21h execute engine request
  6845.  22h-2Fh reserved
  6846.  30h enable logical unit number
  6847.  31h execute target I/O
  6848.  32h-7Fh reserved
  6849.  80h-FFh vendor-specific functions
  6850.  
  6851. Values for CAM status:
  6852.  00h request in progress
  6853.  01h request successful
  6854.  02h host aborted request
  6855.  03h unable to abort request
  6856.  04h request completed with error
  6857.  05h CAM is busy
  6858.  06h invalid request
  6859.  07h invalid path ID
  6860.  08h no such SCSI device
  6861.  09h unable to terminate I/O process
  6862.  0Ah timeout on target selection
  6863.  0Bh timeout on command
  6864.  0Dh receive message rejection
  6865.  0Eh sent/received SCSI bus reset
  6866.  0Fh detected uncorrectable parity error
  6867.  10h Autosense request failed
  6868.  11h no HBA detected
  6869.  12h data over/underrun
  6870.  13h bus freed unexpectedly
  6871.  14h target bus phase sequence failure
  6872.  15h CCB too small
  6873.  16h requested capability not available
  6874.  17h sent bus device reset
  6875.  18h terminate I/O process
  6876.  38h invalid LUN
  6877.  39h invalid target ID
  6878.  3Ah unimplemented function
  6879.  3Bh nexus not established
  6880.  3Ch invalid initiator ID
  6881.  3Dh received SCSI Command Descriptor Block
  6882.  3Eh LUN already enabled
  6883.  3Fh SCSI bus busy
  6884. Note:    bit 6 set to indicate frozen SIM queue
  6885.     bit 7 set to indicate valid autosense
  6886.  
  6887. Completion callback function called with:
  6888.     interrupts disabled
  6889.     ES:BX -> completed CCB
  6890.  
  6891. Asynchronous callback function called with:
  6892.     AH = opcode
  6893.     AL = path ID generating callback
  6894.     DH = target ID causing event
  6895.     DL = LUN causing event
  6896.     CX = data byte count (if applicable)
  6897.     ES:BX -> data buffer (if applicable)
  6898. Return: all registers preserved
  6899. ----------4F8200CX8765-----------------------
  6900. INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK
  6901.     AX = 8200h
  6902.     CX = 8765h
  6903.     DX = CBA9h
  6904. Return: AH = 00h if installed
  6905.         CX = 9ABCh
  6906.         DX = 5678h
  6907.         ES:DI -> "SCSI_CAM"
  6908. SeeAlso: AX=8100h,INT 4B"Common Access Method"
  6909. ---------------------------------------------
  6910.  
  6911. Downloaded From P-80 International Information Systems 304-744-2253
  6912.