home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / TEXT / INFO / INTER30B.ZIP / INTERRUP.E next >
Encoding:
Text File  |  1992-04-26  |  227.0 KB  |  6,349 lines

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