home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / DOS_HELP / INTER191.ZIP / INTERRUP.C < prev    next >
Encoding:
Text File  |  1991-01-05  |  225.6 KB  |  6,292 lines

  1. Interrupt List, part 3 of 4
  2. This compilation is Copyright (c) 1989,1990,1991 Ralf Brown
  3. ----------28---------------------------------
  4. INT 28 - DOS 2+ internal - KEYBOARD BUSY LOOP
  5.    This interrupt is called from inside the "get input from keyboard" routine
  6.    in DOS, if and only if it is safe to use INT 21 to access the disk at that
  7.    time.  It is used primarily by the PRINT.COM routines and TSR programs, but
  8.    any number of other routines could be chained to it by saving the original
  9.    vector, and calling it with a FAR call (or just JMPing to it) at the end of
  10.    the new routine.
  11.  
  12.    The INT 28h handler may invoke any INT 21h function except functions 00h
  13.    through 0Ch (and 50h/51h under DOS 2.xx unless DOS CriticalErr flag is set).
  14.    Calls to functions 3Fh and 40h may not use a handle which refers to CON.
  15.  
  16.    Until some program installs its own routine, this interrupt vector simply
  17.    points to an IRET opcode.
  18.  
  19. Note:    supported in OS/2 compatibility box
  20. SeeAlso: INT 2A/AH=84h
  21. ----------29---------------------------------
  22. INT 29 - DOS 2+ internal - FAST PUTCHAR
  23.     AL = character to display
  24. Return: nothing
  25. Notes:    this interrupt is called from the DOS output routines if output is
  26.       going to a device rather than a file, and the device driver's
  27.       attribute word has bit 4 (10h) set.
  28.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  29.       vector and assume that ANSI.SYS is installed if the segment is larger
  30.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  31.     the default handler under DESQview 2.2 understands the <Esc>[2J
  32.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  33. SeeAlso: INT 79
  34. ----------2A00-------------------------------
  35. INT 2A - Microsoft/LANtastic NETWORK - INSTALLATION CHECK
  36.     AH = 00h
  37. Return: AH <> 00h if installed
  38. SeeAlso: INT 5C
  39. ----------2A0000-----------------------------
  40. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  41.     AX = 0000h
  42. Return: AH = DDh
  43. SeeAlso: INT 5B
  44. ----------2A01-------------------------------
  45. INT 2A - Microsoft/LANtastic NETWORK - EXECUTE NETBIOS REQUEST, NO ERROR RETRY
  46.     AH = 01h
  47.     ES:BX -> NCB (see INT 5C)
  48. Return: AL = NetBIOS error code
  49.     AH = 00h if no error
  50.        = 01h on error
  51. SeeAlso: AH=04h, INT 5C
  52. ----------2A02-------------------------------
  53. INT 2A - Microsoft Networks - SET NET PRINTER MODE
  54.     AH = 02h
  55.     ???
  56. Return: ???
  57. ----------2A0300-----------------------------
  58. INT 2A - Microsoft Networks - CHECK DIRECT I/O
  59.     AX = 0300h
  60.     DS:SI -> ASCIZ disk device name (may be full path or only drive
  61.         specifier--must include the colon)
  62. Return: CF clear if absolute disk access allowed
  63. Notes:    do not use direct disk accesses if this function returns CF set or the
  64.       device is redirected (INT 21/AX=5F02h)
  65.     may take some time to execute
  66. SeeAlso: INT 13, INT 25, INT 26, INT 21/AX=5F02h
  67. ----------2A04-------------------------------
  68. INT 2A - Microsoft/LANtastic NETWORK - EXECUTE NETBIOS REQUEST
  69.     AH = 04h
  70.     AL = 00h for error retry, 01h for no retry
  71.     ES:BX -> NCB (see INT 5C)
  72. Return: AX = 0000h for no error
  73.     AH = 01h, AL = error code
  74. Note:    request automatically retried (if AL=00h) on errors 09h, 12h, and 21h
  75. SeeAlso: AH=01h, INT 5C
  76. ----------2A0500-----------------------------
  77. INT 2A - Microsoft/LANtastic NETWORK - GET NETWORK RESOURCE INFORMATION
  78.     AX = 0500h
  79. Return: AX = reserved
  80.     BX = number of network names available
  81.     CX = number of commands (NCBs) available
  82.     DX = number of sessions available
  83. ----------2A06-------------------------------
  84. INT 2A - NETBIOS - NETWORK PRINT-STREAM CONTROL
  85.     AH = 06h
  86.     AL = 01h set concatenation mode (all printer output put in one job)
  87.          02h set truncation mode (default)
  88.          printer open/close starts new print job
  89.          03h flush printer output and start new print job
  90. Return: CF set on error
  91.         AX = error code
  92.     CF clear if successful
  93. Note:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  94. SeeAlso: INT 21/AX=5D08h,5D09h, INT 2F/AX=1125h
  95. ----------2A2001-----------------------------
  96. INT 2A - MS Networks or NETBIOS - ???
  97.     AX = 2001h
  98.     ???
  99. Return: ???
  100. Note:    intercepted by DESQview 2.x
  101. ----------2A2002-----------------------------
  102. INT 2A - Network - ???
  103.     AX = 2002h
  104.     ???
  105. Return: ???
  106. Note:    called by MSDOS 3.30 APPEND
  107. ----------2A2003-----------------------------
  108. INT 2A - Network - ???
  109.     AX = 2003h
  110.     ???
  111. Return: ???
  112. Note:    called by MSDOS 3.30 APPEND
  113. ----------2A80-------------------------------
  114. INT 2A - Microsoft Networks - BEGIN DOS CRITICAL SECTION
  115.     AH = 80h
  116.     AL = critical section number (00h-0Fh)
  117.         01h DOS kernel, SHARE.EXE
  118.         apparently for maintaining the integrity of DOS/SHARE/NET
  119.           data structures
  120.         02h DOS kernel
  121.         ensures that no multitasking occurs while DOS is calling an
  122.           installable device driver
  123.         05h DOS 4+ IFSFUNC
  124.         06h DOS 4+ IFSFUNC
  125.         08h ASSIGN.COM
  126. Notes:    normally hooked to avoid interrupting a critical section, rather than
  127.       called
  128.     the handler should ensure that none of the critical sections are
  129.       reentered, usually by suspending a task which attempts to reenter
  130.       an active critical section
  131. SeeAlso: AH=81h, AH=82h, AH=87h, INT 21/AX=5D06h,5D0Bh
  132. ----------2A81-------------------------------
  133. INT 2A - Microsoft Networks - END DOS CRITICAL SECTION
  134.     AH = 81h
  135.     AL = critical section number (00h-0Fh) (see AH=80h)
  136. Notes:    normally hooked rather than called
  137.     the handler should reawaken any tasks which were suspended due to an
  138.       attempt to enter the specified critical section
  139. SeeAlso: AH=80h, AH=82h, AH=87h
  140. ----------2A82-------------------------------
  141. INT 2A - Microsoft Networks - END DOS CRITICAL SECTIONS 0 THROUGH 7
  142.     AH = 82h
  143. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  144.       greater than 0Ch except 59h, and on process termination
  145.     the handler should reawaken any tasks which were suspended due to an
  146.       attempt to enter one of the critical sections 0 through 7
  147. SeeAlso: AH=81h
  148. ----------2A84-------------------------------
  149. INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP
  150.     AH = 84h
  151. Note:    similar to DOS's INT 28h
  152. SeeAlso: INT 28
  153. ----------2A87-------------------------------
  154. INT 2A - ??? - CRITICAL SECTION
  155.     AH = 87h
  156.     AL = start/end
  157.         00h start
  158.         01h end
  159. Note:    called by PRINT.COM
  160. SeeAlso: AH=80h,81h
  161. ----------2A89-------------------------------
  162. INT 2A - Network - ???
  163.     AH = 89h
  164.     AL = ???  (ASSIGN uses 08h)
  165.     ???
  166. Return: ???
  167. ----------2AC2-------------------------------
  168. INT 2A - Network - ???
  169.     AH = C2h
  170.     AL = subfunction
  171.         07h ???
  172.         08h ???
  173.     BX = 0001h
  174.     ???
  175. Return: ???
  176. Note:    called by DOS 3.30 APPEND
  177. ----------2B---------------------------------
  178. INT 2B - Internal routine for MSDOS (IRET)
  179. ----------2C---------------------------------
  180. INT 2C - Internal routine for MSDOS (IRET)
  181. ----------2C---------------------------------
  182. INT 2C - STARLITE architecture - KERNEL API
  183. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  184.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  185.       be released in 1991.  The interrupt number is subject to change
  186.       before the actual release.
  187. ----------2C1B04-----------------------------
  188. INT 2C - MS Windows??? - ???
  189.     AX = 1B04h
  190.     ???
  191. Return: ???
  192. Note:    called by QEMM-386 v5.11 when Windows makes the INT 2F/AX=1605h or
  193.       INT 2F/AX=1606h initialization and exit broadcast calls
  194. SeeAlso: INT 2F/AX=1605h,INT 2F/AX=1606h
  195. ----------2D---------------------------------
  196. INT 2D - Internal routine for MSDOS (IRET)
  197. ----------2E---------------------------------
  198. INT 2E - DOS 2+ internal - EXECUTE COMMAND
  199.     DS:SI -> counted CR-terminated command string
  200. Notes:    the top-level command.com executes the command
  201.     results are unpredictable if invoked by a program run from a batch file
  202.     all registers including SS and SP are destroyed as in INT 21/AH=4Bh
  203.     Since COMMAND.COM processes the string as if typed from the keyboard,
  204.       the transient portion needs to be present, and the calling program
  205.       must ensure that sufficient memory to load the transient portion can
  206.       be allocated by DOS if necessary.
  207.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement
  208. ----------2F---------------------------------
  209. INT 2F - Multiplex - NOTES
  210.     AH = identifier of program which is to handle the interrupt
  211.        00h-7Fh reserved for DOS
  212.        C0h-FFh reserved for applications
  213.     AL is the function code
  214. This is a general mechanism for verifying the presence of a TSR and 
  215. communicating with it.
  216. ----------2F----DIBEBE-----------------------
  217. INT 2F - Multiplex - BMB Compuscience Canada Utilities Interface
  218.     AH = xx (dynamically assigned based upon a search for a multiplex
  219.          number which doesn't answer installed)
  220.     AL = 00h install check
  221.     ES:DI = EBEB:BEBE
  222. Return: AL = 00h not installed
  223.          01h not installed, not OK to install
  224.          FFh installed and if ES:DI != EBEB:BEBE then ES:DI will point
  225.          to a string 'BMB xxxx' where xxxx is a product name and
  226.          version
  227. ----------2F00-------------------------------
  228. INT 2F - Multiplex - DOS 2.x PRINT.COM - ???
  229.     AH = 00h
  230.     ???
  231. Return: ???
  232. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  233.     values in AH other than 00h or 01h cause PRINT to return the number of
  234.       files in the queue in AH
  235. SeeAlso: AH=01h
  236. ----------2F0080-----------------------------
  237. INT 2F - Multiplex - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  238.     AX = 0080h
  239. Return: after PRINT executes
  240. ----------2F01-------------------------------
  241. INT 2F - Multiplex - DOS 2.x PRINT.COM - ???
  242.     AH = 01h
  243.     ???
  244. Return: ???
  245. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  246.     values in AH other than 00h or 01h cause PRINT to return the number of
  247.       files in the queue in AH
  248. SeeAlso: AH=00h
  249. ----------2F0100-----------------------------
  250. INT 2F - Multiplex - DOS 3+ PRINT.COM - INSTALLATION CHECK
  251.     AX = 0100h
  252. Return: AL =
  253.         00h not installed, OK to install
  254.         01h not installed, not OK to install
  255.         FFh installed
  256. ----------2F0101-----------------------------
  257. INT 2F - Multiplex - DOS 3+ PRINT.COM - SUBMIT FILE
  258.     AX = 0101h
  259.     DS:DX -> packet (see below)
  260. Return: CF set on error
  261.         AX = error code
  262.     CF clear if successful
  263.         AL = 01h added to queue
  264.          9Eh now printing
  265. SeeAlso: AX=0102h
  266.  
  267. Format of submit packet:
  268. Offset    Size    Description
  269.  00h    BYTE    level (must be 0)
  270.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  271. ----------2F0102-----------------------------
  272. INT 2F - Multiplex - DOS 3+ PRINT.COM - REMOVE FILE
  273.     AX = 0102h
  274.     DS:DX -> ASCIZ file name (wildcards allowed)
  275. Return: CF set on error
  276.         AX = error code
  277.     CF clear if successful
  278. SeeAlso: AX=0103h
  279. ----------2F0103-----------------------------
  280. INT 2F - Multiplex - DOS 3+ PRINT.COM - REMOVE ALL FILES
  281.     AX = 0103h
  282. Return: CF set on error
  283.         AX = error code
  284.     CF clear if successful
  285. SeeAlso: AX=0102h
  286. ----------2F0104-----------------------------
  287. INT 2F - Multiplex - DOS 3+ PRINT.COM - HOLD QUEUE/GET STATUS
  288.     AX = 0104h
  289. Return: CF set on error
  290.         AX = error code
  291.         01h function invalid
  292.         02h file not found
  293.         03h path not found
  294.         04h too many open files
  295.         05h access denied
  296.         08h queue full
  297.         09h spooler busy
  298.         0Ch name too long
  299.         0Fh drive invalid
  300.     DX = error count
  301.     DS:SI -> print queue (null-string terminated list of 64-byte ASCIZ 
  302.          file names)
  303. SeeAlso: AX=0105h
  304. ----------2F0105-----------------------------
  305. INT 2F - Multiplex - DOS 3+ PRINT.COM - RESTART QUEUE
  306.     AX = 0105h
  307. Return: CF set on error
  308.        AX = error code
  309.     CF clear if successful
  310. SeeAlso: AX=0104h
  311. ----------2F0106-----------------------------
  312. INT 2F - Multiplex - DOS 3.3+ PRINT.COM - CHECK IF ERROR ON OUTPUT DEVICE
  313.     AX = 0106h
  314. Return: CF set on error
  315.         AX = error code
  316.         DS:SI -> device driver header
  317.     CF clear if successful
  318.         AX = 0000h
  319. Note:    eventually calls device driver for spooled device with request 0Ah,
  320.       looping until not busy or timeout
  321. SeeAlso: AX=0104h
  322. ----------2F0200-----------------------------
  323. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALL CHECK
  324.     AX = 0200h
  325. Return: AL = FFh if installed
  326. ----------2F0201-----------------------------
  327. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  328.     AX = 0201h
  329. Return: nothing???
  330. Notes:    called by DOS 3.3+ PRINT.COM
  331.     AX=0202h appears to be the opposite function
  332. SeeAlso: AX=0202h
  333. ----------2F0202-----------------------------
  334. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  335.     AX = 0202h
  336.     ???
  337. Return: nothing???
  338. Note:    called by DOS 3.3+ PRINT.COM
  339. SeeAlso: AX=0201h
  340. ----------2F0203-----------------------------
  341. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  342.     AX = 0203h
  343. Return: nothing???
  344. Notes:    called by DOS 3.3+ PRINT.COM
  345.     AX=0204h appears to be the opposite function
  346. SeeAlso: AX=0204h
  347. ----------2F0204-----------------------------
  348. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  349.     AX = 0204h
  350.     ???
  351. Return: nothing???
  352. Note:    called by DOS 3.3 PRINT.COM
  353. ----------2F02xx-----------------------------
  354. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  355.     AX = 02xxh
  356.     ???
  357. Return: ???
  358. ----------2F0500-----------------------------
  359. INT 2F - Multiplex - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  360.     AX = 0500h
  361. Return: AL = 00h not installed, OK to install
  362.          01h not installed, can't install
  363.          FFh installed
  364. Note:    this set of functions allows a user program to partially or completely
  365.       override the default critical error handler in COMMAND.COM
  366. SeeAlso: INT 24
  367. ----------2F05-------------------------------
  368. INT 2F - Multiplex - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  369.     AH = 05h
  370. ---DOS 3.x---
  371.     AL = extended error code (not zero)
  372. ---DOS 4.x---
  373.     AL = error type
  374.         01h DOS extended error code
  375.         02h parameter error
  376.     BX = error code
  377. Return: CF clear if successful
  378.         ES:DI -> ASCIZ error message (read-only)
  379.         AL = ???
  380.     CF set if error code can't be converted to string
  381. Notes:    called at start of COMMAND.COM's default critical error handler if 
  382.       installed by a user program, allowing partial or complete overriding
  383.       of the default error message
  384.     subfunction 02h called by many DOS 4 external programs
  385. SeeAlso: AX=122Eh, INT 24
  386. ----------2F0600-----------------------------
  387. INT 2F - Multiplex - ASSIGN - INSTALLATION CHECK
  388.     AX = 0600h
  389. Return: AL <> 00h if installed
  390. ----------2F0601-----------------------------
  391. INT 2F - Multiplex - ASSIGN - GET MEMORY SEGMENT
  392.     AX = 0601h
  393. Return: ES = segment of ASSIGN work area and assignment table
  394. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  395.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  396. ----------2F0800-----------------------------
  397. INT 2F - Multiplex - DRIVER.SYS support - INSTALLATION CHECK
  398.     AX = 0800h
  399. Return:    AL = 00h not installed, OK to install
  400.          01h not installed, not OK to install
  401.          FFh installed
  402. ----------2F0801-----------------------------
  403. INT 2F - Multiplex - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  404.     AX = 0801h
  405.     DS:DI -> drive data table (see AX=0803h)
  406. Notes:    moves down internal list of drive data tables, copying and modifying
  407.       the drive description flags word for tables referencing same physical
  408.       drive
  409.     data table appended to chain of tables
  410. SeeAlso: AX=0803h
  411. ----------2F0802-----------------------------
  412. INT 2F - Multiplex - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  413.     AX = 0802h
  414.     ES:BX -> device driver request header (see below)
  415. Return: request header updated as per requested operation
  416.  
  417. Format of device driver request header:
  418. Offset    Size    Description
  419.  00h    BYTE    length of request header
  420.  01h    BYTE    subunit within device driver
  421.  02h    BYTE    command code (see below)
  422.  03h    WORD    status (filled in by device driver)
  423.         bit 15: error
  424.         bits 14-10: reserved
  425.         bit 9: busy
  426.         bit 8: done
  427.         bits 7-0: error code if bit 15 set (see below)
  428. ---DOS---
  429.  05h  8 BYTEs    reserved (unused in DOS 2.x and 3.x)
  430. ---STARLITE architecture---
  431.  05h    DWORD    pointer to next request header
  432.  09h  4 BYTEs    reserved
  433. ---command code 00h---
  434.  0Dh    BYTE    number of units (set by driver)
  435.  0Eh    DWORD    address of first free byte following driver (set by driver)
  436.  12h    DWORD    pointer to BPB array (set by block drivers only)
  437.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  438. ---command code 01h---
  439.  0Dh    BYTE    media descriptor
  440.  0Eh    BYTE    returned status
  441.         00h don't know
  442.         01h media has not changed
  443.         FFh media has been changed
  444.  0Fh    DWORD    (DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM bit in
  445.           device header set and disk changed (set by driver)
  446. ---command code 02h---
  447.  0Dh    BYTE    media descriptor
  448.  0Eh    DWORD    transfer address
  449.         -> scratch sector if NON-IBM FORMAT bit in device header set
  450.         -> first FAT sector otherwise
  451.  12h    DWORD    pointer to BPB (set by driver)
  452. ---command codes 03h,0Ch---
  453.  0Dh    BYTE    media descriptor (block devices only)
  454.  0Eh    DWORD    transfer address
  455.  12h    WORD    byte count (character devices) or sector count (block devices)
  456.  14h    WORD    starting sector number (block devices only)
  457. ---command codes 04h,08h,09h---
  458.  0Dh    BYTE    media descriptor (block devices only)
  459.  0Eh    DWORD    transfer address
  460.  12h    WORD    byte count (character devices) or sector count (block devices)
  461.  14h    WORD    starting sector number (block devices only)
  462.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  463. ---command code 05h---
  464.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  465. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  466.  no further fields
  467. ---command code 10h---
  468.  0Dh    BYTE    unused
  469.  0Eh    DWORD    transfer address
  470.  12h    WORD    byte count
  471. ---command code 13h---
  472.  0Dh    BYTE    category code
  473.         00h unknown
  474.         01h COMn:
  475.         03h CON
  476.         05h LPTn:
  477.         08h disk
  478.         9Eh (STARLITE) Media Access Control driver
  479.  0Eh    BYTE    function code
  480.          00h (STARLITE) MAC Bind request
  481.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  482.  11h    WORD    offset of device driver header
  483.  13h    DWORD    pointer to parameter block from INT 21/AX=440Dh
  484.  
  485. Values for command code:
  486.     00h INIT
  487.     01h MEDIA CHECK (block devices)
  488.     02h BUILD BPB (block devices)
  489.     03h IOCTL INPUT
  490.     04h INPUT
  491.     05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  492.     06h INPUT STATUS (character devices)
  493.     07h INPUT FLUSH (character devices)
  494.     08h OUTPUT
  495.     09h OUTPUT WITH VERIFY
  496.     0Ah OUTPUT STATUS (character devices)
  497.     0Bh OUTPUT FLUSH (character devices)
  498.     0Ch IOCTL OUTPUT
  499.     0Dh (DOS 3+) DEVICE OPEN
  500.     0Eh (DOS 3+) DEVICE CLOSE
  501.     0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  502.     10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  503.     11h unused
  504.     12h unused
  505.     13h (DOS 3.2+) GENERIC IOCTL
  506.     14h unused
  507.     15h unused
  508.     16h unused
  509.     17h (DOS 3.2+) GET LOGICAL DEVICE
  510.     18h (DOS 3.2+) SET LOGICAL DEVICE
  511.     80h (CD-ROM) READ LONG
  512.     81h (CD-ROM) reserved
  513.     82h (CD-ROM) READ LONG PREFETCH
  514.     83h (CD-ROM) SEEK
  515.     84h (CD-ROM) PLAY AUDIO
  516.     85h (CD-ROM) STOP AUDIO
  517.     86h (CD-ROM) WRITE LONG
  518.     87h (CD-ROM) WRITE LONG VERIFY
  519.     88h (CD-ROM) RESUME AUDIO
  520.  
  521. Values for error code:
  522.     00h write-protect violation
  523.     01h unknown unit
  524.     02h drive not ready
  525.     03h unknown command
  526.     04h CRC error
  527.     05h bad drive request structure length
  528.     06h seek error
  529.     07h unknown media
  530.     08h sector not found
  531.     09h printer out of paper
  532.     0Ah write fault
  533.     0Bh read fault
  534.     0Ch general failure
  535.     0Dh reserved
  536.     0Eh reserved
  537.     0Fh invalid disk change
  538. ----------2F0803-----------------------------
  539. INT 2F - Multiplex - DOS 4.x DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  540.     AX = 0803h
  541. Return: DS:DI -> first drive data table in list
  542. SeeAlso: AX=0801h
  543.  
  544. Format of DOS 3.3 drive data table:
  545. Offset    Size    Description
  546.  00h    DWORD    pointer to next table
  547.  04h    BYTE    physical unit number (for INT 13)
  548.  05h    BYTE    logical drive number
  549.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  550.         Offset    Size    Description
  551.          00h    WORD    bytes per sector
  552.          02h    BYTE    sectors per cluster, FFh if unknown
  553.          03h    WORD    number of reserved sectors
  554.          05h    BYTE    number of FATs
  555.          06h    WORD    number of root dir entries
  556.          08h    WORD    total sectors
  557.          0Ah    BYTE    media descriptor, 00h if unknown
  558.          0Bh    WORD    sectors per FAT
  559.          0Dh    WORD    sectors per track
  560.          0Fh    WORD    number of heads
  561.          11h    WORD    number of hidden sectors
  562.  19h      BYTE    ???
  563.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  564.  1Ch 11 BYTEs    volume label or "NO NAME    " if none
  565.  27h    BYTE    terminating null for volume label???
  566.  28h    BYTE    device type (see INT 21/AX=440Dh)
  567.  29h    WORD    bit flags describing drive
  568.         bit 0: fixed media
  569.         bit 1: door lock supported
  570.         bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh)
  571.         bit 3: all sectors in a track are the same size
  572.         bit 4: physical drive has multiple logical units
  573.         bit 5: current logical drive for physical drive
  574.         bit 6: ???
  575.         bit 7: ???
  576.         bit 8: ??? (related to disk change detection)
  577.  2Bh    WORD    number of cylinders
  578.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  579.  40h  3 BYTEs    ???
  580.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  581.  4Ch    BYTE    terminating null for filesystem type???
  582.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  583.         removable media only???
  584.  
  585. Format of DOS 4.01 drive data table:
  586. Offset    Size    Description
  587.  00h    DWORD    pointer to next table
  588.  04h    BYTE    physical unit number (for INT 13)
  589.  05h    BYTE    logical drive number
  590.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  591.         Offset    Size    Description
  592.          00h    WORD    bytes per sector
  593.          02h    BYTE    sectors per cluster, FFh if unknown
  594.          03h    WORD    number of reserved sectors
  595.          05h    BYTE    number of FATs
  596.          06h    WORD    number of root dir entries
  597.          08h    WORD    total sectors
  598.          0Ah    BYTE    media descriptor, 00h if unknown
  599.          0Bh    WORD    sectors per FAT
  600.          0Dh    WORD    sectors per track
  601.          0Fh    WORD    number of heads
  602.          11h    WORD    number of hidden sectors
  603.  19h  9    BYTEs    ???
  604.  22h    BYTE    device type (see INT 21/AX=440Dh)
  605.  23h    WORD    bit flags describing drive
  606.         bit 0: fixed media
  607.         bit 1: door lock supported
  608.         bit 2: ???
  609.         bit 3: all sectors in a track are the same size
  610.         bit 4: physical drive has multiple logical units
  611.         bit 5: current logical drive for physical drive
  612.         bit 6: ???
  613.         bit 7: ???
  614.         bit 8: ???
  615.  25h    WORD    number of cylinders
  616.  27h 19 BYTEs    BIOS Parameter Block for highest capacity supported
  617.  3Ah 13 BYTEs    ???
  618.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  619.  4Bh 11 BYTEs    volume label or "NO NAME    " if none
  620.  56h    BYTE    terminating null for volume label???
  621.  57h    DWORD    serial number
  622.  5Bh  8 BYTEs    filesystem type ("FAT12   " or "FAT16    ")
  623.  63h    BYTE    terminating null for filesystem type???
  624. ----------2F1000-----------------------------
  625. INT 2F - Multiplex - SHARE - INSTALLATION CHECK
  626.     AX = 1000h
  627. Return: AL = 00h  not installed, OK to install
  628.          01h  not installed, not OK to install
  629.          FFh  installed
  630. BUG:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  631.       (08E9: OR  AL,AL
  632.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  633.     values of AL other than described here put PCDOS 4.00 into the same
  634.       loop (the buggy instructions are the same)
  635. SeeAlso: INT 21/AH=52h
  636. ----------2F1040-----------------------------
  637. INT 2F - Multiplex - DOS 4.0 SHARE internal - ???
  638.     AX = 1040h
  639.     ???
  640. Return: ???
  641. ----------2F1080-----------------------------
  642. INT 2F - Multiplex - DOS 4.0 SHARE internal - CLEAR ??? FLAG
  643.     AX = 1080h
  644. Return: AL = F0h function supported
  645. ----------2F1081-----------------------------
  646. INT 2F - Multiplex - DOS 4.0 SHARE internal - SET ??? FLAG
  647.     AX = 1081h
  648. Return: AL = F0h function supported
  649. ----------2F1100-----------------------------
  650. INT 2F - Multiplex - NETWORK REDIRECTOR - INSTALLATION CHECK
  651.     AX = 1100h
  652. Return: AL = 00h  not installed, OK to install
  653.          01h  not installed, not OK to install
  654.          FFh  installed
  655. Notes:    called by DOS 3.1+ kernel
  656.     In DOS 4+, the 11xx calls are all in IFSFUNC.EXE, not in the PC LAN
  657.       Program redirector. 
  658. ----------2F1100STDADA-----------------------
  659. INT 2F - Multiplex - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  660.     AX = 1100h
  661.     STACK: WORD DADAh
  662. Return: AL = 00h not installed, OK to install
  663.         STACK unchanged
  664.        = 01h not installed, not OK to install
  665.         STACK unchanged
  666.        = FFh installed
  667.         STACK: WORD ADADh
  668. ----------2F1101-----------------------------
  669. INT 2F - Multiplex - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  670.     AX = 1101h
  671.     SS = DOS CS
  672.     SDA first filename pointer -> fully-qualified directory name
  673.     SDA CDS pointer -> current directory structure for drive with dir
  674. Return: CF set on error
  675.         AX = DOS error code (see INT 21/AH=59h)
  676.     CF clear if successful
  677. Note:    called by DOS 3.1+ kernel
  678. SeeAlso: AX=1103h, AX=1105h, INT 21/AH=3Ah, INT 21/AH=60h
  679. ----------2F1102-----------------------------
  680. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - REMOVE REMOTE DIRECTORY
  681.     AX = 1102h
  682.     SS = DOS CS
  683.     SDA first filename pointer -> fully-qualified directory name
  684.     SDA CDS pointer -> current directory structure for drive with dir
  685. Return: CF set on error
  686.         AX = DOS error code (see INT 21/AH=59h)
  687.     CF clear if successful
  688. Note:    appears to be identical to AX=1101h
  689. SeeAlso: AX=1101h
  690. ----------2F1103-----------------------------
  691. INT 2F - Multiplex - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  692.     AX = 1103h
  693.     SS = DOS CS
  694.     SDA first filename pointer -> fully-qualified directory name
  695.     SDA CDS pointer -> current directory structure for drive with dir
  696. Return: CF set on error
  697.         AX = DOS error code (see INT 21/AH=59h)
  698.     CF clear if successful
  699. Note:    called by DOS 3.1+ kernel
  700. SeeAlso: AX=1101h, AX=1105h, INT 21/AH=39h, INT 21/AH=60h
  701. ----------2F1104-----------------------------
  702. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - MAKE REMOTE DIRECTORY
  703.     AX = 1104h
  704.     SS = DOS CS
  705.     SDA first filename pointer -> fully-qualified directory name
  706.     SDA CDS pointer -> current directory structure for drive with dir
  707. Return: CF set on error
  708.         AX = DOS error code (see INT 21/AH=59h)
  709.     CF clear if successful
  710. Note:    appears to be identical to AX=1103h
  711. SeeAlso: AX=1103h
  712. ----------2F1105-----------------------------
  713. INT 2F - Multiplex - NETWORK REDIRECTOR - CHDIR
  714.     AX = 1105h
  715.     SS = DOS CS
  716.     SDA first filename pointer -> fully-qualified directory name
  717.     SDA CDS pointer -> current directory structure for drive with dir
  718. Return: CF set on error
  719.         AX = DOS error code (see INT 21/AH=59h)
  720.     CF clear if successful
  721. Note:    called by DOS 3.1+ kernel
  722. SeeAlso: AX=1101h, AX=1103h, INT 21/AH=3Bh, INT 21/AH=60h
  723. ----------2F1106-----------------------------
  724. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  725.     AX = 1106h
  726.     ES:DI -> SFT
  727.         SFT DPB field -> DPB of drive containing file
  728. Return: CF set on error
  729.         AX = DOS error code (see INT 21/AH=59h)
  730.     CF clear if successful
  731. Note:    called by DOS 3.1+ kernel
  732. SeeAlso: AX=1201h,1227h, INT 21/AH=3Eh
  733. ----------2F1107-----------------------------
  734. INT 2F - Multiplex - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  735.     AX = 1107h
  736.     ES:DI -> SFT
  737.         SFT DPB field -> DPB of drive containing file
  738. Return: CF set on error
  739.         AX = DOS error code (see INT 21/AH=59h)
  740.     CF clear if successful
  741. Note:    called by DOS 3.1+ kernel
  742. SeeAlso: INT 21/AH=68h, INT 21/AX=5D01h
  743. ----------2F1108-----------------------------
  744. INT 2F - Multiplex - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  745.     AX = 1108h
  746.     ES:DI -> SFT
  747.         SFT DPB field -> DPB of drive containing file
  748.     CX = number of bytes
  749.     SS = DOS CS
  750.     SDA DTA field -> user buffer
  751. Return: CF set on error
  752.     CF clear if successful
  753.         CX = number of bytes read
  754. Note:    called by DOS 3.1+ kernel
  755. SeeAlso: AX=1109h,1229h, INT 21/AH=3Fh, INT 21/AX=5D06h
  756. ----------2F1109-----------------------------
  757. INT 2F - Multiplex - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  758.     AX = 1109h
  759.     ES:DI -> SFT
  760.         SFT DPB field -> DPB of drive containing file
  761.     CX = number of bytes
  762.     SS = DOS CS
  763.     SDA DTA field -> user buffer
  764. Return: CF set on error
  765.     CF clear if successful
  766.         CX = number of bytes written
  767. Note:    called by DOS 3.1+ kernel
  768. SeeAlso: AX=1107h, AX=1108h, INT 21/AH=40h, INT 21/AX=5D06h
  769. ----------2F110A-----------------------------
  770. INT 2F - Multiplex - NETWORK REDIRECTOR - LOCK REGION OF FILE
  771.     AX = 110Ah
  772.     BX = file handle
  773.     CX:DX = starting offset
  774.     SI = high word of size
  775.     STACK: WORD low word of size
  776.     ES:DI -> SFT
  777.         SFT DPB field -> DPB of drive containing file
  778.     SS = DOS CS
  779. Return: CF set on error
  780.        AL = DOS error code (see INT 21/AH=59h)
  781.     STACK unchanged
  782. Note:    called by DOS 3.1+ kernel
  783. SeeAlso: AX=110Bh, INT 21/AH=5Ch
  784. ----------2F110B-----------------------------
  785. INT 2F - Multiplex - NETWORK REDIRECTOR - UNLOCK REGION OF FILE
  786.     AX = 110Bh
  787.     BX = file handle
  788.     CX:DX = starting offset
  789.     SI = high word of size
  790.     STACK: WORD low word of size
  791.     ES:DI -> SFT for file
  792.         SFT DPB field -> DPB of drive containing file
  793. Return: CF set on error
  794.        AL = DOS error code (see INT 21/AH=59h)
  795.     STACK unchanged
  796. Note:    called by DOS 3.1+ kernel
  797. SeeAlso: AX=110Ah, INT 21/AH=5Ch
  798. ----------2F110C-----------------------------
  799. INT 2F - Multiplex - NETWORK REDIRECTOR - GET DISK SPACE
  800.     AX = 110Ch
  801.     ES:DI -> current directory structure for desired drive
  802. Return: AL = sectors per cluster
  803.     AH = ???
  804.     BX = total clusters
  805.     CX = bytes per sector
  806.     DX = number of available clusters
  807. Note:    called by DOS 3.1+ kernel
  808. SeeAlso: INT 21/AH=36h
  809. ----------2F110D-----------------------------
  810. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  811.     AX = 110Dh
  812.     SDA first filename pointer -> name of file
  813.     ???
  814. Return: ???
  815. Note:    appears to be similar to AX=110Fh
  816. SeeAlso: AX=110Fh
  817. ----------2F110E-----------------------------
  818. INT 2F - Multiplex - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  819.     AX = 110Eh
  820.     SS = DOS CS
  821.     SDA first filename pointer -> fully-qualified name of file
  822.     SDA CDS pointer -> current directory structure for drive with file
  823.     STACK: WORD new file attributes
  824. Return: CF set on error
  825.         AX = DOS error code (see INT 21/AH=59h)
  826.     CF clear if successful
  827.     STACK unchanged
  828. Note:    called by DOS 3.1+ kernel
  829. SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  830. ----------2F110F-----------------------------
  831. INT 2F - Multiplex - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES
  832.     AX = 110Fh
  833.     SS = DOS CS
  834.     SDA first filename pointer -> fully-qualified name of file
  835.     SDA CDS pointer -> current directory structure for drive with file
  836. Return: CF set on error
  837.         AX = DOS error code (see INT 21/AH=59h)
  838.     CF clear if successful
  839.         AX = file attributes
  840. Note:    called by DOS 3.1+ kernel
  841. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  842. ----------2F1110-----------------------------
  843. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  844.     AX = 1110h
  845.     SDA first filename pointer -> name of file
  846.     ???
  847. Return: ???
  848. Note:    appears to be similar to AX=110Eh
  849. SeeAlso: AX=110Eh
  850. ----------2F1111-----------------------------
  851. INT 2F - Multiplex - NETWORK REDIRECTOR - RENAME REMOTE FILE
  852.     AX = 1111h
  853.     SS = DS = DOS CS
  854.     SDA first filename pointer = offset of fully-qualified old name
  855.     SDA second filename pointer = offset of fully-qualified new name
  856.     SDA CDS pointer -> current directory structure for drive with file
  857. Return: CF set on error
  858.         AX = DOS error code (see INT 21/AH=59h)
  859.     CF clear if successful
  860. Note:    called by DOS 3.1+ kernel
  861. SeeAlso: INT 21/AH=56h,INT 21/AH=60h
  862. ----------2F1112-----------------------------
  863. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  864.     AX = 1112h
  865.     SS = DS = DOS CS
  866.     SDA first filename pointer -> name of file
  867.     ???
  868. Return: ???
  869. SeeAlso: AX=1111h
  870. ----------2F1113-----------------------------
  871. INT 2F - Multiplex - NETWORK REDIRECTOR - DELETE REMOTE FILE
  872.     AX = 1113h
  873.     SS = DS = DOS CS
  874.     SDA first filename pointer -> fully-qualified filename in DOS CS
  875.     SDA CDS pointer -> current directory structure for drive with file
  876. Return: CF set on error
  877.         AX = DOS error code (see INT 21/AH=59h)
  878.     CF clear if successful
  879. Note:    called by DOS 3.1+ kernel
  880. SeeAlso: INT 21/AH=41h,INT 21/AH=60h
  881. ----------2F1114-----------------------------
  882. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  883.     AX = 1114h
  884.     SDA first filename pointer -> name of file
  885.     ???
  886. Return: ???
  887. SeeAlso: AX=1113h
  888. ----------2F1115-----------------------------
  889. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  890.     AX = 1115h
  891.     SS = DOS CS
  892.     ES:DI -> SFT ???
  893.     ???
  894. Return: ???
  895. SeeAlso: AX=112Eh
  896. ----------2F1116-----------------------------
  897. INT 2F - Multiplex - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  898.     AX = 1116h
  899.     ES:DI -> uninitialized SFT
  900.     SS = DOS CS
  901.     SDA first filename pointer -> fully-qualified name of file to open
  902.     STACK: WORD file open mode (see INT 21/AH=3Dh)
  903. Return: CF set on error
  904.         AX = DOS error code (see INT 21/AH=59h)
  905.     CF clear if successful
  906.         SFT filled
  907.     STACK unchanged
  908. Note:    called by DOS 3.1+ kernel
  909. SeeAlso: AX=1106h,AX=1117h,AX=1118h, INT 21/AH=3Dh, INT 21/AH=60h
  910. ----------2F1117-----------------------------
  911. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  912.     AX = 1117h
  913.     ES:DI -> uninitialized SFT
  914.     SS = DOS CS
  915.     SDA first filename pointer -> fully-qualified name of file to open
  916.     SDA CDS pointer -> current directory structure for drive with file
  917.     STACK: WORD file creation mode???
  918. Return: CF set on error
  919.         AX = DOS error code (see INT 21/AH=59h)
  920.     CF clear if successful
  921.         SFT filled
  922.     STACK unchanged
  923. Note:    called by DOS 3.1+ kernel
  924. SeeAlso: AX=1106h,AX=1116h,AX=1118h,INT 21/AH=3Ch,INT 21/AH=60h
  925. ----------2F1118-----------------------------
  926. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE
  927.     AX = 1118h
  928.     ES:DI -> uninitialized SFT
  929.     SS = DOS CS
  930.     SDA first filename pointer -> fully-qualified name of file
  931.     STACK: WORD file creation mode???
  932. Return: ???
  933.     STACK unchanged
  934. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  935.       SDA CDS pointer has offset FFFFh
  936. SeeAlso: AX=1106h,AX=1116h,AX=1117h, INT 21/AH=60h
  937. ----------2F1119-----------------------------
  938. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  939.     AX = 1119h
  940.     ???
  941. Return: ???
  942. Notes:    called by DOS 3.1+ kernel
  943.     DOS 4.0 IFSFUNC returns CF set, AX=0003h    
  944. ----------2F111A-----------------------------
  945. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  946.     AX = 111Ah
  947.     ???
  948. Return: CF set
  949.         AX = error code (03h for DOS 4.01 IFSFUNC)
  950. ----------2F111B-----------------------------
  951. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDFIRST
  952.     AX = 111Bh
  953.     SS = DS = DOS CS
  954.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  955.     SDA first filename pointer -> fully-qualified search template
  956.     SDA CDS pointer -> current directory structure for drive with file
  957. Return: CF set on error
  958.         AX = DOS error code (see INT 21/AH=59h)
  959.     CF clear if successful
  960.         [DTA] = updated findfirst search data
  961.             (bit 7 of first byte must be set)
  962.         [DTA+15h] = standard directory entry for file
  963. Note:    called by DOS 3.1+ kernel
  964. SeeAlso: AX=111Ch, INT 21/AH=4Eh, INT 21/AH=60h
  965. ----------2F111C-----------------------------
  966. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDNEXT
  967.     AX = 111Ch
  968.     SS = DS = DOS CS
  969.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  970. Return: CF set on error
  971.         AX = DOS error code (see INT 21/AH=59h)
  972.     CF clear if successful
  973.         [DTA] = updated findfirst search data
  974.             (bit 7 of first byte must be set)
  975.         [DTA+15h] = standard directory entry for file
  976. Note:    called by DOS 3.1+ kernel
  977. SeeAlso: AX=111Bh, INT 21/AH=4Fh
  978. ----------2F111D-----------------------------
  979. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS
  980.     AX = 111Dh
  981.     DS???
  982.     SS = DOS CS
  983. Return: ???
  984. Notes:    called by DOS 3.1+ kernel
  985.     closes all FCBs opened by process
  986. ----------2F111E-----------------------------
  987. INT 2F - Multiplex - NETWORK REDIRECTOR - DO REDIRECTION
  988.     AX = 111Eh
  989.     SS = DOS CS
  990.     STACK: WORD function to execute
  991.         5F00h  get redirection mode
  992.             BL = type (03h printer, 04h disk)
  993.             Return: BH = state (00h off, 01h on)
  994.         5F01h  set redirection mode
  995.             BL = type (03h printer, 04h disk)
  996.             BH = state (00h off, 01h on)
  997.         5F02h  get redirection list entry
  998.             BX = redirection list index
  999.             DS:SI -> 16-byte local device name buffer
  1000.             ES:DI -> 128-byte network name buffer
  1001.         5F03h  redirect device
  1002.             BL = device type (see INT 21/AX=5F03h)
  1003.             CX = stored parameter value
  1004.             DS:SI -> ASCIZ source device name
  1005.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  1006.         5F04h  cancel redirection
  1007.             DS:SI -> ASCIZ device name or network path
  1008.         5F05h  get redirection list extended entry
  1009.             BX = redirection list index
  1010.             DS:SI -> buffer for ASCIZ source device name
  1011.             ES:DI -> buffer for destination ASCIZ network path
  1012.             Return: BH = status flag
  1013.                 BL = type (03h printer, 04h disk)
  1014.                 CX = stored parameter value
  1015.                 BP = NETBIOS local session number
  1016.         5F06h  similar to 5F05h???
  1017. Return: CF set on error
  1018.         AX = error code (see INT 21/AH=59h)
  1019.     STACK unchanged
  1020. Note:    called by DOS 3.1+ kernel
  1021. SeeAlso: INT 21/AX=5F00h,5F01h,5F02h,5F03h,5F04h,5F05h,5F06h
  1022. ----------2F111F-----------------------------
  1023. INT 2F - Multiplex - NETWORK REDIRECTOR - PRINTER SETUP
  1024.     AX = 111Fh
  1025.     STACK: WORD function
  1026.         5E02h  set printer setup
  1027.         5E03h  get printer setup
  1028.         5E04h  set printer mode
  1029.         5E05h  get printer mode
  1030. Return: CF set on error
  1031.         AX = error code (see INT 21/AH=59h)
  1032.     STACK unchanged
  1033. Note:    called by DOS 3.1+ kernel
  1034. SeeAlso: INT 21/AX=5E02h,5E03h,5E04h,5E05h
  1035. ----------2F1120-----------------------------
  1036. INT 2F - Multiplex - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  1037.     AX = 1120h
  1038.     DS = DOS CS
  1039.     ???
  1040. Return: CF clear (successful)
  1041. Notes:    called by DOS 3.1+ kernel
  1042.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  1043. SeeAlso: INT 21/AH=0Dh, INT 21/AX=5D01h
  1044. ----------2F1121-----------------------------
  1045. INT 2F - Multiplex - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  1046.     AX = 1121h
  1047.     CX:DX = offset (in bytes) from end
  1048.     ES:DI -> SFT
  1049.         SFT DPB field -> DPB of drive with file
  1050.     SS = DOS CS
  1051. Return: CF set on error
  1052.         AL = DOS error code (see INT 21/AH=59h)
  1053.     CF clear if successful
  1054.         DX:AX = new file position
  1055. Note:    called by DOS 3.1+ kernel
  1056. SeeAlso: AX=1228h, INT 21/AH=42h
  1057. ----------2F1122-----------------------------
  1058. INT 2F - Multiplex - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  1059.     AX = 1122h
  1060.     SS = DOS CS
  1061.     ???
  1062. Return: ???
  1063. Note:    called by DOS 3.1+ kernel
  1064. ----------2F1123-----------------------------
  1065. INT 2F - Multiplex - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  1066.     AX = 1123h
  1067.     DS:SI -> ASCIZ filename to canonicalize
  1068.     ES:DI -> 128-byte buffer for qualified name
  1069. Return: CF set if not resolved
  1070. Notes:    called by DOS 3.1+ kernel
  1071.     called first when DOS attempts to resolve a filename (unless inside an
  1072.       AX=5D00h server call); if this fails, DOS resolves the name locally
  1073. SeeAlso: AX=1221h, INT 21/AH=60h
  1074. ----------2F1124-----------------------------
  1075. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  1076.     AX = 1124h
  1077.     ES:DI -> SFT
  1078.     SS = DOS CS
  1079.     ???
  1080. Return: CX = ???
  1081. Note:    called by DOS 3.1+ kernel
  1082. ----------2F1125-----------------------------
  1083. INT 2F - Multiplex - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  1084.     AX = 1125h
  1085.     STACK: WORD subfunction
  1086.         5D07h get print stream state
  1087.             Return: DL = current state
  1088.         5D08h set print stream state
  1089.             DL = new state
  1090.         5D09h finish print job
  1091. Return: CF set on error
  1092.         AX = error code (see INT 21/AH=59h)
  1093.     STACK unchanged
  1094. Note:    called by DOS 3.1+ kernel
  1095. SeeAlso: INT 21/AX=5D07h,5D08h,5D09h
  1096. ----------2F1126-----------------------------
  1097. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  1098.     AX = 1126h
  1099.     ???
  1100. Return: CF set on error???
  1101. Note:    called by DOS 3.1+ kernel
  1102. ----------2F1127-----------------------------
  1103. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - UNUSED
  1104.     AX = 1127h
  1105. Return: CF set
  1106.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1107. ----------2F1128-----------------------------
  1108. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - UNUSED
  1109.     AX = 1128h
  1110. Return: CF set
  1111.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1112. ----------2F1129-----------------------------
  1113. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - UNUSED
  1114.     AX = 1129h
  1115. Return: CF set
  1116.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1117. ----------2F112A-----------------------------
  1118. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1119.     AX = 112Ah
  1120.     DS = DOS CS
  1121.     ???
  1122. Return: ???
  1123. Note:    does something to each IFS driver
  1124. ----------2F112B-----------------------------
  1125. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1126.     AX = 112Bh
  1127.     SS = DOS CS
  1128.     CX = ???
  1129.     DX = ???
  1130.     STACK: WORD low byte contains function???
  1131.         0Dh ???
  1132.     ???
  1133. Return: CF set on error
  1134.         AX = DOS error code (see INT 21/AH=59h)
  1135.     CF clear if successful
  1136. Note:    called by DOS 4.0 kernel
  1137. ----------2F112C-----------------------------
  1138. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1139.     AX = 112Ch
  1140.     SS = DOS CS
  1141.     SDA current SFT pointer -> SFT for file
  1142.     ???
  1143. Return: CF set on error
  1144. ----------2F112D-----------------------------
  1145. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1146.     AX = 112Dh
  1147.     BL = subfunction
  1148.         04h ???
  1149.         Return: CF clear
  1150.         else ???
  1151.         Return: CX = ??? (00h or 02h for DOS 4.01)
  1152.     SS = DOS CS
  1153. Return: DS = DOS CS
  1154. Note:    called by DOS 4.0 kernel
  1155. ----------2F112E-----------------------------
  1156. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1157.     AX = 112Eh
  1158.     SS = DS = DOS CS
  1159.     STACK: WORD ???   low byte = ???
  1160. Return: CF set on error
  1161.     CF clear if successful
  1162.         CX = ???
  1163. Note:    called by DOS 4.0 kernel
  1164. SeeAlso: AX=1115h
  1165. ----------2F112F-----------------------------
  1166. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1167.     AX = 112Fh
  1168.     SS = DOS CS
  1169.     STACK: WORD function in low byte
  1170.         00h ???
  1171.             DS:SI -> Current Directory Structure???
  1172.             CL = drive (1=A:)
  1173.         01h ???
  1174.             DS:SI -> ???
  1175.             CL = file handle???
  1176.         02h ???
  1177.             DS:SI -> Current Directory Structure???
  1178.             DI = ???
  1179.             CX = drive (1=A:)
  1180.     ???
  1181. Return: CF set on error
  1182.         AX = DOS error code (see INT 21/AH=59h)
  1183.     CF clear if successful
  1184. Note:    called by DOS 4.0 kernel
  1185. SeeAlso: INT 21/AH=6Bh
  1186. ----------2F1130-----------------------------
  1187. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - GET IFSFUNC SEGMENT
  1188.     AX = 1130h
  1189. Return: ES = CS of resident IFSFUNC
  1190. ----------2F1200-----------------------------
  1191. INT 2F - Multiplex - DOS 3+ internal - INSTALLATION CHECK
  1192.     AX = 1200h
  1193. Return: AL = FFh (for compatibility with other INT 2F functions)
  1194. ----------2F1201-----------------------------
  1195. INT 2F - Multiplex - DOS 3+ internal - CLOSE CURRENT FILE
  1196.     AX = 1201h
  1197.     SS = DOS CS
  1198.     SDA current SFT pointer -> SFT of file to close
  1199. Return: BX???
  1200.     CX???
  1201.     ES:DI -> SFT for file
  1202. SeeAlso: AX=1106h,1227h, INT 21/AH=3Eh
  1203. ----------2F1202-----------------------------
  1204. INT 2F - Multiplex - DOS 3+ internal - GET INTERRUPT ADDRESS
  1205.     AX = 1202h
  1206.     STACK: WORD vector number
  1207. Return: ES:BX -> interrupt vector
  1208.     STACK unchanged
  1209. ----------2F1203-----------------------------
  1210. INT 2F - Multiplex - DOS 3+ internal - GET DOS DATA SEGMENT
  1211.     AX = 1203h
  1212. Return: DS = segment of IBMDOS.COM/MSDOS.SYS
  1213. ----------2F1204-----------------------------
  1214. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  1215.     AX = 1204h
  1216.     STACK: WORD character to normalize
  1217. Return: AL = normalized character (forward slash turned to backslash, all
  1218.         others unchanged)
  1219.     ZF set if path separator
  1220.     STACK unchanged
  1221. ----------2F1205-----------------------------
  1222. INT 2F - Multiplex - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  1223.     AX = 1205h
  1224.     STACK: WORD character to output
  1225. Return: STACK unchanged
  1226. Note:    can be called only from within DOS
  1227. ----------2F1206-----------------------------
  1228. INT 2F - Multiplex - DOS 3+ internal - INVOKE CRITICAL ERROR
  1229.     AX = 1206h
  1230.     DI = error code
  1231.     BP:SI -> device driver header
  1232.     SS = DOS CS
  1233.     STACK: WORD value to be passed to INT 24 in AX
  1234. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  1235.     STACK unchanged
  1236. SeeAlso: INT 24
  1237. ----------2F1207-----------------------------
  1238. INT 2F - Multiplex - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  1239.     AX = 1207h
  1240.     DS:DI -> disk buffer
  1241. Return: buffer moved to end of buffer list (least-recently used is first)
  1242. Note:    can be called only from within DOS
  1243. SeeAlso: AX=120Fh
  1244. ----------2F1208-----------------------------
  1245. INT 2F - Multiplex - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  1246.     AX = 1208h
  1247.     ES:DI -> SFT
  1248. Return: AX = new value of reference count
  1249. Note:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  1250.       that the SFT is not in use).    It is the caller's responsibility to
  1251.       set the reference count to zero after cleaning up.
  1252. ----------2F1209-----------------------------
  1253. INT 2F - Multiplex - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  1254.     AX = 1209h
  1255.     DS:DI -> disk buffer
  1256. Return: disk buffer marked unused, contents written to disk if buffer dirty
  1257. Note:    can be called only from within DOS
  1258. SeeAlso: AX=120Eh,1215h
  1259. ----------2F120A-----------------------------
  1260. INT 2F - Multiplex - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  1261.     AX = 120Ah
  1262.     DS = SS = DOS CS
  1263.     STACK: WORD extended error code
  1264. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  1265.     CF clear if retry, set otherwise
  1266.     STACK unchanged
  1267. Note:    can only be called during a DOS function call, as it uses various
  1268.       fields in the SDA to set up the registers for the INT 24
  1269. SeeAlso: INT 24
  1270. ----------2F120B-----------------------------
  1271. INT 2F - Multiplex - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  1272.     AX = 120Bh
  1273.     ES:DI -> system file table entry for previous open of file
  1274.     STACK: WORD extended error code (should be 20h--sharing violation)
  1275. Return: CF clear if operation should be retried
  1276.     CF set if operation should not be retried
  1277.         AX = error code (20h) (see AH=59h)
  1278.     STACK unchanged
  1279. Notes:    can only be called during a DOS function call
  1280.     should only be called if an attempt was made to open an already-open
  1281.       file contrary to the sharing rules
  1282.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  1283.       inheritance allowed
  1284. ----------2F120C-----------------------------
  1285. INT 2F - Multiplex - DOS 3+ internal - SET FCB FILE'S OWNER???
  1286.     AX = 120Ch
  1287.     SDA current SFT pointer -> SFT for file
  1288.     DS = SS = DOS CS
  1289. Return: ES, DI, AX destroyed
  1290. Note:    seems to change owner of last-accessed file to calling process
  1291. ----------2F120D-----------------------------
  1292. INT 2F - Multiplex - DOS 3+ internal - GET DATE AND TIME
  1293.     AX = 120Dh
  1294.     SS = DOS CS
  1295. Return: AX = current date in packed format (see INT 21/AX=5700h)
  1296.     DX = current time in packed format (see INT 21/AX=5700h)
  1297. SeeAlso: INT 21/AH=2Ah,2Ch
  1298. ----------2F120E-----------------------------
  1299. INT 2F - Multiplex - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  1300.     AX = 120Eh
  1301.     SS = DOS CS
  1302. Return: DS:DI -> first disk buffer
  1303. Note:    clears "referenced" flag on all disk buffers
  1304. SeeAlso: AX=1209h,1210h, INT 21/AH=0Dh
  1305. ----------2F120F-----------------------------
  1306. INT 2F - Multiplex - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  1307.     AX = 120Fh
  1308.     DS:DI -> disk buffer
  1309.     SS = DOS CS
  1310. Return: DS:DI -> next buffer in buffer list
  1311. Note:    indicated buffer moved to end of chain
  1312. SeeAlso: AX=1207h
  1313. ----------2F1210-----------------------------
  1314. INT 2F - Multiplex - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  1315.     AX = 1210h
  1316.     DS:DI -> first disk buffer to check
  1317. Return: ZF clear if found
  1318.         DS:DI -> first unreferenced disk buffer
  1319.     ZF set if not found
  1320. SeeAlso: AX=120Eh
  1321. ----------2F1211-----------------------------
  1322. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  1323.     AX = 1211h
  1324.     DS:SI -> ASCIZ filename to normalize
  1325.     ES:DI -> buffer for normalized filename
  1326. Return: destination buffer filled with uppercase filename, with slashes turned
  1327.     to backslashes
  1328. SeeAlso: AX=121Eh,1221h
  1329. ----------2F1212-----------------------------
  1330. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  1331.     AX = 1212h
  1332.     ES:DI -> ASCIZ string
  1333. Return: CX = length of string
  1334. SeeAlso: AX=1225h
  1335. ----------2F1213-----------------------------
  1336. INT 2F - Multiplex - DOS 3+ internal - UPPERCASE CHARACTER
  1337.     AX = 1213h
  1338.     STACK: WORD character to convert to uppercase
  1339. Return: AL = uppercase character
  1340.     STACK unchanged
  1341. ----------2F1214-----------------------------
  1342. INT 2F - Multiplex - DOS 3+ internal - COMPARE FAR POINTERS
  1343.     AX = 1214h
  1344.     DS:SI = first pointer
  1345.     ES:DI = second pointer
  1346. Return: ZF set if pointers are equal, ZF clear if not equal
  1347. ----------2F1215-----------------------------
  1348. INT 2F - Multiplex - DOS 3+ internal - FLUSH BUFFER
  1349.     AX = 1215h
  1350.     DS:DI -> disk buffer
  1351.     SS = DOS CS
  1352.     STACK: WORD drives for which to skip buffer
  1353.         ignore buffer if drive same as high byte, or bytes differ and
  1354.         the buffer is for a drive OTHER than that given in low byte
  1355. Return: STACK unchanged
  1356. Note:    can be called only from within DOS
  1357. SeeAlso: AX=1209h
  1358. ----------2F1216-----------------------------
  1359. INT 2F - Multiplex - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE
  1360.     AX = 1216h
  1361.     BX = system file table entry number
  1362. Return: CF clear if successful
  1363.         ES:DI -> system file table entry
  1364.     CF set if BX greater than FILES=
  1365. SeeAlso: AX=1220h
  1366. ----------2F1217-----------------------------
  1367. INT 2F - Multiplex - DOS 3+ internal - SET WORKING DRIVE
  1368.     AX = 1217h
  1369.     SS = DOS CS
  1370.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  1371. Return: CF set on error
  1372.         (drive > LASTDRIVE)
  1373.     CF clear if successful
  1374.         DS:SI -> current directory structure for specified drive
  1375.     STACK unchanged
  1376. SeeAlso: AX=1219h
  1377. ----------2F1218-----------------------------
  1378. INT 2F - Multiplex - DOS 3+ internal - GET CALLER'S REGISTERS
  1379.     AX = 1218h
  1380. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  1381. Note:    only valid while within DOS
  1382. ----------2F1219-----------------------------
  1383. INT 2F - Multiplex - DOS 3+ internal - SET DRIVE???
  1384.     AX = 1219h
  1385.     SS = DOS CS
  1386.     STACK: WORD drive (0 = default, 1 = A:, etc)
  1387. Return: ???
  1388.     STACK unchanged
  1389. Notes:    calls AX=1217h
  1390.     builds a current directory structure if inside server call
  1391.       (INT 21/AX=5D00h)
  1392. SeeAlso: AX=1217h,121Fh
  1393. ----------2F121A-----------------------------
  1394. INT 2F - Multiplex - DOS 3+ internal - GET FILE'S DRIVE
  1395.     AX = 121Ah
  1396.     DS:SI -> filename
  1397. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  1398. SeeAlso: INT 21/AH=19h,60h
  1399. ----------2F121B-----------------------------
  1400. INT 2F - Multiplex - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  1401.     AX = 121Bh
  1402.     CL = year - 1980
  1403. Return: AL = number of days in February
  1404. Note:    requires DS to be set to the DOS code segment
  1405. SeeAlso: INT 21/AH=2Bh
  1406. ----------2F121C-----------------------------
  1407. INT 2F - Multiplex - DOS 3+ internal - CHECKSUM MEMORY
  1408.     AX = 121Ch
  1409.     DS:SI -> start of memory to checksum
  1410.     CX = number of bytes
  1411.     DX = initial checksum
  1412.     SS = DOS CS
  1413. Return: AX, CX destroyed
  1414.     DX = checksum
  1415.     DS:SI -> first byte after checksummed range
  1416. SeeAlso: AX=121Dh
  1417. ----------2F121D-----------------------------
  1418. INT 2F - Multiplex - DOS 3+ internal - SUM MEMORY
  1419.     AX = 121Dh
  1420.     DS:SI -> memory to add up
  1421.     CX = 0000h
  1422.     DX = limit
  1423. Return: AL = byte which exceeded limit
  1424.     CX = number of bytes before limit exceeded
  1425.     DX = remainder after adding first CX bytes
  1426.     DS:SI -> byte beyond the one which exceeded the limit
  1427. SeeAlso: AX=121Ch
  1428. ----------2F121E-----------------------------
  1429. INT 2F - Multiplex - DOS 3+ internal - COMPARE FILENAMES
  1430.     AX = 121Eh
  1431.     DS:SI -> first ASCIZ filename
  1432.     ES:DI -> second ASCIZ filename
  1433. Return: ZF set if filenames equivalent, ZF clear if not
  1434. SeeAlso: AX=1211h,1221h
  1435. ----------2F121F-----------------------------
  1436. INT 2F - Multiplex - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  1437.     AX = 121Fh
  1438.     SS = DOS CS
  1439.     STACK: WORD drive letter
  1440. Return: ES:DI -> current directory structure (will be overwritten by next call)
  1441.     STACK unchanged
  1442. ----------2F1220-----------------------------
  1443. INT 2F - Multiplex - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  1444.     AX = 1220h
  1445.     BX = file handle
  1446. Return: CF set on error
  1447.         AL = 6 (invalid file handle)
  1448.     CF clear if successful
  1449.         ES:DI -> JFT entry for file handle in current process
  1450. Note:    the byte pointed at by ES:DI contains the number of the SFT for the
  1451.       file handle, or FFh if the handle is not open
  1452. SeeAlso: AX=1216h,1229h
  1453. ----------2F1221-----------------------------
  1454. INT 2F - Multiplex - DOS 3+ internal - CANONICALIZE FILE NAME
  1455.     AX = 1221h
  1456.     DS:SI -> file name to be fully qualified
  1457.     ES:DI -> 128-byte buffer for resulting canonical file name
  1458.     SS = DOS CS
  1459. Return: (see INT 21/AH=60h)
  1460. Note:    identical to INT 21/AH=60h
  1461. SeeAlso: AX=1123h, INT 21/AH=60h
  1462. ----------2F1222-----------------------------
  1463. INT 2F - Multiplex - DOS 3+ internal - SET EXTENDED ERROR INFO
  1464.     AX = 1222h
  1465.     SS = DOS data segment
  1466.     SS:SI -> 4-byte records
  1467.         BYTE    error code, FFh = last record
  1468.         BYTE    error class, FFh = don't change
  1469.         BYTE    suggested action, FFh = don't change
  1470.         BYTE    error locus, FFh = don't change
  1471.     SDA error code set
  1472. Return: SI destroyed
  1473.     SDA error class, error locus, and suggested action fields set
  1474. Note:    can be called only from within DOS
  1475. SeeAlso: AX=122Dh,INT 21/AH=59h
  1476. ----------2F1223-----------------------------
  1477. INT 2F - Multiplex - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  1478.     AX = 1223h
  1479.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  1480.     SDA+22Bh (DOS 4.0x) = eight-character blank-padded name
  1481. Return: CF set if no character device by that name found
  1482.     CF clear if found
  1483.         BH = low byte of device attribute word
  1484. Note:    can only be called from within DOS (assumes DS=SS=DOS CS)
  1485. SeeAlso: INT 21/AX=5D06h,5D0Bh
  1486. ----------2F1224-----------------------------
  1487. INT 2F - Multiplex - DOS 3+ internal - DELAY
  1488.     AX = 1224h
  1489.     SS = DOS CS
  1490. Return: after delay set by INT 21/AX=440Bh, unless in server call
  1491.       (INT 21/AX=5D00h)
  1492. Note:    delay is dependent on the processor speed, and is skipped entirely if
  1493.       inside a server call
  1494. SeeAlso: INT 21/AX=440Bh, INT 21/AH=52h
  1495. ----------2F1225-----------------------------
  1496. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  1497.     AX = 1225h
  1498.     DS:SI -> ASCIZ string
  1499. Return: CX = length of string
  1500. SeeAlso: AX=1212h
  1501. ----------2F1226-----------------------------
  1502. INT 2F - Multiplex - DOS 3.3+ internal - OPEN FILE
  1503.     AX = 1226h
  1504.     CL = access mode
  1505.     DS:DX -> ASCIZ filename
  1506. Return: CF set on error
  1507.         AL = error code (see INT 21/AH=59h)
  1508.     CF clear if successful
  1509.         AX = file handle
  1510. Notes:    can only be called from within DOS (assumes SS=DOS CS)
  1511.     equivalent to INT 21/AH=3Dh    
  1512. SeeAlso: AX=1227h,INT 21/AH=3Dh
  1513. ----------2F1227-----------------------------
  1514. INT 2F - Multiplex - DOS 3.3+ internal - CLOSE FILE
  1515.     AX = 1227h
  1516.     BX = file handle
  1517. Return: CF set on error
  1518.         AL = 06h invalid file handle
  1519.     CF clear if successful
  1520. Notes:    can only be called from within DOS (assumes SS=DOS CS)
  1521.     equivalent to INT 21/AH=3Eh
  1522. SeeAlso: AX=1106h,1201h,1226h, INT 21/AH=3Eh
  1523. ----------2F1228-----------------------------
  1524. INT 2F - Multiplex - DOS 3.3+ internal - MOVE FILE POINTER
  1525.     AX = 1228h
  1526.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  1527.     BX = file handle
  1528.     CX:DX = offset in bytes
  1529.     SS = DOS CS
  1530. Return: as for INT 21/AH=42h
  1531. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  1532.       function call
  1533.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  1534.       LSEEK, and restores frame pointer
  1535. SeeAlso: INT 21/AH=42h
  1536. ----------2F1229-----------------------------
  1537. INT 2F - Multiplex - DOS 3.3+ internal - READ FROM FILE
  1538.     AX = 1229h
  1539.     BX = file handle
  1540.     CX = number of bytes to read
  1541.     DS:DX -> buffer
  1542.     SS = DOS CS
  1543. Return: as for INT 21/AH=3Fh
  1544. Note:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  1545.       a DOS function call
  1546. SeeAlso: AX=1226h,INT 21/AH=3Fh
  1547. ----------2F122A-----------------------------
  1548. INT 2F - Multiplex - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  1549.     AX = 122Ah
  1550.     BX = entry point to set (0001h or 0002h)
  1551.     DS:SI -> FASTOPEN entry point
  1552.         (entry point not set if SI = FFFFh for DOS 4+)
  1553. Return: CF set if specified entry point already set
  1554. Notes:    entry point in BX is ignored under DOS 3.30
  1555.     both entry points set to same handler by DOS 4.01
  1556.  
  1557. DOS 3.30 FASTOPEN is called with:
  1558.     AL = 01h  ???
  1559.         CX = ??? seems to be offset
  1560.         DI = ??? seems to be offset
  1561.         SI = offset in DOS CS of filename
  1562.     AL = 02h  ???
  1563.     AL = 03h  open file???
  1564.         SI = offset in DOS CS of filename
  1565.     AL = 04h  ???
  1566.         AH = subfunction (00h,01h,02h)
  1567.         ES:DI -> ???
  1568.         CX = ??? (subfunctions 01h and 02h only)
  1569. Returns: CF set on error or not installed
  1570. Note: function 03h calls function 01h first
  1571.  
  1572. PCDOS 4.01 FASTOPEN is additionally called with:
  1573.     AL = 04h ???
  1574.         AH = 03h
  1575.         ???
  1576.     AL = 05h ???
  1577.     AL = 0Bh ???
  1578.     AL = 0Ch ???
  1579.     AL = 0Dh ???
  1580.     AL = 0Eh ???
  1581.     AL = 0Fh ???
  1582.     AL = 10h ???
  1583. ----------2F122B-----------------------------
  1584. INT 2F - Multiplex - DOS 3.3+ internal - IOCTL
  1585.     AX = 122Bh
  1586.     BP = 44xxh
  1587.     SS = DOS CS
  1588.     additional registers as appropriate for INT 21/AX=44xxh
  1589. Return: as for INT 21/AH=44h
  1590. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  1591.       a DOS function call
  1592.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  1593.       IOCTL, and restores frame pointer
  1594. SeeAlso: INT 21/AH=44h
  1595. ----------2F122C-----------------------------
  1596. INT 2F - Multiplex - DOS 3.3+ internal - GET DEVICE CHAIN
  1597.     AX = 122Ch
  1598. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  1599. SeeAlso: INT 21/AH=52h
  1600. ----------2F122D-----------------------------
  1601. INT 2F - Multiplex - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  1602.     AX = 122Dh
  1603. Return: AX = current extended error code
  1604. SeeAlso: AX=1222h,INT 21/AH=59h
  1605. ----------2F122E-----------------------------
  1606. INT 2F - Multiplex - DOS 4.00 internal - GET OR SET ERROR TABLE ADDRESSES
  1607.     AX = 122Eh
  1608.     DL = subfunction
  1609.         00h get standard DOS error table (errors 00h-12h,50h-5Bh)
  1610.         Return: ES:DI -> error table
  1611.         01h set standard DOS error table
  1612.         ES:DI -> error table
  1613.         02h get parameter error table (errors 00h-0Ah)
  1614.         Return: ES:DI -> error table
  1615.         03h set parameter error table
  1616.         ES:DI -> error table
  1617.         04h get critical/SHARE error table (errors 13h-2Bh)
  1618.         Return: ES:DI -> error table
  1619.         05h set critical/SHARE error table
  1620.         ES:DI -> error table
  1621.         06h get ??? error table
  1622.         Return: ES:DI -> error table
  1623.         07h set ??? error table
  1624.         ES:DI -> error table
  1625.         08h get ??? error table
  1626.         Return: ES:DI -> error table
  1627.         09h set ??? error table
  1628.         ES:DI -> error table
  1629. SeeAlso: INT 21/AH=59h
  1630.  
  1631. Format of error table:
  1632. Offset    Size    Description
  1633.  00h    BYTE    FFh
  1634.  01h  2 BYTEs    04h,00h (DOS version???)
  1635.  03h    BYTE    number of error headers following
  1636.  04h 2N WORDs    table of all error headers for table
  1637.         Offset    Size    Description
  1638.          00h    WORD    error message number
  1639.          02h    WORD    offset of error message from start of header
  1640.                 error messages are count byte followed by msg
  1641. ----------2F122F-----------------------------
  1642. INT 2F - Multiplex - DOS 4.0 internal - SET ???
  1643.     AX = 122Fh
  1644.     DX = ???
  1645. ----------2F13-------------------------------
  1646. INT 2F - Multiplex - DOS 3.3+ - SET DISK INTERRUPT HANDLER
  1647.     AH = 13h
  1648.     DS:DX -> interrupt handler disk driver calls on read/write
  1649.     ES:BX = address to restore INT 13 to on system halt (exit from root
  1650.          shell)
  1651. Return: DS:DX from previous invocation of this function
  1652.     ES:BX from previous invocation of this function
  1653. Notes:    most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  1654.       functions are still invoked via an INT 13 instruction
  1655.     this is a dangerous security loophole for any virus-monitoring software
  1656.       which does not trap this call (at least two viruses are known to use
  1657.       it to get the original ROM entry point)
  1658. ----------2F1400-----------------------------
  1659. INT 2F - Multiplex - NLSFUNC.COM - INSTALLATION CHECK
  1660.     AX = 1400h
  1661. Return: AL = 00h not installed, OK to install
  1662.          01h not installed, not OK
  1663.          FFh installed
  1664. Note:    called by DOS v3.3+ kernel
  1665. ----------2F1401-----------------------------
  1666. INT 2F - Multiplex - NLSFUNC.COM - CHANGE CODE PAGE
  1667.     AX = 1401h
  1668.     DS:SI -> internal code page structure (see below)
  1669.     BX = new code page
  1670.     DX = country code???
  1671. Return: AL = status
  1672.          00h successful
  1673.          else DOS error code
  1674. Note:    called by DOS v3.3+ kernel
  1675. SeeAlso: INT 21/AH=66h
  1676.  
  1677. Format of DOS 3.30 internal code page structure:
  1678. Offset    Size    Description
  1679.  00h  8 BYTEs    ???
  1680.  08h 64 BYTEs    name of country information file
  1681.  48h    WORD    system code page
  1682.  4Ah    WORD    number of supported subfunctions
  1683.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  1684.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  1685.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  1686.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  1687.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  1688. ----------2F1402-----------------------------
  1689. INT 2F - Multiplex - NLSFUNC.COM - GET COUNTRY INFO
  1690.     AX = 1402h
  1691.     BP = subfunction (same as AL for INT 21/AH=65h)
  1692.     BX = code page
  1693.     DX = country code
  1694.     DS:SI -> internal code page structure (see AX=1401h)
  1695.     ES:DI -> user buffer
  1696.     CX = size of user buffer
  1697. Return: AL = status
  1698.         00h successful
  1699.         else DOS error code
  1700. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  1701.     code page structure apparently only needed for COUNTRY.SYS pathname
  1702. SeeAlso: AX=1403h,1404h, INT 21/AH=65h
  1703. ----------2F1403-----------------------------
  1704. INT 2F - Multiplex - NLSFUNC.COM - SET COUNTRY INFO
  1705.     AX = 1403h
  1706.     DS:SI -> internal code page structure (see AX=1401h)
  1707.     BX = code page
  1708.     DX = country code
  1709. Return: AL = status 
  1710.          ???
  1711. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  1712. SeeAlso: AX=1402h,1404h, INT 21/AH=38h"SET"
  1713. ----------2F1404-----------------------------
  1714. INT 2F - Multiplex - NLSFUNC.COM - GET COUNTRY INFO
  1715.     AX = 1404h
  1716.     BX = code page
  1717.     DX = country code
  1718.     DS:SI -> internal code page structure (see AX=1401h)
  1719.     ES:DI -> user buffer
  1720. Return: AL = status
  1721.          ???
  1722. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  1723.     code page structure apparently only needed for COUNTRY.SYS pathname
  1724. SeeAlso: AX=1402h,1403h, INT 21/AH=38h"GET"
  1725. ----------2F1500-----------------------------
  1726. INT 2F - Multiplex - DOS 4+ GRAPHICS.COM - INSTALLATION CHECK
  1727.     AX = 1500h
  1728. Return: AX = FFFFh
  1729.     ES:DI -> ??? (graphics data?)
  1730. Note:    this installation check conflicts with the CDROM Extensions
  1731.       installation check
  1732. ----------2F1500BX0000-----------------------
  1733. INT 2F - Multiplex - CDROM - INSTALLATION CHECK
  1734.     AX = 1500h
  1735.     BX = 0000h
  1736. Return: BX = number of CDROM drive letters used
  1737.     CX = starting drive letter (0=A:)
  1738. Notes:    this installation check DOES NOT follow the format used by other
  1739.       software
  1740.     this installation check conflicts with the DOS 4.x GRAPHICS.COM
  1741.       installation check
  1742. ----------2F1501-----------------------------
  1743. INT 2F - Multiplex - CDROM - GET DRIVE DEVICE LIST
  1744.     AX = 1501h
  1745.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  1746. Return: buffer filled, for each drive letter
  1747.       BYTE    subunit number in driver
  1748.       DWORD address of device driver header
  1749. ----------2F1502-----------------------------
  1750. INT 2F - Multiplex - CDROM - GET COPYRIGHT FILE NAME
  1751.     AX = 1502h
  1752.     ES:BX -> 38-byte buffer for name of copyright file
  1753.     CX = drive number (0=A:)
  1754. Return: CF set if drive is not a CDROM drive
  1755.         AX = 15 (invalid drive)
  1756.     CF clear if successful
  1757. SeeAlso: AX=1503h
  1758. ----------2F1503-----------------------------
  1759. INT 2F - Multiplex - CDROM - GET ABSTRACT FILE NAME
  1760.     AX = 1503h
  1761.     ES:BX -> 38-byte buffer for name of abstract file
  1762.     CX = drive number (0=A:)
  1763. Return: CF set if drive is not a CDROM drive
  1764.         AX = 15 (invalid drive)
  1765.     CF clear if successful
  1766. SeeAlso: AX=1502h
  1767. ----------2F1504-----------------------------
  1768. INT 2F - Multiplex - CDROM - GET BIBLIOGRAPHIC DOC FILE NAME
  1769.     AX = 1504h
  1770.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  1771.     CX = drive number (0=A:)
  1772. Return: CF set if drive is not a CDROM drive
  1773.         AX = 15 (invalid drive)
  1774.     CF clear if successful
  1775. ----------2F1505-----------------------------
  1776. INT 2F - Multiplex - CDROM - READ VTOC
  1777.     AX = 1505h
  1778.     ES:BX -> 2048-byte buffer
  1779.     CX = drive number (0=A:)
  1780.     DX = sector index (0=first volume descriptor,1=second,...)
  1781. Return: CF set on error
  1782.         AX = error code (15=invalid drive,21=not ready)
  1783.     CF clear if successful
  1784.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  1785. ----------2F1506-----------------------------
  1786. INT 2F - Multiplex - CDROM - TURN DEBUGGING ON
  1787.     AX = 1506h
  1788.     BX = debugging function to enable
  1789. Note:    reserved for development
  1790. SeeAlso: AX=1507h
  1791. ----------2F1507-----------------------------
  1792. INT 2F - Multiplex - CDROM - TURN DEBUGGING OFF
  1793.     AX = 1507h
  1794.     BX = debugging function to disable
  1795. Note:    reserved for development
  1796. SeeAlso: AX=1506h
  1797. ----------2F1508-----------------------------
  1798. INT 2F - Multiplex - CDROM - ABSOLUTE DISK READ
  1799.     AX = 1508h
  1800.     ES:BX -> buffer
  1801.     CX = drive number (0=A:)
  1802.     SI:DI = starting sector number
  1803.     DX = number of sectors to read
  1804. Return: CF set on error
  1805.         AL = error code (15=invalid drive,21=not ready)
  1806.     CF clear if successful
  1807. SeeAlso: AX=1509h
  1808. ----------2F1509-----------------------------
  1809. INT 2F - Multiplex - CDROM - ABSOLUTE DISK WRITE
  1810.     AX = 1509h
  1811.     ES:BX -> buffer
  1812.     CX = drive number (0=A:)
  1813.     SI:DI = starting sector number
  1814.     DX = number of sectors to write
  1815. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  1816. SeeAlso: AX=1508h
  1817. ----------2F150A-----------------------------
  1818. INT 2F - Multiplex - CDROM - RESERVED
  1819.     AX = 150Ah
  1820. ----------2F150B-----------------------------
  1821. INT 2F - Multiplex - CDROM 2.00 - DRIVE CHECK
  1822.     AX = 150Bh
  1823.     CX = drive number (0=A:)
  1824. Return: BX = ADADh if MSCDEX.EXE installed
  1825.         AX = 0000h if drive not supported
  1826.         nonzero if supported
  1827. SeeAlso: AX=150Dh
  1828. ----------2F150C-----------------------------
  1829. INT 2F - Multiplex - CDROM 2.00 - GET MSCDEX.EXE VERSION
  1830.     AX = 150Ch
  1831. Return: BH = major version
  1832.     BL = minor version
  1833. Note:    MSCDEX.EXE versions prior to 1.02 return BX=0
  1834. ----------2F150D-----------------------------
  1835. INT 2F - Multiplex - CDROM 2.00 - GET CDROM DRIVE LETTERS
  1836.     AX = 150Dh
  1837.     ES:BX -> buffer for drive letter list (1 byte per drive)
  1838. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  1839.     to the drive in the same position for function 1501h
  1840. SeeAlso: AX=150Bh
  1841. ----------2F150E-----------------------------
  1842. INT 2F - Multiplex - CDROM 2.00 - GET/SET VOLUME DESCRIPTOR PREFERENCE
  1843.     AX = 150Eh
  1844.     BX = subfunction
  1845.         00h get preference
  1846.         DX = 0000h
  1847.         Return: DX = preference settings
  1848.         01h set preference
  1849.         DH = volume descriptor preference
  1850.             01h = primary volume descriptor
  1851.             02h = supplementary volume descriptor
  1852.         DL = supplementary volume descriptor preference
  1853.             01h = shift-Kanji
  1854.     CX = drive number (0=A:)
  1855. Return: CF set on error
  1856.         AX = error code (15=invalid drive,1=invalid function)
  1857.     CF clear if successful
  1858. ----------2F150F-----------------------------
  1859. INT 2F - Multiplex - CDROM 2.00 - GET DIRECTORY ENTRY
  1860.     AX = 150Fh
  1861.     CX = drive number (0=A:)
  1862.     ES:BX -> ASCIZ path name
  1863.     SI:DI -> 255-byte buffer for directory entry
  1864. Return: CF set on error
  1865.         AX = error code
  1866.     CF clear if succesful
  1867.         AX = disk format (0=High Sierra,1=ISO 9660)
  1868.  
  1869. Format of directory entry:
  1870. Offset    Size    Description
  1871.  00h    BYTE  length of directory entry
  1872.  01h    BYTE  length of XAR in LBN's (don't ask me what that means...)
  1873.  02h    DWORD LBN of data, Intel (little-endian) format
  1874.  06h    DWORD LBN of data, Motorola (big-endian) format
  1875.  0Ah    DWORD length of file, Intal format
  1876.  0Eh    DWORD length of file, Motorola format
  1877. ---High Sierra---
  1878.  12h  6 BYTEs date and time
  1879.  18h    BYTE  bit flags
  1880.  19h    BYTE  reserved
  1881. ---ISO 9660---
  1882.  12h  7 BYTEs date and time
  1883.  19h    BYTE  bit flags
  1884. ---both formats---
  1885.  1Ah    BYTE  interleave size
  1886.  1Bh    BYTE  interleave skip factor
  1887.  1Ch    WORD  volume set sequence number, Intel format
  1888.  1Eh    WORD  volume set sequence number, Motorola format
  1889.  20h    BYTE  length of file name
  1890.  21h  N BYTEs file name
  1891.     BYTE (optional) padding if filename is odd length
  1892.       N BYTEs system data
  1893. ----------2F1510-----------------------------
  1894. INT 2F - Multiplex - CDROM 2.10 - SEND DEVICE DRIVER REQUEST
  1895.     AX = 1510h
  1896.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  1897.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  1898. ----------2F1600-----------------------------
  1899. INT 2F - Multiplex - MS WINDOWS - ENHANCED WINDOWS INSTALLATION CHECK
  1900.     AX = 1600h
  1901. Return: AL = 00h if Enhanced Windows 3.x or Windows/386 2.x not running
  1902.     AL = 80h if Enhanced Windows 3.x or Windows/386 2.x not running
  1903.     AL = 01h if Windows/386 2.x running
  1904.     AL = FFh if Windows/386 2.x running
  1905.     AL = anything else
  1906.         AL = Windows major version number >= 3
  1907.         AH = Windows minor version number
  1908. Note:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  1909.       drivers, TSRs, and applications) to cooperate with multitasking
  1910.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  1911.     certain calls are also supported in the Microsoft 80286 DOS extender in
  1912.       Windows standard mode
  1913. SeeAlso: AX=4680h
  1914. ----------2F1602-----------------------------
  1915. INT 2F - Multiplex - MS WINDOWS/386 2.x - GET API ENTRY POINT
  1916.     AX = 1602h
  1917. Return: ES:DI -> Windows/386 2.x API procedure entry point
  1918. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  1919.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  1920.         AX = 0000h
  1921.         ES:DI -> return address
  1922.         JUMP to address returned from INT 2F/AX=1602h
  1923.     After JUMP, at return address:
  1924.         BX = current VM ID.
  1925. ----------2F1605-----------------------------
  1926. INT 2F - Multiplex - MS WINDOWS - ENHANCED WINDOWS & 286 DOSX INIT BROADCAST
  1927.     AX = 1605h
  1928.     ES:BX = 0000h:0000h
  1929.     DS:SI = 0000h:0000h
  1930.     CX = 0000h
  1931.     DX = flags
  1932.         bit 0 = 0 if enhanced Windows initialization
  1933.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  1934.         bits 1-15 reserved (undefined)
  1935.     DI = version number (major in upper byte, minor in lower)
  1936. Return: CX = 0000h if okay for Windows to load
  1937.     CX <> 0 if Windows should not load
  1938.     ES:BX -> startup info structure (see below)
  1939.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  1940. Notes:    the enhanced Windows loader and Microsoft 286 DOS extender will
  1941.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  1942.       driver or TSR can watch for this broadcast and return the appropriate
  1943.       values.  If the driver or TSR returns CX <> 0, it is also its
  1944.       responsibility to display an error message.
  1945.     each handler must first chain to the prior INT 2F handler with
  1946.       registers unchanged before processing the call
  1947.     if the handler requires local data on a per-VM basis, it must store the
  1948.       returned ES:BX in the "next" field of a startup info structure and
  1949.       return a pointer to that structure in ES:BX
  1950.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  1951.       already nonzero, the TSR must fail the initialization by setting CX
  1952.       nonzero
  1953. SeeAlso: AX=1606h,AX=1608h
  1954.  
  1955. Format of Startup Information Structure:
  1956. Offset    Size    Description
  1957.  00h  2 BYTEs    major, minor version of info structure
  1958.  02h    DWORD    pointer to next startup info structure
  1959.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  1960.  0Ah    DWORD    virtual device reference data (only used if above nonzero)
  1961.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  1962.  
  1963. Format of one Instance Item in array:
  1964. Offset    Size    Description
  1965.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  1966.  04h    WORD    size of instance data
  1967.  
  1968. Virtual mode enable/disable procedure called with:
  1969.     AX = 0000h disable V86 mode
  1970.     AX = 0001h enable V86 mode
  1971.     interrupts disabled
  1972. Return: CF set on error
  1973.     CF clear if successful
  1974.     interrupts disabled
  1975. ----------2F1606-----------------------------
  1976. INT 2F - Multiplex - MS WINDOWS - ENHANCED WINDOWS & 286 DOSX EXIT BROADCAST
  1977.     AX = 1606h
  1978.     DX = flags
  1979.         bit 0 = 0 if enhanced Windows exit
  1980.         bit 0 = 1 if Microsoft 286 DOS extender exit
  1981.         bits 1-15 reserved (undefined)
  1982. Return: CX = 0000h if okay for Windows to load
  1983.     CX <> 0 if Windows should not load
  1984. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  1985.       broadcast will be issued immediately.
  1986.     this call will be issued in real mode
  1987. SeeAlso: AX=1605h,1609h
  1988. ----------2F1607-----------------------------
  1989. INT 2F - Multiplex - MS WINDOWS - VIRTUAL DEVICE CALL OUT API
  1990.     AX = 1607h
  1991.     BX = virtual device ID (see INT 2F/AX=1684h)
  1992. Note:    more of a convention than an API, this call specifies a standard
  1993.       mechanism for enhanced Windows virtual devices (VxD's) to talk to DOS
  1994.       device drivers and TSRs
  1995. SeeAlso: AX=1605h,AX=1684h
  1996. ----------2F1608-----------------------------
  1997. INT 2F - Multiplex - MS WINDOWS - ENHANCED WINDOWS INIT COMPLETE BROADCAST
  1998.     AX = 1608h
  1999. Notes:    called after all installable devices have been initialized
  2000.     real-mode software may be called between the enhanced Windows init call
  2001.       (AX=1605h) and this call; the software must detect this situation
  2002. SeeAlso: AX=1605h,AX=1609h
  2003. ----------2F1609-----------------------------
  2004. INT 2F - Multiplex - MS WINDOWS - ENHANCED WINDOWS BEGIN EXIT BROADCAST
  2005.     AX = 1609h
  2006. Note:    called at the beginning of a normal exit sequence; not made in the
  2007.       event of a fatal system crash
  2008. SeeAlso: AX=1606h,AX=1608h
  2009. ----------2F1680-----------------------------
  2010. INT 2F - Multiplex - MS WINDOWS - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  2011.     AX = 1680h
  2012. Return: AL = 00h if the call is supported
  2013.     AL = 80h (unchanged) if the call is not supported
  2014. Notes:    programs can use this function, even when not running under Windows in
  2015.       386 enhanced mode, because OS/2 can use the call to detect idleness
  2016.       even though it does not support the complete enhanced Windows API. 
  2017.     this call will be supported in OS/2 2.0 for multitasking DOS
  2018.       applications
  2019.     does not block the program; it just gives up the remainder of the time
  2020.       slice
  2021.     should only be used by non-Windows programs
  2022. SeeAlso: INT 15/AX=1000h
  2023. ----------2F1681-----------------------------
  2024. INT 2F - Multiplex - MS WINDOWS 3+ - BEGIN CRITICAL SECTION
  2025.     AX = 1681h
  2026. Notes:    used to prevent a task switch from occurring
  2027.     should be followed by an INT 2F/AX=1682h call as soon as possible
  2028.     nested calls are allowed, and must be followed by an appropriate number
  2029.       of "end critical section" calls
  2030.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  2031.       and increment by hand.
  2032. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  2033. ----------2F1682-----------------------------
  2034. INT 2F - Multiplex - MS WINDOWS 3+ - END CRITICAL SECTION
  2035.     AX = 1682h
  2036. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  2037.       and decrement by hand, taking care not to decrement InDOS flag
  2038.       through zero
  2039. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  2040. ----------2F1683-----------------------------
  2041. INT 2F - Multiplex - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID
  2042.     AX = 1683h
  2043. Return: BX = current virtual machine (VM) ID
  2044. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  2045.     VM IDs are reused when VMs are destroyed
  2046.     an ID of 0 will never be returned
  2047. SeeAlso: AX=1684h, AX=1685h
  2048. ----------2F1684-----------------------------
  2049. INT 2F - Multiplex - MS WINDOWS - GET DEVICE API ENTRY POINT
  2050.     AX = 1684h
  2051.     BX = virtual device (VxD) ID (see below)
  2052.     ES:DI = 0000h:0000h
  2053. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  2054. Note:    some enhanced Windows virtual devices provide services that
  2055.       applications can access.  For example, the Virtual Display Device
  2056.       (VDD) provides an API used in turn by WINOLDAP.
  2057. SeeAlso: AX=1683h
  2058.  
  2059. Values for VxD ID:
  2060.  01h    VMM        Virtual Machine Manager
  2061.  02h    Debug
  2062.  03h    VPICD        Virtual Prog. Interrupt Controller (PIC) Device
  2063.  04h    VDMAD        Virtual Direct Memory Access (DMA) Device
  2064.  05h    VTD        Virtual Timer Device
  2065.  06h    V86MMGR        Virtual 8086 Mode Device
  2066.  07h    PAGESWAP    Paging Device
  2067.  08h    Parity
  2068.  09h    Reboot
  2069.  0Ah    VDD        Virtual Display Device (GRABBER)
  2070.  0Bh    VSD        Virtual Sound Device
  2071.  0Ch    VMD        Virtual Mouse Device
  2072.  0Dh    VKD        Virtual Keyboard Device
  2073.  0Eh    VCD        Virtual COMM Device
  2074.  0Fh    VPD        Virtual Printer Device
  2075.  10h    VHD        Virtual Hard Disk Device
  2076.  11h    VMCPD
  2077.  12h    EBIOS        Reserve EBIOS page (e.g., on PS/2)
  2078.  13h    BIOSXLAT    Map ROM BIOS API between prot & V86 mode
  2079.  14h    VNETBIOS    Virtual NetBIOS Device
  2080.  15h    DOSMGR
  2081.  16h    WINLOAD
  2082.  17h    SHELL
  2083.  18h    VMPoll
  2084.  19h    VPROD
  2085.  1Ah    DOSNET        assures network integrity across VMs
  2086.  1Bh    VFD        Virtual Floppy Device
  2087.  1Ch    VDD2        Secondary display adapter
  2088.  1Dh    WINDEBUG
  2089.  1Eh    TSRLoad        TSR instance utility
  2090. Note:    The high bit of the VxD ID is reserved for future use. The
  2091.     next 10 bits are the OEM # which is assigned by Microsoft. The
  2092.     low 5 bits are the device number. 
  2093. ----------2F1685-----------------------------
  2094. INT 2F - Multiplex - MS WINDOWS - SWITCH VMs AND CALLBACK
  2095.     AX = 1685h
  2096.     BX = VM ID of virtual machine to switch to
  2097.     CX = flags
  2098.         bit 0 wait until interrupts enabled
  2099.         bit 1 wait until critical section unowned
  2100.         bits 2-15 reserved (zero)
  2101.     DX:SI = priority boost (see VMM.INC)
  2102.     ES:DI -> FAR procedure to callback
  2103. Return: CF set on error
  2104.         AX = error code
  2105.         01h invalid VM ID
  2106.         02h invalid priority boost
  2107.         03h invalid flags
  2108.     CF clear if successful
  2109.         event will be or has been called
  2110. Notes:    some DOS devices, such as networks, need to call functions in a
  2111.       specific VM. This call forces the appropriate VM to be installed.
  2112.     the callback procedure must preserve all registers and return with IRET
  2113. SeeAlso: AX=1683h, INT 15/AX=1117h
  2114. ----------2F1686-----------------------------
  2115. INT 2F - Multiplex - DOS Protected-Mode Interface - DETECT MODE
  2116.     AX = 1686h
  2117. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  2118.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  2119. SeeAlso: AX=1687h
  2120. ----------2F1687-----------------------------
  2121. INT 2F - Multiplex - DOS Protected-Mode Interface - INSTALLATION CHECK
  2122.     AX = 1687h
  2123. Return: AX = 0000h if installed
  2124.         BX = flags
  2125.         bit 0: 32-bit programs supported
  2126.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  2127.         DH = DPMI major version
  2128.         DL = DPMI minor version
  2129.         SI = number of paragraphs of DOS extender private data
  2130.         ES:DI -> DPMI mode-switch entry point
  2131. SeeAlso: AX=1686h
  2132.  
  2133. Call mode switch entry point with:
  2134.     AX = flags
  2135.         bit 0: set if 32-bit program
  2136.     ES = real mode segment of buffer for DPMI private data (ignored if
  2137.         SI was zero)
  2138. Return: CF set on error
  2139.         program still in real mode
  2140.     CF clear if successful
  2141.         CS = 16-bit selector corresponding to real-mode CS
  2142.         SS = selector corresponding to real-mode SS (64K limit)
  2143.         DS = selector corresponding to real-mode DS (64K limit)
  2144.         ES = selector to program's PSP (100h byte limit)
  2145.         FS = GS = 0
  2146.         high word of ESP = 0 if 32-bit program
  2147.         program now in protected mode
  2148. ----------2F1700-----------------------------
  2149. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - IDENTIFY WinOldAp VERSION
  2150.     AX = 1700h
  2151. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  2152.     AX <> 1700h
  2153.         AL = WINOLDAP major version
  2154.         AH = WINOLDAP minor version
  2155. Notes:    WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  2156.       "old" (character-mode) application access to Dynamic Data Exchange,
  2157.       menus, and the Windows clipboard.
  2158.     this installation check DOES NOT follow the format used by other
  2159.       software
  2160. ----------2F1701-----------------------------
  2161. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - OPEN CLIPBOARD
  2162.     AX = 1701h
  2163. Return:    AX <> 0  success
  2164.     AX = 0     clipboard is already open
  2165. ----------2F1702-----------------------------
  2166. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - EMPTY CLIPBOARD
  2167.     AX = 1702h
  2168. Return: AX <> 0  clipboard has been emptied
  2169.     AX = 0     failure
  2170. ----------2F1703-----------------------------
  2171. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - SET CLIPBOARD DATA
  2172.     AX = 1703h
  2173.     DX = clipboard format supported by WinOldAp:
  2174.         01h text
  2175.         02h bitmap
  2176.         03h metafile picture
  2177.         04h SYLK
  2178.         05h DIF
  2179.         06h TIFF
  2180.         07h OEM text
  2181.     ES:BX -> data (see below for formats)
  2182.     SI:CX = size of data
  2183. Return: AX <> 0 data copied into the Clipboard
  2184.     AX = 0 failure
  2185.  
  2186. Format of bitmap:
  2187. Offset    Size    Description
  2188.  00h    WORD    type (0000h)
  2189.  02h    WORD    width of bitmap in pixels
  2190.  04h    WORD    height of bitmap in pixels
  2191.  06h    WORD    bytes per line
  2192.  08h    BYTE    number of color planes
  2193.  09h    BYTE    number of adjacent color bits in pixel
  2194.  0Ah    DWORD    pointer to start of data
  2195.  0Eh    WORD    width in 0.1mm units
  2196.  10h    WORD    height in 0.1mm units
  2197.  12h  N BYTEs    bitmap data
  2198.  
  2199. Format of metafile picture:
  2200. Offset    Size    Description
  2201.  00h    WORD    mapping mode
  2202.  02h    WORD    X extent
  2203.  04h    WORD    Y extent
  2204.  06h    WORD    picture data
  2205. ----------2F1704-----------------------------
  2206. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA SIZE
  2207.     AX = 1704h
  2208.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  2209. Return:  DX:AX = size of data in bytes, including any headers
  2210. Failure: DX:AX = 0  no data in this format in the Clipboard
  2211. ----------2F1705-----------------------------
  2212. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA
  2213.     AX = 1705h
  2214.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  2215.     ES:BX -> buffer
  2216. Return: AX <> 0  success
  2217.     AX = 0     error, or no data in this format in Clipboard
  2218. ----------2F1708-----------------------------
  2219. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - CloseClipboard
  2220.     AX = 1708h
  2221. Return: AX <> 0 success
  2222.     AX = 0 failure
  2223. ----------2F1709-----------------------------
  2224. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - COMPACT CLIPBOARD
  2225.     AX = 1709h
  2226.     SI:CX = desired size in bytes
  2227. Return: DX:AX = number of bytes in largest block of free memory
  2228. Note:    WinOldAp is responsible for including the size of any headers
  2229. ----------2F170A-----------------------------
  2230. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET DEVICE CAPABILITIES
  2231.     AX = 170Ah
  2232.     DX = GDI information index
  2233.         00h device driver version
  2234.         02h device classification
  2235.         04h width in mm
  2236.         06h height in mm
  2237.         08h width in pixels
  2238.         0Ah height in pixels
  2239.         0Ch bits per pixel
  2240.         0Eh number of bit planes
  2241.         10h number of brushes supported by device
  2242.         12h number of pens supported by device
  2243.         14h number of markers supported by device
  2244.         16h number of fonts supported by device
  2245.         18h number of colors
  2246.         1Ah size required for device descriptor
  2247.         1Ch curve capabilities
  2248.         1Eh line capabilities
  2249.         20h polygon capabilities
  2250.         22h text capabilities
  2251.         24h clipping capabilities
  2252.         26h bitblt capabilities
  2253.         28h X aspect
  2254.         2Ah Y aspect
  2255.         2Ch length of hypotenuse of aspect
  2256.         58h logical pixels per inch of width
  2257.         5Ah logical pixels per inch of height
  2258. Return:  AX = integer value of the desired item
  2259.         device classification
  2260.             00h vector plotter
  2261.             01h raster display
  2262.             02h raster printer
  2263.             03h raster camera
  2264.             04h character-stream, PLP
  2265.             05h Metafile, VDM
  2266.             06h display-file
  2267.         curve capabilities
  2268.             bit 0  circles
  2269.             bit 1  pie wedges
  2270.             bit 2  chord arcs
  2271.             bit 3  ellipses
  2272.             bit 4  wide lines
  2273.             bit 5  styled lines
  2274.             bit 6  wide styled lines
  2275.             bit 7  interiors
  2276.         line capabilities
  2277.             bit 1  polylines
  2278.             bit 2  markers
  2279.             bit 3  polymarkers
  2280.             bit 4  wide lines
  2281.             bit 5  styled lines
  2282.             bit 6  wide styled lines
  2283.             bit 7  interiors
  2284.         polygon capabilities
  2285.             bit 0  polygons
  2286.             bit 1  rectangles
  2287.             bit 2  trapezoids
  2288.             bit 3  scanlines
  2289.             bit 4  wide borders
  2290.             bit 5  styled borders
  2291.             bit 6  wide styled borders
  2292.             bit 7  interiors
  2293.         text capabilities
  2294.             bit 0  output precision character
  2295.             bit 1  output precision stroke
  2296.             bit 2  clippping precision stroke
  2297.             bit 3  90-degree character rotation
  2298.             bit 4  arbitrary character rotation
  2299.             bit 5  independent X and Y scaling
  2300.             bit 6  double-size
  2301.             bit 7  integer scaling
  2302.             bit 8  continuous scaling
  2303.             bit 9  bold
  2304.             bit 10 italic
  2305.             bit 11 underline
  2306.             bit 12 strikeout
  2307.             bit 13 raster fonts
  2308.             bit 14 vector fonts
  2309.             bit 15 reserved
  2310.         clipping capabilities
  2311.             00h none
  2312.             01h clipping to rectangles
  2313.         raster capabilities
  2314.             bit 0  simple bitBLT
  2315.             bit 1  device requires banding support
  2316.             bit 2  device requires scaling support
  2317.             bit 3  supports >64K bitmap
  2318. Note:  This function returns the device-capability bits for the given display
  2319. ----------2F1900-----------------------------
  2320. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  2321.     AX = 1900h
  2322. Return: AL = 00h  not installed
  2323.          FFh  installed
  2324. ----------2F1901-----------------------------
  2325. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  2326.     AX = 1901h
  2327.     BL = 00h if SHELLC transient
  2328.          01h if SHELLC resident
  2329.     DS:DX -> far call entry point for resident SHELLC.EXE
  2330. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  2331. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  2332. ----------2F1902-----------------------------
  2333. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  2334.     AX = 1902h
  2335.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  2336.          final filename element uppercased
  2337.     DS:DX -> buffer for results
  2338. Return: AL = 00h  failed, either
  2339.           (a) final filename element quoted at ES:DI does not match
  2340.               identity of shell batch file quoted as parameter of most
  2341.               recent call of SHELLB command, or
  2342.           (b) no more Program Start Commands available.
  2343.     AL= FFh  success, then:
  2344.         memory at DS:[DX+1] onwards filled as:
  2345.         DX+1:    BYTE    count of bytes of PSC
  2346.         DX+2: N BYTEs    Program Start Command text
  2347.             BYTE    0Dh terminator 
  2348. Explanation: COMMAND.COM executes the result of this call in preference to 
  2349.     reading a command from a batch file. Thus the batch file does not
  2350.     advance in execution for so long as SHELLB provides PSCs from its
  2351.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  2352.     menu interface. The final PSC of a sequence is finished with a 
  2353.     GOTO COMMON, which causes a loop back in the batch file which called
  2354.     SHELLC so as to execute SHELLC again. The check on batch file name
  2355.     permits PSCs to CALL nested batch files while PSCs are still stacked
  2356.     up for subsequent execution.
  2357. ----------2F1903-----------------------------
  2358. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  2359.     AX = 1903h
  2360.     ES:DI -> ASCIZ batch file name as for AX=1902h
  2361. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  2362.     AL = 00h if it does not
  2363. ----------2F1904-----------------------------
  2364. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  2365.     AX = 1904h
  2366. Return: ES:DI -> name of current shell batch file:
  2367.         WORD    number of bytes of name following
  2368.         BYTEs    (8 max) uppercase name of shell batch file
  2369. ----------2F1A00-----------------------------
  2370. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - INSTALLATION CHECK
  2371.     AX = 1A00h
  2372. Return: AL = FFh if installed
  2373. Note:    AVATAR.SYS also responds to this call
  2374. ----------2F1A00BX4156-----------------------
  2375. INT 2F - Multiplex - AVATAR.SYS - INSTALLATION CHECK
  2376.     AX = 1A00h
  2377.     BX = 4156h ('AV')
  2378.     CX = 4154h ('AT')
  2379.     DX = 4152h ('AR')
  2380. Return: AL = FFh if installed
  2381.         CF clear
  2382.         BX = AVATAR protocol level supported
  2383.         CX = driver type
  2384.         0000h AVATAR.SYS
  2385.         4456h DVAVATAR.COM inside DESQview window
  2386.         DX = 0016h
  2387. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  2388.       the magic values
  2389.     AVATAR.SYS is a CON replacement by George Adam Stanislav which
  2390.       interprets AVATAR command codes in the same way that ANSI interprets
  2391.       ANSI command codes
  2392. ----------2F1A01-----------------------------
  2393. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  2394.     AX = 1A01h
  2395.     CL = 7Fh for GET
  2396.        = 5Fh for SET
  2397.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  2398. Return: CF set on error
  2399.         AX = error code (many non-standard)
  2400.     CF clear if successful
  2401.         AX destroyed
  2402. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  2403. SeeAlso: AX=1A02h, INT 21/AX=440Ch
  2404. ----------2F1A02-----------------------------
  2405. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - MISC REQUESTS
  2406.     AX = 1A02h
  2407.     DS:DX -> parameter block (see below)
  2408. SeeAlso: AX=1A01h
  2409.  
  2410. Format of parameter block:
  2411. Offset    Size    Description
  2412.  00h    BYTE    subfunction
  2413.         00h set/reset interlock
  2414.         01h get /L flag
  2415.  01h    BYTE    interlock state
  2416.         00h=reset, 01h=set
  2417.           This interlock prevents some of the ANSI.SYS post-processing
  2418.           in its hook onto INT 10, AH=00h mode set
  2419.  02h    BYTE    (returned)
  2420.         00h if /L not in effect
  2421.         01h if /L in effect
  2422. ----------2F1A21-----------------------------
  2423. INT 2F - Multiplex - AVATAR.SYS - SET DRIVER STATE
  2424.     AX = 1A21h (AL='!')
  2425.     DS:SI -> command string with one or more state characters
  2426.     CX = length of command string
  2427. Return: CF set on error (invalid subfunction)
  2428.     CF clear if successful
  2429. Note:    the characters in the state string are interpreted left to right, and
  2430.       need not be in any particular order
  2431. SeeAlso: AX=1A3Fh
  2432.  
  2433. Values of state characters:
  2434.  'a'    activate driver
  2435.  'd'    disable driver
  2436.  'f'    use fast screen output
  2437.  'g'    always convert gray keys (+ and -) to function keys
  2438.  'G'    never convert gray keys
  2439.  'l'    convert gray keys only when ScrollLock active
  2440.  's'    use slow screen output
  2441.  't'    Tandy 1000 keyboard (not yet implemented)
  2442. ----------2F1A3F-----------------------------
  2443. INT 2F - Multiplex - AVATAR.SYS - QUERY DRIVER STATE
  2444.     AX = 1A3Fh (AL='?')
  2445.     ES:DI -> buffer
  2446.     CX = length of buffer in bytes
  2447. Return: CF clear
  2448.     CX = actual size of returned info
  2449. Note:    the returned information consists of multiple letters whose meanings
  2450.       are described under AX=1A21h
  2451. SeeAlso: AX=1A21h
  2452. ----------2F1B00-----------------------------
  2453. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  2454.     AX = 1B00h
  2455. Return: AL = FFh if installed
  2456. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  2457.     This extension hooks onto INT 67/AH=58h and returns from that call data
  2458.       which excludes the physical pages being used by DOS.
  2459. SeeAlso: AX=1B01h
  2460. ----------2F1B01-----------------------------
  2461. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extens internal - GET HIDDEN FRAME INFO
  2462.     AX = 1B01h
  2463.     DI = hidden physical page number
  2464. Return: AX = FFFFh if failed (no such hidden page)
  2465.     AX = 0000h if OK, then
  2466.          ES = segment of page frame
  2467.          DI = physical page number
  2468. Note:    this corresponds to the data edited out of the INT 67/AH=58h call
  2469. SeeAlso: AX=1BFFh
  2470. ----------2F1BFF-----------------------------
  2471. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS internal??? - ???
  2472.     AX = 1BFFh
  2473.     DI = ???
  2474. Return: AH = ???
  2475.     ES:DI -> ???
  2476. Note:    called by FASTOPEN
  2477. SeeAlso: AX=1B01h
  2478. ----------2F4001-----------------------------
  2479. INT 2F - Multiplex - OS/2 compatibility box - SWITCH DOS TO BACKGROUND
  2480.     AX = 4001h
  2481. SeeAlso: AX=4002h
  2482. ----------2F4002-----------------------------
  2483. INT 2F - Multiplex - OS/2 compatibility box - SWITCH DOS TO FOREGROUND
  2484.     AX = 4002h
  2485. SeeAlso: AX=4001h
  2486. ----------2F4300-----------------------------
  2487. INT 2F - Multiplex - XMS - INSTALLATION CHECK
  2488.     AX = 4300h
  2489. Return: AL = 80h XMS driver installed
  2490.     AL <> 80h no driver
  2491. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  2492.       above 640K
  2493.     this installation check DOES NOT follow the format used by other
  2494.       software
  2495. SeeAlso: AX=4310h
  2496. ----------2F4310-----------------------------
  2497. INT 2F - Multiplex - XMS - GET DRIVER ADDRESS
  2498.     AX = 4310h
  2499. Return: ES:BX -> driver entry point
  2500. SeeAlso: AX=4300h
  2501.  
  2502. Perform a FAR call to the driver entry point with AH set to the function code
  2503.     AH    function
  2504.     00h  Get XMS version number
  2505.          Return: AX = XMS version (in BCD)
  2506.              BX = internal revision number
  2507.              DX = 0001h if HMA (1M to 1M + 64K) exists
  2508.               0000h if HMA does not exist
  2509.     01h  Request High Memory Area (1M to 1M + 64K)
  2510.          DX = memory in bytes (for TSR or device drivers)
  2511.           FFFFh if application program
  2512.          Return: AX = 0001h success
  2513.             = 0000h failure
  2514.                BL = error code (see below)
  2515.     02h  Release High Memory Area
  2516.          Return: AX = 0001h success
  2517.             = 0000h failure
  2518.                BL = error code (see below)
  2519.     03h  Global enable A20, for using the HMA
  2520.          Return: AX = 0001h success
  2521.             = 0000h failure
  2522.                BL = error code (see below)
  2523.     04h  Global disable A20
  2524.          Return: AX = 0001h success
  2525.             = 0000h failure
  2526.                BL = error code (see below)
  2527.     05h  Local enable A20, for direct access to extended memory
  2528.          Return: AX = 0001h success
  2529.             = 0000h failure
  2530.                BL = error code (see below)
  2531.     06h  Local disable A20
  2532.          Return: AX = 0001h success
  2533.             = 0000h failure
  2534.                BL = error code (see below)
  2535.     07h  Query A20 state
  2536.          Return: AX = 0001h enabled
  2537.             = 0000h disabled
  2538.              BL = error code (0 = successful)
  2539.     08h  Query free extended memory, not counting HMA
  2540.          Return: AX = size of largest extended memory block in K
  2541.              DX = total extended memory in K
  2542.              BL = error code (see below)
  2543.     09h  Allocate extended memory block
  2544.          DX = Kbytes needed
  2545.          Return: AX = 0001h success
  2546.                DX = handle for memory block
  2547.             = 0000h failure
  2548.                BL = error code (see below)
  2549.     0Ah  Free extended memory block
  2550.          DX = handle of block to free
  2551.          Return: AX = 0001h success
  2552.             = 0000h failure
  2553.                BL = error code (see below)
  2554.     0Bh  Move extended memory block
  2555.          DS:SI -> EMM structure (see below)
  2556.          Note: if either handle is 0000h, the corresponding offset is
  2557.            considered to be an absolute segment:offset address in
  2558.            directly addressable memory
  2559.          Return: AX = 0001h success
  2560.             = 0000h failure
  2561.                BL = error code (see below)
  2562.     0Ch  Lock extended memory block
  2563.          DX = handle of block to lock
  2564.          Return: AX = 0001h success
  2565.                DX:BX = 32-bit linear address of locked block
  2566.             = 0000h failure
  2567.                BL = error code (see below)
  2568.     0Dh  Unlock extended memory block
  2569.          DX = handle of block to unlock
  2570.          Return: AX = 0001h success
  2571.             = 0000h failure
  2572.                BL = error code (see below)
  2573.     0Eh  Get handle information
  2574.          DX = handle for which to get info
  2575.          Return: AX = 0001h success
  2576.                BH = block's lock count
  2577.                BL = number of free handles left
  2578.                DX = block size in K
  2579.             = 0000h failure
  2580.                BL = error code (see below)
  2581.     0Fh  Reallocate extended memory block
  2582.          DX = handle of block
  2583.          BX = new size of block in K
  2584.          Return: AX = 0001h success
  2585.             = 0000h failure
  2586.                BL = error code (see below)
  2587.     10h  Request upper memory block (nonEMS memory above 640K)
  2588.          DX = size of block in paragraphs
  2589.          Return: AX = 0001h success
  2590.                BX = segment address of UMB
  2591.                DX = actual size of block
  2592.             = 0000h failure
  2593.                BL = error code (see below)
  2594.                DX = largest available block
  2595.     11h  Release upper memory block
  2596.          DX = segment address of UMB to release
  2597.          Return: AX = 0001h success
  2598.             = 0000h failure
  2599.                BL = error code (see below)
  2600. Note:    HIMEM.SYS requires at least 256 bytes free stack space
  2601.  
  2602. Format of EMM structure:
  2603. Offset    Size    Description
  2604.  00h    DWORD    number of bytes to move (must be even)
  2605.  04h    WORD    source handle
  2606.  06h    DWORD    offset into source block
  2607.  0Ah    WORD    destination handle
  2608.  0Ch    DWORD    offset into destination block
  2609.  
  2610. Error codes returned in BL:
  2611.     80h Function not implemented
  2612.     81h Vdisk was detected
  2613.     82h An A20 error occurred
  2614.     8Eh a general driver error
  2615.     8Fh unrecoverable driver error
  2616.     90h HMA does not exist
  2617.     91h HMA is already in use
  2618.     92h DX is less than the /HMAMIN= parameter
  2619.     93h HMA is not allocated
  2620.     94h A20 line still enabled
  2621.     A0h all extended memory is allocated
  2622.     A1h all available extended memory handles are allocated
  2623.     A2h Invalid handle
  2624.     A3h Source handle is invalid
  2625.     A4h Source offset is invalid
  2626.     A5h Destination handle is invalid
  2627.     A6h Destination offset is invalid
  2628.     A7h Length is invalid
  2629.     A8h Move has an invalid overlap
  2630.     A9h Parity error occurred
  2631.     AAh Block is not locked
  2632.     ABh Block is locked
  2633.     ACh Block lock count overflowed
  2634.     ADh Lock failed
  2635.     B0h Only a smaller UMB is available
  2636.     B1h No UMB's are available
  2637.     B2h UMB segment number is invalid
  2638. ----------2F4653CX0002-----------------------
  2639. INT 2F - Multiplex - F-LOCK.EXE 
  2640.     AX = 4653h
  2641.     CX = 0002h
  2642.     BX = subfunction
  2643.         0000h  installation check
  2644.         Return: AX = FFFFh
  2645.         0001h  uninstall
  2646.         0002h  disable (v1.08 and below only)
  2647.         0003h  enable (v1.08 and below only)
  2648. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  2649.       Skulason
  2650. ----------2F4653CX0003-----------------------
  2651. INT 2F - Multiplex - F-XCHK.EXE
  2652.     AX = 4653h
  2653.     CX = 0003h
  2654.     BX = subfunction
  2655.         0000h  installation check
  2656.         Return: AX = FFFFh
  2657.         0001h  uninstall
  2658. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  2659.       Skulason
  2660. ----------2F4653CX0004-----------------------
  2661. INT 2F - Multiplex - F-POPUP.EXE
  2662.     AX = 4653h
  2663.     CX = 0004h
  2664.     BX = subfunction
  2665.         0000h  installation check
  2666.         Return: AX = FFFFh
  2667.         0001h  uninstall
  2668.         0002h  disable (v1.08 and below only)
  2669.         0003h  enable (v1.08 and below only)
  2670. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  2671.       Fridrik Skulason
  2672. ----------2F4653CX0005-----------------------
  2673. INT 2F - Multiplex - F-DLOCK.EXE
  2674.     AX = 4653h
  2675.     CX = 0005h
  2676.     BX = subfunction
  2677.         0000h installation check
  2678.         Return: AX = FFFFh
  2679.         0001h uninstall
  2680. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  2681.       Fridrik Skulason
  2682. ----------2F4680-----------------------------
  2683. INT 2F - Multiplex - MS Windows 3 - INSTALLATION CHECK
  2684.     AX = 4680h
  2685. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode
  2686.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  2687.             mode
  2688. Note:    not officially documented, but Microsoft has indicated that they
  2689.       intend to provide an installation check which works in all modes
  2690. SeeAlso: AX=1600h
  2691. ----------2F5453-----------------------------
  2692. INT 2F - Multiplex - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  2693.     AX = 5453h
  2694.     BX = subfunction
  2695.         00h installation check
  2696.         DS:SI -> 8-char blank-padded name
  2697.         Return: AX = FFFFh installed
  2698.                 CX = ID number of already-installed copy
  2699.                = anything else, not installed
  2700.                 CX = ID number for TSR when installed
  2701.         01h get user parameters
  2702.         CX = TSR ID number
  2703.         Return: AX = 0000h successful
  2704.                ES:BX -> user parameter block (see below)
  2705.                = nonzero failed
  2706.         02h check if hotkey in use
  2707.         CL = scan code of hot key
  2708.         Return: AX = FFFFh hot key conflicts with another TSR
  2709.                  otherwise safe to use the hotkey
  2710.         03h replace default critical error handler
  2711.         CX = TSR ID number
  2712.         DS:SI -> new routine for INT 24h
  2713.         Return: AX = nonzero, unable to install new handler
  2714.         04h get internal data area
  2715.         CX = TSR ID number
  2716.         Return: AX = 0000h
  2717.                 ES:BX -> TSR's internal data area (see below)
  2718.                = nonzero, TSR not found
  2719.         05h set multiple hot keys
  2720.         CX = TSR ID number
  2721.         DL = number of additional hot keys to allocate
  2722.         DS:SI -> table of hot keys
  2723.             BYTE  hotkey scan code
  2724.             BYTE  hotkey shift state
  2725.             BYTE  flag value to pass to TSR (nonzero)
  2726.         Return: AX = nonzero, unable to install hot keys
  2727.         06h - 0Fh reserved
  2728.         10h enable TSR
  2729.         CX = TSR ID number
  2730.         Return: AX = nonzero, unable to enable
  2731.         11h disable TSR
  2732.         CX = TSR ID number
  2733.         Return: AX = nonzero, unable to disable
  2734.         12h unload TSR
  2735.         CX = TSR ID number
  2736.         Return: AX = nonzero, invalid TSR number
  2737.         Note: if any interrupts used by TSR have been grabbed by
  2738.             another TSR, the TesSeRact routines will wait until
  2739.             it is safe to remove the indicated TSR from memory
  2740.         13h restart TSR
  2741.         CX = TSR ID number of TSR which was unloaded but is still in
  2742.              memory
  2743.         Return: AX = nonzero, unable to restart TSR
  2744.         14h get status word
  2745.         CX = TSR ID number
  2746.         Return: AX = FFFFh invalid ID number
  2747.                = other, successful
  2748.                 BX = bit flags
  2749.         15h set status word
  2750.         CX = TSR ID number
  2751.         DX = new bit flags
  2752.         Return: AX = nonzero, unable to set status word
  2753.         16h get INDOS state at popup
  2754.         CX = TSR ID number
  2755.         Return: AX = 0000h successful
  2756.                 BX = value of INDOS flag
  2757.         17h - 1Fh reserved
  2758.         20h call user procedure
  2759.         CX = TSR ID number
  2760.         ES:DI -> user-defined data
  2761.         Return: AX = 0000h successful
  2762.         21h stuff keystrokes into keyboard buffer
  2763.         CX = TSR ID number
  2764.         DL = speed
  2765.             00h stuff keystrokes only when buffer is empty
  2766.             01h stuff up to four keystrokes per clock tick
  2767.             02h stuff up to 15 keystrokes per clock tick
  2768.         DH = scan code flag
  2769.             if zeor, buffer contains alternating ASCII and scan codes
  2770.             if nonzero, buffer contains only ASCII codes
  2771.         SI = number of keystrokes
  2772.         ES:DI -> buffer to stuff
  2773.         Return: AX = 0000h success
  2774.                  F0F0h user aborted with ^C or ^Break
  2775.                  other unable to stuff keystrokes
  2776.         22h (v1.10) trigger popup
  2777.         CX = TSR ID number
  2778.         Return: AX = 0000h success, TSR will either pop up or beep to
  2779.                    indicate that it is unable to pop up
  2780.                  nonzero invalid ID number
  2781.         23h (v1.10) invoke TSR's background function
  2782.         CX = TSR ID number
  2783.         Return: AX = 0000h success
  2784.                  FFFFh not safe to call background function
  2785.                  nonzero invalid ID number
  2786.         24h - 2Fh reserved
  2787. Note:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  2788.       fully supports the TesSeRact API, as do the SWAP?? programs by 
  2789.       Innovative Data Concepts.
  2790.  
  2791. Format of User Parameter Block:
  2792. Offset    Size    Description
  2793.  00h  8 BYTEs    blank-padded TSR name
  2794.  08h    WORD    TSR ID number
  2795.  0Ah    DWORD    bitmap of supported functions
  2796.  0Eh    BYTE    scan code of primary hotkey
  2797.             00h = pop up when shift states match
  2798.             FFh = no popup (if shift state also FFh)
  2799.  0Fh    BYTE    shift state of primary hotkey
  2800.             FFh = no popup (if scan code also FFh)
  2801.  10h    BYTE    number of secondary hotkeys
  2802.  11h    DWORD    pointer to extra hotkeys set by func 05h
  2803.  15h    WORD    current TSR status flags
  2804.  17h    WORD    PSP segment of TSR
  2805.  19h    DWORD    DTA for TSR
  2806.  1Dh    WORD    default DS for TSR
  2807.  1Fh    DWORD    stack at popup
  2808.  23h    DWORD    stack at background invocation
  2809.  
  2810. Format of TSR internal data area:
  2811. Offset    Size    Description
  2812.  00h    BYTE    revision level of TesSeRact library
  2813.  01h    BYTE    type of popup in effect
  2814.  02h    BYTE    INT 08 occurred since last invocation
  2815.  03h    BYTE    INT 13 occurred since last invocation
  2816.  04h    BYTE    active interrupts
  2817.  05h    BYTE    active soft interrupts
  2818.  06h    BYTE    DOS major version
  2819.  07h    BYTE    how long to wait before popping up
  2820.  08h    DWORD    pointer to INDOS flag
  2821.  0CH    DWORD    pointer to DOS critical error flag
  2822.  10h    WORD    PSP segment of interrupted program
  2823.  12h    WORD    PSP segment of prog interrupted by INT 28
  2824.  14h    DWORD    DTA of interrupted program
  2825.  18h    DWORD    DTA of program interrupted by INT 28
  2826.  1Ch    WORD    SS of interrupted program
  2827.  1Eh    WORD    SP of interrupted program
  2828.  20h    WORD    SS of program interrupted by INT 28
  2829.  22h    WORD    SP of program interrupted by INT 28
  2830.  24h    DWORD    INT 24 of interrupted program
  2831.  28h  3 WORDs    DOS 3+ extended error info
  2832.  2Eh    BYTE    old BREAK setting
  2833.  2Fh    BYTE    old VERIFY setting
  2834.  30h    BYTE    were running MS WORD 4.0 before popup
  2835.  31h    BYTE    MS WORD 4.0 special popup flag
  2836.  32h    BYTE    enhanced keyboard call in use
  2837.  33h    BYTE    delay for MS WORD 4.0
  2838. 11 times:
  2839.     DWORD    old interrupt vector
  2840.     BYTE    interrupt number
  2841.     DWORD    new interrupt vector
  2842. ----------2F6400-----------------------------
  2843. INT 2F - Multiplex - SCRNSAV2.COM - INSTALLATION CHECK
  2844.     AX = 6400h
  2845. Return: AL = 00h not installed
  2846.          FFh installed
  2847. Note:    SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
  2848. ----------2F7A00-----------------------------
  2849. INT 2F - Multiplex - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  2850.     AX = 7A00h
  2851. Return: AL = 00h not installed
  2852.        = FFh installed
  2853.         ES:DI -> FAR entry point for routines accessed through INT 7Ah
  2854.             in NetWare versions through 2.0a
  2855. SeeAlso: INT 64"Novell",INT 7A"Novell"
  2856. ----------2F7A80-----------------------------
  2857. INT 2F - Multiplex - Novell NetWare shell 3.01d - ???
  2858.     AX = 7A80h
  2859. Return: nothing
  2860. Note:    apparently called on abnormal exit of the shell
  2861. ----------2F7A81-----------------------------
  2862. INT 2F - Multiplex - Novell NetWare shell 3.01d - ???
  2863.     AX = 7A81h
  2864.     CX:DX -> ??? in shell's CS (may be callback address or data structure)
  2865. Return: nothing???
  2866. ----------2F7A85-----------------------------
  2867. INT 2F - Multiplex - Novell NetWare shell 3.01 - BROADCAST INFORM
  2868.     AX = 7A85h
  2869.     CX = broadcast server number
  2870. Return: CX = 0000h if broadcast message handled by another program
  2871.     CX unchanged if broadcast not handled
  2872. ----------2F7AFE-----------------------------
  2873. INT 2F - Multiplex - Novell NetWare shell 3.01d - ???
  2874.     AX = 7AFEh
  2875. Return: AL = FFh ???
  2876.          other ???
  2877. ----------2F7AFF-----------------------------
  2878. INT 2F - Multiplex - Novell NetWare shell 3.01d - ???
  2879.     AX = 7AFFh
  2880.     BX = 0001h
  2881.     CX = offset of ???
  2882.     DX = offset of ???
  2883. Return: CX unchanged if ???
  2884. ----------2F8000-----------------------------
  2885. INT 2F - Multiplex - EASY-NET - INSTALLATION CHECK
  2886.     AX = 8000h
  2887. Return: AL = 00h not installed
  2888.          FFh installed
  2889. Note:    EASY-NET is a shareware two-machine serial-port network
  2890. ----------2F8900-----------------------------
  2891. INT 2F - Multiplex - WHOA!.COM - INSTALLATION CHECK
  2892.     AX = 8900h
  2893. Return: AL = 00h not installed
  2894.        = FFh installed
  2895. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  2896. ----------2F8901-----------------------------
  2897. INT 2F - Multiplex - WHOA!.COM - UNINSTALL
  2898.     AX = 8901h
  2899. Return: AL = FDh successful
  2900.        = FEh error
  2901. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  2902. ----------2F8902-----------------------------
  2903. INT 2F - Multiplex - WHOA!.COM - SET DELAY COUNT
  2904.     AX = 8902h
  2905.     BX = delay count (larger values slow system down more)
  2906. Return: AL = FDh successful
  2907.        = FEh error
  2908. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  2909. ----------2F90-------------------------------
  2910. INT 2F - Multiplex - RAID - ???
  2911.     AH = 90h
  2912.     ???
  2913. Return: ???
  2914. Note:    RAID is a TSR utility program that resides mostly in EMS
  2915. ----------2FAA00-----------------------------
  2916. INT 2F - Multiplex - VIDCLOCK.COM - INSTALLATION CHECK
  2917.     AX = AA00h
  2918. Return: AL = 00h not installed
  2919.          FFh installed
  2920. Note:    VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  2921. ----------2FAD00-----------------------------
  2922. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  2923.     AX = AD00h
  2924. Return: AL = FFh if installed
  2925.         BX = ??? (0100h in MS-DOS 3.30, PCDOS 4.01)
  2926. ----------2FAD01-----------------------------
  2927. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - SET ???
  2928.     AX = AD01h
  2929.     BX = ???
  2930. Return: ???
  2931.     CF set on error
  2932. ----------2FAD02-----------------------------
  2933. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - GET ???
  2934.     AX = AD02h
  2935. Return: BX = ??? (value set with AX=AD01h)
  2936. ----------2FAD03-----------------------------
  2937. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - GET ???
  2938.     AX = AD03h
  2939.     ES:DI -> user buffer
  2940.     CX = size of buffer
  2941. Return: CF set if buffer too small
  2942.     CF clear if successful
  2943. ----------2FAD04-----------------------------
  2944. INT 2F - Multiplex - DOS 4+ DISPLAY.SYS internal - ???
  2945.     AX = AD04h
  2946.     ???
  2947. Return: ???
  2948. ----------2FAD10-----------------------------
  2949. INT 2F - Multiplex - DOS 4+ DISPLAY.SYS internal - INSTALLATION CHECK???
  2950.     AX = AD10h
  2951.     ???
  2952. Return: AX = FFFFh
  2953.     BX = ??? (0100h in PCDOS 4.01)
  2954. ----------2FAD40-----------------------------
  2955. INT 2F - Multiplex - DOS 4.0 - ???
  2956.     AX = AD40h
  2957.     DX = ???
  2958.     ???
  2959. Return: ???
  2960. Note:    called by PCDOS 4.01 PRINT.COM
  2961. ----------2FAD80-----------------------------
  2962. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  2963.     AX = AD80h
  2964. Return: AL = FFh if installed
  2965.         BX = ??? (0100h in MSDOS 3.30 and PCDOS 4.01)
  2966.         ES:DI -> internal data (see below)
  2967.  
  2968. Format of KEYB internal data:
  2969. Offset    Size    Description
  2970.  00h    DWORD    original INT 09
  2971.  04h    DWORD    original INT 2F
  2972.  08h  6 BYTEs    ???
  2973.  0Eh    WORD    flags
  2974.  10h    BYTE    ???
  2975.  11h    BYTE    ???
  2976.  12h  4 BYTEs    ???
  2977.  16h  2 BYTEs    country ID letters
  2978.  18h    WORD    current code page
  2979. ---DOS 3.3---
  2980.  1Ah    WORD    pointer to first item in list of code page tables???
  2981.  1Ch    WORD    pointer to ??? item in list of code page tables
  2982.  1Eh  2 BYTEs    ???
  2983.  20h    WORD    pointer to key translation data
  2984.  22h    WORD    pointer to last item in code page table list (see below)
  2985.  24h  9 BYTEs    ???
  2986. ---DOS 4.01---
  2987.  1Ah  2 BYTEs    ???
  2988.  1Ch    WORD    pointer to first item in list of code page tables???
  2989.  1Eh    WORD    pointer to ??? item in list of code page tables
  2990.  20h  2 BYTEs    ???
  2991.  22h    WORD    pointer to key translation data
  2992.  24h    WORD    pointer to last item in code page table list (see below)
  2993.  26h  9 BYTEs    ???
  2994.  
  2995. Format of code page table list entries:
  2996. Offset    Size    Description
  2997.  00h    WORD    pointer to next item, FFFFh = last
  2998.  02h    WORD    code page
  2999.  04h  2 BYTEs    ???
  3000.  
  3001. Format of translation data:
  3002. Offset    Size    Description
  3003.  00h    WORD    size of data in bytes, including this word
  3004.  02h N-2 BYTEs    ???
  3005. ----------2FAD81-----------------------------
  3006. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - SET KEYBOARD CODE PAGE
  3007.     AX = AD81h
  3008.     BX = code page
  3009. Return: CF set on error
  3010.         AX = 0001h (code page not available)
  3011.     CF clear if successful
  3012. Note:    called by DISPLAY.SYS
  3013. SeeAlso: AX=AD82h
  3014. ----------2FAD82-----------------------------
  3015. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - SET KEYBOARD MAPPING
  3016.     AX = AD82h
  3017.     BL = 00h US keyboard (Control-Alt-F1)
  3018.        = FFh foreign keyboard (Control-Alt-F2)
  3019. Return: CF set on error (BL not 00h or FFh)
  3020.     CF clear if successful
  3021. SeeAlso: AX=AD81h
  3022. ----------2FAE00DXFFFF-----------------------
  3023. INT 2F - Multiplex - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALL CHECK
  3024.     AX = AE00h
  3025.     DX = FFFFh
  3026.     DS:BX -> command line
  3027. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  3028.     AL = 00h if the command should be executed as usual
  3029. Notes:    This call provides a mechanism for TSRs to install permanent extensions
  3030.       to the command repertoire of COMMAND.COM.  It appears that
  3031.       COMMAND.COM makes this call before executing the current command
  3032.       line,    and does not execute it itself if the return is FFh.
  3033.     APPEND hooks this call, to allow subsequent APPEND commands to execute
  3034.       without re-running APPEND
  3035.  
  3036. Format of command line:
  3037. Offset    Size    Description
  3038.  00h    BYTE    max length of command line, as in INT 21/AH=0Ah
  3039.  01h    BYTE    count of bytes to follow
  3040.       N BYTEs    command line text, terminated by 0Dh
  3041. ----------2FAE01DXFFFF-----------------------
  3042. INT 2F - Multiplex - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  3043.     AX = AE01h
  3044.     DX = FFFFh
  3045.     DS:SI -> buffer
  3046. Return: buffer at DS:SI filled with a length byte followed by the uppercase
  3047.       internal command to execute (if length not 0)
  3048. Notes:    this call requests execution of the command which a previous call to
  3049.       AX=AE00h indicated was resident
  3050.     APPEND hooks this call
  3051.     if the buffer is filled with a nonempty string, COMMAND.COM will
  3052.       attempt to execute it as an internal command
  3053. ----------2FB000-----------------------------
  3054. INT 2F - Multiplex - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  3055.     AX = B000h
  3056. Return: AL = 00h not installed, OK to install
  3057.        = 01h not installed, not OK to install
  3058.        = FFh installed
  3059. Note:    called by DISPLAY.SYS
  3060. ----------2FB001-----------------------------
  3061. INT 2F - Multiplex - DOS 3.3+ GRAFTABL.COM - GET ???
  3062.     AX = B001h
  3063.     DS:DX -> 4-byte buffer (see below)
  3064. Return: buffer filled
  3065.     AL = FFh
  3066.  
  3067. Format of buffer:
  3068. Offset    Size    Description
  3069.  00h    WORD    ??? (PCDOS 3.30/4.01 fill in 0130h, MSDOS 3.30 fills in 0030h)
  3070.  02h    WORD    CS of resident code
  3071. ----------2FB400-----------------------------
  3072. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - INSTALLATION CHECK
  3073.     AX = B400h
  3074. Return: AL = FFh if installed
  3075. ----------2FB401-----------------------------
  3076. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - GET HOST BUFFER ADDRESS
  3077.     AX = B401h
  3078. Return: ES -> host screen buffer (PC ASCII format)
  3079.     ES unchanged if communications not started
  3080. ----------2FB402-----------------------------
  3081. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  3082.     AX = B402h
  3083.     BX = ???
  3084. Return: ???
  3085. ----------2FB403-----------------------------
  3086. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  3087.     AX = B403h
  3088.     ???
  3089. Return: ???
  3090. ----------2FB404-----------------------------
  3091. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  3092.     AX = B404h
  3093.     ???
  3094. Return: ???
  3095. ----------2FB405-----------------------------
  3096. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  3097.     AX = B405h
  3098.     ???
  3099. Return: ???
  3100. ----------2FB700-----------------------------
  3101. INT 2F - Multiplex - APPEND - INSTALLATION CHECK
  3102.     AX = B700h
  3103. Return: AL = 00h not installed
  3104.          FFh if installed
  3105. Note:    MSDOS 3.30 APPEND refuses to install itself when run inside TopView or
  3106.       a TopView-compatible environment
  3107. ----------2FB701-----------------------------
  3108. INT 2F - Multiplex - APPEND - ???
  3109.     AX = B701h
  3110.     ???
  3111. Note:    MSDOS 3.30 APPEND displays "Incorrect APPEND Version" and aborts caller
  3112. ----------2FB702-----------------------------
  3113. INT 2F - Multiplex - APPEND - VERSION CHECK
  3114.     AX = B702h
  3115. Return: AX = FFFFh if not DOS 4.0 APPEND
  3116.     AL = major version number
  3117.     AH = minor version number, otherwise
  3118. SeeAlso: AX=B710h
  3119. ----------2FB703-----------------------------
  3120. INT 2F - Multiplex - DOS 3.3 APPEND - HOOK INT 21
  3121.     AX = B703h
  3122.     ES:DI -> INT 21 handler APPEND should chain to
  3123. Return: ES:DI -> APPEND's INT 21 handler
  3124. Note:    each invocation of this function toggles a flag which APPEND uses to
  3125.       determine whether to chain to the user handler or the original
  3126.       INT 21
  3127. ----------2FB704-----------------------------
  3128. INT 2F - Multiplex - DOS 3.3+ APPEND - GET APPEND PATH
  3129.     AX = B704h
  3130. Return: ES:DI -> active APPEND path (128 bytes max)
  3131. ----------2FB706-----------------------------
  3132. INT 2F - Multiplex - DOS 4.0 APPEND - GET APPEND FUNCTION STATE
  3133.     AX = B706h
  3134. Return: BX = APPEND state
  3135.         bit 0: set if APPEND enabled
  3136.         bits 1-12 reserved
  3137.         bit 13: set if /PATH flag active
  3138.         bit 14: set if /E flag active (environment var APPEND exists)
  3139.         bit 15: set if /X flag active
  3140. ----------2FB707-----------------------------
  3141. INT 2F - Multiplex - DOS 4.0 APPEND - SET APPEND FUNCTION STATE
  3142.     AX = B707h
  3143.     BX = APPEND state bits (see AX=B706h)
  3144. ----------2FB710-----------------------------
  3145. INT 2F - Multiplex - DOS 3.3+ APPEND - GET VERSION INFO
  3146.     AX = B710h
  3147. Return: AX = ???
  3148.     BX = ??? (0000h in MSDOS 3.30)
  3149.     CX = ??? (0000h in MSDOS 3.30)
  3150.     DL = major version
  3151.     DH = minor version
  3152. SeeAlso: AX=B702h
  3153. ----------2FB711-----------------------------
  3154. INT 2F - Multiplex - DOS 4.0 APPEND - SET RETURN FOUND NAME STATE
  3155.     AX = B711h
  3156. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  3157.     6Ch, the fully qualified filename is written over top of the filename
  3158.     passed to the INT 21h call.  The application must provide a 
  3159.     sufficiently large buffer.  This state is reset after next INT 21h
  3160.     call processed by APPEND.
  3161. ----------2FB800-----------------------------
  3162. INT 2F - Multiplex - Network - INSTALLATION CHECK
  3163.     AX = B800h
  3164. Return: AL = 00h not installed
  3165.         nonzero installed
  3166.           BX = installed component flags (test in this order!)
  3167.            bit 6   server
  3168.            bit 2   messenger
  3169.            bit 7   receiver
  3170.            bit 3   redirector
  3171. ----------2FB803-----------------------------
  3172. INT 2F - Multiplex - Network - GET CURRENT POST HANDLER ADDRESS
  3173.     AX = B803h
  3174. Return: ES:BX = post address
  3175. SeeAlso: AX=B804h,B903h
  3176. ----------2FB804-----------------------------
  3177. INT 2F - Multiplex - Network - SET NEW POST HANDLER ADDRESS
  3178.     AX = B804h
  3179.     ES:BX -> new FAR post handler
  3180. Notes:    used in conjunction with AX=B803h to hook into the network event post
  3181.       routine.
  3182.     The specified handler is called on any network event.  Two events are
  3183.       defined: message received and critical network error.
  3184. SeeAlso: AX=B803h,B904h
  3185.  
  3186. Values post routine is called with:
  3187.     AX = 0000h single block message
  3188.         DS:SI -> ASCIZ originator name
  3189.         DS:DI -> ASCIZ destination name
  3190.         ES:BX -> text header (see below)
  3191.     AX = 0001h start multiple message block
  3192.         CX = block group ID
  3193.         DS:SI -> ASCIZ originator name
  3194.         DS:DI -> ASCIZ destination name
  3195.     AX = 0002h multiple block text
  3196.         CX = block group ID
  3197.         ES:BX -> text header (see below)
  3198.     AX = 0003h end multiple block message
  3199.         CX = block group ID
  3200.     AX = 0004h message aborted due to error
  3201.         CX = block group ID
  3202.     AX = 0101h server received badly formatted network request
  3203.         Return: AX = FFFFh (PC LAN will process error)
  3204.     AX = 0102h unexpected network error
  3205.         ES:BX -> NCB (see INT 5C)
  3206.     AX = 0103h server received INT 24 error
  3207.         other registers as for INT 24, except AH is in BH
  3208.         Return: as below, but only 0000h and FFFFh allowed
  3209. Return:    AX = response code
  3210.         0000h user post routine processed message
  3211.         0001h PC LAN will process message, but message window not displayed
  3212.         FFFFh PC LAN will process message
  3213.     
  3214. Format of text header:
  3215. Offset    Size    Description
  3216.  00h    WORD    length of text (maximum 512 bytes)
  3217.  02h  N BYTEs    text of message
  3218. Note:    all CRLF sequences in message text are replaced by 14h
  3219. ----------2FB807-----------------------------
  3220. INT 2F - Multiplex - Network - GET NetBIOS NAME NUMBER OF MACHINE NAME
  3221.     AX = B807h
  3222. Return: CH = NetBIOS name number of the machine name
  3223. SeeAlso: INT 21/AX=5E00h
  3224. ----------2FB808-----------------------------
  3225. INT 2F - Multiplex - Network - ???
  3226.     AX = B808h
  3227.     ???
  3228. Return: ???
  3229. ----------2FB809-----------------------------
  3230. INT 2F - Multiplex - LANtastic Network - VERSION CHECK
  3231.     AX = B809h
  3232. Return: AH = major version
  3233.     AL = minor version
  3234. ----------2FB900-----------------------------
  3235. INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK
  3236.     AX = B900h
  3237. Return: AL = 00h if not installed
  3238.          FFh if installed
  3239. ----------2FB901-----------------------------
  3240. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS
  3241.     AX = B901h
  3242. Return: AL = ???
  3243.     ES:BX -> RECEIVER.COM INT 2F handler
  3244. Note:    allows more efficient execution by letting the caller bypass any other
  3245.       INT 2F handlers which have been added since RECEIVER.COM was
  3246.       installed
  3247. ----------2FB903-----------------------------
  3248. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS
  3249.     AX = B903h
  3250. Return: ES:BX -> POST handler
  3251. SeeAlso: AX=B803h,B904h
  3252. ----------2FB904-----------------------------
  3253. INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS
  3254.     AX = B904h
  3255.     ES:BX -> new POST handler
  3256. SeeAlso: AX=B804h,B903h
  3257. ----------2FB905-----------------------------
  3258. INT 2F - PC Network RECEIVER.COM - GET FILENAME
  3259.     AX = B905h
  3260.     DS:BX -> 128-byte buffer for filename 1
  3261.     DS:DX -> 128-byte buffer for filename 2
  3262. Return: buffers filled from RECEIVER.COM internal buffers
  3263. Note:    use of filenames is unknown, but one appears to be for storing messages
  3264. SeeAlso: AX=B906h
  3265. ----------2FB906-----------------------------
  3266. INT 2F - PC Network RECEIVER.COM - SET FILENAME
  3267.     AX = B906h
  3268.     DS:BX -> 128-byte buffer for filename 1
  3269.     DS:DX -> 128-byte buffer for filename 2
  3270. Return: RECEIVER.COM internal buffers filled from user buffers
  3271. Note:    use of filenames is unknown, but one appears to be for storing messages
  3272. SeeAlso: AX=B905h
  3273. ----------2FB908-----------------------------
  3274. INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER
  3275.     AX = B908h
  3276.     ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09
  3277. Note:    this call replaces the address to which RECEIVER.COM chains on an
  3278.       INT 09 without preserving the original value.  This allows a prior
  3279.       handler to unlink, but does not allow a new handler to be added
  3280.       such that RECEIVER gets the INT 09 first.
  3281. ----------2FBC00-----------------------------
  3282. INT 2F - Multiplex - Windows 3.0 EGA.SYS - INSTALLATION CHECK
  3283.     AX = BC00h
  3284. Return: AL = 00h not installed, OK to install
  3285.        = 01h not installed, not OK to install
  3286.        = FFh installed
  3287.         BX = 5456h ("TV")
  3288. Note:    AH=BCh is the default value, which may be changed by a command line
  3289.       parameter
  3290. ----------2FBC06-----------------------------
  3291. INT 2F - Multiplex - MS Windows 3.0 EGA.SYS - ???
  3292.     AX = BC06h
  3293. Return: CX = 020Ah
  3294.     DL = 12h
  3295. ----------2FBF00-----------------------------
  3296. INT 2F - Multiplex - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  3297.     AX = BF00h
  3298. Return: AL = FFh if installed
  3299. ----------2FBF01-----------------------------
  3300. INT 2F - Multiplex - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  3301.     AX = BF01h
  3302.     ???
  3303. Return: ???
  3304. ----------2FBF80-----------------------------
  3305. INT 2F - Multiplex - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  3306.     AX = BF80h
  3307.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  3308. Return: AL = FFh if installed
  3309.         ES:DI -> internal workspace
  3310. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  3311. ----------2FCB00-----------------------------
  3312. INT 2F - Multiplex - Communicating Applications Spec - INSTALLATION CHECK
  3313.     AX = CB00h
  3314. Return: AL = 00h not installed, OK to install
  3315.          01h not installed, not OK to install
  3316.          FFh installed
  3317. Note:    AH = CBh is the default identifier, but may be reconfigured
  3318. ----------2FCB01-----------------------------
  3319. INT 2F - Multiplex - Communicating Applications Spec - SUBMIT A TASK
  3320.     AX = CB01h
  3321.     DS:DX -> ASCIZ name of task control file
  3322. Return: AX >= 0: event handle
  3323.        < 0: error code
  3324. Note:    files needed for an event must be kept until task is complete or error
  3325. SeeAlso: AX=CB0Bh
  3326.  
  3327. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  3328.   Class 00h    --- FAX warnings
  3329.     Subcode 00h    no error
  3330.         02h    bad scanline count
  3331.         03h    page sent with errors, could not retransmit
  3332.         04h    received data lost
  3333.         05h    invalid or missing logo file
  3334.         06h    filename does not match nonstandard format (NSF) header
  3335.         07h    file size does not match NSF header
  3336.   Class 01h    --- DOS warnings (data was sent)
  3337.     Subcode 01h    invalid function
  3338.         05h    access denied
  3339.         06h    invalid handle
  3340.         others    see INT 21/AH=59h
  3341.   Class 02h    --- fatal errors (data not sent)
  3342.     Subcode    00h    multiplex handler failed
  3343.         01h    unknown command
  3344.         02h    bad event handle
  3345.         03h    FIND NEXT attempted before FIND FIRST
  3346.         04h    no more events
  3347.         07h    invalid queue type
  3348.         08h    bad control file
  3349.         09h    communication board busy
  3350.         0Ah    invalid command parameter
  3351.         0Bh    can't uninstall resident code
  3352.         0Ch    file exists
  3353.         80h    unknown task type
  3354.         81h    bad phone number
  3355.         82h    bad .PCX file header
  3356.         83h    unexpected EOF
  3357.         84h    unexpected disconnect
  3358.         85h    too many dialing retries
  3359.         86h    no file specified for send
  3360.         87h    communication board timeout
  3361.         88h    received too many pages (>1023) of data
  3362.         89h    manual connect initiated too long ago
  3363.         8Ah    hardware command set error
  3364.         8Bh    bad NonStandard Format (NSF) header file
  3365.   Class 03h    --- fatal DOS errors
  3366.     Subcode 02h    file not found
  3367.         03h    path not found
  3368.         others    see INT 21/AH=59h
  3369.   Class 04h    --- FAX errors
  3370.     Subcode 03h    other FAX machine incompatible
  3371.         5Eh    other FAX machine jammed
  3372. ----------2FCB02-----------------------------
  3373. INT 2F - Multiplex - Communicating Applications Spec - ABORT CURRENT EVENT
  3374.     AX = CB02h
  3375. Return: AX >= 0: event handle of aborted event (>= 0)
  3376.        < 0: error code (see AX=CB01h)
  3377. SeeAlso: AX=CB10h
  3378. ----------2FCB05-----------------------------
  3379. INT 2F - Multiplex - Communicating Applications Spec - FIND FIRST QUEUE ENTRY
  3380.     AX = CB05h
  3381.     CX = status of events to find
  3382.         0000h successful completion
  3383.         0001h waiting to be processed
  3384.         0002h number has been dialed
  3385.         0003h connection established, sending
  3386.         0004h connection established, receiving
  3387.         0005h even aborted
  3388.         FFFFh find any event, regardless of status
  3389.         other negative values, match error code
  3390.     DH = direction
  3391.         00h chronological order, earliest to latest
  3392.         01h reverse chronological order, latest to earliest
  3393.     DL = queue to search
  3394.         00h task queue
  3395.         01h receive queue
  3396.         02h log queue
  3397. Return: AX = 0000h successful
  3398.         BX = event handle for found event
  3399.        < 0       error code (see AX=CB01h)
  3400. SeeAlso: AX=CB06h
  3401. ----------2FCB06-----------------------------
  3402. INT 2F - Multiplex - Communicating Applications Spec - FIND NEXT QUEUE ENTRY
  3403.     AX = CB06h
  3404.     DL = queue to search
  3405.         00h task queue
  3406.         01h receive queue
  3407.         02h log queue
  3408. Return: AX = 0000h successful
  3409.         BX = event handle for found event
  3410.        < 0       error code (see AX=CB01h)
  3411. Note:    direction of search is same as preceding FIND FIRST call
  3412. SeeAlso: AX=CB05h
  3413. ----------2FCB07-----------------------------
  3414. INT 2F - Multiplex - Communicating Applications Spec - OPEN FILE
  3415.     AX = CB07h
  3416.     BX = event handle
  3417.     CX = receive file number (ignored for task queue and log queue)
  3418.         0000h  open receive control file
  3419.         N       open Nth received data file
  3420.     DL = queue
  3421.         00h task queue
  3422.         01h receive queue control file or received file, as given by CX
  3423.         02h log queue
  3424. Return: AX = 0000h successful
  3425.         BX = DOS file handle for requested file
  3426.        < 0       error code (see AX=CB01h)
  3427. ----------2FCB08-----------------------------
  3428. INT 2F - Multiplex - Communicating Applications Spec - DELETE FILE
  3429.     AX = CB08h
  3430.     BX = event handle
  3431.     CX = receive file number
  3432.         0000h delete ALL received files and receive control file
  3433.         N      delete Nth received file
  3434.     DL = queue
  3435.         00h delete control file in task queue
  3436.         01h delete file in receive queue, as given by CX
  3437.         02h delete control file in log queue (individual deletions not
  3438.         recommended, to maintain integrity of log)
  3439. Return: AX = 0000h successful
  3440.        < 0       error code (see AX=CB01h)\
  3441. SeeAlso: AX=CB09h
  3442. ----------2FCB09-----------------------------
  3443. INT 2F - Multiplex - Communicating Applications Spec - DELETE ALL FILES IN Q
  3444.     AX = CB09h
  3445.     DL = queue
  3446.         00h delete all control files in task queue
  3447.         01h delete all files in receive queue
  3448.         02h delete all control files in log queue
  3449. Return: AX = 0000h successful
  3450.        < 0       error code (see AX=CB01h)
  3451. SeeAlso: AX=CB08h
  3452. ----------2FCB0A-----------------------------
  3453. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT DATE
  3454.     AX = CB0Ah
  3455.     BX = event handle
  3456.     DL = queue
  3457.         00h task queue
  3458.         01h receive queue
  3459.         02h log queue
  3460. Return: AX = 0000h successful
  3461.         CX = year
  3462.         DH = month
  3463.         DL = day
  3464.        < 0       error code (see AX=CB01h)
  3465. SeeAlso: AX=CB0Ch
  3466. ----------2FCB0B-----------------------------
  3467. INT 2F - Multiplex - Communicating Applications Spec - SET TASK DATE
  3468.     AX = CB0Bh
  3469.     BX = event handle (task event only)
  3470.     CX = year
  3471.     DH = month
  3472.     DL = day
  3473. Return: AX = 0000h successful
  3474.        < 0       error code (see AX=CB01h)
  3475. Note:    setting a task's date and time to before the current date and time
  3476.       causes it to execute immediately
  3477. SeeAlso: AX=CB01h,CB0Dh
  3478. ----------2FCB0C-----------------------------
  3479. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT TIME
  3480.     AX = CB0Ch
  3481.     BX = event handle
  3482.     DL = queue
  3483.         00h task queue
  3484.         01h receive queue
  3485.         02h log queue
  3486. Return: AX = 0000h successful
  3487.         CH = hour
  3488.         CL = minute
  3489.         DH = second
  3490.         DL = 00h
  3491.        < 0       error code (see AX=CB01h)
  3492. SeeAlso: AX=CB0Ah,CB0Dh
  3493. ----------2FCB0D-----------------------------
  3494. INT 2F - Multiplex - Communicating Applications Spec - SET TASK TIME
  3495.     AX = CB0Dh
  3496.     BX = event handle (task events only)
  3497.     CH = hour
  3498.     CL = minute
  3499.     DH = second
  3500.     DL unused
  3501. Return: AX = 0000h successful
  3502.        < 0       error code (see AX=CB01h)
  3503. Note:    setting a task's date and time to before the current date and time
  3504.       causes it to execute immediately
  3505. SeeAlso: AX=CB0Bh,CB0Ch,CB10h
  3506. ----------2FCB0E-----------------------------
  3507. INT 2F - Multiplex - Communicating Applications Spec - GET EXTERNAL DATA BLOCK
  3508.     AX = CB0Eh
  3509.     DS:DX -> 256-byte buffer
  3510. Return: AX = 0000h successful
  3511.         buffer filled
  3512.        < 0       error code (see AX=CB01h)
  3513.  
  3514. Format of external data block:
  3515. Offset    Size    Description
  3516.  00h    BYTE    CAS major version
  3517.  01h    BYTE    CAS minor version
  3518.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  3519.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  3520.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  3521.  60h 32 BYTEs    ASCIZ default sender name
  3522.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  3523.  95h 107 BYTEs    reserved
  3524. ----------2FCB0F-----------------------------
  3525. INT 2F - Multiplex - Communicating Applications Spec - GET/SET AUTORECEIVE
  3526.     AX = CB0Fh
  3527.     DL = subfunction
  3528.         00h get current autoreceive state
  3529.         01h set autoreceive state
  3530.         DH = number of rings before answer, 00h = never
  3531. Return: AX = 0000h autoreceive disabled
  3532.        = N       number of rings before answer
  3533.        < 0       error code (see AX=CB01h)
  3534. ----------2FCB10-----------------------------
  3535. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT STATUS
  3536.     AX = CB10h
  3537.     DS:DX -> 511-byte buffer
  3538. Return: AX = 0000h successful
  3539.         BX = event handle of current event
  3540.         buffer filled
  3541.        < 0       error code (see AX=CB01h)
  3542. SeeAlso: AX=CB02h,CB0Dh
  3543.  
  3544. Format of status area:
  3545. Offset    Size    Description
  3546.  00h    BYTE    event type
  3547.         00h send
  3548.         01h receive
  3549.         02h polled send
  3550.         03h polled receive
  3551.         04h to 7Fh reserved
  3552.         FFh serious hardware error
  3553.  01h    BYTE    transfer type
  3554.         00h 200x200 dpi, FAX mode
  3555.         01h 100x200 dpi, FAX mode
  3556.         02h file transfer mode
  3557.         03h to 7Fh reserved
  3558.  02h    WORD    event status 
  3559.         0000h completed successfully
  3560.         0001h waiting
  3561.         0002h number dialed
  3562.         0003h connected, sending
  3563.         0004h connected, receiving
  3564.         0005h aborted
  3565.         0006h to 007Fh reserved
  3566.         0080h to 7FFFh application-specific events
  3567.         8000h to FFFFh error codes
  3568.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  3569.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  3570.  08h    WORD    number of files to transfer, max 7FFFh
  3571.  0Ah    WORD    offset of file transfer record
  3572.  0Ch 47 BYTEs    ASCIZ phone number to call
  3573.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  3574.  7Bh    BYTE    reserved (00h)
  3575.  7Ch    BYTE    connect time, seconds
  3576.  7Dh    BYTE    connect time, minutes
  3577.  7Eh    BYTE    connect time, hours
  3578.  7Fh    DWORD    total number of pages in all files
  3579.  83h    DWORD    pages already transmitted 
  3580.  87h    WORD    number of files already transmitted
  3581.  89h    BYTE    cover page flag
  3582.         00h don't transmit cover page
  3583.         01h transmit cover page
  3584.         02h to 7Fh reserved
  3585.  8Ah    WORD    total number of transmission errors
  3586.  8Ch 78 BYTEs    reserved (zeros)
  3587.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  3588.  EFH 32 BYTEs    ASCIZ destination name
  3589. 10Fh 32 BYTEs    ASCIZ sender name
  3590. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  3591. 17Fh 128 BYTEs    file transfer record for current event (see below)
  3592.  
  3593. Format of file transfer record:
  3594. Offset    Size    Description
  3595.  00h    BYTE    file type (ignored unless FAX)
  3596.         00h ASCII
  3597.         01h PCX
  3598.         02h DCX
  3599.         03h to 7Fh reserved
  3600.  01h    BYTE    text size for ASCII FAX file
  3601.         00h = 80 columns by 66 lines (11 inches)
  3602.         01h = 132 columns by 88 lines (11 inches)
  3603.         02h to 7Fh reserved
  3604.  02h    BYTE    status of file
  3605.         00h untouched
  3606.         01h opened
  3607.         02h moved
  3608.         03h deleted
  3609.         04h not yet received
  3610.         05h to 7Fh reserved
  3611.  03h    DWORD    bytes already transmitted
  3612.  07h    DWORD    file size in bytes
  3613.  0Bh    WORD    pages alread transmitted
  3614.  0Dh    WORD    number of pages in file
  3615.  0Fh 80 BYTEs    ASCIZ filename
  3616.  5Fh    BYTE    1/8 inch page length
  3617.         if page length below set to 01h through 7Fh, this value 
  3618.         specifies additional 1/8 inch increments to page length
  3619.  60h    BYTE    page length
  3620.         00h = 11 inches
  3621.         01h to 7Fh = page length is this number of inches plus value of
  3622.             1/8 inch field above
  3623.         80h to FEh reserved
  3624.         FFh = ASCII pages ending with formfeed
  3625.  61h 31 BYTEs    reserved (zeros)
  3626. ----------2FCB11-----------------------------
  3627. INT 2F - Multiplex - Communicating Applications Spec - GET QUEUE STATUS
  3628.     AX = CB11h
  3629.     DL = queue to get status of
  3630.         00h task queue
  3631.         01h receive queue
  3632.         02h log queue
  3633. Return: AX >= 0  total number of changes made to queue, modulo 32768
  3634.         BX = number of control files currently in queue
  3635.         CX = number of received files (zero for task and log queues)
  3636.        < 0     error code (see AX=CB01h)
  3637. SeeAlso: AX=CB12h
  3638. ----------2FCB12-----------------------------
  3639. INT 2F - Multiplex - Communicating Applications Spec - GET HARDWARE STATUS
  3640.     AX = CB12h
  3641.     DS:DX -> 128-byte status buffer
  3642. Return: AX = 0000h successful
  3643.         buffer filled with hardware-dependent status information
  3644.        < 0       error code (see AX=CB01h)
  3645. SeeAlso: AX=CB11h
  3646.  
  3647. Format of status buffer for Intel Connection CoProcessor:
  3648. Offset    Size    Description
  3649.  00h    BYTE    bit flags
  3650.         bit 7: hardware busy sending or receiving
  3651.         bit 6: last page of data
  3652.         bit 5: no data on current page
  3653.         bit 4: retransmit request for current page being transmitted
  3654.         bit 3: NSF mode active
  3655.         bits 2-0: reserved
  3656.  01h    BYTE    number of kilobytes of free buffer space
  3657.  02h    BYTE    page buffer status
  3658.         bit 7: Connection CoProcessor has documents to send
  3659.         bits 6-0: number of pages in buffer
  3660.  03h    BYTE    number of retries left for dialing number
  3661.  04h    BYTE    page number to retransmit
  3662.  05h    BYTE    communications status
  3663.         bit 7: originating call
  3664.         bit 6: FAX message to be sent
  3665.         bit 5: on line
  3666.         bit 4: ring detected and receive enabled
  3667.         bit 3: buffer dumped on receive
  3668.         bits 2-0: hardware sequence state
  3669.             000 idle
  3670.             001 dial
  3671.             010 answer
  3672.             011 transmit
  3673.             100 receive
  3674.             101 pre-message
  3675.             110 post-message
  3676.             111 disconnect
  3677.  06h    BYTE    baud rate
  3678.         bit 7: reserved
  3679.         bits 6-4: baud rate
  3680.             000 = 300 baud (SDLC mode)
  3681.             100 = 2400 baud
  3682.             101 = 4800 baud
  3683.             110 = 7200 baud
  3684.             111 = 9600 baud
  3685.         bits 3-0: reserved, should be 0110
  3686.  07h  3 BYTEs    reserved
  3687.  0Ah    BYTE    hardware status
  3688.         bit 7: modem option installed
  3689.         bit 6: Connection CoProcessor has control of DAA (not latched)
  3690.         bit 5: on line (not latched)
  3691.         bit 4: ring detected (not latched)
  3692.         bit 3: data in command buffer (not latched)
  3693.         bit 2: set if using DMA channel 1, clear if using DMA channel 3
  3694.         bit 1: line length compensation bit 1 set (not latched)
  3695.         bit 0: line length compensation bit 0 set (not latched)
  3696.  0Bh    BYTE    switch states
  3697.         bit 7: reserved
  3698.         bit 6: unused
  3699.         bit 5: spare switch open
  3700.         bit 4: FAX ADR1 switch open
  3701.         bit 3: FAX ADR0 switch open
  3702.         bit 2: alternate interrupt switch open
  3703.         bit 1: COM SEL 1 switch open
  3704.         bit 0: COM SEL 0 switch open
  3705.  0Ch    BYTE    bit flags
  3706.         bit 7: reserved
  3707.         bit 6: auxiliary relay forced ON
  3708.         bit 5: modem select relay forced ON
  3709.         bit 4: offhook relay forced ON
  3710.         bit 3: 9600 bps enabled
  3711.         bit 2: 7200 bps enabled
  3712.         bit 1: 4800 bps enabled
  3713.         bit 0: 2400 bps enabled
  3714.  0Dh    BYTE    reserved
  3715.  0Eh    WORD    error count
  3716.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  3717.  14h 10 BYTEs    reserved
  3718.  1Eh 21 BYTEs    ASCIZ CCITT identification
  3719.  33h 77 BYTEs    reserved
  3720. ----------2FCB13DL00-------------------------
  3721. INT 2F - Multiplex - Communicating Applications Spec - GET DIAGNOSTICS RESULTS
  3722.     AX = CB13h
  3723.     DL = 00h
  3724. Return: AX = 0040h in progress
  3725.        > 0       passed
  3726.        < 0       failure code
  3727. Note:    diagnostics return values are hardware dependent
  3728. SeeAlso: AX=CB13h/DL=01h
  3729.  
  3730. Intel Connection CoProcessor failure codes:
  3731.     bit 3: 9600 bps FAX modem module failed
  3732.     bit 2: SDLC chip failed
  3733.     bit 1: RAM failed
  3734.     bit 0: ROM checksum failed
  3735. ----------2FCB13DL01-------------------------
  3736. INT 2F - Multiplex - Communicating Applications Spec - START DIAGNOSTICS
  3737.     AX = CB13h
  3738.     DL = 01h
  3739. Return: AX = 0000h successfully started
  3740.        < 0       error code (see AX=CB01h)
  3741. SeeAlso: AX=CB13h/DL=00h
  3742. ----------2FCB14-----------------------------
  3743. INT 2F - Multiplex - Communicating Applications Spec - MOVE RECEIVED FILE
  3744.     AX = CB14h
  3745.     BX = event handle
  3746.     CX = receive file number
  3747.          0001h first received file
  3748.          N       Nth received file
  3749.     DS:DX -> ASCIZ string specifying new name for file
  3750. Return: AX = 0000h successful
  3751.        < 0       error code (see AX=CB01h)
  3752. ----------2FCB15-----------------------------
  3753. INT 2F - Multiplex - Communicating Applications Spec - SUBMIT FILE TO SEND
  3754.     AX = CB15h
  3755.     DS:DX -> variable-length data area
  3756. Return: AX >= 0    event handle
  3757.        < 0    error code (see AX=CB01h)
  3758.  
  3759. Format of data area:
  3760. Offset    Size    Description
  3761.  00h    BYTE    transfer type
  3762.         00h = 200x200 dpi, fax mode
  3763.         01h = 100x200 dpi, fax mode
  3764.         02h = file transfer mode
  3765.         03h to 7Fh reserved
  3766.  01h    BYTE    text size
  3767.         00h = 80 columns
  3768.         01h = 132 columns
  3769.         02h to 7Fh reserved
  3770.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  3771.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  3772.  06h 32 BYTEs    ASCIZ destination name
  3773.  26h 80 BYTEs    ASCIZ name of file to send
  3774.  76h 47 BYTEs    ASCIZ phone number to dial
  3775.  A5h 64 BYTEs    ASCIZ application-specific tag string
  3776.  E5h    BYTE    reserved (00h)
  3777.  E6h    BYTE    cover page
  3778.         00h don't send cover page
  3779.         01h send cover page
  3780.         02h to 7Fh reserved
  3781.  E7h 23 BYTEs    reserved (zeros)
  3782.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  3783.         set to 01h)
  3784. ----------2FCD00-----------------------------
  3785. INT 2F - Multiplex - Intel Image Processing Interface - INSTALLATION CHECK
  3786.     AX = CD00h
  3787. Return: AL = 00h not installed, OK to install
  3788.          01h not installed, not OK to install
  3789.          FFh installed
  3790. ----------2FCD00-----------------------------
  3791. INT 2F - Multiplex - SWELL.EXE - INSTALLATION CHECK
  3792.     AX = CD00h
  3793. Return: AX = 00FFh installed
  3794.         BH = major version
  3795.         BL = minor version
  3796. Note:    SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  3797.       process with INT 21/AH=4Bh
  3798. ----------2FCD01-----------------------------
  3799. INT 2F - Multiplex - Intel Image Processing Interface - SET DEVICE NAME
  3800.     AX = CD01h
  3801.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  3802. Return: AL = 00h successful
  3803.         CX:BX -> internal character device name
  3804.        = 80h error
  3805. ----------2FCD01-----------------------------
  3806. INT 2F - Multiplex - SWELL.EXE - SUSPEND ONCE
  3807.     AX = CD01h
  3808. Return: AX = 0000h
  3809. SeeAlso: AX=CD02h"SWELL"
  3810. ----------2FCD02-----------------------------
  3811. INT 2F - Multiplex - Intel Image Processing Interface - GET VERSION NUMBER
  3812.     AX = CD02h
  3813. Return: AL = 00h/01h successful
  3814.         BH = major version number (BCD)
  3815.         BL = minor version number (BCD)
  3816.        = 80h error
  3817. Note:    if return AL = 01h, the IPI supports network redirection
  3818. ----------2FCD02-----------------------------
  3819. INT 2F - Multiplex - SWELL.EXE - SUSPEND
  3820.     AX = CD02h
  3821. Return: AX = 0000h
  3822. SeeAlso: AX=CD03h"SWELL"
  3823. ----------2FCD03-----------------------------
  3824. INT 2F - Multiplex - Intel Image Processing Interface - SELECT SCAN LINE
  3825.     AX = CD03h
  3826.     BX = scan line
  3827.     CX = requested density in dots per inch (300, 600, or 1200)
  3828. Return: AL = 00h succesful
  3829.         CX = density at which scan line was mapped
  3830.         ES:DI -> start of scan line
  3831.     AL = 80h unsuccessful
  3832.        = 81h scan line out of range
  3833.        = 82h unsupported scan line density
  3834.        = 83h out of memory
  3835. ----------2FCD03-----------------------------
  3836. INT 2F - Multiplex - SWELL.EXE - ACTIVATE
  3837.     AX = CD03h
  3838. Return: AX = 0000h
  3839. SeeAlso: AX=CD02h"SWELL"
  3840. ----------2FCD04-----------------------------
  3841. INT 2F - Multiplex - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  3842.     AX = CD04h
  3843.     CX:BX -> structure (see below)
  3844. Return: AL = 00h successful
  3845.        = 80h unsuccessful
  3846.        = 81h scan line out of range
  3847.        = 82h unsupported scan line density
  3848.        = 83h out of memory
  3849.        = 84h unrecognized source
  3850.        = 85h initialization error
  3851.  
  3852. Format of structure:
  3853. Offset    Size    Description
  3854.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  3855.  02h    DWORD    pointer to image data
  3856.  06h    WORD    scan line on which to place
  3857.  08h    WORD    bit offset from start of scan line at which to place
  3858.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  3859.  0Ch    WORD    width in bits of data
  3860.  0Eh    WORD    source logical page number
  3861.  10h    WORD    source handle (only if source in expanded memory)
  3862.  12h    WORD    source offset (only if source in expanded memory)
  3863. ----------2FCD04-----------------------------
  3864. INT 2F - Multiplex - SWELL.EXE - TURN OFF VERBOSE MODE
  3865.     AX = CD04h
  3866. Return: AX = 0000h
  3867. SeeAlso: AX=CD05h"SWELL"
  3868. ----------2FCD05-----------------------------
  3869. INT 2F - Multiplex - Intel Image Processing Interface - PRINT PAGE
  3870.     AX = CD05h
  3871. Return: AL = 00h successful
  3872.        = 80h unsuccessful
  3873. Note:    page image is retained, so multiple calls will print multiple copies of
  3874.       the page
  3875. ----------2FCD05-----------------------------
  3876. INT 2F - Multiplex - SWELL.EXE - TURN ON VERBOSE MODE
  3877.     AX = CD05h
  3878. Return: AX = 0000h
  3879. SeeAlso: AX=CD04h"SWELL"
  3880. ----------2FCD06-----------------------------
  3881. INT 2F - Multiplex - Intel Image Processing Interface - CLEAR PAGE
  3882.     AX = CD06h
  3883. Return: AL = 00h successful
  3884.        = 80h unsuccessful
  3885. Note:    palette is reset to default
  3886. ----------2FCD06-----------------------------
  3887. INT 2F - Multiplex - SWELL.EXE - UNINSTALL
  3888.     AX = CD06h
  3889. Return: AX = 0000h uninstalled
  3890.        = 8002h programs still swapped, not uninstalled
  3891. ----------2FCD07-----------------------------
  3892. INT 2F - Multiplex - Intel Image Processing Interface - reserved
  3893.     AX = CD07h
  3894. ----------2FCD07-----------------------------
  3895. INT 2F - Multiplex - SWELL.EXE - GET INFO
  3896.     AX = CD07h
  3897.     ES:BX -> 32-byte buffer for info
  3898. Return: AX = 0000h successful
  3899.         ES:BX buffer filled
  3900.        = 8001h buffer wrong size
  3901.  
  3902. Format of info buffer:
  3903. Offset    Size    Description
  3904.  00h    WORD    20h  (total size of buffer)
  3905.  02h    BYTE    suspend-once mode active if nonzero
  3906.  03h    BYTE    00h active, 01h suspended
  3907.  04h    BYTE    00h quiet, 01h verbose
  3908.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  3909.  06h 26 BYTEs    unused???
  3910. ----------2FCD08-----------------------------
  3911. INT 2F - Multiplex - Intel Image Processing Interface - SCREEN IMAGE
  3912.     AX = CD08h
  3913.     CX:BX -> structure (see below)
  3914. Return: AL = 00h successful
  3915.        = 80h unsuccessful
  3916.        = 81h scan line out of range
  3917.        = 82h unsupported scan line density
  3918.        = 83h out of memory
  3919.        = 84h unrecognized source
  3920.        = 85h initialization error
  3921.  
  3922. Format of structure:
  3923. Offset    Size    Description
  3924.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  3925.  02h    DWORD    pointer to image data
  3926.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  3927.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  3928.  0Ah    WORD    left cropping (currently must be zero)
  3929.  0Ch    WORD    top cropping (currently must be zero)
  3930.  0Eh    WORD    width (currently must be 8000h)
  3931.  10h    WORD    height (currently must be 8000h)
  3932.  12h    WORD    horizontal size of image in 1200 dpi units
  3933.  14h    WORD    vertical size of image in 1200 dpi units
  3934.  16h    WORD    aspect ratio (currently reserved)
  3935.  18h    WORD    initialization flag (if 01h, initialization is performed)
  3936.  1Ah    WORD    pixels per line of source data
  3937.  1Ch    WORD    number of scan lines in source data
  3938.  1Eh    WORD    number of scan lines in packet
  3939.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  3940.  22h    WORD    pixels per byte (1,2,4, or 8)
  3941.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  3942.  26h    WORD    source page number (if in expanded memory)
  3943.  28h    WORD    source handle (if in expanded memory)
  3944.  2Ah    WORD    source offset (if in expanded memory)
  3945. ----------2FCD08-----------------------------
  3946. INT 2F - Multiplex - SWELL.EXE - UNUSED
  3947.     AX = CD08h
  3948. Return: AX = FFFFh (error)
  3949. ----------2FCD09-----------------------------
  3950. INT 2F - Multiplex - Intel Image Processing Interface - LOAD SCREEN
  3951.     AX = CD09h
  3952.     CX:BX -> structure (see below)
  3953. Return: AL = 00h successful
  3954.        = 80h unsuccessful
  3955. SeeAlso: AX=CD0Ah"Image Processing"
  3956.  
  3957. Format of structure:
  3958. Offset    Size    Description
  3959.  00h    BYTE    style
  3960.         44h ('D') diamond style
  3961.         4Ch ('L') line style
  3962.  01h    BYTE    reserved (00h)
  3963.  02h    WORD    frequency in lines per inch [sic]
  3964.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  3965.  04h    WORD    screen angle in degrees (-360 to 360)
  3966.         currently coerced to nearest of -45, 0, 45, or 90
  3967. ----------2FCD09-----------------------------
  3968. INT 2F - Multiplex - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  3969.     AX = CD09h
  3970. Return: AX = 0000h
  3971. SeeAlso: AX=CD0Ah"SWELL"
  3972. ----------2FCD0A-----------------------------
  3973. INT 2F - Multiplex - Intel Image Processing Interface - LOAD PALETTE
  3974.     AX = CD0Ah
  3975.     CX:BX -> palette structure (see below)
  3976. Return: AL = 00h successful
  3977.        = 80h unsuccessful
  3978. SeeAlso: AX=CD09h"Image Processing"
  3979.  
  3980. Format of palette structure:
  3981. Offset    Size    Description
  3982.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  3983.  01h    2**N    palette translation values, one per possible pixel value
  3984. ----------2FCD0A-----------------------------
  3985. INT 2F - Multiplex - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  3986.     AX = CD0Ah
  3987. Return: AX = 0000h
  3988. SeeAlso: AX=CD09h"SWELL"
  3989. ----------2FD200BX5144-----------------------
  3990. INT 2F - Multiplex - Quarterdeck QEMM/QRAM/MFT 5.0 - INSTALLATION CHECK
  3991.     AX = D200h
  3992.     BX = 5144h ("QD")
  3993.     CX = 4D45h ("ME")
  3994.     DX = 4D30h ("M0")
  3995. Return: AL = FFh installed      
  3996.     if BX,CX,DX registers were as specified on entry:
  3997.         BX = 4D45h ("ME")
  3998.         CX = 4D44h ("MD")
  3999.         DX = 5652h ("VR")
  4000. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4001.       through FFh, then C0h through D1h
  4002.     QEMM and QRAM both responded the same
  4003.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  4004.       Quarterdeck product, it just chains to the previous INT 2F handler
  4005. ----------2FD201BX4849-----------------------
  4006. INT 2F - Multiplex - Quarterdeck QEMM/QRAM 5.0 - GET HIRAM MEMORY CHAIN
  4007.     AX = D201h
  4008.     BX = 4849h ("HI")
  4009.     CX = 5241h ("RA")
  4010.     DX = 4D30h ("M0")
  4011. Return: BX = 4F4Bh ("OK")
  4012.     CX = segment of start of HIRAM chain
  4013.     DX = QEMM/QRAM code segment
  4014. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4015.       through FFh, then C0h through D1h
  4016.     QEMM and QRAM both responded the same
  4017.     the HIRAM memory chain has the same format as the regular DOS 4.0
  4018.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  4019.       have the block header program name field set to "UMB"
  4020. ----------2FD201BX5145-----------------------
  4021. INT 2F - Multiplex - Quarterdeck QEMM/QRAM 5.0 - INSTALLATION CHECK???
  4022.     AX = D201h
  4023.     BX = 5145h ("QE")
  4024.     CX = 4D4Dh ("MM")
  4025.     DX = 3432h ("42")
  4026. Return: BX = 4F4Bh ("OK")
  4027.     DI = ???
  4028.     ES = QEMM/QRAM code segment
  4029. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4030.       through FFh, then C0h through D1h
  4031.     QEMM and QRAM both responded the same
  4032. ----------2FD201BX5649-----------------------
  4033. INT 2F - Multiplex - Quarterdeck VIDRAM 5.0 - INSTALLATION CHECK
  4034.     AX = D201h
  4035.     BX = 5649h ("VI")
  4036.     CX = 4452h ("DR")
  4037.     DX = 414dh ("AM")
  4038. Return: BX = 4F4Bh ("OK")
  4039.     DI = ???
  4040.     ES = VIDRAM code segment
  4041. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4042.       through FFh, then C0h through D1h
  4043. ----------2FD201BX4D41-----------------------
  4044. INT 2F - Multiplex - Quarterdeck MANIFEST 5.0 - INSTALLATION CHECK
  4045.     AX = D201h
  4046.     BX = 4D41h ("MA")
  4047.     CX = 4E49h ("NI")
  4048.     DX = 4645h ("FE")
  4049. Return: BX = 5354h ("ST")
  4050. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4051.       through FFh, then C0h through D1h
  4052. ----------2FD44D-----------------------------
  4053. INT 2F - Multiplex - 4DOS.COM v2.1+
  4054.     AX = D44Dh
  4055.     BH = function
  4056.         00h installation check
  4057.         Return: AX = 44DDh
  4058.             BL = minor version number
  4059.             BH = major version number
  4060.             CX = PSP segment address for current invocation
  4061.             DL = 4DOS shell number (0 for the first (root) shell,
  4062.                  updated each time a new copy is loaded)
  4063.         01h (internal) terminate current copy of 4DOS
  4064.         02h ???
  4065.         DX = ???
  4066.         03h EXEC program
  4067.         CX:DX -> EXEC record
  4068.         FEh deallocate shell number (passed through to root shell)
  4069.         ???
  4070.         FFh allocate shell number (passed through to root shell)
  4071. Note:    bug in v3.00 will crash system if unrecognized value in BH
  4072.  
  4073. Format of EXEC record:
  4074. Offset    Size    Description
  4075.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  4076.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  4077.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  4078. ----------2FD44E-----------------------------
  4079. INT 2F - Multiplex - 4DOS.COM v3.0+ - AWAITING USER INPUT
  4080.     AX = D44Eh
  4081. ---4DOS v3.01+---
  4082.     BX = 0000h 4DOS is ready to display prompt
  4083.        = 0001h 4DOS has displayed the prompt, about to accept user input
  4084. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  4085. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  4086. ----------2FD701-----------------------------
  4087. INT 2F - Multiplex - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER
  4088.     AX = D701h
  4089. Return: AX = 0000h installed
  4090.         BX = interrupt number (60h to 66h)
  4091.        nonzero not present
  4092. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  4093.       necessary to examine the four bytes preceding the handlers for
  4094.       INT 60 through INT 66 for the string "BANV"
  4095. ----------2FDA55-----------------------------
  4096. INT 2F - Multiplex - TRAP.COM - INSTALLATION CHECK
  4097.     AX = DA55h
  4098.     DL = interrupt number
  4099.     DH = ???
  4100. Return: if installed
  4101.         AH = interrupt number
  4102.         AL = ???
  4103.         ES:BX -> ???
  4104. Notes:    TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  4105.     a separate copy of TRAP is loaded for each interrupt to be traced; thus
  4106.       the interrupt number is part of the installation check
  4107. ----------2FDE00BX4445-----------------------
  4108. INT 2F - Multiplex - DESQview 2.26 External Dev Interface - INSTALLATION CHECK
  4109.     AX = DE00h
  4110.     BX = 4445h ("DE")
  4111.     CX = 5844h ("XD")
  4112.     DX = 4931h ("I1")
  4113. Return: AL = FFh if installed (even if other registers do not match)
  4114.     if BX,CX, and DX were as specified on entry,
  4115.         BX = 4845h ("HE")
  4116.         CX = 5245h ("RE")
  4117.         DX = 4456h ("DV")
  4118. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  4119.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  4120.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  4121.       issue DESQview API calls other than those allowed from hardware ints
  4122. ----------2FDE01-----------------------------
  4123. INT 2F - Multiplex - DESQview 2.26 External Dev Itrface - DRIVER CUSTOM SUBFUNC
  4124.     AX = DE01h
  4125.     BX = driver ID
  4126.     other registers as needed by driver
  4127. Notes:    XDI drivers should pass this call through to previous handler if ID
  4128.       does not match
  4129.     DESQview never calls this function
  4130. ----------2FDE01BX7474-----------------------
  4131. INT 2F - Multiplex - DESQview 2.26 XDI - DVTree DVTXDI.COM
  4132.     AX = DE01h
  4133.     BX = 7474h
  4134.     CL = function
  4135.         00h installation check
  4136.         Return: AL = FFh
  4137.         01h get process handle
  4138.         DX = keys on Open Window menu (DL = first, DH = second)
  4139.         Return: AX = process handle or 0000h if not running
  4140. Return: BX = 4F4Bh ("OK")
  4141.     DL = ???
  4142. Note:    DVTree is a shareware DOS shell/DESQview process manager by Mike Weaver
  4143. ----------2FDE01BXFFFE-----------------------
  4144. INT 2F - Multiplex - DESQview 2.26 XMS XDI - ???
  4145.     AX = DE01h
  4146.     BX = FFFEh
  4147.     CX = 4D47h
  4148.     DX = 0052h
  4149. Return: AL = FFh
  4150.     DX = 584Dh
  4151. ----------2FDE02-----------------------------
  4152. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV INIT COMPLETE
  4153.     AX = DE02h
  4154.     BX = mapping context of DESQview
  4155.     DX = handle of DESQview system task
  4156. SeeAlso: AX=DE03h
  4157. Note:    driver should pass this call to previous handler after doing its work
  4158. ----------2FDE03-----------------------------
  4159. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV TERMINATION
  4160.     AX = DE03h
  4161.     BX = mapping context of DESQview
  4162.     DX = handle of DESQview system task
  4163. SeeAlso: AX=DE02h
  4164. Notes:    driver should pass this call to previous handler before doing its work
  4165.     DESQview makes this call when it is exiting, but before unhooking any
  4166.       interrupt vectors
  4167. ----------2FDE04-----------------------------
  4168. INT 2F - Multiplex - DESQview 2.26 External Device Interface - ADD PROCESS
  4169.     AX = DE04h
  4170.     BX = mapping context of new process
  4171.     DX = handle of process
  4172. Return: nothing
  4173. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  4174.       (see below) from "common" memory to control access to XMS memory
  4175.     all DOS, BIOS, and DV API calls are valid in handler
  4176.     driver should pass this call to previous handler after processing it
  4177. SeeAlso: AX=DE05h
  4178.  
  4179. Format of XMS XDI structure:
  4180. Offset    Size    Description
  4181.  00h    DWORD    pointer to 10-byte record???
  4182.  04h    DWORD    pointer to next XMS XDI structure
  4183.  08h    WORD    mapping context
  4184.  0Ah    BYTE    ???
  4185.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  4186.         (FAR jump to next field)
  4187.  10h  6 BYTEs    FAR handler for XMS driver entry point
  4188.         (consists of a FAR CALL followed by RETF)
  4189. ----------2FDE05-----------------------------
  4190. INT 2F - Multiplex - DESQview 2.26 External Device Interface - REMOVE PROCESS
  4191.     AX = DE05h
  4192.     BX = mapping context of process
  4193.     DX = handle of last task in process
  4194. Return: nothing
  4195. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  4196.     driver should pass this call to previous handler before processing it
  4197.     all DOS, BIOS, and DV API calls except those generating a task switch
  4198.       are valid in handler
  4199. SeeAlso: AX=DE04h
  4200. ----------2FDE06-----------------------------
  4201. INT 2F - Multiplex - DESQview 2.26 XDI - CREATE TASK
  4202.     AX = DE06h
  4203.     BX = mapping context of process containing task
  4204.     DX = handle of new task
  4205. Notes:    driver should pass this call to previous handler after processing it
  4206.     all DOS, BIOS, and DV API calls are valid in handler
  4207. ----------2FDE07-----------------------------
  4208. INT 2F - Multiplex - DESQview 2.26 XDI - TERMINATE TASK
  4209.     AX = DE07h
  4210.     BX = mapping context of process containing task
  4211.     DX = handle of task
  4212. Notes:    driver should pass this call to previous handler before processing it
  4213.     all DOS, BIOS, and DV API calls except those generating a task switch
  4214.       are valid in handler
  4215. ----------2FDE08-----------------------------
  4216. INT 2F - Multiplex - DESQview 2.26 XDI - SAVE STATE
  4217.     AX = DE08h
  4218.     BX = mapping context of task being switched from
  4219.     DX = handle of task being switched from
  4220. Notes:    invoked prior to task swap, interrupts, etc
  4221.     driver should pass this call to previous handler after processing it
  4222. ----------2FDE09-----------------------------
  4223. INT 2F - Multiplex - DESQview 2.26 XDI - RESTORE STATE
  4224.     AX = DE09h
  4225.     BX = mapping context of task being switched to
  4226.     DX = handle of task being switched to
  4227. Notes:    state is restored except for interrupts
  4228.     driver should pass this call to previous handler before processing it
  4229. ----------2FDE0A-----------------------------
  4230. INT 2F - Multiplex - DESQview 2.26 XDI - CHANGE KEYBOARD FOCUS
  4231.     AX = DE0Ah
  4232.     BX = mapping context of task receiving focus
  4233.     DX = handle of running task
  4234. Notes:    driver should pass this call to previous handler before processing it
  4235.     this call often occurs inside a keyboard interrupt
  4236. ----------2FDE0B-----------------------------
  4237. INT 2F - Multiplex - DESQview 2.26 XDI - DVP PROCESSING COMPLETE
  4238.     AX = DE0Bh
  4239.     BX = mapping context of DESQview system task
  4240.     CX = number of system memory paragraphs required for the use of all
  4241.         XDI drivers (DV will add this to system memory in DVP buffer)
  4242.     DX = handle of DESQview system task
  4243.     SI = mapping context of new process if it starts
  4244.     ES:DI -> DVP buffer
  4245. Return: CX incremented as needed
  4246. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  4247.     driver should pass this call to previous handler before processing it
  4248. ----------2FDE0C-----------------------------
  4249. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP OUT PROCESS
  4250.     AX = DE0Ch
  4251.     BX = mapping context of task being swapped out
  4252.     DX = handle of DESQview system task
  4253. Note:    driver should pass this call to previous handler after processing it
  4254. ----------2FDE0D-----------------------------
  4255. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP IN PROCESS
  4256.     AX = DE0Dh
  4257.     BX = mapping context of process just swapped in
  4258.     DX = handle of DESQview system task
  4259. Note:    driver should pass this call to previous handler before processing it
  4260. ----------2FDE0E-----------------------------
  4261. INT 2F - Multiplex - DESQview 2.26 XDI - DVP START FAILED
  4262.     AX = DE0Eh
  4263.     BX = mapping context of DESQview system task
  4264.     DX = handle of DESQview system task
  4265.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  4266. Note:    driver should pass this call to previous handler after processing it
  4267. ----------2FE300-----------------------------
  4268. INT 2F - Multiplex - ANARKEY.COM - INSTALLATION CHECK
  4269.     AX = E300h
  4270. Return: AL = 00h not installed
  4271.          FEh if installed but suspended (v3.0+)
  4272.          FFh installed
  4273. Notes:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4274.     E3h is the default function number, but can be set to any value from
  4275.       C0h to FFh.
  4276. ----------2FE301-----------------------------
  4277. INT 2F - Multiplex - ANARKEY.COM v2+ - GET ???
  4278.     AX = E301h
  4279. Return: DX:BX -> ???
  4280. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4281.  
  4282. Format of returned data structure for ANARKEY v2.0:
  4283. Offset    Size    Description
  4284.  -7   7 BYTEs    signature ('ANARKEY')
  4285.  00h    WORD    ??? (I see 0001h in v2.0)
  4286.  02h    WORD    ??? (I see 0001h in v2.0)
  4287.  04h    WORD    ??? (I see 0 in v2.0)
  4288.  06h    WORD    PSP segment of next program loaded
  4289.  
  4290. Format of returned data structure for ANARKEY v3.0:
  4291. Offset    Size    Description
  4292.  -1    BYTE    multiplex number
  4293.  00h    WORD    ??? (I see 0001h in v3.0)
  4294.  02h    WORD    ??? (I see 0001h in v3.0)
  4295.  04h    BYTE    ??? (I see 0 in v3.0)
  4296.  05h    WORD    PSP segment of next program loaded
  4297. ----------2FE302-----------------------------
  4298. INT 2F - Multiplex - ANARKEY.COM v3.0 - ???
  4299.     AX = E302h
  4300.     BL = ???
  4301. Return: ???
  4302. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4303. ----------2FE303-----------------------------
  4304. INT 2F - Multiplex - ANARKEY.COM v3.0 - ANARKMD API
  4305.     AX = E303h
  4306.     BL = function
  4307.         01h  toggle insert mode
  4308.         02h  display contents of history buffer
  4309.         03h  write history buffer to file
  4310.         ES:DX -> file name
  4311.         04h  clear history buffer
  4312.         05h  undefine all aliases
  4313.         06h  show aliases
  4314.         07h     list programs using Unix switchar
  4315.         08h     jump to bottom of history buffer    
  4316. Return: ???
  4317. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4318. ----------2FE304-----------------------------
  4319. INT 2F - Multiplex - ANARKEY.COM v2.0 - ???
  4320.     AX = E304h
  4321.     BL = ???
  4322. Return: ???
  4323. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4324. ----------2FE305-----------------------------
  4325. INT 2F - Multiplex - ANARKEY.COM v3.0 - SUSPEND ANARKEY
  4326.     AX = E305h
  4327.     BL = 01h suspend
  4328.          00h enable
  4329. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4330. ----------2FF700-----------------------------
  4331. INT 2F - Multiplex - AUTOPARK.COM - INSTALLATION CHECK
  4332.     AX = F700h
  4333. Return: AL = 00h not installed
  4334.          FFh installed
  4335. Note:    AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  4336. ----------2FF701-----------------------------
  4337. INT 2F - Multiplex - AUTOPARK.COM - SET PARKING DELAY
  4338.     AX = F701h
  4339.     BX:CX = 32 bit count of 55ms timer ticks
  4340. ----------2FFB-------------------------------
  4341. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  4342.     AH = FBh
  4343. ----------2FFB42-----------------------------
  4344. INT 2F - Multiplex - Borland DPMI LOADER
  4345.     AX = FB42h
  4346.     details not yet available
  4347. ----------2FFF00-----------------------------
  4348. INT 2F - Multiplex - Topware Network Operating System - INSTALLATION CHECK
  4349.     AX = FF00h
  4350. Return: AL = 00h not installed, OK to install
  4351.        = 01h not installed, not OK to install
  4352.        = FFh installed
  4353. ----------2FFF01-----------------------------
  4354. INT 2F - Multiplex - Topware Network Operating System - GET VERSION
  4355.     AX = FF01h
  4356. Return: AX = version
  4357. ----------30---------------------------------
  4358. INT 30 - (NOT A VECTOR!) FAR JMP instruction for CP/M-style calls
  4359.    the CALL 5 entry point does a FAR jump to here
  4360. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  4361.       memory
  4362. SeeAlso: INT 21/AH=26h
  4363. ----------31---------------------------------
  4364. INT 31 - overwritten by CP/M jump instruction in INT 30
  4365. ----------310000-----------------------------
  4366. INT 31 - DOS Prot-Mode Interface 0.9 API - protected mode - ALLOCATE LDT DESCRS
  4367.     AX = 0000h
  4368.     CX = number of descriptors to allocate
  4369. Return: CF set on error
  4370.     CF clear if successful
  4371.         AX = base selector
  4372. Notes:    the base and limit of the returned descriptors will be 0
  4373.     add the value returned by INT 31/AX=0003h to move to subsequent
  4374.       descriptors if multiple descriptors were allocated
  4375. SeeAlso: AX=0001h,AX=000Dh
  4376. ----------310001-----------------------------
  4377. INT 31 - DPMI 0.9 API - protected mode - FREE LDT DESCRIPTOR
  4378.     AX = 0001h
  4379.     BX = selector to free
  4380. Return: CF set on error
  4381.     CF clear if successful
  4382. Notes:    only one descriptor is freed per call
  4383.     the program's initial CS, DS, and SS descriptors may be freed
  4384. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh
  4385. ----------310002-----------------------------
  4386. INT 31 - DPMI 0.9 API - protected mode - SEGMENT TO DESCRIPTOR
  4387.     AX = 0002h
  4388.     BX = real mode segment
  4389. Return: CF set on error
  4390.     CF clear if successful
  4391.         AX = selector corresponding to real mode segment (64K limit)
  4392. Notes:    multiple calls for the same real mode segment return the same selector
  4393.     the returned descriptor should never be modified or freed
  4394. ----------310003-----------------------------
  4395. INT 31 - DPMI 0.9 API - protected mode - GET NEXT SELECTOR INCREMENT VALUE
  4396.     AX = 0003h
  4397. Return: CF clear
  4398.         AX = value to add to get next sequential selector
  4399. Note:    the increment will be a power of two
  4400. ----------310004-----------------------------
  4401. INT 31 - DPMI 0.9 API - protected mode - RESERVED
  4402.     AX = 0004h
  4403. ----------310005-----------------------------
  4404. INT 31 - DPMI 0.9 API - protected mode - RESERVED
  4405.     AX = 0005h
  4406. ----------310006-----------------------------
  4407. INT 31 - DPMI 0.9 API - protected mode - GET SEGMENT BASE ADDRESS
  4408.     AX = 0006h
  4409.     BX = selector
  4410. Return: CF set on error
  4411.     CF clear if successful
  4412.         CX:DX = linear base address of segment
  4413. SeeAlso: AX=0007h
  4414. ----------310007-----------------------------
  4415. INT 31 - DPMI 0.9 API - protected mode - SET SEGMENT BASE ADDRESS
  4416.     AX = 0007h
  4417.     BX = selector
  4418.     CX:DX = linear base address
  4419. Return: CF set on error
  4420.     CF clear if successful
  4421. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  4422.     only the low 24 bits of the address will be used by 16-bit DPMI
  4423.       implementations even on a 386 or higher
  4424. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch
  4425. ----------310008-----------------------------
  4426. INT 31 - DPMI 0.9 API - protected mode - SET SEGMENT LIMIT
  4427.     AX = 0008h
  4428.     BX = selector
  4429.     CX:DX = segment limit
  4430. Return: CF set on error
  4431.     CF clear if successful
  4432. Notes:    CX must be zero for 16-bit DPMI implementations
  4433.     limits greater than 1MB must be page aligned (low 12 bits set)
  4434.     only modify descriptors allocated with INT 31/AX=0000h
  4435. SeeAlso: AX=0007h,AX=0009h,AX=000Ch
  4436. ----------310009-----------------------------
  4437. INT 31 - DPMI 0.9 API - protected mode - SET DESCRIPTOR ACCESS RIGHTS
  4438.     AX = 0009h
  4439.     BX = selector
  4440.     CL = access rights/type byte
  4441.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  4442. Return: CF set on error
  4443.     CF clear if successful
  4444. SeeAlso: AX=0007h,AX=0008h,AX=000Ch
  4445. ----------31000A-----------------------------
  4446. INT 31 - DPMI 0.9 API - protected mode - CREATE CODE SEGMENT ALIAS DESCRIPTOR
  4447.     AX = 000Ah
  4448.     BX = code segment selector
  4449. Return: CF set on error
  4450.     CF clear if successful
  4451.         AX = new data selector
  4452. Notes:    fails if selector in BX is not a code segment or is invalid
  4453.     use INT 31/AX=0001h to free new selector
  4454.     future changes to the code segment will not be reflected in the data
  4455.       segment
  4456. SeeAlso: AX=0001h
  4457. ----------31000B-----------------------------
  4458. INT 31 - DPMI 0.9 API - protected mode - GET DESCRIPTOR
  4459.     AX = 000Bh
  4460.     BX = selector
  4461.     ES:DI / ES:EDI -> 8-byte buffer for copy of descriptor
  4462. Return: CF set on error
  4463.     CF clear if successful
  4464. Note:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4465. SeeAlso: AX=000Ch
  4466. ----------31000C-----------------------------
  4467. INT 31 - DPMI 0.9 API - protected mode - SET DESCRIPTOR
  4468.     AX = 000Ch
  4469.     BX = selector
  4470.     ES:DI / ES:EDI -> 8-byte buffer containing descriptor
  4471. Return: CF set on error
  4472.     CF clear if successful
  4473. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4474.     only modify descriptors allocated with INT 31/AX=0000h
  4475. SeeAlso: AX=000Bh
  4476. ----------31000D-----------------------------
  4477. INT 31 - DPMI 0.9 API - protected mode - ALLOCATE SPECIFIC LDT DESCRIPTOR
  4478.     AX = 000Dh
  4479.     BX = selector
  4480. Return: CF set on error
  4481.     CF clear if successful
  4482.         descriptor allocated
  4483. Notes:    free descriptor with INT 31/AX=0001h
  4484.     16 descriptors are reserved for this function, but some may already be
  4485.       in use by other applications
  4486. SeeAlso: AX=0000h,AX=0001h
  4487. ----------310100-----------------------------
  4488. INT 31 - DPMI 0.9 API - protected mode - ALLOCATE DOS MEMORY BLOCK
  4489.     AX = 0100h
  4490.     BX = number of paragraphs to allocate
  4491. Return: CF set on error
  4492.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  4493.         BX = size (in paragraphs) of largest available block
  4494.     CF clear if successful
  4495.         AX = real mode segment of allocated block
  4496.         DX = first selector for allocated block
  4497. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  4498.     never modify or deallocate returned descriptors
  4499. SeeAlso: AX=0101h,AX=0501h
  4500. ----------310101-----------------------------
  4501. INT 31 - DPMI 0.9 API - protected mode - FREE DOS MEMORY BLOCK
  4502.     AX = 0101h
  4503.     DX = selector of block
  4504. Return: CF set on error
  4505.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  4506.     CF set if successful
  4507. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  4508. Note:    all descriptors allocated for the block are automatically freed
  4509. ----------310102-----------------------------
  4510. INT 31 - DPMI 0.9 API - protected mode - RESIZE DOS MEMORY BLOCK
  4511.     AX = 0102h
  4512.     BX = new block size in paragraphs
  4513.     DX = selector of block
  4514. Return: CF set on error
  4515.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  4516.         BX = maximum block size (in paragraphs) possible
  4517.     CF clear if successful
  4518. Notes:    increasing the size of a block past a 64K boundary will fail if the
  4519.       next descriptor in the LDT is already in use
  4520.     shrinking a block past a 64K boundary will cause some selectors to be
  4521.       freed
  4522. SeeAlso: AX=0100h
  4523. ----------310200-----------------------------
  4524. INT 31 - DPMI 0.9 API - protected mode - GET REAL MODE INTERRUPT VECTOR
  4525.     AX = 0200h
  4526.     BL = interrupt number
  4527. Return: CF clear
  4528.     CX:DX = segment:offset of real mode interrupt handler
  4529. Note:    the DPMI implementation is required to support all 256 vectors
  4530. SeeAlso: AX=0201h,AX=0204h
  4531. ----------310201-----------------------------
  4532. INT 31 - DPMI 0.9 API - protected mode - SET REAL MODE INTERRUPT VECTOR
  4533.     AX = 0201h
  4534.     BL = interrupt number
  4535.     CX:DX = segment:offset of real mode handler
  4536. Return: CF set on error
  4537.     CF clear if successful
  4538. Note:    all memory that may be touched by a hardware interrupt handler must be
  4539.       locked down with INT 31/AX=0600h    
  4540. SeeAlso: AX=0200h,AX=0205h,AX=0600h
  4541. ----------310202-----------------------------
  4542. INT 31 - DPMI 0.9 API - protected mode - GET PROCESSOR EXCEPTION HANDLER VECTOR
  4543.     AX = 0202h
  4544.     BL = exception number (00h-1Fh)
  4545. Return: CF set on error
  4546.     CF clear if successful
  4547.         CX:DX / CX:EDX = selector:offset of handler
  4548. Note:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  4549. SeeAlso: AX=0203h
  4550. ----------310203-----------------------------
  4551. INT 31 - DPMI 0.9 API - protected mode - SET PROCESSOR EXCEPTION HANDLER VECTOR
  4552.     AX = 0203h
  4553.     BL = exception number (00h-1Fh)
  4554.     CX:DX / CX:EDX = selector:offset of handler
  4555. Return: CF set on error
  4556.     CF clear if successful
  4557. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  4558.       stack frame on chaining to the next exception handler
  4559.     the handler should return using a FAR return
  4560.     all fault stack frames contain an error code, but it is only valid for
  4561.       exceptions 08h and 0Ah-0Eh
  4562.     handlers will only be called if the exception occurs in protected mode
  4563.     the handler may change certain values on the stack frame (see below)
  4564. SeeAlso: AX=0202h
  4565.  
  4566. Format of stack frame for 16-bit programs: (offset from SS:SP)
  4567. Offset    Size    Description
  4568.  00h    DWORD    return CS:IP (do not change)
  4569.  04h    WORD    error code
  4570.  06h    DWORD    CS:IP of exception
  4571.  0Ah    WORD    flags
  4572.  0Ch    DWORD    SS:SP
  4573.  
  4574. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  4575. Offset    Size    Description
  4576.  00h    DWORD    return EIP (do not change)
  4577.  04h    WORD    return CS selector (do not change)
  4578.  06h    WORD    reserved (do not change)
  4579.  08h    DWORD    error code
  4580.  0Ch    DWORD    EIP of exception
  4581.  10h    WORD    CS selector of exception
  4582.  12h    WORD    reserved (do not change)
  4583.  14h    DWORD    EFLAGS
  4584.  18h    DWORD    ESP
  4585.  1Ch    WORD    SS
  4586.  1Eh    WORD    reserved (do not change)
  4587. ----------310204-----------------------------
  4588. INT 31 - DPMI 0.9 API - protected mode - GET PROTECTED MODE INTERRUPT VECTOR
  4589.     AX = 0204h
  4590.     BL = interrupt number
  4591. Return: CF set on error
  4592.     CF clear if successful
  4593.         CX:DX / CX:EDX = selector:offset of handler
  4594. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4595.     DPMI implementations are required to support all 256 vectors
  4596. SeeAlso: AX=0200h,AX=0205h
  4597. ----------310205-----------------------------
  4598. INT 31 - DPMI 0.9 API - protected mode - SET PROTECTED MODE INTERRUPT VECTOR
  4599.     AX = 0205h
  4600.     BL = interrupt number
  4601.     CX:DX / CX:EDX = selector:offset of handler
  4602. Return: CF set on error
  4603.     CF clear if successful
  4604. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4605.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  4606.       to the next handler
  4607.     DPMI implementations are required to support all 256 vectors
  4608. ----------310300-----------------------------
  4609. INT 31 - DPMI 0.9 API - protected mode - SIMULATE REAL MODE INTERRUPT
  4610.     AX = 0300h
  4611.     BL = interrupt number
  4612.     BH = flags
  4613.         bit 0: reset the interrupt controller and A20 line
  4614.         others must be 0
  4615.     CX = number of words to copy from protected mode to real mode stack
  4616.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4617.             (see below)
  4618. Return: CF set on error
  4619.     CF clear if successful
  4620.         real mode call structure modified (all fields except SS:SP, CS:IP
  4621.           filled with return values from real mode interrupt)
  4622.     protected mode stack unchanged
  4623. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4624.     CS:IP in the real mode call structure is ignored for this call,
  4625.       instead, the indicated interrupt vector is used for the address
  4626.     the flags in the call structure are pushed on the real mode stack to
  4627.       form an interrupt stack frame, and the trace and interrupt flags are
  4628.       clear on entry to the handler
  4629.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4630.     the real mode handler must return with the stack in the same state as
  4631.       it was on being called
  4632. SeeAlso: AX=0302h
  4633.  
  4634. Format of real mode call structure:
  4635. Offset    Size    Description
  4636.  00h    DWORD    EDI
  4637.  04h    DWORD    ESI
  4638.  08h    DWORD    EBP
  4639.  0Ch    DWORD    reserved
  4640.  10h    DWORD    EBX
  4641.  14h    DWORD    EDX
  4642.  18h    DWORD    ECX
  4643.  1Ch    DWORD    EAX
  4644.  20h    WORD    flags
  4645.  22h    WORD    ES
  4646.  24h    WORD    DS
  4647.  26h    WORD    FS
  4648.  28h    WORD    GS
  4649.  2Ah    WORD    IP
  4650.  2Ch    WORD    CS
  4651.  2Eh    WORD    SP
  4652.  30h    WORD    SS
  4653. ----------310301-----------------------------
  4654. INT 31 - DPMI 0.9 API - protected mode - CALL REAL MODE PROC WITH FAR RET FRAME
  4655.     AX = 0301h
  4656.     BH = flags
  4657.         bit 0: reset the interrupt controller and A20 line
  4658.         others must be 0
  4659.     CX = number of words to copy from protected mode to real mode stack
  4660.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4661.             (see INT 31/AX=0300h)
  4662. Return: CF set on error
  4663.     CF clear if successful
  4664.         real mode call structure modified (all fields except SS:SP, CS:IP
  4665.           filled with return values from real mode interrupt)
  4666.     protected mode stack unchanged
  4667. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4668.     the real mode procedure must exit with a FAR return
  4669.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4670.     the real mode handler must return with the stack in the same state as
  4671.       it was on being called
  4672. SeeAlso: AX=0302h
  4673. ----------310302-----------------------------
  4674. INT 31 - DPMI 0.9 API - protected mode - CALL REAL MODE PROC WITH IRET FRAME
  4675.     AX = 0302h
  4676.     BH = flags
  4677.         bit 0: reset the interrupt controller and A20 line
  4678.         others must be 0
  4679.     CX = number of words to copy from protected mode to real mode stack
  4680.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4681.             (see INT 31/AX=0300h)
  4682. Return: CF set on error
  4683.     CF clear if successful
  4684.         real mode call structure modified (all fields except SS:SP, CS:IP
  4685.           filled with return values from real mode interrupt)
  4686.     protected mode stack unchanged
  4687. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4688.     the flags in the call structure are pushed on the real mode stack to
  4689.       form an interrupt stack frame, and the trace and interrupt flags are
  4690.       clear on entry to the handler
  4691.     the real mode procedure must exit with an IRET
  4692.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4693.     the real mode handler must return with the stack in the same state as
  4694.       it was on being called
  4695. SeeAlso: AX=0300h
  4696. ----------310303-----------------------------
  4697. INT 31 - DPMI 0.9 API - protected mode - ALLOCATE REAL MODE CALL-BACK ADDRESS
  4698.     AX = 0303h
  4699.     DS:SI / DS:ESI = selector:offset of procedure to call
  4700.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4701.             (see AX=0300h)
  4702. Return: CF set on error
  4703.     CF clear if successful
  4704.         CX:DX = segment:offset of real mode call address
  4705. Notes:    the real mode call structure is static, causing reentrancy problems
  4706.     the called procedure must modify the real mode CS:IP before returning
  4707.     values are returned to real mode by modifying the real mode call struc
  4708.     DPMI hosts should provide for at least 16 call-backs per task
  4709. SeeAlso: AX=0304h
  4710.  
  4711. Values call-back procedure is called with:
  4712.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  4713.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4714.     SS:SP / SS:ESP = locked protected omde API stack
  4715.     interrupts disabled
  4716. Return: (with IRET)
  4717.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  4718. ----------310304-----------------------------
  4719. INT 31 - DPMI 0.9 API - protected mode - FREE REAL MODE CALL-BACK ADDRESS
  4720.     AX = 0304h
  4721.     CX:DX = real mode call-back address
  4722. Return: CF set on error
  4723.     CF clear if successful
  4724. SeeAlso: AX=0303h
  4725. ----------310305-----------------------------
  4726. INT 31 - DPMI 0.9 API - protected mode - GET STATE SAVE/RESTORE ADDRESSES
  4727.     AX = 0305h
  4728. Return: CF set on error
  4729.     CF clear if successfule
  4730.         AX = size in bytes of state buffer
  4731.         BX:CX = real mode address of procedure to save/restore state
  4732.         SI:DI / SI:EDI = protected mode procedure to save/restore state
  4733. Notes:    the buffer size will be zero if it is not necessary to preserve state
  4734.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  4735.     this function is only needed if using the raw mode switch service
  4736. SeeAlso: AX=0306h
  4737.  
  4738. Values to call state-save procedures with:
  4739.     AL = direction
  4740.         00h save state
  4741.         01h restore state
  4742.     ES:DI / ES:EDI -> state buffer
  4743. Return: all registers preserved
  4744. ----------310306-----------------------------
  4745. INT 31 - DPMI 0.9 API - protected mode - GET RAW MODE SWITCH ADDRESSES
  4746.     AX = 0306h
  4747. Return: CF set on error
  4748.     CF clear if successful
  4749.         BX:CX -> procedure to switch from real to protected mode
  4750.         SI:DI / SI:EDI -> procedure to switch from protected to real mode
  4751. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  4752.     the caller must save and restore the state of the task with AX=0305h
  4753. SeeAlso: AX=0305h
  4754.  
  4755. Values to JUMP at mode-switch procedures with:
  4756.     AX = new DS
  4757.     CX = new ES
  4758.     DX = new SS
  4759.     BX / EBX = new SP / ESP
  4760.     SI = new CS
  4761.     DI / EDI = new IP / EIP
  4762. Note:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  4763.       DX/EDX, SI/ESI, and DI/EDI will be undefined
  4764. ----------310400-----------------------------
  4765. INT 31 - DPMI 0.9 API - protected mode - GET DPMI VERSION
  4766.     AX = 0400h
  4767. Return: CF clear
  4768.     AH = major version
  4769.     AL = minor version
  4770.     BX = flags
  4771.         bit 0: running under an 80386 implementation
  4772.         bit 1: processor returns to real mode for reflected interrupts
  4773.            instead of V86 mode
  4774.         bit 2: virtual memory supported
  4775.         bit 3: reserved (undefined)
  4776.         others reserved (zero)
  4777.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4778.     DH = curr value of virtual master interrupt controller base interrupt
  4779.     DL = curr value of virtual slave interrupt controller base interrupt
  4780. ----------310500-----------------------------
  4781. INT 31 - DPMI 0.9 API - protected mode - GET FREE MEMORY INFORMATION
  4782.     AX = 0500h
  4783.     ES:DI / ES:EDI -> buffer for memory information (see below)
  4784. Return: CF clear
  4785. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  4786.     this function must be considered advisory because other applications
  4787.       may affect the results at any time after the call
  4788.     fields not supported by the DPMI implementation are filled with
  4789.       FFFFFFFFh
  4790. SeeAlso: AX=0501h, AX=0604h
  4791.  
  4792. Format of memory information:
  4793. Offset    Size    Description
  4794.  00h    DWORD    largest available block in bytes
  4795.  04h    DWORD    maximum unlocked page allocation
  4796.  08h    DWORD    maximum locked page allocation
  4797.  0Ch    DWORD    linear address space in pages
  4798.  10h    DWORD    total unlocked pages
  4799.  14h    DWORD    free pages
  4800.  18h    DWORD    total physical pages
  4801.  1Ch    DWORD    free linear address space in pages
  4802.  20h    DWORD    size of paging file/partition in pages
  4803.  24h 12 BYTEs    reserved
  4804. ----------310501-----------------------------
  4805. INT 31 - DPMI 0.9 API - protected mode - ALLOCATE MEMORY BLOCK
  4806.     AX = 0501h
  4807.     BX:CX = size in bytes
  4808. Return: CF set on error
  4809.     CF clear if successful
  4810.         BX:CX = linear address of block
  4811.         SI:DI = memory block handle
  4812. Notes:    no selectors are allocated
  4813.     the memory block is allocated unlocked
  4814.     allocations are often page granular
  4815. SeeAlso: AX=0000h, AX=0100h, AX=0500h, AX=0502h, AX=0503h
  4816. ----------310502-----------------------------
  4817. INT 31 - DPMI 0.9 API - protected mode - FREE MEMORY BLOCK
  4818.     AX = 0502h
  4819.     SI:DI = handle of memory block
  4820. Return: CF set on error
  4821.     CF clear if successful
  4822. Note:    any selectors allocated for the memory block must also be freed
  4823. SeeAlso: AX=0001h, AX=0101h, AX=0501h
  4824. ----------310503-----------------------------
  4825. INT 31 - DPMI 0.9 API - protected mode - RESIZE MEMORY BLOCK
  4826.     AX = 0503h
  4827.     BX:CX = new size in bytes
  4828.     SI:DI = handle of memory block
  4829. Return: CF set on error
  4830.     CF clear if successful
  4831.         BX:CX = new linear address
  4832.         SI:DI = new handle of memory block
  4833. Note:    any selectors pointing at the block must be updated
  4834.     an error is returned if the new size is 0
  4835. SeeAlso: AX=0102h, AX=0501h
  4836. ----------310600-----------------------------
  4837. INT 31 - DPMI 0.9 API - protected mode - LOCK LINEAR REGION
  4838.     AX = 0600h
  4839.     BX:CX = starting linear address
  4840.     SI:DI = size of region in bytes
  4841. Return: CF set on error
  4842.         none of the memory is locked
  4843.     CF clear if successful
  4844. Note:    pages at beginning and end will be locked if the region overlaps them
  4845. SeeAlso: AX=0601h
  4846. ----------310601-----------------------------
  4847. INT 31 - DPMI 0.9 API - protected mode - UNLOCK LINEAR REGION
  4848.     AX = 0601h
  4849.     BX:CX = starting linear address
  4850.     SI:DI = size of region in bytes
  4851. Return: CF set on error
  4852.         none of the memory is unlocked
  4853.     CF clear if successful
  4854. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  4855.     memory whose lock count has not reached zero remains locked
  4856. SeeAlso: AX=0600h
  4857. ----------310602-----------------------------
  4858. INT 31 - DPMI 0.9 API - protected mode - MARK REAL MODE REGION AS PAGEABLE
  4859.     AX = 0602h
  4860.     BX:CX = starting linear address
  4861.     SI:DI = size of region in bytes
  4862. Return: CF set on error    
  4863.         none of the memory is made pageable
  4864.     CF clear if successful
  4865. Notes:    relock all unlocked real mode memory before terminating process
  4866.     pages at beginning and end will be unlocked if the region overlaps them
  4867.     pageability of real mode pages is binary, not a count
  4868. SeeAlso: AX=0600h,AX=0603h
  4869. ----------310603-----------------------------
  4870. INT 31 - DPMI 0.9 API - protected mode - RELOCK REAL MODE REGION
  4871.     AX = 0603h
  4872.     BX:CX = starting linear address
  4873.     SI:DI = size of region in bytes
  4874. Return: CF set on error    
  4875.         none of the memory is relocked
  4876.     CF clear if successful
  4877. Note:    pages at beginning and end will be relocked if the region overlaps them
  4878. SeeAlso: AX=0602h
  4879. ----------310604-----------------------------
  4880. INT 31 - DPMI 0.9 API - protected mode - GET PAGE SIZE
  4881.     AX = 0604h
  4882. Return: CF set on error
  4883.     CF clear if successful
  4884.         BX:CX = page size in bytes
  4885. ----------310700-----------------------------
  4886. INT 31 - DPMI 0.9 API - protected mode - RESERVED
  4887.     AX = 0700h
  4888. ----------310701-----------------------------
  4889. INT 31 - DPMI 0.9 API - protected mode - RESERVED
  4890.     AX = 0701h
  4891. ----------310702-----------------------------
  4892. INT 31 - DPMI 0.9 API - protected mode - MARK PAGE AS DEMAND PAGING CANDIDATE
  4893.     AX = 0702h
  4894.     BX:CX = starting linear address
  4895.     SI:DI = number of bytes to mark as paging candidates
  4896. Return: CF set on error
  4897.     CF clear if successful
  4898. Notes:    this function is advisory, and does not force immediate paging
  4899.     partial pages will not be discarded
  4900. SeeAlso: AX=0703h
  4901. ----------310703-----------------------------
  4902. INT 31 - DPMI 0.9 API - protected mode - DISCARD PAGE CONTENTS
  4903.     AX = 0703h
  4904.     BX:CX = starting linear address
  4905.     SI:DI = number of bytes to mark as paging candidates
  4906. Return: CF set on error
  4907.     CF clear if successful
  4908. Notes:    this function is advisory, and may be ignored by DPMI implementations
  4909.     partial pages will not be discarded
  4910. SeeAlso: AX=0702h
  4911. ----------310800-----------------------------
  4912. INT 31 - DPMI 0.9 API - protected mode - PHYSICAL ADDRESS MAPPING
  4913.     AX = 0800h
  4914.     BX:CX = physical address
  4915.     SI:DI = size in bytes
  4916. Return: CF set on error
  4917.     CF clear if successful
  4918.         BX:CX = linear address which maps the requested physical memory
  4919. Notes:    implementations may refuse this call because it can circumvent protects
  4920.     the caller must build an appropriate selector for the memory
  4921.     do not use for memory mapped in the first megabyte
  4922. ----------310900-----------------------------
  4923. INT 31 - DPMI 0.9 API - protected mode - GET AND DISABLE VIRTUAL INTERRPT STATE
  4924.     AX = 0900h
  4925. Return: CF clear
  4926.     virtual interrupts disabled
  4927.     AL = 00h if previously disabled
  4928.        = 01h if previously enabled
  4929.     AH preserved
  4930. Note:    the previous state may be restored simply by executing an INT 31
  4931. SeeAlso: AX=0901h,AX=0902h
  4932. ----------310901-----------------------------
  4933. INT 31 - DPMI 0.9 API - protected mode - GET AND ENABLE VIRTUAL INTERRUPT STATE
  4934.     AX = 0901h
  4935. Return: CF clear
  4936.     virtual interrupts enabled
  4937.     AL = 00h if previously disabled
  4938.        = 01h if previously enabled
  4939.     AH preserved
  4940. Note:    the previous state may be restored simply by executing an INT 31
  4941. SeeAlso: AX=0900h, AX=0902h
  4942. ----------310902-----------------------------
  4943. INT 31 - DPMI 0.9 API - protected mode - GET VIRTUAL INTERRUPT STATE
  4944.     AX = 0902h
  4945. Return: CF clear
  4946.     AL = 00h if disabled
  4947.        = 01h if enabled
  4948. SeeAlso: AX=0900h, AX=0901h
  4949. ----------310A00-----------------------------
  4950. INT 31 - DPMI 0.9 API - protected mode - GET VENDOR SPECIFIC API ENTRY POINT
  4951.     AX = 0A00h
  4952.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  4953. Return: CF set on error
  4954.     CF clear if successful
  4955.         ES:DI / ES:EDI -> FAR extended API entry point
  4956.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  4957. Note:    extended API parameters are vendor-specific
  4958. ----------310B00-----------------------------
  4959. INT 31 - DPMI 0.9 API - protected mode - SET DEBUG WATCHPOINT
  4960.     AX = 0B00h
  4961.     BX:CX = linear address
  4962.     DL = size (1,2,4 bytes)
  4963.     DH = type (00h execute, 01h write, 02h read/write)
  4964. Return: CF set on error
  4965.     CF clear if successful
  4966.         BX = watchpoint handle
  4967. SeeAlso: AX=0601h
  4968. ----------310B01-----------------------------
  4969. INT 31 - DPMI 0.9 API - protected mode - CLEAR DEBUG WATCHPOINT
  4970.     AX = 0B01h
  4971.     BX = watchpoint handle
  4972. Return: CF set on error
  4973.     CF clear if successful
  4974. Note:    the watchpoint handle is freed
  4975. SeeAlso: AX=0B00h
  4976. ----------310B02-----------------------------
  4977. INT 31 - DPMI 0.9 API - protected mode - GET STATE OF DEBUG WATCHPOINT
  4978.     AX = 0B02h
  4979.     BX = watchpoint handle
  4980. Return: CF set on error
  4981.     CF clear if successful
  4982.         AX = status flags
  4983.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  4984. SeeAlso: AX=0B00h, AX=0B03h
  4985. ----------310B03-----------------------------
  4986. INT 31 - DPMI 0.9 API - protected mode - RESET DEBUG WATCHPOINT
  4987.     AX = 0B03h
  4988.     BX = watchpoint handle
  4989. Return: CF set on error
  4990.     CF clear if successful
  4991. SeeAlso: AX=0B02h
  4992. ----------32---------------------------------
  4993. INT 32 - reportedly used by "Tiny" Viruses
  4994. SeeAlso: INT 60"Virus"
  4995. ----------330000-----------------------------
  4996. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  4997.     AX = 0000h
  4998. Return: AX = status
  4999.         0000h hardware/driver not installed
  5000.         FFFFh hardware/driver installed
  5001.     BX = number of buttons
  5002.         FFFFh two buttons
  5003.         0000h other than two
  5004.         0003h Mouse Systems/Logitech mouse
  5005. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  5006.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  5007.       and then call this function.
  5008.     the Logitech mouse driver contains the signature string "LOGITECH"
  5009. SeeAlso: INT 74
  5010. ----------330001-----------------------------
  5011. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  5012.     AX = 0001h
  5013. SeeAlso: AX=0002h, INT 16/AX=FFFEh
  5014. ----------330002-----------------------------
  5015. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  5016.     AX = 0002h
  5017. Note:    multiple calls to hide the cursor will require multiple calls to
  5018.       function 01h to unhide it.
  5019. SeeAlso: AX=0001h, INT 16/AX=FFFFh
  5020. ----------330003-----------------------------
  5021. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  5022.     AX = 0003h
  5023. Return: BX = button status
  5024.        bit 0  left button pressed if 1
  5025.        bit 1  right button pressed if 1
  5026.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5027.     CX = column
  5028.     DX = row
  5029. SeeAlso: AX=0004h
  5030. ----------330004-----------------------------
  5031. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  5032.     AX = 0004h
  5033.     CX = column
  5034.     DX = row
  5035. Note:    the row and column are truncated to the next lower multiple of the cell
  5036.       size; however, some versions of the Microsoft documentation
  5037.       incorrectly state that the coordinates are rounded
  5038. SeeAlso: AX=0003h
  5039. ----------330005-----------------------------
  5040. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  5041.     AX = 0005h
  5042.     BX = button
  5043.         0000h left
  5044.         0001h right
  5045.         0002h middle (Mouse Systems/Logitech mouse)
  5046. Return: AX = button states
  5047.         bit 0 left button pressed if 1
  5048.         bit 1 right button pressed if 1
  5049.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5050.     BX = number of times specified button has been pressed since last call
  5051.     CX = column at time specified button was last pressed
  5052.     DX = row at time specified button was last pressed
  5053. SeeAlso: AX=0006h
  5054. ----------330006-----------------------------
  5055. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  5056.     AX = 0006h
  5057.     BX = button
  5058.         0000h left
  5059.         0001h right
  5060.         0002h middle (Mouse Systems/Logitech mouse)
  5061. Return: AX = button states
  5062.         bit 0 left button pressed if 1
  5063.         bit 1 right button pressed if 1
  5064.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5065.     BX = number of times specified button has been released since last call
  5066.     CX = column at time specified button was last released
  5067.     DX = row at time specified button was last released
  5068. SeeAlso: AX=0005h
  5069. ----------330007-----------------------------
  5070. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  5071.     AX = 0007h
  5072.     CX = minimum column
  5073.     DX = maximum column
  5074. SeeAlso: AX=0008h
  5075. ----------330008-----------------------------
  5076. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  5077.     AX = 0008h
  5078.     CX = minimum row
  5079.     DX = maximum row
  5080. SeeAlso: AX=0007h
  5081. ----------330009-----------------------------
  5082. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  5083.     AX = 0009h
  5084.     BX = column of cursor hot spot in bitmap (-16 to 16)
  5085.     CX = row of cursor hot spot (-16 to 16)
  5086.     ES:DX -> bitmap
  5087.         16 words screen mask
  5088.         16 words cursor mask
  5089.             each word defines the sixteen pixels of a row, low bit
  5090.             rightmost
  5091. SeeAlso: AX=000Ah
  5092. ----------33000A-----------------------------
  5093. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  5094.     AX = 000Ah
  5095.     BX = hardware/software text cursor
  5096.         0000h software
  5097.         CX = screen mask
  5098.         DX = cursor mask
  5099.         0001h hardware
  5100.         CX = start scan line
  5101.         DX = end scan line
  5102. Note:    when the software cursor is selected, the char/attribute data at the
  5103.       current screen position is ANDed with the screen mask and then XORed
  5104.       with the cursor mask
  5105. SeeAlso: AX=0009h
  5106. ----------33000B-----------------------------
  5107. INT 33 - MS MOUSE - READ MOTION COUNTERS
  5108.     AX = 000Bh
  5109. Return: CX = number of mickeys mouse moved horizontally since last call
  5110.     DX = number of mickeys mouse moved vertically
  5111. Notes:    a mickey is the smallest increment the mouse can sense
  5112.     positive values indicate down/right
  5113. ----------33000C-----------------------------
  5114. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  5115.     AX = 000Ch
  5116.     CX = call mask
  5117.          bit 0 call if mouse moves
  5118.          bit 1 call if left button pressed
  5119.          bit 2 call if left button released
  5120.          bit 3 call if right button pressed
  5121.          bit 4 call if right button released
  5122.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  5123.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  5124.     ES:DX -> FAR routine
  5125. Notes:    when the subroutine is called, it is passed the following values:
  5126.       AX = condition mask (same bit assignments as call mask)
  5127.       BX = button state
  5128.       CX = cursor column
  5129.       DX = cursor row
  5130.       SI = horizontal mickey count
  5131.       DI = vertical mickey count
  5132.     some versions of the Microsoft documentation incorrectly state that CX
  5133.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  5134.       and DI
  5135. ----------33000D-----------------------------
  5136. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  5137.     AX = 000Dh
  5138. SeeAlso: AX=000Eh
  5139. ----------33000E-----------------------------
  5140. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  5141.     AX = 000Eh
  5142. SeeAlso: AX=000Dh
  5143. ----------33000F-----------------------------
  5144. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  5145.     AX = 000Fh
  5146.     CX = number of mickeys per 8 pixels horizontally (default 8)
  5147.     DX = number of mickeys per 8 pixels vertically (default 16)
  5148. ----------330010-----------------------------
  5149. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  5150.     AX = 0010h
  5151.     CX,DX = X,Y coordinates of upper left corner
  5152.     SI,DI = X,Y coordinates of lower right corner
  5153. Note:    mouse cursor is hidden during updating, and needs to be explicitly
  5154.       turned on again
  5155. ----------330012-----------------------------
  5156. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  5157.     AX = 0012h
  5158.     BH = cursor width in words
  5159.     CH = rows in cursor
  5160.     BL = horizontal hot spot (-16 to 16)
  5161.     CL = vertical hot spot (-16 to 16)
  5162.     ES:DX -> bit map of screen and cursor maps
  5163. Return: AX = FFFFh if successful
  5164. ----------330013-----------------------------
  5165. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  5166.     AX = 0013h
  5167.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  5168. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  5169. ----------330014-----------------------------
  5170. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  5171.     AX = 0014h
  5172.     CX = call mask (see AX=000Ch)
  5173.     ES:DX -> FAR routine 
  5174. Return: CX = call mask of previous interrupt routine
  5175.     ES:DX = FAR address of previous interrupt routine
  5176. ----------330015-----------------------------
  5177. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  5178.     AX = 0015h
  5179. Return: BX = size of buffer needed to store driver state
  5180. ----------330016-----------------------------
  5181. INT 33 - MS MOUSE - SAVE DRIVER STATE
  5182.     AX = 0016h
  5183.     ES:DX -> buffer for driver state
  5184. SeeAlso: AX=0017h
  5185. ----------330017-----------------------------
  5186. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  5187.     AX = 0017h
  5188.     ES:DX -> buffer containing saved state
  5189. SeeAlso: AX=0016h
  5190. ----------330018-----------------------------
  5191. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  5192.     AX = 0018h
  5193.     CX = call mask
  5194.          bit 0 call if alt key pressed during event
  5195.          bit 1 call if ctrl key pressed during event
  5196.          bit 2 call if shift button pressed during event
  5197.          bit 3 call if right button released
  5198.          bit 4 call if right button pressed
  5199.          bit 5 call if left button released
  5200.          bit 6 call if left button pressed
  5201.          bit 7 call if mouse moves
  5202.     ES:DX = address of FAR routine
  5203. Return: AX = 0018h if successful
  5204.        = FFFFh on error
  5205. Notes:    when the subroutine is called, it is passed the following values:
  5206.       AX = condition mask (same bit assignments as call mask)
  5207.       BX = button state
  5208.       CX = cursor column
  5209.       DX = cursor row
  5210.       DI = horizontal mickey count
  5211.       SI = vertical mickey count
  5212.     up to three handlers can be defined by separate calls to this function
  5213. ----------330019-----------------------------
  5214. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  5215.     AX = 0019h
  5216.     CX = call mask
  5217. Return: BX:DX = user interrupt vector
  5218.     CX = call mask (0 if not found)
  5219. Note:    attempts to find a user event handler (defined by function 18h)
  5220.       whose call mask matches CX
  5221. ----------33001A-----------------------------
  5222. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  5223.     AX = 001Ah
  5224.     BX = horizontal speed \
  5225.     CX = vertical speed   / (see AX=000Fh)
  5226.     DX = double speed threshold (see AX=0013h)
  5227. SeeAlso: AX=001Bh
  5228. ----------33001B-----------------------------
  5229. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  5230.     AX = 001Bh
  5231. Return: BX = horizontal speed
  5232.     CX = vertical speed
  5233.     DX = double speed threshold
  5234. SeeAlso: AX=001Ah
  5235. ----------33001C-----------------------------
  5236. INT 33 - MS MOUSE - SET INTERRUPT RATE
  5237.     AX = 001Ch
  5238.     BX = rate
  5239.         00h no interrupts allowed
  5240.         01h 30 per second
  5241.         02h 50 per second
  5242.         03h 100 per second
  5243.         04h 200 per second
  5244. Notes:    only available on InPort mouse
  5245.     values greater than 4 may cause unpredictable driver behavior
  5246. ----------33001D-----------------------------
  5247. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  5248.     AX = 001Dh
  5249.     BX = display page number
  5250. Note:    the cursor will be displayed on the specified page
  5251. ----------33001E-----------------------------
  5252. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  5253.     AX = 001Eh
  5254. Return: BX = display page number
  5255. ----------33001F-----------------------------
  5256. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  5257.     AX = 001Fh
  5258. Return: AX = 001Fh successful
  5259.          FFFFh unsuccessful
  5260.     ES:BX = vector for INT 33h before mouse driver was first installed
  5261. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  5262.     if you restore Int 33h to ES:BX, driver will be completely disabled
  5263. ----------330020-----------------------------
  5264. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  5265.     AX = 0020h
  5266. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  5267.       which were removed by function 1Fh
  5268. ----------330021-----------------------------
  5269. INT 33 - MS MOUSE - SOFTWARE RESET
  5270.     AX = 0021h
  5271. Return: AX = FFFFh if mouse driver installed
  5272.          0021h if mouse driver not installed
  5273.     BX = 2 if mouse driver is installed
  5274. Note:    identical to funtion 00h, but does not reset the mouse
  5275. ----------330022-----------------------------
  5276. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  5277.     AX = 0022h
  5278.     BX = language
  5279.         00h English
  5280.         01h French
  5281.         02h Dutch
  5282.         03h German
  5283.         04h Swedish
  5284.         05h Finnish
  5285.         06h Spanish
  5286.         07h Portugese
  5287.         08h Italian
  5288. Note:    only available on international versions of the driver, US versions
  5289.       ignore this call
  5290. SeeAlso: AX=0023h
  5291. ----------330023-----------------------------
  5292. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  5293.     AX = 0023h
  5294. Return:    BX = language (see AX=0022h)
  5295. Note:    the US version of the driver always returns zero 
  5296. SeeAlso: AX=0022h
  5297. ----------330024-----------------------------
  5298. INT 33 - MS MOUSE - GET SOFTWARE VERSION AND MOUSE TYPE
  5299.     AX = 0024h
  5300. Return: AX = FFFFh on error
  5301.     otherwise,
  5302.         BH = major version
  5303.         BL = minor version
  5304.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  5305.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  5306. ----------330042-----------------------------
  5307. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  5308.     AX = 0042h
  5309. Return: AX = FFFFh successful
  5310.         BX = buffer size in bytes for functions 50h and 52h
  5311.        = 0000h MSMOUSE not installed
  5312.        = 0042h functions 42h, 50h, and 52h not supported
  5313. SeeAlso: AX=0050h
  5314. ----------33004D-----------------------------
  5315. INT 33 - LOGITECH - RETURN POINTER TO MICROSOFT COPYRIGHT
  5316.     AX = 004Dh
  5317. Return: ES:DI -> "Copyright 1983 Microsoft ***"
  5318. ----------330050-----------------------------
  5319. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  5320.     AX = 0050h
  5321.     BX = buffer size
  5322.     ES:DX -> buffer
  5323. Return: AX = FFFFh if successful
  5324. SeeAlso: AX=0042h,0052h
  5325. ----------330052-----------------------------
  5326. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  5327.     AX = 0052h
  5328.     BX = buffer size
  5329.     ES:DX -> buffer
  5330. Return: AX = FFFFh if successful
  5331. SeeAlso: AX=0050h
  5332. ----------33006D-----------------------------
  5333. INT 33 - LOGITECH - ???
  5334.     AX = 006Dh
  5335. Return: ES:DI -> 06 02 40 08
  5336. ----------331D6C-----------------------------
  5337. INT 33 - LOGITECH - GET COMPASS PARAMETER
  5338.     AX = 1D6Ch
  5339. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  5340. SeeAlso: AX=1E6Ch
  5341. ----------331E6C-----------------------------
  5342. INT 33 - LOGITECH - SET COMPASS PARAMETER
  5343.     AX = 1E6Ch
  5344.     BX = direction (0=north, 1=south, 2=east, 3=west)
  5345. SeeAlso: AX=1D6Ch
  5346. ----------331F6C-----------------------------
  5347. INT 33 - LOGITECH - GET BALLISTICS INFORMATION
  5348.     AX = 1F6Ch
  5349. Return: BX = 0=off, 1=on
  5350.     CX = 1=low, 2=high
  5351. SeeAlso: AX=236Ch
  5352. ----------33206C-----------------------------
  5353. INT 33 - LOGITECH - SET LEFT OR RIGHT PARAMETER
  5354.     AX = 206Ch
  5355.     BX = parameter (00h = right, FFh = left)
  5356. SeeAlso: AX=216Ch
  5357. ----------33216C-----------------------------
  5358. INT 33 - LOGITECH - GET LEFT OR RIGHT PARAMETER
  5359.     AX = 216Ch
  5360. Return: BX = parameter (00h = right, FFh = left)
  5361. SeeAlso: AX=206Ch
  5362. ----------33226C-----------------------------
  5363. INT 33 - LOGITECH - REMOVE DRIVER FROM MEMORY
  5364.     AX = 226Ch
  5365. Note:    this only frees memory; does not restore hooked interrupts
  5366. ----------33236C-----------------------------
  5367. INT 33 - LOGITECH - SET BALLISTICS INFORMATION
  5368.     AX = 236Ch
  5369.     BX = 0=off, 1=on
  5370.     CX = 1=low, 2=high
  5371. SeeAlso: AX=1F6Ch
  5372. ----------33246C-----------------------------
  5373. INT 33 - LOGITECH - GET PARAMETERS AND RESET SERIAL MOUSE
  5374.     AX = 246Ch
  5375.     ES:DX -> parameter table buffer (see below)
  5376. Return: AX = FFFFh if driver installed for serial mouse
  5377. SeeAlso: AX=256Ch
  5378.  
  5379. Format of parameter table:
  5380. Offset    Size    Description
  5381.  00h    WORD    baud rate divided by 100  (serial mouse only)
  5382.  02h    WORD    emulation          (serial mouse only)
  5383.  04h    WORD    report rate          (serial mouse only)
  5384.  06h    WORD    firmware revision      (serial mouse only)
  5385.  08h    WORD    0              (serial mouse only)
  5386.  0Ah    WORD    port              (serial mouse only)
  5387.  0Ch    WORD    physical buttons
  5388.  0Eh    WORD    logical buttons
  5389. ----------33256C-----------------------------
  5390. INT 33 - LOGITECH - SET PARAMETERS
  5391.     AX = 256Ch
  5392.     BX = 00h set baud rate (serial mouse only)
  5393.         CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  5394.        = 01h set emulation (serial mouse only)
  5395.         CX = emulation
  5396.             0 = 5 byte packed binary
  5397.             1 = 3 byte packed binary
  5398.             2 = hexadecimal
  5399.             3 = relative bid pad
  5400.             4 = not supported
  5401.             5 = MM Series
  5402.             6 = not supported
  5403.             7 = Microsoft
  5404.        = 02h set report rate (serial mouse only)
  5405.         CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  5406.        = 03h set port (serial mouse only)
  5407.         CX = port (1, 2)
  5408.        = 04h set mouse logical buttons
  5409.         CX = buttons (2, 3)
  5410. Return: AX = FFFFh if driver installed for serial mouse
  5411. SeeAlso: AX=246Ch
  5412. ----------33266C-----------------------------
  5413. INT 33 - LOGITECH - GET VERSION???
  5414.     AX = 266Ch
  5415. Return: BX = 'SS'
  5416.     CH = '4'  major version number
  5417.     CL = '1'  minor version number
  5418. ----------33276C-----------------------------
  5419. INT 33 - LOGITECH - ??? Tries MMSeries, Baud 2400
  5420.     AX = 276Ch
  5421. ----------34---------------------------------
  5422. INT 34 - Borland/Microsoft languages - Floating Point emulation
  5423.     This interrupt emulates opcode D8h
  5424. ----------35---------------------------------
  5425. INT 35 - Borland/Microsoft languages - Floating Point emulation
  5426.     This interrupt emulates opcode D9h
  5427. ----------36---------------------------------
  5428. INT 36 - Borland/Microsoft languages - Floating Point emulation
  5429.     This interrupt emulates opcode DAh
  5430. ----------37---------------------------------
  5431. INT 37 - Borland/Microsoft languages - Floating Point emulation
  5432.     This interrupt emulates opcode DBh
  5433. ----------38---------------------------------
  5434. INT 38 - Borland/Microsoft languages - Floating Point emulation
  5435.     This interrupt emulates opcode DCh
  5436. ----------39---------------------------------
  5437. INT 39 - Borland/Microsoft languages - Floating Point emulation
  5438.     This interrupt emulates opcode DDh
  5439. ----------3A---------------------------------
  5440. INT 3A - Borland/Microsoft languages - Floating Point emulation
  5441.     This interrupt emulates opcode DEh
  5442. ----------3B---------------------------------
  5443. INT 3B - Borland/Microsoft languages - Floating Point emulation
  5444.     This interrupt emulates opcode DFh
  5445. ----------3C---------------------------------
  5446. INT 3C - Borland/Microsoft languages - Floating Point emulation
  5447.     This interrupt emulates instructions with a segment override
  5448. Note:    the generated code is  CD 3C xy mm ....
  5449.     where xy is a modified ESC instruction and mm is the modR/M byte.  The
  5450.     xy byte appears to be encoded as
  5451.         s s 0 1 1 x x x
  5452.     where "ss" specifies the segment override:
  5453.         00 -> DS:
  5454.         01 -> SS:
  5455.         10 -> CS:
  5456.         11 -> ES:
  5457. ----------3D---------------------------------
  5458. INT 3D - Borland/Microsoft languages - Floating Point emulation
  5459.     This interrupt emulates a standalone FWAIT instruction
  5460. ----------3E---------------------------------
  5461. INT 3E - Borland languages - Floating Point emulation "shortcut" call
  5462.     The two bytes following the INT 3E instruction are the subcode and
  5463.     a NOP (90h)
  5464.  
  5465. Subcode        Function
  5466.  DCh    load 8086 stack with 8087 registers
  5467.  DEh    load 8087 registers from 8086 stack
  5468.  E0h    round TOS and R1 to single precision, compare, pop twice
  5469.  E2h    round TOS and R1 to double precision, compare, pop twice
  5470.     Note: apparently buggy in TPas5.5, actually rounding to single prec.
  5471.  E4h    compare TOS/R1 with two POP's
  5472.  E6h    compare TOS/R1 with POP
  5473.  E8h    FTST (check TOS value)
  5474.  EAh    FXAM (check TOS value)
  5475.  ECh    sine
  5476.  EEh    cosine
  5477.  F0h    tangent
  5478.  F2h    arctangent
  5479.  F4h    Ln (FLDLN2 to TOS)
  5480.  F6h    Log2 (FLDLG2 to TOS)
  5481.  F8h    Log10 (FLDLG10 to TOS
  5482.  FAh    Exp (FLDL2E to TOS)
  5483.  FCh    TOS = 2**TOS
  5484.  FEh    TOS = 10**TOS
  5485. ----------3F---------------------------------
  5486. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  5487. Note:    INT 3F is the default, and may be overridden while linking
  5488. ----------3F---------------------------------
  5489. INT 3F - Microsoft Dynamic Link Library manager
  5490. ----------40---------------------------------
  5491. INT 40 - Hard disk - Relocated Floppy Handler (original INT 13h)
  5492. SeeAlso: INT 63
  5493. ----------40---------------------------------
  5494. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  5495. ----------41---------------------------------
  5496. INT 41 - (NOT a vector!) FIXED DISK PARAMS (XT,AT,XT2,XT286,PS except ESDI)
  5497. SeeAlso: INT 1E,INT 46
  5498.  
  5499. Format of fixed disk parameters:
  5500. Offset    Size    Description
  5501.  00h    WORD    cylinders
  5502.  02h    BYTE    heads
  5503.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  5504.  05h    WORD    starting write pre-comp cylinder
  5505.  07h    BYTE    maximum ECC burst length
  5506.  08h    BYTE    control byte
  5507.            bits 0-2: drive option (XT only, 0 for others)
  5508.            bit 3:    set if more than 8 heads
  5509.            bit 4:    always 0
  5510.            bit 5:    set if manufacturer's defect map on max cylinder+1
  5511.            bit 6:    disable ECC retries
  5512.            bit 7:    disable access retries
  5513.  09h    BYTE    standard timeout (XT only, 0 for others)
  5514.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  5515.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  5516.  0Ch    WORD    landing zone (AT/PS2)
  5517.  0Eh    BYTE    sectors/track (AT/PS2)
  5518.  0Fh    BYTE    00h
  5519. ----------41---------------------------------
  5520. INT 41 - Z100 - Master 8259 - Processor Swap
  5521. ----------42---------------------------------
  5522. INT 42 - EGA/VGA/PS - Relocated (by EGA) Video Handler (original INT 10h)
  5523. ----------42---------------------------------
  5524. INT 42 - Z100 - Master 8259 - Timer
  5525. ----------43---------------------------------
  5526. INT 43 - EGA/VGA/PS - User font table
  5527. SeeAlso: INT 1F,INT 44
  5528. ----------43---------------------------------
  5529. INT 43 - Z100 - Master 8259 - Slave 8259 input
  5530. Note:    slave runs in special fully nested mode
  5531. ----------44---------------------------------
  5532. INT 44 - EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh
  5533. SeeAlso: INT 1F,INT 43
  5534. ----------44---------------------------------
  5535. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  5536. ----------44---------------------------------
  5537. INT 44 - IBM 3270-PC High Level Language API
  5538.     DS:SI -> parameter control block
  5539. ----------44---------------------------------
  5540. INT 44 - Z100 - Master 8259 - Serial A
  5541. ----------45---------------------------------
  5542. INT 45 - Z100 - Master 8259 - Serial B
  5543. ----------46---------------------------------
  5544. INT 46 - Secondary Fixed Disk Params (AT,XT286,PS except ESDI)
  5545. SeeAlso: INT 41
  5546. ----------46---------------------------------
  5547. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  5548. ----------47---------------------------------
  5549. INT 47 - Z100 - Master 8259 - Printer
  5550. ----------478000-----------------------------
  5551. INT 47 - SQL Base - DATABASE ENGINE API
  5552.     AX = 8000h
  5553.     DS:BX -> parameter block, first word is function number
  5554. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  5555.  
  5556. Values for function number:
  5557.  01h    "SQLFINI" initalialize application's use of the database
  5558.  02h    "SQLFDON" application is done using the database
  5559.  03h    "SQLFCON" connect to a cursor/database
  5560.  04h    "SQLFDIS" disconnect from a cursor/database
  5561.  05h    "SQLFCOM" compile a SQL command
  5562.  06h    "SQLFEXE" execute a SQL command
  5563.  07h    "SQLFCEX" compile and execute a SQL command
  5564.  08h    "SQLFCMT" commit a transaction to the database
  5565.  09h    "SQLFDES" describe the items of a SELECT statement
  5566.  0Ah    "SQLFGFI" get fetch information
  5567.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  5568.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  5569.  0Dh    "SQLFEFB" enable fetch backwards
  5570.  0Eh    "SQLFPRS" position in result set
  5571.  0Fh    "SQLFURS" undo result set
  5572.  10h    "SQLFNBV" get number of bind variables
  5573.  11h    "SQLFBND" bind data variables
  5574.  12h    "SQLFBNN" bind numerics
  5575.  13h    "SQLFBLN" bind long number
  5576.  14h    "SQLFBLD" bind long data variables
  5577.  15h    "SQLFSRS" start restriction set processing
  5578.  16h    "SQLFRRS" restart restriction set processing
  5579.  17h    "SQLFCRS" close restriction set
  5580.  18h    "SQLFDRS" drop restriction set
  5581.  19h    "SQLFARF" apply Roll Forward journal
  5582.  1Ah    "SQLFERF" end Roll Forward journal
  5583.  1Bh    "SQLFSRF" start Roll Forward journal
  5584.  1Ch    "SQLFSTO" store a compiled SQL command
  5585.  1Dh    "SQLFRET" retrieve a compiled SQL command
  5586.  1Eh    "SQLFDST" drop a stored command
  5587.  1Fh    "SQLFCTY" get command type
  5588.  20h    "SQLFEPO" get error position
  5589.  21h    "SQLFGNR" get number of rows
  5590.  22h    "SQLFNSI" get number of select items
  5591.  23h    "SQLFRBF" get Roll Back flag
  5592.  24h    "SQLFRCD" get return code
  5593.  25h    "SQLFROW" get number of ROWs
  5594.  26h    "SQLFSCN" set cursor name
  5595.  27h    "SQLFSIL" set isolation level
  5596.  28h    "SQLFSLP" set log parameters
  5597.  29h    "SQLFSSB" set select buffer
  5598.  2Ah    "SQLFSSS" set sort space
  5599.  2Bh    "SQLFRLO" read long
  5600.  2Ch    "SQLFWLO" write long
  5601.  2Dh    "SQLFLSK" long seek
  5602.  2Eh    "SQLFGLS" get long size
  5603.  2Fh    "SQLFELO" end long operation
  5604.  30h    "SQLFRBK" roll back a transaction from the database
  5605.  31h    "SQLFERR" error message
  5606.  32h    "SQLFCPY" copy
  5607.  33h    "SQLFR01" reserved
  5608.  34h    "SQLFSYS" system
  5609.  35h    "SQLFSTA" statistics
  5610.  36h    "SQLFR02" reserved
  5611.  37h    "SQLFXAD" extra add
  5612.  38h    "SQLFXCN" extra character to number
  5613.  39h    "SQLFXDA" extra date add
  5614.  3Ah    "SQLFXDP" extra date picture
  5615.  3Bh    "SQLFXDV" extra divide
  5616.  3Ch    "SQLFXML" extra multiply
  5617.  3Dh    "SQLFXNP" extra number picture
  5618.  3Eh    "SQLFXPD" extra picture date
  5619.  3Fh    "SQLFXSB" extra subtract
  5620.  40h    "SQLFINS" install database
  5621.  41h    "SQLFDIN" deinstall database
  5622.  42h    "SQLFDIR" directory of databases
  5623.  43h    "SQLFTIO" timeout
  5624.  44h    "SQLFFQN" get fully qualified column name
  5625.  45h    "SQLFEXP" explain execution plan
  5626.  46h    "SQLFFER" get full error
  5627.  47h    "SQLFBKP" begin online backup
  5628.  48h    "SQLFRDC" read backup data chunk
  5629.  49h    "SQLFEBK" end backup
  5630.  4Ah    "SQLFRES" begin restore from backup
  5631.  4Bh    "SQLFWDC" write backup data chunk for restore
  5632.  4Ch    "SQLFRRD" recover restored database to consistent state
  5633.  4Dh    "SQLFERS" end restore
  5634.  4Eh    "SQLFNRR" return number of result set rows
  5635.  4Fh    "SQLFSTR" start restriction mode
  5636.  50h    "SQLFSPR" stop restriction mode
  5637.  51h    "SQLFCNC" connect 2
  5638.  52h    "SQLFCNR" connect with no recovery
  5639.  53h    "SQLFOMS" set output message size
  5640.  54h    "SQLFIMS" set input message size
  5641.  55h    "SQLFSCP" set cache pages
  5642.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  5643.  57h    "SQLFLAB" get label info for items in SELECT statement
  5644.  58h    "SQLFCBV" clear bind variables
  5645.  59h    "SQLFGET" get database information
  5646.  5Ah    "SQLFSET" set database information
  5647.  5Bh    "SQLFTEC" translate error code
  5648. ----------478001-----------------------------
  5649. INT 47 - SQL Base - GET VERSION NUMBER
  5650.     AX = 8001h
  5651. Return: ???
  5652. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  5653. ----------48---------------------------------
  5654. INT 48 - PCjr - Cordless Keyboard Translation
  5655. ----------48---------------------------------
  5656. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  5657. ----------49---------------------------------
  5658. INT 49 - PCjr - Non-keyboard Scan Code Translation Table
  5659.  
  5660. Format of translation table:
  5661. Offset    Size    Description
  5662.  00h    BYTE    number of nonkeyboard scancodes in the table
  5663.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  5664.         representing the scancode mapped values relative to their
  5665.         input values within the range of 56h through 7Eh
  5666. ----------49---------------------------------
  5667. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  5668. ----------49---------------------------------
  5669. INT 49 - Texas Instruments PC - VIDEO I/O???
  5670.     apparently provides direct video display on the TI Professional PC
  5671. ----------4A---------------------------------
  5672. INT 4A - AT/CONV/PS - User Alarm
  5673.     Invoked by BIOS when real-time clock alarm occurs
  5674. SeeAlso: INT 1A/AH=06h
  5675. ----------4A---------------------------------
  5676. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  5677. ----------4B---------------------------------
  5678. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  5679. Notes:    the CAM committee moved the interface to INT 4F to avoid a conflict
  5680.       with the Virtual DMA spec
  5681.     it is not known whether any drivers actually implemented this interface
  5682.       on INT 4B instead of INT 4F
  5683. SeeAlso: INT 4F
  5684. ----------4B8102DX0000-----------------------
  5685. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  5686.     AX = 8102h
  5687.     DX = 0000h
  5688. Return: CF clear if successful
  5689.         AH = major version number
  5690.         AL = minor version number
  5691.         BX = product number
  5692.         CX = product revision number
  5693.         SI:DI = maximum DMA buffer size
  5694.         DX = flags
  5695.         bit 0: PC/XT bus (DMA in first megabyte only)
  5696.             1: physical buffer/remap region in first megabyte
  5697.             2: automatic remap enabled
  5698.             3: all memory is physically contiguous
  5699.          4-15: reserved (zero)
  5700.     CF set on error
  5701.         AL = error code (see below)
  5702. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  5703.       apparently not always the case
  5704. SeeAlso: INT 31
  5705.  
  5706. Values for error code:
  5707.  01h    region not in contiguous memory
  5708.  02h    region crossed a physical alignment boundary
  5709.  03h    unable to lock pages
  5710.  04h    no buffer available
  5711.  05h    region too large for buffer
  5712.  06h    buffer currently in use
  5713.  07h    invalid memory region
  5714.  08h    region was not locked
  5715.  09h    number of physical pages greater than table length
  5716.  0Ah    invalid buffer ID
  5717.  0Bh    copy out of buffer range
  5718.  0Ch    invalid DMA channel number
  5719.  0Dh    disable count overflow
  5720.  0Eh    disable count underflow
  5721.  0Fh    function not supported
  5722.  10h    reserved flag bits set in DX
  5723.  
  5724. Format of DMA descriptor structure (DDS):
  5725. Offset    Size    Description
  5726.  00h    DWORD    region size
  5727.  04h    DWORD    offset
  5728.  08h    WORD    segment/selector
  5729.  0Ah    WORD    buffer ID
  5730.  0Ch    DWORD    physical address
  5731.  
  5732. Format of Extended DMA descriptor structure (EDDS):
  5733. Offset    Size    Description
  5734.  00h    DWORD    region size
  5735.  04h    DWORD    offset
  5736.  08h    WORD    segment/selector
  5737.  0Ah    WORD    reserved
  5738.  0Ch    WORD    number available
  5739.  0Eh    WORD    number used
  5740.  10h    DWORD    region 0 physical address
  5741.  14h    DWORD    region 0 size in bytes
  5742.  18h    DWORD    region 1 physical address
  5743.  1Ch    DWORD    region 1 size in bytes
  5744.     ...
  5745.  
  5746. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  5747. Offset    Size    Description
  5748.  00h    DWORD    region size
  5749.  04h    DWORD    offset
  5750.  08h    WORD    segment/selector
  5751.  0Ah    WORD    reserved
  5752.  0Ch    WORD    number available
  5753.  0Eh    WORD    number used
  5754.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  5755.  14h    DWORD    page table entry 1
  5756.     ...
  5757. Note:    bits 1-12 of the page table entries should be zero; bit 0 set if page
  5758.       is present and locked
  5759. ----------4B8103-----------------------------
  5760. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  5761.     AX = 8103h
  5762.     DX = flags
  5763.         bit 0: reserved (zero)
  5764.         1: data should be copied into buffer (ignored if bit 2 set)
  5765.         2: buffer should not be allocated if region noncontiguous or
  5766.            crosses physical alignment boundary specified by bits 4-5
  5767.         3: don't attempt automatic remap
  5768.         4: region must not cross 64K physical alignment boundary
  5769.         5: region must not cross 128K physical alignment boundary
  5770.          6-15: reserved (zero)
  5771.     DS:SI -> DMA descriptor structure (see AX=8102h)
  5772. Return:    CF clear if successful
  5773.         DDS physical address field filled in
  5774.         DDS buffer ID field filled (0000h if no buffer allocated)
  5775.     CF set on error
  5776.         AL = error code (see AX=8102h)
  5777.         DDS region size field filled wth maximum contiguous length in bytes
  5778. SeeAlso: AX=8104h,AX=8105h
  5779. ----------4B8104-----------------------------
  5780. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  5781.     AX = 8104h
  5782.     DX = flags
  5783.         bit 0: reserved (zero)
  5784.         1: data should be copied out of buffer
  5785.          2-15: reserved (zero)
  5786.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size,
  5787.         physical address, and buffer ID fields set
  5788. Return: CF clear if successful
  5789.         DDS physical address field set
  5790.         DDS buffer ID field set (0000h if no buffer allocated)
  5791.     CF set on error
  5792.         AL = error code (see AX=8102h)
  5793.         DDS region size field filled wth maximum contiguous length in bytes
  5794. SeeAlso: AX=8103h,AX=8106h
  5795. ----------4B8105-----------------------------
  5796. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  5797.     AX = 8105h
  5798.     DX = flags
  5799.         bits 0-5: reserved (zero)
  5800.            6: EDDS should be returned with page table entries
  5801.            7: only present pages should be locked (not-present pages
  5802.             receive entry of 0000h)
  5803.         8-15: reserved (zero)
  5804.     ES:DI -> Extended DMA descriptor structure (see AX=8102h)
  5805.         region size, linear segment, linear offset, and number avail
  5806.         fields set
  5807. Return: CF clear if successful
  5808.         EDDS number used field set
  5809.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  5810.     CF set on error
  5811.         AL = error code (see AX=8102h)
  5812.         EDDS region size field filled with max length in bytes that can be
  5813.         locked and described in the EDDS table
  5814. SeeAlso: AX=8103h,AX=8106h
  5815. ----------4B8106-----------------------------
  5816. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  5817.     AX = 8106h
  5818.     DX = flags
  5819.         bits 0-5: reserved (zero)
  5820.            6: EDDS contains page table entries
  5821.            7: EDDS may contain not-present pages (entry = 0000h)
  5822.         8-15: reserved (zero)
  5823.     ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned
  5824.         by AX=8105h    
  5825. Return: CF clear if successful
  5826.     CF set on error
  5827.         AL = error code (see AX=8102h)
  5828. SeeAlso: AX=8104h,AX=8105h
  5829. ----------4B8107-----------------------------
  5830. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  5831.     AX = 8107h
  5832.     DX = flags
  5833.         bit 0: reserved (zero)
  5834.         1: data should be copied into buffer
  5835.          2-15: reserved (zero)
  5836.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size set
  5837.         (also region offset and region segment if DX bit 1 set)
  5838. Return: CF clear if successful
  5839.         DDS physical address and buffer ID set
  5840.         DDS region size filled with length of buffer
  5841.     CF set on error
  5842.         AL = error code (see AX=8102h)
  5843. SeeAlso: AX=8108h
  5844. ----------4B8108-----------------------------
  5845. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  5846.     AX = 8108h
  5847.     DX = flags
  5848.         bit 0: reserved (zero)
  5849.         1: data should be copied out of buffer
  5850.          2-15: reserved (zero)
  5851.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set
  5852.         (also region size/region offset/segment if DX bit 1 set)
  5853. Return: CF clear if successful
  5854.     CF set on error
  5855.         AL = error code (see AX=8102h)
  5856. SeeAlso: AX=8107h
  5857. ----------4B8109-----------------------------
  5858. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  5859.     AX = 8109h
  5860.     DX = 0000h
  5861.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  5862.         region segment/offset, and region size fields set
  5863.     BX:CX = starting offset into DMA buffer
  5864. Return: CF clear if successful
  5865.     CF set on error
  5866.         AL = error code (see AX=8102h)
  5867. SeeAlso: AX=810Ah
  5868. ----------4B810A-----------------------------
  5869. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  5870.     AX = 810Ah
  5871.     DX = 0000h
  5872.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  5873.         region segment/offset, and region size fields set
  5874.     BX:CX = starting offset into DMA buffer
  5875. Return: CF clear if successful
  5876.     CF set on error
  5877.         AL = error code (see AX=8102h)
  5878. SeeAlso: AX=8109h
  5879. ----------4B810B-----------------------------
  5880. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  5881.     AX = 810Bh
  5882.     BX = DMA channel number
  5883.     DX = 0000h
  5884. Return: CF clear if successful
  5885.     CF set on error
  5886.         AL = error code (see AX=8102h)
  5887. SeeAlso: AX=810Ch
  5888. ----------4B810C-----------------------------
  5889. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  5890.     AX = 810Ch
  5891.     BX = DMA channel number
  5892.     DX = 0000h
  5893. Return: CF clear if successful
  5894.         ZF set if disable count decremented to zero
  5895.     CF set on error
  5896.         AL = error code (see AX=8102h)
  5897. SeeAlso: AX=810Bh
  5898. ----------4B---------------------------------
  5899. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  5900. ----------4C---------------------------------
  5901. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  5902. ----------4D---------------------------------
  5903. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  5904. ----------4E---------------------------------
  5905. INT 4E - TI Professional PC - DISK I/O
  5906.     used instead of INT 13 on the TI Professional PC
  5907. SeeAlso: INT 13
  5908. ----------4E---------------------------------
  5909. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  5910. ----------4F---------------------------------
  5911. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  5912. ----------4F---------------------------------
  5913. INT 4F - Common Access Method SCSI interface
  5914.     ES:BX -> CAM Control Block (CCB)
  5915. Return: nothing
  5916. Notes:    the installation check for the driver is the string "SCSI_CAM" eight
  5917.       bytes past the INT 4Bh handler
  5918.     this information is based on the 1.9 draft version of the
  5919.       specification, except that the interrupt was changed after that versn
  5920. SeeAlso: INT 4B
  5921.  
  5922. Format of CAM Control Block:
  5923. Offset    Size    Description
  5924.  00h    WORD    CAM control block length
  5925.  02h    BYTE    function code
  5926.  03h    BYTE    CAM status
  5927.  04h    BYTE    SCSI status
  5928.  05h    BYTE    path ID
  5929.  06h    BYTE    target ID
  5930.  07h    BYTE    logical unit number
  5931.  08h    BYTE    CAM flags
  5932.         bits 7-6: direction
  5933.             00 reserved
  5934.             01 in
  5935.             10 out
  5936.             11 no data transfer
  5937.         bit 5: disable autosense
  5938.         bit 4: scatter/gather
  5939.         bit 3: disable callback on completion
  5940.         bit 2: linked CDB
  5941.         bit 1: queue action enable
  5942.         bit 0: CDB is a pointer
  5943.  09h    BYTE    CAM flags
  5944.         bit 7: disable disconnect
  5945.         bit 6: initiate synchronous transfers  \ mutually
  5946.         bit 5: disable synchronous transfers   / exclusive
  5947.         bit 4: SIM queue priority
  5948.             1 head insertion
  5949.             0 tail insertion (normal)
  5950.         bits 3-0: reserved
  5951.  0Ah    BYTE    CAM flags
  5952.         bit 7: reserved
  5953.         bit 6: CDB pointer    (bits 6-1: 0=VA, 1=PA)
  5954.         bit 5: SG list/data
  5955.         bit 4: sense buffer
  5956.         bit 3: message buffer
  5957.         bit 2: next CCB
  5958.         bit 1: callback on completion
  5959.         bit 0: reserved
  5960.  0Bh    BYTE    target-mode flags
  5961.         bit 7: data buffer valid
  5962.         bit 6: status valid
  5963.         bit 5: message buffer valid
  5964.         bits 4-3: reserved
  5965.         bit 2: target CCB available
  5966.         bit 1: disable autodisconnect
  5967.         bit 0: disable autosave/restore
  5968.  0Ch  N BYTEs    function-dependent data
  5969. ----------50---------------------------------
  5970. INT 50 - TIL Xpert AIM (X.25)
  5971.     AH = function
  5972. ----------50---------------------------------
  5973. INT 50 - through 57 - IRQ0-IRQ7 relocated by DESQview
  5974. ----------50---------------------------------
  5975. INT 50 - through 57 - IRQ0-IRQ7 relocated by IBM 3278 emulation control program
  5976. ----------58---------------------------------
  5977. INT 58 - IRQ8 relocated by DESQview 2.26+
  5978. SeeAlso: INT 70
  5979. ----------59---------------------------------
  5980. INT 59 - IRQ9 relocated by DESQview 2.26+
  5981. SeeAlso: INT 71
  5982. ----------59---------------------------------
  5983. INT 59 - GSS Computer Graphics Interface (GSS*CGI)
  5984.     DS:DX -> block of 5 array pointers
  5985. Return:    CF set on error
  5986.         AX = error code
  5987.     CF clear if successful
  5988.         AX = return code
  5989. Note:    INT 59 is the means by which GSS*CGI language bindings communicate with
  5990.       GSS*CGI device drivers and the GSS*CGI device driver controller.
  5991.     also used by the IBM Graphic Development Toolkit
  5992. ----------5A---------------------------------
  5993. INT 5A - IRQ10 relocated by DESQview 2.26+
  5994. SeeAlso: INT 72
  5995. ----------5A---------------------------------
  5996. INT 5A - Cluster adapter BIOS entry address
  5997.     ???
  5998. ----------5B---------------------------------
  5999. INT 5B - IRQ11 relocated by DESQview 2.26+
  6000. SeeAlso: INT 73
  6001. ----------5B---------------------------------
  6002. INT 5B - Used by cluster adapter
  6003. ----------5B---------------------------------
  6004. INT 5B - AT&T Starlan Extended NetBIOS (variable length names)
  6005.     ES:BX -> Network Control Block (see below)
  6006. Return: AL = status (see INT 5C)
  6007. SeeAlso: INT 5C
  6008.  
  6009. Format of Network Control Block
  6010. Offset    Size    Description
  6011.  00h    BYTE    ncb_command (see below)
  6012.  01h    BYTE    ncb_retcode
  6013.  02h    BYTE    ncb_lsn
  6014.  03h    BYTE    ncb_num
  6015.  04h    DWORD    -> ncb_buffer
  6016.  08h    WORD    ncb_length
  6017.  0Ah 16 BYTEs    ncb_callname
  6018.  1Ah 16 BYTEs    ncb_name
  6019.  2Ah    BYTE    ncb_rto
  6020.  2Bh    BYTE    ncb_sto
  6021.  2Ch    DWORD    -> ncb_post      /* int (far *ncb_post)(); */
  6022.  30h    BYTE    ncb_lana_num
  6023.  31h    BYTE    ncb_cmd_cplt
  6024.  32h    DWORD    -> ncb_vname
  6025.  36h    BYTE    ncb_vnamelen
  6026.  37h  9 BYTEs    ncb_reserve
  6027. Note: fields 00h-31h are the same as for a standard NetBIOS NCB (see INT 5C)
  6028.  
  6029. Values for ncb_command field same as for INT 5C, except
  6030.     70h    send net Break
  6031. ----------5B---------------------------------
  6032. INT 5B - Microsoft Network Transport Layer Interface
  6033. ----------5C---------------------------------
  6034. INT 5C - IRQ12 relocated by DESQview 2.26+
  6035. SeeAlso: INT 74
  6036. ----------5C---------------------------------
  6037. INT 5C - NETBIOS INTERFACE
  6038.     ES:BX -> Network Control Block (see below)
  6039. Return: AL = status
  6040.         00h successful
  6041.         01h bad buffer size
  6042.         03h invalid NETBIOS command
  6043.         05h timeout
  6044.         06h receive buffer too small
  6045.         08h bad session number
  6046.         09h LAN card out of memory
  6047.         0Ah session closed
  6048.         0Bh command has been cancelled
  6049.         0Dh name already exists
  6050.         0Eh local name table full
  6051.         0Fh name still in use, can't delete
  6052.         11h local session table full
  6053.         12h remote PC not listening
  6054.         13h bad NCB_NUM field
  6055.         14h no answer to CALL or no such remote
  6056.         15h name not in local name table
  6057.         16h duplicate name
  6058.         17h bad delete
  6059.         18h abnormal end
  6060.         19h name error, multiple identical names in use
  6061.         1Ah bad packet
  6062.         21h network card busy
  6063.         22h too many commands queued
  6064.         23h bad LAN card number
  6065.         24h command finished while cancelling
  6066.         26h command can't be cancelled
  6067.         FFh NETBIOS busy
  6068. Note:    Sytek PCnet card uses DMA 3.
  6069. SeeAlso: INT 5B
  6070.  
  6071. Format of Network Control Block:
  6072. Offset    Size    Description
  6073.  00h    BYTE    ncb_command (see below)
  6074.  01h    BYTE    ncb_retcode
  6075.  02h    BYTE    ncb_lsn
  6076.  03h    BYTE    ncb_num
  6077.  04h    DWORD    -> ncb_buffer
  6078.  08h    WORD    ncb_length
  6079.  0Ah 16 BYTEs    ncb_callname
  6080.  1Ah 16 BYTEs    ncb_name
  6081.  2Ah    BYTE    ncb_rto
  6082.  2Bh    BYTE    ncb_sto
  6083.  2Ch    DWORD    -> ncb_post      /* int (far *ncb_post)(); */
  6084.  30h    BYTE    ncb_lana_num
  6085.         00h-03h IBM NetBIOS specs
  6086.         F0h-FFh Eicon NABios interface
  6087.  31h    BYTE    ncb_cmd_cplt
  6088.  32h 14 BYTEs    ncb_reserve
  6089.  
  6090. Values for "ncb_command" field in NCB (or with 80h for non-waiting call):
  6091.     10h start session with NCB_NAME name (call)
  6092.     11h listen for call
  6093.     12h end session with NCB_NAME name (hangup)
  6094.     14h send data via NCB_LSN
  6095.     15h receive data from a session
  6096.     16h receive data from any session
  6097.     17h send multiple data buffers
  6098.     20h send unACKed message (datagram)
  6099.     21h receive datagram
  6100.     22h send broadcast datagram
  6101.     23h receive broadcast datagram
  6102.     30h add name to name table
  6103.     31h delete name from name table
  6104.     32h reset adapter card and tables
  6105.     33h get adapter status (see structure "astatus" below)
  6106.     34h status of all sessions for name (see structure "sstatus" below)
  6107.     35h cancel
  6108.     36h add group name to name table
  6109.     70h unlink from IBM remote program (no F0h function)
  6110.     71h send data without ACK
  6111.     72h send multiple buffers without ACK
  6112.     78h find name
  6113.     79h token-ring protocol trace
  6114.  
  6115. Format of structure "name":
  6116. Offset    Size    Description
  6117.  00h 16 BYTEs nm_name
  6118.  10h    BYTE  nm_num
  6119.  11h    BYTE  nm_status
  6120.  
  6121. Format of structure "astatus":
  6122. Offset    Size    Description
  6123.  00h  6 BYTEs as_id
  6124.  06h    BYTE  as_jumpers
  6125.  07h    BYTE  as_post
  6126.  08h    BYTE  as_major
  6127.  09h    BYTE  as_minor
  6128.  0Ah    WORD  as_interval
  6129.  0Ch    WORD  as_crcerr
  6130.  0Eh    WORD  as_algerr
  6131.  10h    WORD  as_colerr
  6132.  12h    WORD  as_abterr
  6133.  14h    DWORD as_tcount
  6134.  18h    DWORD as_rcount
  6135.  1Ch    WORD  as_retran
  6136.  1Eh    WORD  as_xresrc
  6137.  20h  8 BYTEs as_res0
  6138.  28h    WORD  as_ncbfree
  6139.  2Ah    WORD  as_ncbmax
  6140.  2Ch    WORD  as_ncbx
  6141.  2Eh  4 BYTEs as_res1
  6142.  32h    WORD  as_sespend
  6143.  34h    WORD  as_msp
  6144.  36h    WORD  as_sesmax
  6145.  38h    WORD  as_bufsize
  6146.  3Ah    WORD  as_names
  6147.  3Ch 16 name structures  as_name
  6148.  
  6149. Format of structure "sstatus":
  6150. Offset    Size    Description
  6151.  00h    BYTE    number of sessions being reported
  6152.  01h    BYTE    number of sessions with this name
  6153.  02h    BYTE    number of outstanding receive datagrams
  6154.  03h    BYTE    number of outstanding ReceiveAnys
  6155.  04h    var    session structures (see below)
  6156.  
  6157. Format of structure "session":
  6158. Offset    Size    Description
  6159.  00h    BYTE    local session number
  6160.  01h    BYTE    state
  6161.         01h listen pending
  6162.         02h call pending
  6163.         03h session established
  6164.         04h hangup pending
  6165.         05h hangup done
  6166.         06h session aborted
  6167.  02h 16 BYTEs    local name
  6168.  12h 16 BYTEs    remote name
  6169.  22h    BYTE    number of outstanding receives
  6170.  23h    BYTE    number of outstanding sends/chainsends
  6171. ----------5C---------------------------------
  6172. INT 5C - TOPS INTERFACE
  6173.     ES:BX -> Network Control Block
  6174. Note:    TOPS card uses DMA 1, 3 or none.
  6175. ----------5C---------------------------------
  6176. INT 5C - ATALK.SYS - AppleTalk INTERFACE
  6177.     DX:BX -> control block (see below)
  6178. Return: none
  6179. Notes:    this driver can use any interrupt from 5Ch to 70h
  6180.     the signature 'AppleTalk' appears 16 bytes prior to the interrupt
  6181.       handler; this serves as the installation check
  6182.  
  6183. Format of AppleTalk control block:
  6184. Offset    Size    Description
  6185.  00h    WORD    command code
  6186.         01h "AT_INIT"        initialize the driver
  6187.         03h "AT_GETNETINFO" get current network info incl init status
  6188.         20h "DDP_OPENSOCKET"
  6189.         21h "DDP_CLOSESOCKET"
  6190.         22h "DDP_WRITE"
  6191.         23h "DDP_READ"
  6192.         24h "DDP_CANCEL"
  6193.         30h "NBP_REGISTER"
  6194.         31h "NBP_REMOVE"
  6195.         32h "NBP_LOOKUP"
  6196.         33h "NBP_CONFIRM"
  6197.         34h "NBP_CANCEL"
  6198.         42h "ATP_SEND_REQUEST"
  6199.         or with the following flags
  6200.         8000h start command then return
  6201.         4000h wait for interrupt service to complete
  6202.  02h    WORD    returned status
  6203.         0000h success (already initialized if func 01h)
  6204.  04h    DWORD    pointer to completion function
  6205.  08h    WORD    network number
  6206.  0Ah    BYTE    node ID
  6207. ---if general func (01h,03h), control block continues:
  6208.  0Bh    BYTE    "inf_abridge"
  6209.  0Ch    WORD    "inf_config"
  6210.  0Eh    DWORD    pointer to buffer
  6211.  12h    WORD    buffer size
  6212. ---if DDP function (20h-24h), control block continues:
  6213.  0Bh    BYTE    "ddp_addr_socket"
  6214.  0Ch    BYTE    "ddp_socket"
  6215.  0Dh    BYTE    "ddp_type"
  6216.  0Eh    DWORD    pointer to buffer
  6217.  12h    WORD    buffer size
  6218.  14h    BYTE    "ddp_chksum"
  6219. ---if Name Binding Protocol (30h-34h), control block continues:
  6220.  0Bh    BYTE    "nbp_addr_socket"
  6221.  0Ch    WORD    "nbp_toget"
  6222.  0Eh    DWORD    pointer to buffer
  6223.  12h    WORD    buffer size
  6224.  14h    BYTE    "nbp_interval"
  6225.  15h    BYTE    "nbp_retry"
  6226.  16h    DWORD    "nbp_entptr"
  6227. ---if AppleTalk Transaction Protocol (42h), control block continues:
  6228.  0Bh    BYTE    "atp_addr_socket"
  6229.  0Ch    WORD    "atp_socket"
  6230.  0Eh    DWORD    pointer to buffer
  6231.  12h    WORD    buffer size
  6232.  14h    BYTE    "atp_interval"
  6233.  15h    BYTE    "atp_retry"
  6234.  16h    BYTE    ATP flags
  6235.         bit 5: exactly one transaction
  6236.  17h    BYTE    "atp_seqbit"
  6237.  18h    BYTE    transaction ID
  6238.  19h  4 BYTEs    ATP user bytes
  6239.  1Dh    BYTE    number of BDS buffers
  6240.  1Eh    BYTE    number of BDS responses
  6241.  1Fh    DWORD    pointer to BDS buffers (see below)
  6242.  
  6243. Format of Name Binding Protocol Name-to-Address binding entries for NBP_LOOKUP:
  6244. Offset    Size    Description
  6245.  00h    WORD    "tup_address_network"
  6246.  02h    BYTE    "tup_address_notid"
  6247.  03h    BYTE    "tup_address_socket"
  6248.  04h    BYTE    "tup_enum"
  6249.  05h 99 BYTEs    name
  6250.  
  6251. Format of BDS entries:
  6252. Offset    Size    Description
  6253.  00h    DWORD    pointer to buffer
  6254.  04h    WORD    size of buffer
  6255.  06h    WORD    BDS data size
  6256.  08h  4 BYTEs    "bds_userbytes"
  6257. ----------5C---------------------------------
  6258. INT 5C - IBM 802.2 INTERFACE (LLC)
  6259.     ES:BX -> CCB
  6260. Return: none
  6261.  
  6262. Format of CCB:
  6263. Offset    Size    Description
  6264.  00h    BYTE    adapter
  6265.  01h    BYTE    command code
  6266.  02h    BYTE    return code
  6267.  03h    BYTE    work
  6268.  04h    DWORD    pointer to ???
  6269.  08h    DWORD    pointer to completion function???
  6270.  0Ch    DWORD    pointer to parameters???
  6271. ----------5C---------------------------------
  6272. INT 5C - $25 LAN - INSTALLATION CHECK
  6273. Notes:    current versions only check whether the vector is 0000h:0000h or not
  6274.     future versions are supposed to have the signature "NET" in the three
  6275.       bytes preceding the INT 5C handler
  6276. ----------5C04-------------------------------
  6277. INT 5C - $25 LAN - CHECK IF CONNECTION ALIVE
  6278.     AH = 04h
  6279.     AL = COM port (0 = default)
  6280.     CX = wait count in character times (should be at least 100)
  6281. Return: ZF set if link alive
  6282. ----------5D---------------------------------
  6283. INT 5D - IRQ13 relocated by DESQview 2.26+
  6284. SeeAlso: INT 75
  6285. ----------5E---------------------------------
  6286. INT 5E - IRQ14 relocated by DESQview 2.26+
  6287. SeeAlso: INT 76
  6288. ----------5F---------------------------------
  6289. INT 5F - IRQ15 relocated by DESQview 2.26+
  6290. SeeAlso: INT 77
  6291. ----------60---------------------------------
  6292.