home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / UTILS / INTERRPT / INTERRUP.B < prev    next >
Text File  |  1994-02-06  |  353KB  |  9,384 lines

  1. Interrupt List, part 2 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------S-1410-------------------------------
  4. INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF
  5.     AH = 10h
  6.     AL = bit mask
  7.         bit 0: enable/disable ^C/^K checking
  8.         bit 1: enable/disable the transmitter
  9.     DX = port number
  10. SeeAlso: AH=0Fh"FOSSIL"
  11. --------S-1410-------------------------------
  12. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR RECEIVE BUFFER
  13.     AH = 10h
  14.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  15. Return: AH = status
  16.         00h successful
  17.         FFh error
  18. SeeAlso: AH=09h"Digiboard",AH=11h"Digiboard"
  19. --------S-1410-------------------------------
  20. INT 14 - MBBIOS PACCOM support - SET CRC WAIT
  21.     AH = 10h
  22.     AL = new setting in clock ticks (should be at least 5 character times)
  23. Desc:    specify the time from start of last character to dropping RTS
  24. SeeAlso: AH=0Dh"MBBIOS",AH=0Fh"MBBIOS"
  25. --------N-1410--DXFFFF-----------------------
  26. INT 14 - Connection Manager - QUERY SERVICE NAMES
  27.     AH = 10h
  28.     DX = FFFFh
  29.     CL = subfunction
  30.         00h search first
  31.         01h search next
  32.     ES:DI -> pattern buffer (see below)
  33. Return: AH = return code (00h,01h,03h,06h) (see also AH=00h/DX=FFFFh)
  34.         01h no (more) matching names
  35.         03h invalid request
  36.     ES:DI buffer filled with reply buffer (see below) containing matched
  37.           name if AH=00h
  38. Program: Connection Manager by Softwarehouse Corp. permits the sharing of
  39.       serial ports over an IPX or NetBIOS-based network
  40. Desc:    obtain the names of groups and lines available for connection requests,
  41.       and the names of active Connection Servers
  42. SeeAlso: AH=04h/DX=FFFFh,AH=0Bh/DX=FFFFh
  43.  
  44. Format of pattern/reply buffer:
  45. Offset    Size    Description
  46.  00h    WORD    length of pattern (30h or 32h)
  47.  02h 16 BYTEs    server pattern or name
  48.  12h 16 BYTEs    group pattern or name
  49.  22h 16 BYTEs    line pattern or name
  50.  23h    BYTE    (optional) ???
  51.  24h    BYTE    (optional, returned) current line status
  52.         00h available
  53.         01h out of service
  54.         02h currently allocated to a connection
  55. Note:    pattern may include '?' wildcard to match any character
  56. --------S-1411-------------------------------
  57. INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION
  58.     AH = 11h
  59.     DH = row
  60.     DL = column
  61. Note:    this is the same as INT 10/AH=02h
  62. SeeAlso: AH=12h"FOSSIL"
  63. --------S-1411-------------------------------
  64. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR TRANSMIT BUFFER
  65.     AH = 11h
  66.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  67. Return: AH = status
  68.         00h successful
  69.         FFh error
  70. SeeAlso: AH=09h"Digiboard",AH=10h"Digiboard"
  71. --------S-1411-------------------------------
  72. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - DISABLE PORT
  73.     AH = 11h
  74.     DX = port number
  75. Return: AL = status
  76.         00h successful
  77.         01h IRQ for port is shared
  78.         02h IRQ was reserved
  79. SeeAlso: AH=04h,AH=05h,AH=12h"PC-MOS"
  80. --------S-1412-------------------------------
  81. INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION
  82.     AH = 12h
  83. Return: DH = row
  84.     DL = column
  85. Note:    this is the same as INT 10/AH=03h
  86. SeeAlso: AH=11h"FOSSIL"
  87. --------S-1412-------------------------------
  88. INT 14 - Digiboard DigiCHANNEL PC/X* - GET TRANSMIT BUFFER FREE SPACE
  89.     AH = 12h
  90.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  91. Return: AX = number of bytes free
  92. SeeAlso: AH=0Ah"Digiboard",AH=14h"Digiboard"
  93. --------S-1412-------------------------------
  94. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - GET CURRENT PORT PARAMETERS
  95.     AH = 12h
  96.     DX = port number
  97. Return: AH = status
  98.         FFh port number invalid
  99.     AL = line parameters (see AH=00h)
  100.     AH = flow control configuration (see AH=05h"PC-MOS")
  101.     CX:BX = bps rate
  102.     DL = XOFF character or 00h for none
  103.     DH = XON character or 00h for none
  104. --------S-1413-------------------------------
  105. INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN
  106.     AH = 13h
  107.     AL = character
  108. Note:    should not be called if it is unsafe to call DOS
  109. SeeAlso: AH=15h
  110. --------S-1413-------------------------------
  111. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - REGISTER A PORT WITH A TERMINAL
  112.     AH = 13h
  113.     DX = port number
  114. Return: AH = status
  115.         FFh port number invalid
  116.         else
  117.         ES:BX -> BYTE flag (00h buffer empty, FFh buffer contains data)
  118. SeeAlso: AH=17h"PC-MOS"
  119. --------S-1414-------------------------------
  120. INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING
  121.     AH = 14h
  122.     AL = 01h enable watchdog
  123.          00h disable watchdog
  124.     DX = port number
  125. --------S-1414-------------------------------
  126. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - OUTPUT STRING
  127.     AH = 14h
  128.     CX = number of characters in string
  129.     DX = port number
  130.     ES:BX -> string to be sent
  131.     SI = timeout in timer ticks or 0000h for default
  132. Return: AX = number of bytes actually sent
  133.     ZF clear if successful
  134.     ZF set on timeout
  135. SeeAlso: AH=01h,AH=15h"PC-MOS"
  136. --------S-1414-------------------------------
  137. INT 14 - Digiboard - GET NUMBER OF BOARDS INSTALLED
  138.     AH = 14h
  139. Return: AX = number of boards installed
  140. SeeAlso: AH=08h"Digiboard",AH=15h"Digiboard"
  141. --------S-1415-------------------------------
  142. INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES
  143.     AH = 15h
  144.     AL = character
  145. SeeAlso: AH=13h"FOSSIL"
  146. --------S-1415-------------------------------
  147. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - INPUT STRING
  148.     AH = 15h
  149.     CX = size of buffer
  150.     DX = port number
  151.     ES:BX -> buffer for received characters
  152.     SI = timeout in clock ticks or 0000h for default
  153. Return: AX = number of characters actually read
  154.     ZF set on timeout (no data available)
  155. SeeAlso: AH=02h,AH=14h"PC-MOS",AH=16h"PC-MOS"
  156. --------S-1415-------------------------------
  157. INT 14 - Digiboard - ENABLE/DISABLE MEMORY
  158.     AH = 15h
  159.     AL = new state (00h disabled, 01h enabled)
  160. Return: AH = status
  161.         00h successful
  162.         80h error
  163.         FFh error
  164. SeeAlso: AH=14h"Digiboard",AH=16h"Digiboard"
  165. --------S-1416-------------------------------
  166. INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN
  167.     AH = 16h
  168.     AL = function
  169.         00h = delete
  170.         01h = add
  171.     ES:DX -> routine to call
  172. Return: AX = status
  173.         0000h successful
  174.         0001h unsuccessful
  175. SeeAlso: AH=07h"FOSSIL"
  176. --------S-1416-------------------------------
  177. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - LINK TO ANOTHER SERIAL DRIVER
  178.     AH = 16h
  179.     ES:BX -> calling driver's INT 14 entry point
  180. Return: nothing
  181. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  182.       operating system by The Software Link, Inc.
  183. --------S-1416-------------------------------
  184. INT 14 - Digiboard DigiCHANNEL PC/X* - CCB COMMAND
  185.     AH = 16h
  186.     AL = CCB command number (see below) (see also following entries)
  187.     BL = byte 2
  188.     BH = byte 3
  189.     CL = byte 1 (for all channel functions except 4Eh and 4Fh)
  190.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  191. Return: AH = status
  192.         00h successful
  193.         80h error
  194.         FFh error
  195. SeeAlso: AX=1646h,AH=18h"Digiboard"
  196.  
  197. Values for CCB command number:
  198.  40h    Set Receive Mid Water Mark
  199.  41h    Set Receive High Water Mark
  200.  42h    Flush Receive Buffer
  201.  43h    Flush Transmit Buffer
  202.  44h    Transmit Pause
  203.  45h    Transmit Resume
  204.  46h    Set Interrupt to Host Mask
  205.  47h    Set Baud, Data, Stop and Parity
  206.  48h    Send Break
  207.  49h    Set Modem Lines
  208.  4Ah    Set Break Count
  209.  4Bh    Set Handshake
  210.  4Ch    Set Xon/Xoff Characters
  211.  4Dh    Set Transmit Mid Water Mark
  212.  4Eh    IRQ Polling Timer to Host
  213.  4Fh    Buffer Set All
  214.  50h    Port On
  215.  51h    Port Off
  216.  52h    Receive Pause
  217.  53h    Special Character Interrupt
  218.  54h    RS-422 Enable
  219. --------S-141646-----------------------------
  220. INT 14 - Digiboard - CCB COMMAND - SET INTERRUPT TO HOST MASK
  221.     AX = 1646h
  222.     BL = bits to set
  223.     BH = bits to clear
  224.     CL = byte 1
  225.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  226. Return: AH = status
  227.         00h successful
  228.         80h error
  229.         FFh error
  230. SeeAlso: AH=16h"Digiboard",AX=1647h
  231. --------S-141647-----------------------------
  232. INT 14 - Digiboard - CCB COMMAND - SET BAUD/DATABITS/STOPBITS/PARITY
  233.     AX = 1647h
  234.     BL = baud
  235.     BH = datatype
  236.     CL = byte 1
  237.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  238. Return: AH = status
  239.         00h successful
  240.         80h error
  241.         FFh error
  242. SeeAlso: AH=16h"Digiboard",AX=1646h,AX=1649h
  243. --------S-141649-----------------------------
  244. INT 14 - Digiboard - CCB COMMAND - SET MODEM LINES
  245.     AX = 1649h
  246.     BL = bits to set
  247.     BH = bits to clear
  248.     CL = byte 1
  249.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  250. Return: AH = status
  251.         00h successful
  252.         80h error
  253.         FFh error
  254. SeeAlso: AH=16h"Digiboard",AX=1647h
  255. --------S-14164A-----------------------------
  256. INT 14 - Digiboard - CCB COMMAND - SET BREAK COUNT
  257.     AX = 164Ah
  258.     BL = break count
  259.     CL = byte 1
  260.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  261. Return: AH = status
  262.         00h successful
  263.         80h error
  264.         FFh error
  265. SeeAlso: AH=16h"Digiboard",AX=1649h,AX=164Bh
  266. --------S-14164B-----------------------------
  267. INT 14 - Digiboard - CCB COMMAND - SET HANDSHAKE
  268.     AX = 164Bh
  269.     BL = bits to set
  270.     BH = bits to clear
  271.     CL = byte 1
  272.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  273. Return: AH = status
  274.         00h successful
  275.         80h error
  276.         FFh error
  277. SeeAlso: AH=16h"Digiboard",AX=1649h,AX=164Ch
  278. --------S-14164C-----------------------------
  279. INT 14 - Digiboard - CCB COMMAND - SET XON/XOFF CHARACTERS
  280.     AX = 164Ch
  281.     BL = XON character
  282.     BH = XOFF character
  283.     CL = byte 1
  284.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  285. Return: AH = status
  286.         00h successful
  287.         80h error
  288.         FFh error
  289. SeeAlso: AH=16h"Digiboard",AX=164Bh,AX=164Dh
  290. --------S-14164D-----------------------------
  291. INT 14 - Digiboard - CCB COMMAND - SET TRANSMIT MID-WATER MARK
  292.     AX = 164Dh
  293.     BX = new mid-water mark
  294.     CL = byte 1
  295.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  296. Return: AH = status
  297.         00h successful
  298.         80h error
  299.         FFh error
  300. SeeAlso: AH=16h"Digiboard",AX=164Ch,AX=164Eh,AX=164Fh
  301. --------S-14164E-----------------------------
  302. INT 14 - Digiboard - CCB COMMAND - IRQ POLLING TIMER TO HOST
  303.     AX = 164Eh
  304.     BL = ticks
  305.     BH = ???
  306.     CL = mode
  307.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  308. Return: AH = status
  309.         00h successful
  310.         80h error
  311.         FFh error
  312. SeeAlso: AH=16h"Digiboard",AX=164Dh
  313. --------S-14164F-----------------------------
  314. INT 14 - Digiboard - CCB COMMAND - BUFFER SET ALL
  315.     AX = 164Fh
  316.     BL = size
  317.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  318. Return: AH = status
  319.         00h successful
  320.         80h error
  321.         FFh error
  322. SeeAlso: AH=16h"Digiboard",AX=164Dh
  323. --------S-141653-----------------------------
  324. INT 14 - Digiboard - CCB COMMAND - SPECIAL CHARACTER INTERRUPT
  325.     AX = 1653h
  326.     BL = enable/disable
  327.     BH = special character
  328.     CL = byte 1
  329.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  330. Return: AH = status
  331.         00h successful
  332.         80h error
  333.         FFh error
  334. SeeAlso: AH=16h"Digiboard",AX=1646h
  335. --------S-1417-------------------------------
  336. INT 14 - FOSSIL - REBOOT SYSTEM
  337.     AH = 17h
  338.     AL = method
  339.         00h = cold boot
  340.         01h = warm boot
  341. SeeAlso: INT 19
  342. --------S-1417-------------------------------
  343. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - WRITE MODEM CONTROL REGISTER
  344.     AH = 17h
  345.     AL = new value for UART's modem control register
  346.     DX = port number
  347. Return: nothing
  348. --------S-1418-------------------------------
  349. INT 14 - FOSSIL - READ BLOCK
  350.     AH = 18h
  351.     CX = maximum number of characters to transfer
  352.     DX = port number
  353.     ES:DI -> user buffer
  354. Return: AX = number of characters transferred
  355. SeeAlso: AH=19h"FOSSIL",AH=83h"COURIERS",AX=FF02h,INT 6B/AX=0100h
  356. --------S-1418-------------------------------
  357. INT 14 - Digiboard DigiCHANNEL PC/X* - SEND BIOS COMMAND
  358.     AH = 18h
  359.     ES:BX -> 16-byte command string
  360.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  361. Return: AH = status
  362.         00h successful
  363.         80h timeout
  364.     AL = mailbox status
  365.         00h no errors
  366.         8Xh BIOS error
  367.     ES:BX buffer filled in with mailbox string
  368.     ZF clear if no errors
  369.     ZF set if either status byte contains an error code
  370. SeeAlso: AH=16h"Digiboard"
  371. --------S-1418-------------------------------
  372. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - GET DRIVER DESCRIPTION
  373.     AH = 18h
  374.     DX = port number
  375. Return: DS:BX -> 40-byte buffer containing a string identifying the serial
  376.         driver
  377. SeeAlso: AH=06h"PC-MOS"
  378. --------S-1419-------------------------------
  379. INT 14 - FOSSIL - WRITE BLOCK
  380.     AH = 19h
  381.     CX = maximum number of characters to transfer
  382.     DX = port number
  383.     ES:DI -> user buffer
  384. Return: AX = number of characters transferred
  385. SeeAlso: AH=18h"FOSSIL",AH=86h,INT 6B/AX=0000h
  386. --------S-1419-------------------------------
  387. INT 14 - Digiboard DigiCHANNEL PC/X* - SPECIAL CHARACTER INTERRUPT
  388.     AH = 19h
  389.     BL = flag
  390.         00h disable special character interrupt
  391.         FFh enable interrupt
  392.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  393. Return: AH = status
  394.         00h successful
  395.         FFh failed
  396. SeeAlso: AH=1Ah"Digiboard"
  397. --------S-1419-------------------------------
  398. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - SELECTIVE BUFFER FLUSH
  399.     AH = 19h
  400.     AL = what to flush
  401.         bit 0: input buffer
  402.         bit 1: output buffer
  403.     DX = port number
  404. Return: nothing
  405. SeeAlso: AH=09h"PC-MOS"
  406. --------S-141A-------------------------------
  407. INT 14 - FOSSIL - BREAK BEGIN OR END
  408.     AH = 1Ah
  409.     AL = 00h stop sending 'break'
  410.          01h start sending 'break'
  411.     DX = port number
  412. SeeAlso: AH=06h"FOSSIL",AH=8Ah,AH=FAh
  413. --------S-141A-------------------------------
  414. INT 14 - Digiboard DigiCHANNEL PC/X - SPECIAL CHARACTER FLAG/COUNTER
  415.     AH = 1Ah
  416.     BX = subfunction
  417.         00h return pointer to special character flag byte
  418.         01h return pointer to special character counter word
  419.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  420. Return: ES:BX -> special character flag or counter
  421. Notes:    flag is FFh if one or more special characters are in the receive
  422.       buffer; it is 00h and the counter is invalid if no special characters
  423.       are in the receive buffer
  424.     counter (if valid) contains the number of characters in the receive
  425.       buffer up to and including the last-received special character
  426. --------S-141B-------------------------------
  427. INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER
  428.     AH = 1Bh
  429.     DX = port number
  430.     CX = size of user buffer
  431.     ES:DI -> user buffer for driver info (see below)
  432. Return: AX = number of characters transferred
  433.     CX = 3058h ("0X") (X00 FOSSIL only)
  434.     DX = 2030h (" 0") (X00 FOSSIL only)
  435.  
  436. Format of driver info:
  437. Offset    Size    Description
  438.  00h    WORD    size of structure in bytes
  439.  02h    BYTE    FOSSIL spec driver conforms to
  440.  03h    BYTE    revision level of this specific driver
  441.  04h    DWORD    pointer to ASCIZ identification string
  442.  08h    WORD    size of the input buffer
  443.  0Ah    WORD    number of bytes left in buffer
  444.  0Ch    WORD    size of the output buffer
  445.  0Eh    WORD    number of bytes left in buffer
  446.  10h    BYTE    width of screen
  447.  11h    BYTE    length of screen
  448.  12h    BYTE    actual baud rate, computer to modem
  449. --------S-141C-------------------------------
  450. INT 14 - X00 FOSSIL - ACTIVATE PORT
  451.     AH = 1Ch
  452.     DX = port number
  453. Return: AX = 1954h if successful
  454.     BL = maximum function number supported (not including 7Eh and above)
  455.     BH = revision of FOSSIL specification supported
  456. Note:    this is a duplicate of AH=04h, so that AH=04h may be made compatible
  457.       with the PS/2 BIOS in a future release
  458. SeeAlso: AH=04h"FOSSIL",AH=1Dh
  459. --------S-141D-------------------------------
  460. INT 14 - X00 FOSSIL - DEACTIVATE PORT
  461.     AH = 1Dh
  462.     DX = port number
  463. Return: none
  464. Notes:    this is a duplicate of AH=05h, so that AH=05h may be made compatible
  465.       with the PS/2 BIOS in a future release
  466.     ignored if the port was never activated with AH=04h or AH=1Ch
  467. SeeAlso: AH=05h"FOSSIL",AH=1Ch
  468. --------S-141E-------------------------------
  469. INT 14 - X00 FOSSIL - EXTENDED LINE CONTROL INITIALIZATION
  470.     AH = 1Eh
  471.     AL = break status
  472.         00h if break
  473.         01h if no break
  474.     BH = parity (see below)
  475.     BL = number of stop bits
  476.         00h one stop bit
  477.         01h two stop bits (1.5 if 5 bit word length)
  478.     CH = word length (see below)
  479.     CL = bps rate (see below)
  480.     DX = port number
  481. Return: AX = port status code (see AH=00h)
  482. Notes:    this function is intended to exactly emulate the PS/2 BIOS AH=04h call
  483.     if the port was locked at X00 load time, the appropriate parameters are
  484.       ignored
  485. SeeAlso: AH=00h,AH=04h"SERIAL I/O"
  486.  
  487. Values for parity:
  488.  00h    no parity
  489.  01h    odd parity
  490.  02h    even parity
  491.  03h    stick parity odd
  492.  04h    stick parity even
  493.  
  494. Values for word length:
  495.  00h    5 bits
  496.  01h    6 bits
  497.  02h    7 bits
  498.  03h    8 bits
  499.  
  500. Values for bps rate:
  501.  00h    110
  502.  01h    150
  503.  02h    300
  504.  03h    600
  505.  04h    1200
  506.  05h    2400
  507.  06h    4800
  508.  07h    9600
  509.  08h    19200
  510. --------S-101E------------------------------------
  511. INT 10 - HUNTER 16 - READ COMMS PARAMETERS
  512.     AH = 1Eh
  513.     CX = channel number (00h COM1, 01h COM2, ...)
  514.     DS:BX -> buffer for communications parameters (see below)
  515. Return: DS:BX buffer filled
  516. Note:    the Husky Hunter 16 is an 8088-based ruggedized laptop.     Other family
  517.       members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
  518. SeeAlso: AH=20h"HUNTER"
  519.  
  520. Format of communications parameters:
  521. Offset    Size    Description
  522.  00h    BYTE    communications type (00h IBM, nonzero Husky)
  523.  01h    BYTE    port number (00h COM1, 01h COM2)
  524.  02h    BYTE    baud rate (00h 110 bps, 01h 150, 02h 300, 03h 600, 04h 1200,
  525.         05h 2400, 06h 4800, 07h 9600, 08h 19200, 09h 38400)
  526.  03h    BYTE    data bits (01h seven, 02h eight)
  527.  04h    BYTE    parity (00h none, 01h odd, 02h even)
  528.  05h    BYTE    stop bits (00h one, 01h two)
  529.  06h    BYTE    handshake
  530.         bits 0-1  0: RTS off, 1: RTS hold, 2: RTS true
  531.         bit    2  DTR enabled
  532.         bit    4  CTS enabled
  533.         bit    5  DSR enabled
  534.         bit    6  DCD enabled
  535.  07h    BYTE    handshake protocol (00h none, 01h Xon/Xoff, 02h HWK3780)
  536.  08h    BYTE    Nulls after CR (0-20)
  537.  09h    BYTE    LF (00h off, 01h on)
  538.  0Ah    BYTE    Serig. 0..7Fh: Ignore this character
  539.                80h: Serig off
  540.  0Bh    BYTE    echo (00h off, 01h on)
  541.  0Ch    BYTE    transmit timeout in seconds (1-60) or 00h to disable
  542.  0Dh    BYTE    receive timeout in seconds (1-60) or 00h to disable
  543.  0Eh  5 BYTEs    reserved
  544. --------S-141F-------------------------------
  545. INT 14 - X00 FOSSIL - EXTENDED SERIAL PORT STATUS/CONTROL
  546.     AH = 1Fh
  547.     AL = 00h read modem control register
  548.           Return: BL = modem control register (see below)
  549.               AH = status
  550.     AL = 01h write modem control register
  551.           BL = modem control register (see below)
  552.           Return: AX = status
  553.     DX = port number
  554. Notes:    this function is intended to exactly emulate the PS/2 BIOS AH=05h call
  555.     X00 forces BL bit 3 set (interrupts cannot be disabled)
  556. SeeAlso: AH=00h,AH=05h"SERIAL I/O"
  557.  
  558. Bitfields for modem control register:
  559.  bit 0    data terminal ready
  560.  bit 1    request to send
  561.  bit 2    OUT1
  562.  bit 3    OUT2 (interrupts) enabled
  563.  bit 4    LOOP
  564.  bits 5-7 reserved
  565. --------S-1420-------------------------------
  566. INT 14 - X00 FOSSIL - DESTRUCTIVE READ WITH NO WAIT
  567.     AH = 20h
  568.     DX = port number
  569. Return: AH = 00h if character was available
  570.         AL = next character (removed from receive buffer)
  571.     AX = FFFFh if no character available
  572. SeeAlso: AH=0Ch,AH=21h"X00"
  573. --------S-1420-------------------------------
  574. INT 14 - Alloy MW386 - ATTACH LOGICAL COMMUNICATIONS PORT TO PHYSICAL PORT
  575.     AH = 20h
  576.     AL = logical port (01h COM1, 02h COM2)
  577.     DX = physical port number
  578. Return: AX = status
  579.         0000h successful
  580.         FFFFh failed
  581. SeeAlso: AH=21h"Alloy",AH=22h"Alloy",AH=23h"Alloy",INT 17/AH=8Bh"Alloy"
  582. --------S-1420-------------------------------
  583. INT 14 - MultiDOS Plus - INITIALIZE PORT
  584.     AH = 20h
  585.     AL = port parameters (see AH=00h"SERIAL")
  586.     DX = port number (0-3)
  587. Return: AH = status
  588.         00h successful
  589.         41h no such port
  590.         64h monitor mode already active
  591. SeeAlso: AH=00h"SERIAL",AH=04h"MultiDOS",AH=21h"MultiDOS",AH=23h"MultiDOS"
  592. --------S-1420-------------------------------
  593. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - CHECK OUTPUT QUEUE
  594.     AH = 20h
  595.     DX = port number
  596. Return: AX = number of bytes in output buffer
  597. SeeAlso: AH=0Ah"PC-MOS"
  598. --------S-1020------------------------------------
  599. INT 10 - HUNTER 16 - SELECT COMMS PARAMETERS
  600.     AH = 20h
  601.     CX = channel number (00h COM1, 01h COM2, ...)
  602.     DS:BX -> buffer with communications parameter (see AH=1Eh"HUNTER")
  603. Return: AX = status
  604.         0000h successful
  605.         0001h invalid parameter
  606. SeeAlso: AH=1Eh"HUNTER",AH=21h"HUNTER"
  607. --------S-1421-------------------------------
  608. INT 14 - X00 FOSSIL - STUFF RECEIVE BUFFER
  609.     AH = 21h
  610.     AL = character
  611.     DX = port number
  612. Notes:    the given character is inserted at the end of the receive buffer as if
  613.       it had just arrived from the serial port; all normal receive
  614.       processing (XON/XOFF, ^C/^K) is performed on the character
  615.     fully re-entrant
  616. SeeAlso: AH=20h"X00"
  617. --------S-1421-------------------------------
  618. INT 14 - Alloy MW386 v1.x only - RELEASE PHYSICAL COMMUNICATIONS PORT
  619.     AH = 21h
  620.     DX = physical port number
  621. Return: AX = status
  622.         0000h successful
  623.         FFFFh failed
  624. SeeAlso: AH=20h"Alloy",AH=22h"Alloy"
  625. --------S-1421-------------------------------
  626. INT 14 - MultiDOS Plus - TRANSMIT CHARACTER
  627.     AH = 21h
  628.     AL = character to send
  629.     DX = port number
  630. Return: AH = status (see below)
  631. Note:    monitor mode must have been turned on with AH=24h before calling
  632. SeeAlso: AH=20h"MultiDOS",AH=22h"MultiDOS",AH=24h"MultiDOS"
  633.  
  634. Values for status:
  635.  00h    successful
  636.  39h    no DSR or CTS
  637.  3Ch    no DSR
  638.  3Bh    no CTS
  639.  41h    no such port
  640.  42h    monitor mode not active
  641.  97h    timed out
  642. --------S-1421-------------------------------
  643. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - OUTPUT CHARACTER, WITH TIMEOUT
  644.     AH = 21h
  645.     AL = char to send
  646.     DX = port number
  647.     SI = timeout in timer ticks (0000h = default)
  648. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  649.       operating system by The Software Link, Inc.
  650. SeeAlso: AH=01h,AH=0Eh"PC/MOS",AH=22h"PC-MOS"
  651. --------S-1021------------------------------------
  652. INT 10 - HUNTER 16 - EXTENDED CONTROL
  653.     AH = 21h
  654.     AL = command
  655.         01h force transmission of buffer
  656.         02h clear transmit buffer
  657.         03h clear receive buffer
  658.     DX = port (00h COM1, 01h COM2)
  659. Return: AH = extended status
  660. Desc:    executes the command on the selected port
  661. SeeAlso: AH=1Eh"HUNTER",AH=20h"HUNTER",AH=22h"HUNTER",AH=24h"HUNTER"
  662. --------S-1422-------------------------------
  663. INT 14 - Alloy MW386 v2+ - RELEASE LOGICAL COMMUNICATIONS PORT
  664.     AH = 22h
  665.     AL = logical port (01h COM1, 02h COM2)
  666. Return: AX = status (0000h successful)
  667. SeeAlso: AH=20h"Alloy",AH=21h"Alloy"
  668. --------S-1422-------------------------------
  669. INT 14 - MultiDOS Plus - RECEIVE CHARACTER
  670.     AH = 22h
  671.     DX = port number
  672. Return: AH = status (see also AH=21h"MultiDOS")
  673.         00h successful
  674.         AL = character
  675.         3Dh framing and parity error
  676.         3Eh overrun error
  677.         3Fh framing error
  678.         40h parity error
  679.         96h ring buffer overflow
  680. Note:    if no character is available, this function waits until a character
  681.       arrives or an implementation-dependent timeout elapses
  682. SeeAlso: AH=20h"MultiDOS",AH=21h"MultiDOS",AH=27h
  683. --------S-1422-------------------------------
  684. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - RECEIVE CHARACTER, WITH TIMEOUT
  685.     AH = 22h
  686.     DX = port number
  687.     SI = timeout in timer ticks (0000h = default)
  688. Return: AH = port status (see AH=03h bits 0..6)
  689.          bit 7 = 1 indicates time-out
  690.     AL = character received
  691. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  692.       operating system by The Software Link, Inc.
  693. SeeAlso: AH=02h,AH=0Fh"PC-MOS",AH=21h"PC-MOS"
  694. --------S-1022------------------------------------
  695. INT 10 - HUNTER 16 - EXTENDED STATUS
  696.     AH = 22h
  697.     DX = port (00h COM1, 01h COM2)
  698. Return: AH = extended status
  699.     BX = number of characters in input buffer
  700.     CX = number of characters in output buffer
  701. Desc:    returns the most recent Extended Status code for the port
  702. SeeAlso: AH=21h"HUNTER"
  703. --------S-1423-------------------------------
  704. INT 14 - Alloy MW386 v2+ - GET PORT NUMBER FROM LOGICAL PORT ID
  705.     AH = 23h
  706.     AL = logical port (01h COM1, 02h COM2)
  707.     DH = user ID
  708.     DL = process ID (DH,DL both FFh for current task)
  709. Return: AL = MW386 port mode (see below)
  710.     CX = MW386 port number
  711.     DH = owner's user ID
  712.     DL = owner's task ID
  713. SeeAlso: AH=20h"Alloy",INT 17/AH=8Bh"Alloy"
  714.  
  715. Bitfields for MW386 port mode:
  716.  bit 0    port is shared (spooler only)
  717.  bit 1    port is spooled instead of direct (spooler only)
  718.  bit 2    port is assigned as logical COM device, not in spooler
  719.  bit 3    port is free
  720. --------S-1423-------------------------------
  721. INT 14 - MultiDOS Plus - GET PORT STATUS
  722.     AH = 23h
  723.     DX = port number
  724. Return: AH = line status (see AH=03h)
  725.     AL = modem status (see AH=03h)
  726. SeeAlso: AH=03h,AH=07h"MultiDOS",AH=20h"MultiDOS"
  727. --------S-1423-------------------------------
  728. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - DECLARE PORT OWNERSHIP
  729.     AH = 23h
  730.     DX = port number
  731.     BX = TCB segment/selector address of owner task
  732. Return: nothing
  733. SeeAlso: AH=0Dh"PC-MOS"
  734. --------S-1023------------------------------------
  735. INT 10 - HUNTER 16 - CONTROL HANDSHAKE LINES
  736.     AH = 23h
  737.     BH = handshake line to set (00h RTS, 01h DTR)
  738.     BL = new level (00h low, 01h high)
  739. Desc:    sets the handshake lines of COM1 to the desired level
  740. SeeAlso: AH=21h"HUNTER",AH=24h"HUNTER"
  741. --------S-1424-------------------------------
  742. INT 14 - Alloy MW386 v2+ - CHANGE PHYSICAL PORT PARAMETERS
  743.     AH = 24h
  744.     CX = physical I/O port number
  745.     DS:DX -> configuration table (see below)
  746. Return: AH = 00h
  747. Note:    invalid port numbers are merely ignored
  748. SeeAlso: INT 17/AH=96h
  749.  
  750. Format of configuration table:
  751. Offset    Size    Description
  752.  00h    BYTE    baud rate (see below)
  753.  01h    BYTE    data bits (00h=5, 01h=6, 02h=7, 03h=8)
  754.  02h    BYTE    parity (00h none, 01h odd, 02h even)
  755.  03h    BYTE    stop bits (00h=1, 01h=2)
  756.  04h    BYTE    receive flow control
  757.         00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC, 04h RTS/CTS
  758.  05h    BYTE    transmit flow control (as for receive)
  759.  
  760. Values for baud rate:
  761.  00h    38400
  762.  01h    19200
  763.  02h    9600
  764.  03h    7200
  765.  04h    4800
  766.  05h    3600
  767.  06h    2400
  768.  07h    2000
  769.  08h    1200
  770.  09h    600
  771.  0Ah    300
  772.  0Bh    150
  773.  0Ch    134.5
  774. --------S-1424-------------------------------
  775. INT 14 - MultiDOS Plus - SET MONITOR MODE
  776.     AH = 24h
  777.     AL = port status storage
  778.         00h single status for entire receive buffer
  779.         01h separate status kept for each byte in receive buffer
  780.     DX = port number
  781. Return: AH = status
  782.         00h successful
  783.         3Ah invalid status storage specified
  784.         41h no such port
  785.         64h monitor mode already active
  786. Note:    in monitor mode, MultiDOS redirects all BIOS video output to a serial
  787.       port
  788. SeeAlso: AH=20h"MultiDOS",AH=25h
  789. --------S-1424-------------------------------
  790. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - ???
  791.     AH = 24h
  792. Return: ???
  793. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  794.       operating system by The Software Link, Inc.
  795. --------S-1024------------------------------------
  796. INT 10 - HUNTER 16 - CONTROL CTS HANDSHAKING
  797.     AH = 24h
  798.     AL = new CTS handshake state for COM1 (00h disabled, 01h enabled)
  799. SeeAlso: AH=23h"HUNTER",AH=25h"HUNTER",AH=26h"HUNTER"
  800. --------S-1425-------------------------------
  801. INT 14 - MultiDOS Plus - CLEAR BUFFERS
  802.     AH = 25h
  803.     AL = function
  804.         00h only clear buffers
  805.         01h clear buffers and deactivate
  806.     DX = port number
  807. Return: AH = status
  808.         00h successful
  809.         3Ah invalid function
  810.         41h no such port
  811.         42h monitor mode not active
  812. SeeAlso: AH=20h"MultiDOS",AH=24h"MultiDOS"
  813. --------S-1025------------------------------------
  814. INT 10 - HUNTER 16 - CONTROL RS232 DRIVERS
  815.     AH = 25h
  816.     AL = new state of RS232 drivers (00h off, 01h on)
  817. Note:    this function can be used to save power by turning off the RS232 
  818.       drivers.  It can also be used to turn on the RS232 drivers before
  819.       connecting to a remote system to avoid "garbage" while the drivers
  820.       turn on.
  821. SeeAlso: AH=23h"HUNTER",AH=24h"HUNTER",AH=26h"HUNTER"
  822. --------S-1026------------------------------------
  823. INT 10 - HUNTER 16 - CONTROL RI POWER UP
  824.     AH = 26h
  825.     AL = 00h enable RI power up
  826.         else disable RI power up
  827. Desc:    control whether the Ring Indicator handshake can power up the Hunter
  828. --------S-1427-------------------------------
  829. INT 14 - MultiDOS Plus - GET BUFFER CHARACTER COUNT
  830.     AH = 27h
  831.     DX = port number
  832. Return: AH = status
  833.         00h successful
  834.         41h no such port
  835.         42h monitor mode not active
  836.     AL = number of characters in receive buffer
  837. --------S-1027------------------------------------
  838. INT 10 - HUNTER 16 - GET INSTALLED PROTOCOLS COUNT
  839.     AH = 27h
  840.     AL = number of extended protocols installed (since last call)
  841. Return: AL = total number installed, including new ones
  842. Desc:    Returns the number of extended communication protocols installed
  843. SeeAlso: AH=25h"HUNTER",AH=28h"HUNTER"
  844. --------S-1028------------------------------------
  845. INT 10 - HUNTER 16 - GET PROTOCOL NAME
  846.     AH = 28h
  847.     AL = protocol handle
  848.     DS:BX -> 8 character buffer for protocol name
  849. Return:    AH = status
  850.         00h successful
  851.         DS:BX buffer filled with the protocol name
  852.         FFh failed
  853. SeeAlso: AH=27h"HUNTER",AH=29h"HUNTER"
  854. --------S-1029------------------------------------
  855. INT 10 - HUNTER 16 - GET PROTOCOL HANDLE
  856.     AH = 29h
  857.     DS:BX -> buffer containing the protocol name
  858. Return: AH = status 
  859.         00h successful
  860.         AL = handle
  861.         FFh failed
  862. SeeAlso: AH=28h"HUNTER",AH=2Ah"HUNTER"
  863. --------S-102A------------------------------------
  864. INT 10 - HUNTER 16 - EXTENDED PROTOCOL MENU
  865.     AH = 2Ah
  866.     AL = protocol handle
  867. Return: AH = status
  868.         00h successful
  869.         FFh failed
  870.     AL = menu handle
  871. SeeAlso: AH=29h"HUNTER",AH=2Bh"HUNTER"
  872. --------S-102B------------------------------------
  873. INT 10 - HUNTER 16 - GET EXTENDED PROTOCOL PARAMETERS
  874.     AH = 2Bh
  875.     AL = protocol handle
  876.     DS:BX -> buffer for extended protocol parameters
  877. Return: AH = status    
  878.         00h successful
  879.         DS:BX buffer filled with extended parameters
  880.         FFh failed
  881. SeeAlso: AH=2Ah"HUNTER"
  882. --------S-102C00----------------------------------
  883. INT 10 - HUNTER 16 - GET DTR
  884.     AX = 2C00h
  885. Return: AH = 00h
  886.     BL = current state
  887.         00h     normal DTR operation
  888.         else DTR is forced high
  889. Desc:    Indicates whether the DTR signal on COM1 is forced high
  890. Note:    the Husky Hunter 16 is an 8088-based ruggedized laptop.     Other family
  891.       members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
  892. SeeAlso: AH=2Ch"SET DTR"
  893. --------S-102C------------------------------------
  894. INT 10 - HUNTER 16 - SET DTR
  895.     AH = 2Ch
  896.     AL nonzero
  897.     BL = new state
  898.         00h     normal operation
  899.         else force DTR high
  900. Return: AH = 00h
  901. Desc:    determine whether the DTR signal on COM1 should be forced high
  902. SeeAlso: AX=2C00h
  903. --------S-1456-------------------------------
  904. INT 14 U - BWCOM14 - INSTALLATION CHECK
  905.     AH = 56h
  906. Return: CX = 0001h if installed
  907. Program: BWCOM14 is a network serial port emulator (simulating a Hayes modem
  908.       connected to the serial port) distributed as part of the
  909.       Beame&Whiteside BW-NFS package
  910. SeeAlso: AH=57h,AH=58h
  911. --------S-1457-------------------------------
  912. INT 14 U - BWCOM14 - INITIALIZE
  913.     AH = 57h
  914.     DL = port number
  915. Return: AL = initialization status (00h successful, 01h already initialized)
  916.     CX = port status (0001h port redirected, 0002h and FFFFh failed)
  917. Note:    after this call, all invocations of INT 14/AH=00h-03h for the specified
  918.       port will be handled by BWCOM14 until AH=58h is called
  919. SeeAlso: AH=00h"SERIAL",AH=56h,AH=58h
  920. --------S-1458-------------------------------
  921. INT 14 U - BWCOM14 - SHUTDOWN
  922.     AH = 58h
  923. Return: CX = status (0001h successful, 0002h not initialized)
  924. Note:    after this call, BWCOM14 will no longer redirect the COM port
  925. SeeAlso: AH=56h,AH=57h
  926. --------N-146F--BXFFFE-----------------------
  927. INT 14 U - Connection Manager - ???
  928.     AH = 6Fh
  929.     BX = FFFEh
  930.     ???
  931. Return: ???
  932. Program: Connection Manager by Softwarehouse Corp. permits the sharing of
  933.       serial ports over an IPX or NetBIOS-based network
  934. --------N-146F--BXFFFF-----------------------
  935. INT 14 - Connection Manager - INSTALLATION CHECK
  936.     AH = 6Fh
  937.     BX = FFFFh
  938. Return: DX:BX -> Connection Manager Communication Table if installed
  939.     BX = FFFFh if not installed
  940. SeeAlso: AH=0Dh/DX=FFFFh
  941. --------S-147E-------------------------------
  942. INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION
  943.     AH = 7Eh
  944.     AL = code assigned to external application (80h-BFh)
  945.         80h reserved for communications FOSSIL
  946.         81h video FOSSIL
  947.         82h reserved for keyboard FOSSIL
  948.         83h reserved for system FOSSIL
  949.     ES:DX -> entry point
  950. Return: AX = 1954h
  951.     BL = code assigned to application (same as input AL)
  952.     DH = 00h failed
  953.          01h successful
  954. SeeAlso: AH=7Fh,AH=80h"FOSSIL",AX=8100h,AH=82h"FOSSIL",AH=83h"FOSSIL"
  955. --------S-147F-------------------------------
  956. INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION
  957.     AH = 7Fh
  958.     AL = code assigned to external application
  959.     ES:DX -> entry point
  960. Return: AX = 1954h
  961.     BL = code assigned to application (same as input AL)
  962.     DH = 00h failed
  963.          01h successful
  964. SeeAlso: AH=7Eh
  965. --------S-1480-------------------------------
  966. INT 14 - COMMUNICATIONS FOSSIL
  967.     AH = 80h
  968. SeeAlso: AH=7Eh
  969. --------S-1480-------------------------------
  970. INT 14 - COURIERS.COM - INSTALLATION CHECK
  971.     AH = 80h
  972. Return: AH = E8h if loaded
  973. Program: COURIERS is a TSR utility by PC Magazine
  974. --------S-148000-----------------------------
  975. INT 14 - ARTICOM - INSTALLATION CHECK
  976.     AX = 8000h
  977. Return: AL = FFh if installed
  978.         BH = major version
  979.         BL = minor version
  980. Program: ArtiCom is an asynchronous communications driver by Artisoft which
  981.       works on top of NetBIOS and allows modem/serial-port sharing by
  982.       programs using INT 14 for serial I/O.
  983. Note:    ArtiCom supports 32 simultaneous COM ports using multiport cards and
  984.       drivers
  985. SeeAlso: AH=00h,AH=01h,AH=02h,AH=03h,AH=04h,AH=05h,AX=8001h,AX=8002h
  986. --------S-148001-----------------------------
  987. INT 14 - ARTICOM - UNLOAD ASYNCHRONOUS REDIRECTOR FROM MEMORY
  988.     AX = 8001h
  989. Return: AX = error code, if error (see AX=8003h)
  990. SeeAlso: AX=8000h,AX=8002h,AX=8003h
  991. Index:    uninstall;ARTICOM
  992. --------S-148002-----------------------------
  993. INT 14 - ARTICOM - GET ASYNCHRONOUS REDIRECTOR STATUS
  994.     AX = 8002h
  995.     ES:DI -> buffer for redirector status structure (see below)
  996. Return: AX = error code, if error (see AX=8003h)
  997. SeeAlso: AX=8000h,AX=8003h
  998.  
  999. Format of redirector status:
  1000. Offset    Size    Description
  1001.  00h    WORD    redirector major and minor version numbers
  1002.  02h    WORD    redirectable ports found
  1003.  04h    WORD    redirectable ports + local ports found
  1004.  06h    WORD    redirector internal buffer size
  1005.  08h    WORD    maximum servers maintained
  1006.  0Ah    WORD    number of adapters found
  1007. --------S-148003-----------------------------
  1008. INT 14 - ARTICOM - TRANSLATE ERROR CODE TO ERROR STRING
  1009.     AX = 8003h
  1010.     CX = error number to translate
  1011. Return: ES:DI -> ASCIZ error text or NULL if can't translate.
  1012. SeeAlso: AX=8000h
  1013.  
  1014. Values for error codes:
  1015.  00h    "No error"
  1016.  01h    "An invalid port number was specified"
  1017.  02h    "Port is already redirected"
  1018.  03h    "Too many ports redirected"
  1019.  04h    "Cannot locate the server"
  1020.  05h    "Server is busy"
  1021.  06h    "Access denied"
  1022.  07h    "Resource in use"
  1023.  08h    "Resource in use - request queued"
  1024.  09h    "No such resource"
  1025.  0Ah    "Invalid username/password pair"
  1026.  0Bh    "Noncompatible version number"
  1027.  0Ch    "Can't remove from memory"
  1028.  0Dh    "Bad NETBIOS adapter number"
  1029.  0Eh    "No more entries in list"
  1030.  0Fh    "Resource is not available at this time"
  1031.  10h    "Invalid value to INT 14 call"
  1032. --------S-148004-----------------------------
  1033. INT 14 - ARTICOM - ATTACH ASYNCHRONOUS RESOURCE
  1034.     AX = 8004h
  1035.     DX = port to redirect (COM1=0, COM2=1, ...)
  1036.     CH = attach type
  1037.     CL = adapter to use for attach, 0FFh to search all
  1038.     ES:DI -> attachment structure (see below)
  1039. Return: AX = error code, if error (see AX=8003h)
  1040. Note:    The wildcard '*' is supported in the server and resource fields.  If
  1041.       wild cards are used then the first matching available server is
  1042.       attached.
  1043. SeeAlso: AX=8000h,AX=8003h,AX=8005h
  1044.  
  1045. Format of attachment structure:
  1046. Offset    Size    Description
  1047.  00h 16 BYTEs    server to look for attach
  1048.  10h 16 BYTEs    attach to resource name
  1049.  20h 16 BYTEs    username for attach
  1050.  30h 16 BYTEs    password for username or resource
  1051.  40h    BYTE    attach type
  1052.         00h normal
  1053.         01h queue if resource is in use (not yet supported in v1.00)
  1054. --------S-148005-----------------------------
  1055. INT 14 - ARTICOM - DETACH ASYNCHRONOUS RESOURCE
  1056.     AX = 8005h
  1057.     DX = port to detach (COM1=0, COM2=1, ...)
  1058. Return: AX = error code, if error (see AX=8003h)
  1059. Note:    only a previously attached resource can be detached
  1060. SeeAlso: AX=8000h,AX=8003h,AX=8004h
  1061. --------S-148006-----------------------------
  1062. INT 14 - ARTICOM - GET RESOURCE INFORMATION
  1063.     AX = 8006h
  1064.     BX = remote port (COM1=0, COM2=1, ...)
  1065.     CL = adapter number, FFh to try all adapters
  1066.     ES:DI -> resource information structure (see below)
  1067.     DS:SI -> 16 byte server name. See note.
  1068. Return: AX = error code, if error (see AX=8003h)
  1069.     BX = next remote port, recall to get next resource info
  1070. Note:    Wild cards supported in both the resource field and server name
  1071.     string DS:SI. If wild cards used then first matching available
  1072.     resource information is searched. Set the resource field to FFh to
  1073.     return all resources.
  1074. SeeAlso: AX=8000h,AX=8002h,AX=8003h,AX=8007h
  1075.  
  1076. Format of resource information structure:
  1077. Offset    Size    Description
  1078.  00h    BYTE    00h = free, else used
  1079.  01h 16 BYTEs    resource name
  1080.  11h 16 BYTEs    username of resource user
  1081.  21h    WORD    amount of time used
  1082.  23h    WORD    amount of time remaining
  1083.  53h 48 BYTEs    description of resource
  1084.  93h 64 BYTEs    initialization string for modem
  1085.  B3h 32 BYTEs    dial string for modem
  1086.  D3h 32 BYTEs    hang-up string for modem
  1087. --------S-148007-----------------------------
  1088. INT 14 - ARTICOM - GET REDIRECTED PORT INFORMATION
  1089.     AX = 8007h
  1090.     DX = port index (COM1=0, COM2=1, ...)
  1091.     ES:DI -> buffer for port information structure (see below)
  1092. Return: CF clear if redirection info returned and port is redirected
  1093.     CF set if not a redirected port
  1094.     AX = error code, if error (see AX=8003h)
  1095. SeeAlso: AX=8000h,AX=8003h,AX=8006h,AX=8008h
  1096.  
  1097. Format of port information structure:
  1098. Offset    Size    Description
  1099.  00h 16 BYTEs    server name resource is on
  1100.  10h    BYTE    adapter number server is on
  1101.  11h 16 BYTEs    resource name
  1102.  21h    WORD    remote port index, use to get additional information
  1103.  23h    WORD    buffer size
  1104.  25h    WORD    baud rate (see below)
  1105.  26h    BYTE    modem status register
  1106.  27h    BYTE    modem control register
  1107.  28h    BYTE    line status register
  1108.  29h    BYTE    line control register
  1109.  2Ah    BYTE    flow control in use: 0 - NONE, 1 - XON/XOFF, 2 - RTS/CTS
  1110.  2Bh    WORD    send timeout in ticks
  1111.  2Dh    WORD    receive timeout in ticks
  1112.  2Fh    WORD    time used on remote port
  1113.  31h    WORD    time left before timeout
  1114.  33h    BYTE    if server changes allowed?
  1115.  34h    WORD    FFFFh (-1) if connection ok, else old port index
  1116.  
  1117. Values for baud rate:
  1118.  00h    110
  1119.  01h    150
  1120.  02h    300
  1121.  03h    600
  1122.  04h    1200
  1123.  05h    2400
  1124.  06h    4800
  1125.  07h    9600
  1126.  08h    19200
  1127.  09h    38400
  1128.  0Ah    57600
  1129.  0Bh    115200
  1130.  0Ch    134.5
  1131.  0Dh    1800
  1132.  0Eh    2000
  1133.  0Fh    3600
  1134.  10h    7200
  1135. --------S-148008-----------------------------
  1136. INT 14 - ARTICOM - GET AVAILABLE SERVER NAME
  1137.     AX = 8008h
  1138.     BX = server index (0,1,...)
  1139.     ES:DI -> server name structure (see below)
  1140. Return: AX = error code, if error (see AX=8003h)
  1141.     BX = next remote port, repeat call to get next available server
  1142. Note:    the wildcard '*' is supported in the server name field.     Set the
  1143.       server name to FFh to search for all servers.
  1144. SeeAlso: AX=8000h,AX=8003h,AX=8007h
  1145.  
  1146. Format of server name structure:
  1147. Offset     Size      Description
  1148.   00h 16 BYTEs      (call) ASCIZ server name
  1149.   10h     BYTE      (return) the adapter server is found
  1150. --------S-148009-----------------------------
  1151. INT 14 - ARTICOM - SET SEND AND RECEIVE TIMEOUTS
  1152.     AX = 8009h
  1153.     BX = send timeout in ticks
  1154.     CX = receive timeout in ticks
  1155.     DX = port index (COM1=0, COM2=1, ...)
  1156. Return: nothing
  1157. SeeAlso: AX=8000h,AX=800Ah
  1158. --------S-14800A-----------------------------
  1159. INT 14 - ARTICOM - MODIFY FLOW CONTROL
  1160.     AX = 800Ah
  1161.     BL = flow control type (00h none, 01h XON/XOFF, 02h RTS/CTS)
  1162.     DX = port index (COM1=0, COM2=1, ...)
  1163. Return: AX = error code, if error (see AX=8003h)
  1164. Note:    for attached ports only!
  1165. SeeAlso: AX=8000h,AX=8003h,AX=8009h
  1166. --------S-148025-----------------------------
  1167. INT 14 - ARTICOM - SET INTERNAL SEND/RECEIVE VECTOR
  1168.     AX = 8025h
  1169.     DS:DX -> address of trap function (see below) to call on read/write
  1170. Note:    setting the vector to a user function allows the redirector's activity
  1171.       to be monitored.
  1172. SeeAlso: AX=8000h,AX=8035h,INT 21/AH=25h
  1173.  
  1174. Trap function called with:
  1175.     AH = operation
  1176.         80h reading character
  1177.         81h writing character
  1178.     AL = character
  1179.     Return: AX must be preserved
  1180.         far JUMP to old trap function (see AX=8035h)
  1181. --------S-148035-----------------------------
  1182. INT 14 - ARTICOM - GET INTERNAL SEND/RECEIVE VECTOR
  1183.     AX = 8035h
  1184. Return: ES:BX -> address of current send/receive routine
  1185. Note:    this function returns the address of the routine which is called
  1186.       inside A-REDIR.EXE each time a character is received or sent on the
  1187.       active COM port.
  1188. SeeAlso: AX=8000h,AX=8025h,INT 21/AH=35h
  1189. --------S-1481-------------------------------
  1190. INT 14 - COURIERS.COM - CHECK IF PORT BUSY
  1191.     AH = 81h
  1192.     AL = port number (1-4)
  1193. Return: AH = 00h port available
  1194.          01h port exists but already in use
  1195.          02h port nonexistent
  1196. Program: COURIERS is a TSR utility by PC Magazine
  1197. SeeAlso: AH=83h,AH=8Dh
  1198. --------S-1481-------------------------------
  1199. INT 14 - Egberto Willies COMM-DRV - EXTENDED INITIALIZATION
  1200.     AH = 81h
  1201.     BX:DI -> port control block
  1202. Return: ???
  1203. SeeAlso: AH=00h
  1204.  
  1205. Format of port control block:
  1206. Offset    Type    Description
  1207.  00h    WORD    port IO address
  1208.  02h    WORD    port IRQ
  1209.  04h    WORD    baud rate
  1210.  06h    WORD    parity
  1211.  08h    WORD    data bits
  1212.  0Ah    WORD    stop bits
  1213.  0Ch    WORD    break status
  1214.         0000h off
  1215.  0Eh    WORD    flow control protocol
  1216.  10h    BYTE    input block
  1217.  11h    BYTE    output block
  1218.  12h    WORD    low threshold
  1219.  14h    WORD    high threshold
  1220.  16h    WORD    segment of buffer
  1221.  18h    WORD    offset of buffer
  1222.  1Ah    WORD    input buffer length
  1223.  1Ch    WORD    output buffer length
  1224.  1Eh    BYTE    auxiliary address
  1225.  1Fh    BYTE    spare
  1226.  20h  4 WORDs    spares
  1227. --------V-148100-----------------------------
  1228. INT 14 - VIDEO FOSSIL - RETURN VFOSSIL INFORMATION
  1229.     AX = 8100h
  1230.     ES:DI -> buffer for VFOSSIL information (see below)
  1231. Return: AX = 1954h if installed
  1232. SeeAlso: AH=7Eh,AX=8101h
  1233.  
  1234. Format of VFOSSIL information:
  1235. Offset    Size    Description
  1236.  00h    WORD    size of information in bytes, including this field
  1237.  02h    WORD    VFOSSIL major version
  1238.  04h    WORD    VFOSSIL revision level
  1239.  06h    WORD    highest VFOSSIL application function supported
  1240. --------V-148101-----------------------------
  1241. INT 14 - VIDEO FOSSIL - OPEN VFOSSIL
  1242.     AX = 8101h
  1243.     ES:DI -> buffer for application function table (see below)
  1244.     CX = length of buffer in bytes
  1245. Return: AX = 1954h if installed
  1246.         BH = highest VFOSSIL application function supported
  1247. Note:    the number of initialized pointers in the application function table
  1248.       will never exceed CX/4; if the buffer is large enough, BH+1 pointers
  1249.       will be initialized
  1250. SeeAlso: AX=8102h
  1251.  
  1252. Format of application function table:
  1253. Offset    Size    Description
  1254.  00h    DWORD    -> function to query current video mode (VioGetMode)
  1255.  04h    DWORD    -> function to set video mode (VioSetMode)
  1256.  08h    DWORD    -> function to query hardware config (VioGetConfig)
  1257.  0Ch    DWORD    -> function to write data in TTY mode (VioWrtTTY)
  1258.  10h    DWORD    -> function to get current ANSI state (VioGetANSI)
  1259.  14h    DWORD    -> function to set new ANSI state (VioSetANSI)
  1260.  18h    DWORD    -> function to get curr cursor position (VioGetCurPos)
  1261.  1Ch    DWORD    -> function to set cursor position (VioSetCurPos)
  1262.  20h    DWORD    -> function to get cursor shape (VioGetCurType)
  1263.  24h    DWORD    -> function to set cursor shape (VioSetCurType)
  1264.  28h    DWORD    -> function to scroll screen up (VioScrollUp)
  1265.  2Ch    DWORD    -> function to scroll screen down (VioScrollDn)
  1266.  30h    DWORD    -> function to read cell string from screen (VioReadCellStr)
  1267.  34h    DWORD    -> function to read char string from screen (VioReadCharStr)
  1268.  38h    DWORD    -> function to write a cell string (VioWrtCellStr)
  1269.  3Ch    DWORD    -> function to write char string, leaving attr (VioWrtCharStr)
  1270.  40h    DWORD    -> function to write char string,const attr (VioWrtCharStrAttr)
  1271.  44h    DWORD    -> function to replicate an attribute (VioWrtNAttr)
  1272.  48h    DWORD    -> function to replicate a cell (VioWrtNCell)
  1273.  4Ch    DWORD    -> function to replicate a character (VioWrtNChar)
  1274.  
  1275. Format of video mode data structure:
  1276. Offset    Size    Description
  1277.  00h    WORD    length of structure including this field
  1278.  02h    BYTE    mode characteristics
  1279.         bit 0: clear if MDA, set otherwise
  1280.         bit 1: graphics mode
  1281.         bit 2: color disabled (black-and-white)
  1282.  03h    BYTE    number of colors supported (1=2 colors, 4=16 colors, etc)
  1283.  04h    WORD    number of text columns
  1284.  06h    WORD    number of text rows
  1285.  08h    WORD    reserved
  1286.  0Ah    WORD    reserved
  1287.  0Ch    DWORD    reserved
  1288.  
  1289. Format of video configuration data:
  1290. Offset    Size    Description
  1291.  00h    WORD    structure length including this field
  1292.  02h    WORD    adapter type
  1293.         00h monochrome/printer
  1294.         01h CGA
  1295.         02h EGA
  1296.         03h VGA
  1297.         07h 8514/A
  1298.  04h    WORD    display type
  1299.         00h monochrome
  1300.         01h color
  1301.         02h enhanced color
  1302.         09h 8514
  1303.  06h    DWORD    adapter memory size
  1304.  
  1305. Format of cursor type record:
  1306. Offset    Size    Description
  1307.  00h    WORD    cursor start line
  1308.  02h    WORD    cursor end line
  1309.  04h    WORD    cursor width (always 01h)
  1310.  06h    WORD    cursor attribute (FFFFh = hidden)
  1311.  
  1312. Call VioGetMode with:
  1313.     STACK:    WORD    VIO handle (must be 00h)
  1314.         DWORD    pointer to video mode data structure (see above)
  1315. Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see below)
  1316.  
  1317. Values for error code:
  1318.  0000h    successful
  1319.  0074h    internal VIO failure
  1320.  0163h    unsupported mode
  1321.  0166h    invalid row value
  1322.  0167h    invalid column value
  1323.  017Eh    buffer too small
  1324.  01A5h    invalid VIO parameter
  1325.  01B4h    invalid VIO handle
  1326.  
  1327. Call VioSetMode with:
  1328.     STACK:    WORD    VIO handle (must be 00h)
  1329.         DWORD    pointer to video mode data structure (see above)
  1330. Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see above)
  1331.  
  1332. Call VioGetConfig with:
  1333.     STACK:    WORD    VIO handle (must be 00h)
  1334.         DWORD    pointer to video configuration data buffer (see above)
  1335. Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see above)
  1336.  
  1337. Call VioWrtTTY with:
  1338.     STACK:    WORD    VIO handle (must be 00h)
  1339.         WORD    length of string
  1340.         DWORD    pointer to character string to be written to screen
  1341. Return: AX = error code (00h, 74h, 1B4h) (see above)
  1342. Notes:    write wraps at end of line and terminates if it reaches end of screen
  1343.     in ANSI mode, ANSI control sequences are interpreted, and this func is
  1344.       not required to be reentrant; in non-ANSI mode, the function is
  1345.       reentrant and may be called from within an MS-DOS function call
  1346.  
  1347. Call VioGetANSI with:
  1348.     STACK:    WORD    VIO handle (must be 00h)
  1349.         DWORD    pointer to WORD which will be set to 00h if ANSI is off
  1350.             or 01h if ANSI is on
  1351. Return: AX = error code (00h, 74h, 1B4h) (see above)
  1352.  
  1353. Call VioSetANSI with:
  1354.     STACK:    WORD    VIO handle (must be 00h)
  1355.         DWORD    pointer to WORD indicating new state of ANSI
  1356.             00h off
  1357.             01h on
  1358. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  1359.  
  1360. Call VioGetCurPos with:
  1361.     STACK:    WORD    VIO handle (must be 00h)
  1362.         DWORD    pointer to WORD to hold current cursor column (0-based)
  1363.         DWORD    pointer to WORD to hold current cursor row (0-based)
  1364. Return: AX = error code (00h, 74h, 1B4h) (see above)
  1365.  
  1366. Call VioSetCurPos with:
  1367.     STACK:    WORD    VIO handle (must be 00h)
  1368.         WORD    cursor column
  1369.         WORD    cursor row
  1370. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1371. Note:    if either coordinate is invalid, the cursor is not moved
  1372.  
  1373. Call VioGetCurType with:
  1374.     STACK:    WORD    VIO handle (must be 00h)
  1375.         DWORD    pointer to cursor type record (see above)
  1376. Return: AX = error code (00h, 74h, 1B4h) (see above)
  1377.  
  1378. Call VioSetCurType with:
  1379.     STACK:    WORD    VIO handle (must be 00h)
  1380.         DWORD    pointer to cursor type record (see above)
  1381. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  1382.  
  1383. Call VioScrollUp with:
  1384.     STACK:    WORD    VIO handle (must be 00h)
  1385.         DWORD    pointer to char/attr cell for filling emptied rows
  1386.         WORD    number or rows to scroll (FFFFh = clear area)
  1387.         WORD    right column of scroll area
  1388.         WORD    bottom row of scroll area
  1389.         WORD    left column of scroll area
  1390.         WORD    top row of scroll area
  1391. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1392.  
  1393. Call VioScrollDn with:
  1394.     STACK:    WORD    VIO handle (must be 00h)
  1395.         DWORD    pointer to char/attr cell for filling emptied rows
  1396.         WORD    number or rows to scroll (FFFFh = clear area)
  1397.         WORD    right column of scroll area
  1398.         WORD    bottom row of scroll area
  1399.         WORD    left column of scroll area
  1400.         WORD    top row of scroll area
  1401. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1402.  
  1403. Call VioReadCellStr with:
  1404.     STACK:    WORD    VIO handle (must be 00h)
  1405.         WORD    column at which to start reading
  1406.         WORD    row at which to start reading
  1407.         DWORD    pointer to WORD containing length of buffer in bytes
  1408.             on return, WORD contains number of bytes actually read
  1409.         DWORD    pointer to buffer for cell string
  1410. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  1411.  
  1412. Call VioReadCharStr with:
  1413.     STACK:    WORD    VIO handle (must be 00h)
  1414.         WORD    column at which to start reading
  1415.         WORD    row at which to start reading
  1416.         DWORD    pointer to WORD containing length of buffer in bytes
  1417.             on return, WORD contains number of bytes actually read
  1418.         DWORD    pointer to buffer for character string
  1419. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  1420.  
  1421. Call VioWrtCellStr with:
  1422.     STACK:    WORD    VIO handle (must be 00h)
  1423.         WORD    column at which to start writing
  1424.         WORD    row at which to start writing
  1425.         WORD    length of cell string in bytes
  1426.         DWORD    pointer to cell string to write
  1427. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1428. Note:    write wraps at end of line and terminates if it reaches end of screen
  1429.  
  1430. Call VioWrtCharStr with:
  1431.     STACK:    WORD    VIO handle (must be 00h)
  1432.         WORD    column at which to start writing
  1433.         WORD    row at which to start writing
  1434.         WORD    length of character string
  1435.         DWORD    pointer to character string to write
  1436. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1437. Note:    write wraps at end of line and terminates if it reaches end of screen
  1438.  
  1439. Call VioWrtCharStrAttr with:
  1440.     STACK:    WORD    VIO handle (must be 00h)
  1441.         DWORD    pointer to attribute to be applied to each character
  1442.         WORD    column at which to start writing
  1443.         WORD    row at which to start writing
  1444.         WORD    length of character string
  1445.         DWORD    pointer to character string to write
  1446. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1447. Note:    write wraps at end of line and terminates if it reaches end of screen
  1448.  
  1449. Call VioWrtNAttr with:
  1450.     STACK:    WORD    VIO handle (must be 00h)
  1451.         WORD    column at which to start writing
  1452.         WORD    row at which to start writing
  1453.         WORD    number of times to write attribute
  1454.         DWORD    pointer to display attribute to replicate
  1455. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1456. Note:    write wraps at end of line and terminates if it reaches end of screen
  1457.  
  1458. Call VioWrtNCell with:
  1459.     STACK:    WORD    VIO handle (must be 00h)
  1460.         WORD    column at which to start writing
  1461.         WORD    row at which to start writing
  1462.         WORD    number of times to write cell
  1463.         DWORD    pointer to cell to replicate
  1464. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1465. Note:    write wraps at end of line and terminates if it reaches end of screen
  1466.  
  1467. Call VioWrtNChar with:
  1468.     STACK:    WORD    VIO handle (must be 00h)
  1469.         WORD    column at which to start writing
  1470.         WORD    row at which to start writing
  1471.         WORD    number of times to write character
  1472.         DWORD    pointer to character to replicate
  1473. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1474. Note:    write wraps at end of line and terminates if it reaches end of screen
  1475. --------V-148102-----------------------------
  1476. INT 14 - VIDEO FOSSIL - CLOSE VFOSSIL
  1477.     AX = 8102h
  1478. Return: AX = 1954h
  1479. Note:    terminates all operations; after this call, the video FOSSIL may either
  1480.       be removed from memory or reinitialized
  1481. SeeAlso: AX=8101h,AX=8103h
  1482. --------V-148103-----------------------------
  1483. INT 14 - VIDEO FOSSIL - UNINSTALL
  1484.     AX = 8103h
  1485. Return: AX = 1954h
  1486. Note:    this is an extension to the VFOSSIL spec by Bob Hartman's VFOS_IBM
  1487. --------K-1482-------------------------------
  1488. INT 14 - KEYBOARD FOSSIL
  1489.     AH = 82h
  1490. SeeAlso: AH=7Eh
  1491. --------S-1482-------------------------------
  1492. INT 14 - COURIERS.COM - CONFIGURE PORT
  1493.     AH = 82h
  1494.     AL = port number (1-4)
  1495.     BX = speed (bps)
  1496.     CX = bit flags
  1497.         bit 0: enable input flow control
  1498.         bit 1: enable output flow control
  1499.         bit 2: use X.PC protocol (not yet implemented)
  1500. SeeAlso: AH=00h,AH=8Ch,INT 7A"X.PC"
  1501. ----------1483-------------------------------
  1502. INT 14 - SYSTEM FOSSIL
  1503.     AH = 83h
  1504. SeeAlso: AH=7Eh
  1505. --------S-1483-------------------------------
  1506. INT 14 - COURIERS.COM - START INPUT
  1507.     AH = 83h
  1508.     ES:BX -> circular input buffer
  1509.     CX = length of buffer
  1510.         (should be at least 128 bytes if input flow control enabled)
  1511. SeeAlso: AH=18h,AH=87h,AH=8Dh,AH=A5h"BAPI"
  1512. --------S-1484-------------------------------
  1513. INT 14 - COURIERS.COM - READ CHARACTER
  1514.     AH = 84h
  1515. Return: ZF set if no characters available
  1516.     ZF clear
  1517.        AL = character
  1518.        AH = modem status bits
  1519.         bit 7: set on input buffer overflow
  1520. SeeAlso: AH=02h,AH=86h,AH=89h
  1521. --------S-1485-------------------------------
  1522. INT 14 - COURIERS.COM - FLUSH PENDING INPUT
  1523.     AH = 85h
  1524. SeeAlso: AH=0Ah,AH=88h
  1525. --------S-1486-------------------------------
  1526. INT 14 - COURIERS.COM - START OUTPUT
  1527.     AH = 86h
  1528.     ES:BX -> output buffer
  1529.     CX = length of output buffer
  1530. SeeAlso: AH=19h,AH=83h"COURIERS",AH=A4h"BAPI"
  1531. --------S-1487-------------------------------
  1532. INT 14 - COURIERS.COM - OUTPUT STATUS
  1533.     AH = 87h
  1534. Return: AX = number of unsent characters
  1535. --------S-1488-------------------------------
  1536. INT 14 - COURIERS.COM - ABORT OUTPUT
  1537.     AH = 88h
  1538. SeeAlso: AH=09h,AH=85h
  1539. --------S-1489-------------------------------
  1540. INT 14 - COURIERS.COM - SEND SINGLE CHARACTER
  1541.     AH = 89h
  1542.     CL = character to send
  1543. SeeAlso: AH=01h,AH=84h
  1544. --------S-148A-------------------------------
  1545. INT 14 - COURIERS.COM - SEND BREAK
  1546.     AH = 8Ah
  1547. SeeAlso: AH=89h,AH=FAh
  1548. --------S-148C-------------------------------
  1549. INT 14 - COURIERS.COM - SET SPEED
  1550.     AH = 8Ch
  1551.     BX = speed in bps
  1552. SeeAlso: AH=00h,AH=82h"COURIERS"
  1553. --------S-148D-------------------------------
  1554. INT 14 - COURIERS.COM - DECONFIGURE PORT
  1555.     AH = 8Dh
  1556. SeeAlso: AH=82h"COURIERS"
  1557. --------S-14A0-------------------------------
  1558. INT 14 - 3com BAPI SERIAL I/O - CONNECT TO PORT
  1559.     AH = A0h
  1560.     ES:BX -> ASCIZ internet host name
  1561.     CX = length of name
  1562. Return: AH = return code (00h,04h-06h,08h,0Ah-0Ch) (see below)
  1563.     CL = session ID
  1564. Program: the Bridge Application Program Interface is a set of functions which
  1565.       makes many of the details of LAN communications transparent
  1566. Note:    Novell TELAPI.EXE returns AH=09h (not supported) and CL=00h
  1567. SeeAlso: AH=A1h"BAPI",AH=A2h"BAPI",AH=A5h"BAPI",AX=AF00h
  1568.  
  1569. Values for return code:
  1570.  00h    successful
  1571.  01h    no characters written
  1572.  02h    no characters read
  1573.  03h    no such session
  1574.  04h    clearinghouse name not found
  1575.  05h    no response from host
  1576.  06h    no more sessions available
  1577.  07h    session aborted
  1578.  08h    invalid clearinghouse name
  1579.  09h    not supported
  1580.  0Ah    internal (general) network error
  1581.  0Bh    out of memory
  1582.  0Ch    invalid IP address
  1583. --------S-14A0--CXFFFF-----------------------
  1584. INT 14 - Interconnections Inc. TES - INSTALLATION CHECK/STATUS REPORT
  1585.     AH = A0h
  1586.     CX = FFFFh
  1587. Return: CF clear if successful
  1588.         AX = 5445h ('TE')
  1589.         CX <> FFFFh
  1590.         DX = port number
  1591.     CF set on error
  1592. Program: TES is a network serial port emulation program
  1593. SeeAlso: AH=A1h"TES"
  1594. --------S-14A1-------------------------------
  1595. INT 14 - 3com BAPI SERIAL I/O - DISCONNECT FROM PORT
  1596.     AH = A1h
  1597.     DH = session ID (00h for external session managment)
  1598. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1599.     AL destroyed (Novell TELAPI.EXE)
  1600. SeeAlso: AH=A0h"BAPI"
  1601. --------S-14A1-------------------------------
  1602. INT 14 - Interconnections Inc. TES - GET LIST OF SESSIONS WITH STATUS
  1603.     AH = A1h
  1604. Return: CX = number of active sessions
  1605.     ES:SI -> status array (see below)
  1606. SeeAlso: AH=A2h"TES",AH=A3h"TES"
  1607.  
  1608. Format of status array entry:
  1609. Offset    Size    Description
  1610.  00h    BYTE    status
  1611.  01h    WORD    offset of name
  1612. --------S-14A2-------------------------------
  1613. INT 14 - 3com BAPI SERIAL I/O - WRITE CHARACTER
  1614.     AH = A2h
  1615.     AL = character
  1616.     DH = session ID (00h for external session managment)
  1617. Return: AH = return code (00h,01h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1618. SeeAlso: AH=A0h"BAPI",AH=A3h"BAPI",AH=A4h"BAPI"
  1619. --------S-14A2-------------------------------
  1620. INT 14 - Interconnections Inc. TES - GET LIST OF SERVER NAMES
  1621.     AH = A2h
  1622. Return: CX = number of servers
  1623.     ES:SI -> array of offsets from ES for server names
  1624. SeeAlso: AH=A1h"TES"
  1625. --------S-14A3-------------------------------
  1626. INT 14 - 3com BAPI SERIAL I/O - READ CHARACTER
  1627.     AH = A3h
  1628.     DH = session ID (00h for external session managment)
  1629. Return: AH = return code (00h,02h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1630.     AL = character read or 00h if none available
  1631. SeeAlso: AH=A0h"BAPI",AH=A2h"BAPI",AH=A5h"BAPI",AH=A7h"BAPI"
  1632. --------S-14A3-------------------------------
  1633. INT 14 - Interconnections Inc. TES - START A NEW SESSION
  1634.     AH = A3h
  1635.     ES:SI -> ???
  1636. Return: CF clear if successful
  1637.         AX = 5445h ('TE')
  1638.         CX <> FFFFh
  1639.         DX = port number
  1640.     CF set on error
  1641. SeeAlso: AH=A1h"TES",AH=A4h"TES",AH=A6h"TES"
  1642. --------S-14A4-------------------------------
  1643. INT 14 - 3com BAPI SERIAL I/O - WRITE BLOCK
  1644.     AH = A4h
  1645.     CX = length of buffer in bytes
  1646.     DH = session ID (00h for external session managment)
  1647.     ES:BX -> buffer containing data
  1648. Return: AH = return code (00h,01h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1649.     CX = number of bytes actually sent
  1650. SeeAlso: AH=19h,AH=86h,AH=A0h"BAPI",AH=A5h"BAPI"
  1651. --------S-14A4-------------------------------
  1652. INT 14 - Interconnections Inc. TES - HOLD CURRENTLY ACTIVE SESSION
  1653.     AH = A4h
  1654.     ???
  1655. Return: ???
  1656. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  1657. --------S-14A5-------------------------------
  1658. INT 14 - 3com BAPI SERIAL I/O - READ BLOCK
  1659.     AH = A5h
  1660.     CX = length of buffer
  1661.     DH = session ID (00h for external session managment)
  1662.     ES:BX -> buffer for data
  1663. Return: AH = return code (00h,02h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1664.     CX = number of bytes actually read
  1665. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A0h"BAPI",AH=A3h"BAPI",AH=A4h"BAPI"
  1666. SeeAlso: AH=A7h"BAPI",AX=FF02h
  1667. --------S-14A5-------------------------------
  1668. INT 14 - Interconnections Inc. TES - RESUME A SESSION
  1669.     AH = A5h
  1670.     AL = session number
  1671. Return: ???
  1672. SeeAlso: AH=A4h"TES",AH=A6h"TES"
  1673. --------S-14A6-------------------------------
  1674. INT 14 - 3com BAPI SERIAL I/O - SEND SHORT BREAK
  1675.     AH = A6h
  1676.     DH = session ID (00h for external session managment)
  1677. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1678. Desc:    generate a short break signal; if data delivery was turned off by the
  1679.       break, wait for the host to turn it on again
  1680. SeeAlso: AH=1Ah,AH=8Ah,AH=FAh,AH=A0h"BAPI"
  1681. --------S-14A6-------------------------------
  1682. INT 14 - Interconnections Inc. TES - DROP A SESSION
  1683.     AH = A6h
  1684.     AL = session number
  1685. Return: AH = status
  1686.         00h successful
  1687.         else error
  1688. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  1689. --------S-14A7-------------------------------
  1690. INT 14 - 3com BAPI SERIAL I/O - READ STATUS
  1691.     AH = A7h
  1692.     DH = session ID (00h for external session managment)
  1693. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1694.     CX = number of bytes available for reading
  1695. Note:    Novell TELAPI.EXE v4.01 always returns either 0 or 1 bytes available
  1696. SeeAlso: AH=A5h"BAPI"
  1697. --------S-14A7-------------------------------
  1698. INT 14 - Interconnections Inc. TES - SWITCH TO NEXT ACTIVE SESSION
  1699.     AH = A7h
  1700.     ???
  1701. Return: ???
  1702. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  1703. --------S-14A8-------------------------------
  1704. INT 14 - Interconnections Inc. TES - SEND STRING TO COMMAND INTERPRETER
  1705.     AH = A8h
  1706.     AL = 00h no visible response
  1707.     ES:SI -> ASCIZ command
  1708. Return: ???
  1709. --------N-14A8-------------------------------
  1710. INT 14 - Novell TelAPI v4.01 - CONNECTION INFORMATION???
  1711.     AH = A8h
  1712.     DH = session ID???
  1713.     CH = subfunction
  1714.         02h ???
  1715.         0Dh ???
  1716.         0Fh ???
  1717.         10h ???
  1718.         11h ???
  1719.         28h ???
  1720.         else
  1721.         Return: AH = 09h (not supported)
  1722. Return: AH = return code (see AH=A0h"BAPI")
  1723.         00h successful
  1724.         CL = ??? (0/1/8) (subfunctions 02h,0Dh,0Fh,10h)
  1725.         CL = ??? (7Fh/FFh) (subfunction 28h)
  1726.         CX = ??? (subfunction 11h)
  1727. SeeAlso: AH=A9h"TelAPI"
  1728. --------N-14A9-------------------------------
  1729. INT 14 - Novell TelAPI v4.01 - CONNECTION CONTROL???
  1730.     AH = A9h
  1731.     DH = session ID???
  1732.     CH = subfunction
  1733.         02h ???
  1734.         0Dh ???
  1735.         0Fh ???
  1736.         10h ???
  1737.         11h ???
  1738.         28h ???
  1739.         else
  1740.         Return: AH = 09h (not supported)
  1741.     ???
  1742. Return: AH = return code (see AH=A0h"BAPI")
  1743.     ???
  1744. SeeAlso: AH=A8h"TelAPI",AH=E4h,INT 6B/AX=0600h
  1745. --------S-14AF00BXAAAA-----------------------
  1746. INT 14 - 3com BAPI SERIAL I/O - INSTALLATION CHECK
  1747.     AX = AF00h
  1748.     BX = AAAAh
  1749. Return: AX = AF01h if installed
  1750.         BH = protocol type (if BX=AAAAh on entry)
  1751.         01h NetManage TCP/IP
  1752.         BL = version for protocol type (if BX=AAAAh on entry)
  1753. Note:    early versions of the BAPI and the ROM BIOS simply destroy AX; this
  1754.       behavior is used to determine whether the newer functions (AH=B0h,
  1755.       AH=B1h,etc) are available
  1756. SeeAlso: AH=A0h"BAPI"
  1757. --------S-14B0-------------------------------
  1758. INT 14 - 3com BAPI SERIAL I/O - EN/DISABLE "ENTER COMMAND MODE" (ECM) CHARACTER
  1759.     AH = B0h
  1760.     AL = new state (00h disabled, 01h enabled)
  1761. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  1762. Note:    disabling the ECM character allows applications to send data which
  1763.       includes the ECM character
  1764. SeeAlso: AX=AF00h"BAPI",AH=B1h,AH=B2h
  1765. --------S-14B1-------------------------------
  1766. INT 14 - 3com BAPI SERIAL I/O - ENTER COMMAND MODE
  1767.     AH = B1h
  1768. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  1769. Desc:    provide a means for the application or terminal emulator to perform
  1770.       the same action normally caused by the ECM character
  1771. SeeAlso: AH=B0h,AH=B2h
  1772. --------S-14B2-------------------------------
  1773. INT 14 - 3com BAPI SERIAL I/O - GET ECM WATCH STATE
  1774.     AH = B2h
  1775. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  1776.     AL = watch flag (00h disabled, 01h enabled)
  1777. Desc:    determine whether the ECM character is enabled
  1778. SeeAlso: AH=B0h,AH=B1h
  1779. --------S-14B3-------------------------------
  1780. INT 14 - 3com BAPI SERIAL I/O - GET/SET CONFIGURATION INFO
  1781.     AH = B3h
  1782.     AL = direction (00h get, 01h set)
  1783.     DH = session ID (00h for external session managment)
  1784.     DL = configuration item (00h = end-of-line mapping)
  1785.     CX = new configuration item value (if AL=01h)
  1786.         ---if DL=00h---
  1787.         CH = application EOL type (app to Telnet client)
  1788.         01h application will send lone CR
  1789.         02h application will send CR-? pair
  1790.         CL = driver EOL type (Telnet client to Telnet server)
  1791.         01h driver should send CR-NUL pair
  1792.         02h driver should send CR-LF pair
  1793. Return: AH = return code (00h,03h,09h-0Bh) (see AH=A0h"BAPI")
  1794.     ---if AL=00h---
  1795.     CX = configuration item value (see above)
  1796. SeeAlso: AH=B2h
  1797. --------N-14E0-------------------------------
  1798. INT 14 - TelAPI - ???
  1799.     AH = E0h
  1800.     BX = ???
  1801.     CX:DX = ???
  1802.     DS:DI -> ???
  1803.     ES:SI -> ???
  1804. Return: AX = status (0000h,FF37h,etc.)
  1805.     ES:SI -> ??? if ???
  1806.     ???
  1807. SeeAlso: AH=ECh,AX=FF00h
  1808. --------S-14E000-----------------------------
  1809. INT 14 - MX5 Extended FOSSIL - GET MNP STATUS BLOCK
  1810.     AX = E000h
  1811.     DX = port number (0-3)
  1812. Return: ES:BX -> status block (see below)
  1813. Program: MX5 is a FOSSIL driver by MagicSoft which emulates MNP Level 5, and
  1814.       ships with the MTEZ terminal program as MTEMNP.DRV (a TSR despite
  1815.       the .DRV extension)
  1816. SeeAlso: AX=E006h
  1817.  
  1818. Format of status block:
  1819. Offset    Size    Description
  1820.  00h    BYTE    flag: active (00h no, 01h yes)
  1821.  01h    BYTE    MNP level (2,4,5)
  1822.  02h    BYTE    series ID from remote MNP
  1823.  03h    DWORD    total packets transmitted
  1824.  07h    DWORD    duplicate packets transmitted
  1825.  0Bh    DWORD    maximum speed
  1826.  0Fh    DWORD    total packets received
  1827.  13h    DWORD    duplicate packets received
  1828.  17h    DWORD    maximum speed
  1829. --------S-14E001-----------------------------
  1830. INT 14 - MX5 Extended FOSSIL - GET/SET MNP LEVEL
  1831.     AX = E001h
  1832.     BH = function
  1833.         00h get MNP level
  1834.         01h set MNP level
  1835.         BL = new level (00h none, 02h/04h/05h MNP level N)
  1836.     DX = port number (0-3)
  1837. Return: BL = MNP level
  1838. SeeAlso: AX=E002h,AX=E003h,AX=E004h,AX=E006h
  1839. --------S-14E002-----------------------------
  1840. INT 14 - MX5 Extended FOSSIL - GET/SET MNP ANSWER/ORIGINATE MODE
  1841.     AX = E002h
  1842.     BH = function
  1843.         00h get answer/originate mode
  1844.         01h set mode
  1845.         BL = new mode (00h originate [default], 01h answer)
  1846.     DX = port number (0-3)
  1847. Return: BL = answer/originate mode
  1848. SeeAlso: AX=E001h,AX=E003h,AX=E006h
  1849. --------S-14E003-----------------------------
  1850. INT 14 - MX5 Extended FOSSIL - GET/SET MNP WAIT TICKS
  1851.     AX = E003h
  1852.     BH = function
  1853.         00h get wait ticks
  1854.         01h set wait ticks
  1855.         BL = MNP wait ticks (default 0Eh)
  1856.     DX = port number (0-3)
  1857. Return: BL = wait ticks
  1858. SeeAlso: AX=E001h,AX=E002h,AX=E006h
  1859. --------S-14E004-----------------------------
  1860. INT 14 - MX5 Extended FOSSIL - GET/SET MNP CONNECT SOUND LEVEL
  1861.     AX = E004h
  1862.     BH = function
  1863.         00h get sound level
  1864.         01h set sound level
  1865.         BL = new sound level (00h off, 01h on [default])
  1866.     DX = port number
  1867. Return: BL = sound state
  1868. Desc:    specify whether MX5 should generate beeps after an MNP connection
  1869.       (three high beeps if successful, high then low on connection failure)
  1870. SeeAlso: AX=E002h,AX=E006h
  1871. --------S-14E005-----------------------------
  1872. INT 14 - MX5 Extended FOSSIL - UNINSTALL
  1873.     AX = E005h
  1874. Return: BX = segment of MX5's memory block or 0000h on failure
  1875. Note:    caller must free the returned memory block to complete the uninstall
  1876. SeeAlso: AX=E006h
  1877. --------S-14E006BX0000-----------------------
  1878. INT 14 - MX5 Extended FOSSIL - INSTALLATION CHECK
  1879.     AX = E006h
  1880.     BX = 0000h
  1881. Return: BX = 4D58h ('MX') if installed
  1882.         AH = major version
  1883.         AL = minor version
  1884. SeeAlso: AX=E000h,AX=E001h,AX=E005h,AX=E007h
  1885. --------S-14E007-----------------------------
  1886. INT 14 - MX5 Extended FOSSIL - WAIT SPECIFIED NUMBER OF TICKS
  1887.     AX = E007h
  1888.     CX = number of ticks to wait
  1889. Return: nothing
  1890. SeeAlso: AX=E006h
  1891. --------N-14E1-------------------------------
  1892. INT 14 - TelAPI - ???
  1893.     AH = E1h
  1894.     BX = connection ID
  1895.     ???
  1896. Return: AX = status (0000h,FFF7h,maybe others)
  1897.     ???
  1898. SeeAlso: AH=E6h,AX=FF00h
  1899. --------N-14E2-------------------------------
  1900. INT 14 - TelAPI - BUFFERED READ
  1901.     AH = E2h
  1902.     BX = connection ID
  1903.     CX = length of buffer in bytes
  1904.     ES:SI -> buffer for data
  1905. Return: AX = number of characters actually read??? (negative on error)
  1906. SeeAlso: AH=E6h,AX=FF00h,INT 6B/AH=01h
  1907. --------N-14E3-------------------------------
  1908. INT 14 - TelAPI - BUFFERED WRITE
  1909.     AH = E3h
  1910.     BX = connection ID
  1911.     CX = length of buffer in bytes
  1912.     ES:SI -> buffer containing data
  1913. Return: AX = number of characters actually written??? (negative on error)
  1914. SeeAlso: AH=07h"TelAPI",AH=E6h,AX=FF00h,INT 6B/AH=00h
  1915. --------N-14E4-------------------------------
  1916. INT 14 - TelAPI - CONNECTION CONTROL???
  1917.     AH = E4h
  1918.     BX = connection ID
  1919.     CX = ???
  1920.     ES:SI -> 10-byte buffer containing ???
  1921. Return: ???
  1922. SeeAlso: AH=A9h,AH=E6h,AX=FF00h,INT 6B/AX=0600h
  1923. --------N-14E5-------------------------------
  1924. INT 14 - TelAPI - ???
  1925.     AH = E5h
  1926. Return: AX = status???
  1927. SeeAlso: AH=E6h,AX=FF00h
  1928. --------N-14E6-------------------------------
  1929. INT 14 - TelAPI - ???
  1930.     AH = E6h
  1931. Return: AX = status???
  1932. Notes:    TelAPI also supports the NASI/NACS and NCSI APIs on INT 6B
  1933.     this function invokes AH=E5h internally
  1934. SeeAlso: AX=FF00h,INT 6B/AH=00h,INT 6B/AH=10h
  1935. --------N-14E7-------------------------------
  1936. INT 14 - TelAPI - GET ???
  1937.     AH = E7h
  1938.     ES:SI -> 20-byte buffer for ???
  1939. Return: AX = 0000h (successful)
  1940.     ES:SI buffer filled
  1941. SeeAlso: AX=FF00h
  1942. --------N-14E8-------------------------------
  1943. INT 14 - TelAPI - SET ???
  1944.     AH = E8h
  1945.     BX = connection ID
  1946.     CL = new value for ???
  1947.     DX = ??? (ignored by Novell TELAPI v4.01)
  1948. Return: AX = status (0000h,FFFFh)
  1949. SeeAlso: AX=FF00h
  1950. --------N-14E9-------------------------------
  1951. INT 14 - TelAPI - ???
  1952.     AH = E9h
  1953.     DX = ???
  1954. Return: ???
  1955. SeeAlso: AX=FF00h
  1956. --------N-14EA-------------------------------
  1957. INT 14 - TelAPI - GET CONNECTION INFO???
  1958.     AH = EAh
  1959.     BX = connection ID
  1960.     ES:SI -> buffer for info???
  1961. Return: AX = status (0000h,FFFFh,etc.)
  1962. SeeAlso: AX=FF00h
  1963. --------N-14EB-------------------------------
  1964. INT 14 - TelAPI - GET ???
  1965.     AH = EBh
  1966.     ES:SI -> buffer for ???
  1967. Return: ES:SI buffer filled
  1968. SeeAlso: AX=FF00h
  1969. --------N-14EC-------------------------------
  1970. INT 14 - TelAPI - ???
  1971.     AH = ECh
  1972.     BX = ???
  1973.     CX:DX = ???
  1974.     DS:DI -> ???
  1975.     ES:SI -> ???
  1976. Return: AX = status (0000h,FF37h,etc.)
  1977.     ES:SI -> ??? if ???
  1978.     ???
  1979. Note:    this function is not supported by the Microdyne TelAPI v3.7
  1980. SeeAlso: AH=E0h"TelAPI",AX=FF00h
  1981. --------N-14ED-------------------------------
  1982. INT 14 - TelAPI - ???
  1983.     AH = EDh
  1984.     BX = connection ID
  1985. Return: AX = status (0000h,FFFFh,etc.)
  1986. Note:    this function is not supported by the Microdyne TelAPI v3.7
  1987. SeeAlso: AX=FF00h
  1988. --------a-14F0F0-----------------------------
  1989. INT 14 - ASAP v1.0 - ???
  1990.     AX = F0F0h
  1991.     DX = ???
  1992.     ???
  1993. Return: ???
  1994. Program: ASAP (Automatic Screen Access Program) is a shareware screen reader by
  1995.       MicroTalk
  1996. SeeAlso: AX=F0F1h
  1997. --------a-14F0F1DX0000-----------------------
  1998. INT 14 - ASAP v1.0 - INSTALLATION CHECK
  1999.     AX = F0F1h
  2000.     DX = 0000h
  2001. Return: DX = segment of resident code
  2002.        = 0000h if not installed
  2003. Program: ASAP (Automatic Screen Access Program) is a shareware screen reader by
  2004.       MicroTalk
  2005. SeeAlso: AX=F0F0h,INT 10/AX=3800h
  2006. --------S-14F4FF-----------------------------
  2007. INT 14 - IBM/Yale EBIOS SERIAL I/O - INSTALLATION CHECK
  2008.     AX = F4FFh
  2009.     DX = port (00h-03h)
  2010. Return: CF clear if present
  2011.         AX = 0000h
  2012.     CF set if not present
  2013.         AX <> 0000h
  2014. --------S-14F9-------------------------------
  2015. INT 14 - IBM/Yale EBIOS SERIAL I/O - REGAIN CONTROL
  2016.     AH = F9h
  2017.     DX = port (00h-03h)
  2018. --------S-14FA-------------------------------
  2019. INT 14 - IBM/Yale EBIOS SERIAL I/O - SEND BREAK
  2020.     AH = FAh
  2021.     DX = port (00h-03h)
  2022. SeeAlso: AH=1Ah,AH=8Ah
  2023. --------S-14FB-------------------------------
  2024. INT 14 - IBM/Yale EBIOS SERIAL I/O - SET OUTGOING MODEM SIGNALS
  2025.     AH = FBh
  2026.     AL = modem control register (see AH=05h)
  2027.     DX = port (00h-03h)
  2028. SeeAlso: AH=05h"SERIAL"
  2029. --------S-14FC-------------------------------
  2030. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ CHARACTER, NO WAIT
  2031.     AH = FCh
  2032.     DX = port (00h-03h)
  2033. Return: AH = RS232 status bits (see AH=00h)
  2034.     AL = character
  2035. SeeAlso: AH=02h,AH=0Ch,AX=FF02h
  2036. --------S-14FD02-----------------------------
  2037. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ STATUS
  2038.     AX = FD02h
  2039. Return: CX = number of characters available
  2040. --------N-14FF00-----------------------------
  2041. INT 14 - TelAPI - INSTALLATION CHECK
  2042.     AX = FF00h
  2043. Return: AL = FFh if installed
  2044.     AH = 00h for Novell TELAPI.EXE
  2045. SeeAlso: AH=E6h
  2046. --------S-14FF01-----------------------------
  2047. INT 14 - IBM/Yale EBIOS SERIAL I/O - SET SEND BUFFER
  2048.     AX = FF01h
  2049.     CX = length of buffer (0000h to cancel buffer assignment)
  2050.     DX = port (00h-03h)
  2051.     ES:BX -> send buffer
  2052. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh,AX=FF02h
  2053. --------S-14FF02-----------------------------
  2054. INT 14 - IBM/Yale EBIOS SERIAL I/O - SET RECEIVE BUFFER
  2055.     AX = FF02h
  2056.     CX = length of buffer (0000h to cancel buffer assignment)
  2057.     DX = port (00h-03h)
  2058.     ES:BX -> receive buffer
  2059. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh,AX=FF03h
  2060. --------t-15---------------------------------
  2061. INT 15 - Microsoft TSR Specification
  2062.     No additional information available at this time.
  2063. --------B-1500-------------------------------
  2064. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  2065.     AH = 00h
  2066. Return: CF set on error
  2067.         AH = 86h no cassette present
  2068.     CF clear if successful
  2069. SeeAlso: AH=01h"CASSETTE"
  2070. --------M-1500-------------------------------
  2071. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  2072.     AH = 00h
  2073. Return: CX = signed X count
  2074.     DX = signed Y count
  2075. --------O-1500-------------------------------
  2076. INT 15 - VMiX v2+ - INSTALLATION CHECK
  2077.     AH = 00h
  2078. Return: DX = 0798h if installed
  2079.         AX = version (AH = major, AL = minor)
  2080. --------T-1500-------------------------------
  2081. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  2082.     AH = 00h
  2083. Note:    if issued by the highest-priority task while MultiDOS is using
  2084.       priority-based rather than round-robin scheduling, control will be
  2085.       returned to the caller immediately
  2086. SeeAlso: AH=03h"MultiDOS",AX=1000h
  2087. --------B-1501-------------------------------
  2088. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  2089.     AH = 01h
  2090. Return: CF set on error
  2091.         AH = 86h no cassette present
  2092.     CF clear if successful
  2093. SeeAlso: AH=00h"CASSETTE"
  2094. --------b-1501-------------------------------
  2095. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  2096.     AH = 01h
  2097.     AL = NVRAM location (00h to 3Fh)
  2098.     BL = NVRAM data value
  2099. Return: AH = return code
  2100.         00h OK
  2101.         01h address bad
  2102.         02h write error
  2103. SeeAlso: AH=02h"Amstrad"
  2104.  
  2105. Format of NVRAM:
  2106. Offset    Size    Description
  2107.  00h    BYTE    time of day: seconds
  2108.  01h    BYTE    alarm time: seconds
  2109.  02h    BYTE    time of day: minutes
  2110.  03h    BYTE    alarm time: minutes
  2111.  04h    BYTE    time of day: hours
  2112.  05h    BYTE    alarm time: hours
  2113.  06h    BYTE    day of week, 1 = Sunday
  2114.  07h    BYTE    day of month
  2115.  08h    BYTE    month
  2116.  09h    BYTE    year mod 100
  2117.  0Ah    BYTE    RTC status register A
  2118.         bit 7: set if date/time being updated
  2119.         bits 6-4: time base speed, default 010 = 32768 Hz
  2120.         bits 3-0: interrupt rate selection, default 0110 = 1024 Hz
  2121.  0Bh    BYTE    RTC status register B (see below)
  2122.  0Ch    BYTE    RTC status register C (read-only)
  2123.         bit 7: IRQF flag
  2124.         bit 6: PF flag
  2125.         bit 5: AF flag
  2126.         bit 4: UF flag
  2127.  0Dh    BYTE    RTC status register D
  2128.         bit 7: battery good
  2129.  0Eh  6 BYTEs    time and date machine last used
  2130.  14h    BYTE    user RAM checksum
  2131.  15h    WORD    Enter key scancode/ASCII code
  2132.  17h    WORD    Forward delete key scancode/ASCII code
  2133.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  2134.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  2135.  1Dh    WORD    mouse button 1 scancode/ASCII code
  2136.  1Fh    WORD    mouse button 2 scancode/ASCII code
  2137.  21h    BYTE    mouse X scaling factor
  2138.  22h    BYTE    mouse Y scaling factor
  2139.  23h    BYTE    initial VDU mode and drive count
  2140.  24h    BYTE    initial VDU character attribute
  2141.  25h    BYTE    size of RAM disk in 2K blocks
  2142.  26h    BYTE    initial system UART setup byte
  2143.  27h    BYTE    initial external UART setup byte
  2144.  28h 24 BYTEs    available for user application
  2145. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  2146.       the clock chip
  2147.  
  2148. Bitfields for RTC status register B:
  2149.  bit 7    clear if normal update, set if abort update
  2150.  bit 6    periodic interrupt enable
  2151.  bit 5    alarm interrupt enable
  2152.  bit 4    update end interrupt enable
  2153.  bit 3    square wave enable
  2154.  bit 2    date mode (clear = BCD, set = binary)
  2155.  bit 1    24-hour format
  2156.  bit 0    daylight saving time enable
  2157. --------O-1501-------------------------------
  2158. INT 15 - VMiX - "sys_chanreq" - I/O CHANNEL OBJECT MANAGER
  2159.     AH = 01h
  2160.     STACK:    WORD    object ID of requestor
  2161.         DWORD    pointer to ASCIZ name of requested method
  2162.             "assign" assign channel to object
  2163.             "deassign" deassign channel
  2164.             "cursor" set cursor on/off
  2165.             "init" initialize comm port
  2166.             "open" open I/O channel
  2167.             "position" set cursor position
  2168.             "receive" get buffered packet from comm port
  2169.             "send" send buffered packet to comm port
  2170.             "vio" set current virtual I/O to specified channel
  2171.             "window" make window at cursor position
  2172.         ---if "assign"---
  2173.          WORD    object UID
  2174.          WORD    caller UID/PID
  2175.          DWORD    CSL with port
  2176.         ---if "deassign"---
  2177.          WORD    channel ID
  2178.         ---if "cursor"---
  2179.          WORD    channel ID (must be a SRCSINK)
  2180.          WORD    new state (0000h off, 0001h on)
  2181.         ---if "init"---
  2182.          WORD    channel ID (must be a SRCSINK)
  2183.          WORD    comm port number (00h-03h)
  2184.          WORD    UART init code
  2185.         ---if "open"---
  2186.          WORD    channel ID
  2187.         ---if "position"---
  2188.          WORD    channel ID (must be a SRCSINK)
  2189.          WORD    position (high byte = row, low byte = column)
  2190.         ---if "receive"---
  2191.          DWORD    pointer to buffer
  2192.         ---if "send"---
  2193.          WORD    length of buffer
  2194.          DWORD    pointer to buffer
  2195.         ---if "vio"---
  2196.          WORD    channel ID (must be a SRCSINK)
  2197.         ---if "window"---
  2198.          WORD    top left (high byte = row, low byte = column)
  2199.          WORD    bottom right (high byte = row, low byte = column)
  2200. Return: DX:AX -> IRP structure or 0000h:0000h
  2201. SeeAlso: AH=00h"VMiX",AH=02h"VMiX"
  2202. --------T-1501-------------------------------
  2203. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  2204.     AH = 01h
  2205.     AL = semaphore number (00h-3Fh)
  2206. Return: AH = status
  2207.         00h successful
  2208.         02h invalid semaphore number
  2209. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  2210.       task and the call returns immediately
  2211.     if the semaphore is already owned by another task, the calling task
  2212.       is placed on a queue for the semaphore and suspended until it can
  2213.       become owner of the semaphore
  2214.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  2215. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  2216. --------B-1502-------------------------------
  2217. INT 15 - CASSETTE - READ DATA (PC and PCjr only)
  2218.     AH = 02h
  2219.     CX = number of bytes to read
  2220.     ES:BX -> buffer
  2221. Return: CF clear if successful
  2222.         DX = number of bytes read
  2223.         ES:BX -> byte following last byte read
  2224.     CF set on error
  2225.     AH = status (see below)
  2226. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  2227.  
  2228. Values for status:
  2229.  00h    successful
  2230.  01h    CRC error
  2231.  02h    bad tape signals
  2232.  04h    no data
  2233.  80h    invalid command
  2234.  86h    no cassette present
  2235. --------b-1502-------------------------------
  2236. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  2237.     AH = 02h
  2238.     AL = NVRAM location (00h to 3Fh)
  2239. Return: AH = return code
  2240.         00h OK
  2241.         01h address bad
  2242.         02h checksum error
  2243.     AL = NVRAM data value
  2244. SeeAlso: AH=01h"Amstrad"
  2245. --------O-1502-------------------------------
  2246. INT 15 - VMiX - "sys_memreq" - MEMORY OBJECT MANAGER
  2247.     AH = 02h
  2248.     STACK:    WORD    object ID of requestor
  2249.         DWORD    pointer to ASCIZ name of requested method
  2250.             "assign" allocate low memory block
  2251.             "assign extended" allocate extended memory pages
  2252.             "assign gdt" allocate GDT selector
  2253.             "paged" allocate low paged memory
  2254.             "paged extended" alllocate extended memory pages
  2255.             "deassign" free memory block
  2256.             "deassign gdt" free GDT selector
  2257.             "getvpage" get physical address for virtual page
  2258.             "setvpage" set physical address for virtual page
  2259.             "info" get VMiX memory usage info block
  2260.             "move" move contents of 32-bit memory
  2261.             "newmcb" make new DOS memory control block
  2262.             "owner" get process ID of MCB or PSP owner
  2263.             "umb" allocate upper memory block
  2264.             "video" toggle system use of vidoe memory and get stat
  2265.         ---if "assign"---
  2266.          WORD    number of objects
  2267.          WORD    size in bytes (multiple of 512 bytes)
  2268.         ---if "assign extended"---
  2269.          WORD    number of objects
  2270.          WORD    size in bytes (multiple of 4K)
  2271.         ---if "assign gdt"---
  2272.          WORD    access type (low byte)
  2273.          WORD    segment size in paragraphs
  2274.          DWORD    pointer to start of physical segment
  2275.         ---if "paged"---
  2276.          WORD    number of 512-byte pages
  2277.         ---if "paged extended"
  2278.          WORD    number of 4K pages
  2279.         ---if "deassign"---
  2280.          DWORD    pointer returned by previous allocation call
  2281.         ---if "deassign gdt"---
  2282.          WORD    GDT selector
  2283.         ---if "getvpage"---
  2284.          WORD    owner's process ID
  2285.          DWORD    pointer to buffer for page structure (struct VPGE)
  2286.         ---if "setvpage"---
  2287.          WORD    owner's process ID
  2288.          DWORD    pointer to new page structure (struct VPGE)
  2289.         ---if "info"---
  2290.          no additional arguments
  2291.         ---if "move"
  2292.          DWORD    32-bit source address
  2293.          DWORD    32-bit destination address
  2294.          WORD    number of words to move
  2295.         ---if "newmcb"---
  2296.          DWORD    pointer to new MCB's location
  2297.          WORD    size of memory block
  2298.          DWORD    pointer to ASCIZ name string (max 8 chars)
  2299.         ---if "owner"---
  2300.          WORD    MCB or PSP segment
  2301.         ---if "umb"---
  2302.          WORD    size in paragraphs
  2303.         ---if "video"---
  2304.          no additional arguments
  2305. Return: DX:AX -> memory block or VPGE struct or 0000h:0000h
  2306. SeeAlso: AH=00h"VMiX",AH=01h"VMiX"
  2307. --------T-1502-------------------------------
  2308. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  2309.     AH = 02h
  2310.     AL = semaphore number (00h-3Fh)
  2311. Return: AH = status
  2312.         00h successful
  2313.         01h not semaphore owner
  2314.         02h invalid semaphore number
  2315. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  2316.       queue will become the new owner and be reawakened
  2317.     do not use within an interrupt handler
  2318. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  2319. --------B-1503-------------------------------
  2320. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  2321.     AH = 03h
  2322.     CX = number of bytes to write
  2323.     ES:BX -> data buffer
  2324. Return: CF clear if successful
  2325.         ES:BX -> byte following last byte written
  2326.     CF set on error
  2327.     AH = status (see AH=02h"CASSETTE")
  2328.     CX = 0000h
  2329. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  2330. --------V-1503-------------------------------
  2331. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  2332.     AH = 03h
  2333.     AL = value (I,R,G,B bits)
  2334. SeeAlso: AH=04h"Amstrad"
  2335. --------O-1503-------------------------------
  2336. INT 15 - VMiX - "sys_pinput" - PROMPTED CONSOLE INPUT
  2337.     AH = 03h
  2338.     STACK:    DWORD    pointer to ASCII prompt
  2339.         WORD    field outline character
  2340.         WORD    length of input field (max 7Fh)
  2341.         DWORD    address of pointer to input buffer
  2342. Return: AX = length of input (input buffer is padded with blanks)
  2343. SeeAlso: AH=04h"VMiX"
  2344. --------T-1503-------------------------------
  2345. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  2346.     AH = 03h
  2347.     DX = number of time slices to remain suspended
  2348. Return: after specified interval has elapsed
  2349. Note:    when priority-based scheduling is in use, high-priority tasks should
  2350.       use this function to yield the processor
  2351. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  2352. --------B-1504-------------------------------
  2353. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  2354.     AH = 04h
  2355.     ES:DI -> results buffer length 20h for System Parameter Table
  2356.     DS = segment containing ABIOS RAM extensions (zero if none)
  2357. Return: AH = 00h success: results at ES:DI
  2358.     CF set on failure
  2359. SeeAlso: AH=05h"ABIOS",C1h
  2360.  
  2361. Format of ABIOS System Parameter Table:
  2362. Offset    Size    Description
  2363.  00h    DWORD    FAR address of ABIOS Common Start Routine
  2364.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  2365.  08h    DWORD    FAR address of ABIOS Time-out Routine
  2366.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  2367.  0Eh 16 BYTEs    reserved
  2368.  1Eh    WORD    number of entries in initialization table
  2369. --------V-1504-------------------------------
  2370. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  2371.     AH = 04h
  2372.     AL = value (RDSEL1 and RDSEL0)
  2373. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  2374. --------O-1504-------------------------------
  2375. INT 15 - VMiX - "sys_vprintf" - FORMATTED OUTPUT TO STREAM
  2376.     AH = 04h
  2377.     STACK:    DWORD    control string
  2378.         DWORD    array of arguments
  2379. SeeAlso: AH=03h"VMiX"
  2380. --------T-1504-------------------------------
  2381. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  2382.     AH = 04h
  2383.     AL = mailbox number (00h-3Fh)
  2384.     CX = message length in bytes
  2385.     DS:SI -> message
  2386. Return: AH = status
  2387.         00h successful
  2388.         01h out of message memory
  2389.         02h invalid mailbox number
  2390. Note:    the message is copied into a system buffer; the caller may immediately
  2391.       reuse its buffer
  2392. SeeAlso: AH=05h"MultiDOS"
  2393. --------B-1505-------------------------------
  2394. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  2395.     AH = 05h
  2396.     ES:DI -> results buffer length (18h * Number_of_Entries)
  2397.     DS = segment containing ABIOS RAM extensions (zero if none)
  2398. Return: AH = 00h success: results at ES:DI
  2399.     CF set on failure
  2400. SeeAlso: AH=04h"ABIOS",C1h
  2401.  
  2402. Format of one entry of ABIOS Initialization Table:
  2403. Offset    Size    Description
  2404.  00h    WORD    device ID
  2405.  02h    WORD    number of Logical IDs
  2406.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  2407.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  2408.  0Ah    WORD    request block length
  2409.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  2410.  0Eh    WORD    Data Pointers length (in Common Data Area)
  2411.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  2412.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  2413.  12h  6 BYTEs    reserved
  2414. --------V-1505-------------------------------
  2415. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  2416.     AH = 05h
  2417.     AL = value (I,R,G,B bits)
  2418. SeeAlso: AH=04h"Amstrad"
  2419. --------O-1505-------------------------------
  2420. INT 15 - VMiX - "sys_getpid" - GET PROCESS ID OF CURRENT PROCESS
  2421.     AH = 05h
  2422. Return: AX = process ID
  2423. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  2424. --------T-1505-------------------------------
  2425. INT 15 - MultiDOS Plus - CHECK MAILBOX
  2426.     AH = 05h
  2427.     AL = mailbox number (00h-3Fh)
  2428. Return: AH = status
  2429.         00h successful
  2430.         DX = length of first message in queue, 0000h if no message
  2431.         02h invalid mailbox number
  2432. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  2433. --------b-1506-------------------------------
  2434. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  2435.     AH = 06h
  2436. Return: BX = version number
  2437. --------O-1506-------------------------------
  2438. INT 15 - VMiX - "sys_getpcb" - GET POINTER TO PROCESS CONTROL BLOCK
  2439.     AH = 06h
  2440.     STACK:    WORD    process ID
  2441. Return: DX:AX -> process control block
  2442. SeeAlso: AH=05h"VMiX",AH=07h"VMiX",AH=08h"VMiX"
  2443. --------T-1506-------------------------------
  2444. INT 15 - MultiDOS Plus - READ MAILBOX
  2445.     AH = 06h
  2446.     AL = mailbox number (00h-3Fh)
  2447.     CX = size of buffer in bytes
  2448.     ES:DI -> buffer for message
  2449. Return: AH = status
  2450.         00h successful
  2451.         CX = number of bytes copied
  2452.         DX = actual length of message
  2453.         02h invalid mailbox number
  2454. Note:    if the caller's buffer is not large enough, the message is truncated
  2455.       and the remainder is lost
  2456. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  2457. --------O-1507-------------------------------
  2458. INT 15 - VMiX - "sys_getocb" - GET POINTER TO OBJECT CONTROL BLOCK
  2459.     AH = 07h
  2460.     STACK:    WORD    object type
  2461. Return: DX:AX -> object control block
  2462. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  2463. --------T-1507-------------------------------
  2464. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  2465.     AH = 07h
  2466.     BX:CX = entry point of new task
  2467.     DX = stack size in paragraphs
  2468. Return: AH = status
  2469.         00h successful
  2470.         01h no free task control blocks
  2471.         02h no free memory for task's stack
  2472. Note:    execution returns immediately to calling task
  2473. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  2474. --------O-1508-------------------------------
  2475. INT 15 - VMiX - "sys_getccb" - GET CHANNEL CONTROL BLOCK
  2476.     AH = 08h
  2477.     STACK:    WORD    channel ID
  2478. Return: DX:AX -> channel control block
  2479. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  2480. --------T-1508-------------------------------
  2481. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  2482.     AH = 08h
  2483. Return: calling task terminated, so execution never returns to caller
  2484. Notes:    an internal task must be terminated with this function rather than a
  2485.       DOS termination function
  2486.     task's stack space is returned to parent task's memory pool
  2487. SeeAlso: AH=07h"MultiDOS"
  2488. --------O-1509-------------------------------
  2489. INT 15 - VMiX - "sys_getqueue" - GET ID OF QUEUED ELEMENT
  2490.     AH = 09h
  2491.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  2492.         WORD    subqueue ID
  2493. Return: AX = queue ID
  2494. SeeAlso: AH=0Ah"VMiX"
  2495. --------T-1509-------------------------------
  2496. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  2497.     AH = 09h
  2498.     AL = new priority
  2499. Note:    the priority has different meanings depending on whether priority-
  2500.       based or round-robin scheduling is used
  2501. SeeAlso: AH=07h"MultiDOS"
  2502. --------O-150A-------------------------------
  2503. INT 15 - VMiX - "sys_qetqnext" - GET ID OF NEXT QUEUED ELEMENT
  2504.     AH = 0Ah
  2505.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  2506.         WORD    ID of current element in queue chain
  2507. Return: AX = ID of next element
  2508. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  2509. --------T-150A-------------------------------
  2510. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  2511.     AH = 0Ah
  2512.     AL = new interval
  2513.         00h = 55.0 ms (default)
  2514.         80h = 27.5 ms
  2515.         40h = 13.75 ms
  2516.         20h = 6.88 ms
  2517.         10h = 3.44 ms
  2518.         08h = 1.72 ms
  2519. SeeAlso: AH=03h"MultiDOS"
  2520. --------O-150B-------------------------------
  2521. INT 15 - VMiX - "sys_sysreq" - SYSTEM CONFIGURATION MANAGER
  2522.     AH = 0Bh
  2523.     STACK:    WORD    caller's UID
  2524.         DWORD    pointer to ASCIZ name of requested method
  2525.             "abort" abort current send/receive on comm port
  2526.             "block" start/end critical section
  2527.             "close" terminate interrupt-drive comm I/O
  2528.             "open" prepare comm port for interrupt-driven I/O
  2529.             "delay" set delay timer and wait
  2530.             "hibernate" put process to sleep
  2531.             "ints" enable/disable interrupt-driven INT 14h
  2532.             "length" get current send/receive buffer offsets
  2533.             "kswitch" switch stacks
  2534.             "numproc" get number of active processes
  2535.             "protocol" set protocol function for comm interrupts
  2536.             "relocate" set/reset VMiX flag for relocating to himem
  2537.             "status" get current open comm port status
  2538.             "wake" awaken a process
  2539.             "xport" get comm port polled for logins
  2540.         ---if "abort"---
  2541.          no additional arguments
  2542.         ---if "block"---
  2543.          WORD    0000h end, 0001h start
  2544.         ---if "close"---
  2545.          no additional arguments
  2546.         ---if "open"---
  2547.          WORD    comm port (00h-03h)
  2548.          WORD    BIOS parameter byte (see INT 14/AH=00h), except
  2549.             bits 7-5 = 000 for 19200, 001 for 38400, 011 for 115200
  2550.         ---if "delay"---
  2551.          WORD    time in seconds
  2552.         ---if "hibernate"---
  2553.          WORD    process ID
  2554.         ---if "ints"---
  2555.          WORD    0000h if no, 0001h if yes
  2556.         ---if "length","numproc","relocate","status","xport"---
  2557.          no additional arguments
  2558.         ---if "kswitch"---
  2559.          DWORD    pointer to new stack
  2560.         ---if "protocol"---
  2561.          DWORD    pointer to function (must be in low "assign"ed memory
  2562.             when in 386 mode)
  2563.         ---if "wake"---
  2564.          WORD    process ID
  2565. Return: DX:AX -> result or 0000h:0000h
  2566.         ---if "length"---
  2567.          BYTE    receive offset
  2568.          BYTE    send offset
  2569.         ---if "kswitch"---
  2570.          DWORD    old stack pointer
  2571.         ---if "numproc"---
  2572.          WORD    number of active processes
  2573.         ---if "status"---
  2574.          current open comm port status
  2575.         ---if "xport"---
  2576.          current comm port being polled for logins
  2577. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  2578. --------T-150B-------------------------------
  2579. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  2580.     AH = 0Bh
  2581. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  2582.       may be restored with AH=0Ch
  2583.     caller's video mode must be same as foreground task's video mode
  2584.     any text written while in the background will be saved to the
  2585.       foreground task's virtual screen when it switches to the background
  2586.     useful if a background task wants to display a message on the
  2587.       foreground screen
  2588. SeeAlso: AH=0Ch"MultiDOS"
  2589. --------O-150C-------------------------------
  2590. INT 15 - VMiX - "sys_getstack" - GET POINTER TO PROCESS TSS STACK
  2591.     AH = 0Ch
  2592.     STACK:    WORD    process ID
  2593. Return: DX:AX -> TSS stack store
  2594. SeeAlso: AH=00"VMiX"
  2595. --------T-150C-------------------------------
  2596. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  2597.     AH = 0Ch
  2598. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  2599.       unless AH=0Bh has been called first
  2600. SeeAlso: AH=0Bh"MultiDOS"
  2601. --------O-150D-------------------------------
  2602. INT 15 - VMiX - "sys_spawn" - START A CHILD PROCESS JOB SHELL
  2603.     AH = 0Dh
  2604.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  2605.             followed by standard VMiX shell command string
  2606. Return: AX = process ID or error code "SYS_ERROR"
  2607. Note:    the maximum string length is 7Fh characters
  2608. SeeAlso: AH=0Eh"VMIX",AH=11h"VMiX",INT 21/AH=4Bh
  2609. --------T-150D-------------------------------
  2610. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  2611.     AH = 0Dh
  2612. Note:    calling task receives all time slices until AH=0Eh is called; this
  2613.       allows time-critical events or nonreentrant code to be processed
  2614. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  2615. --------O-150E-------------------------------
  2616. INT 15 - VMiX - "sys_kill" - HARD TERMINATE PROCESS
  2617.     AH = 0Eh
  2618.     STACK:    WORD    process ID
  2619. Return: AX = status (SYS_OK or SYS_ERROR)
  2620. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  2621. --------T-150E-------------------------------
  2622. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  2623.     AH = 0Eh
  2624. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  2625. --------d-150F-------------------------------
  2626. INT 15 C - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  2627.     AH = 0Fh
  2628.     AL = phase code
  2629.         00h reserved
  2630.         01h surface analysis
  2631.         02h formatting
  2632. Return: CF clear if formatting should continue, set if it should terminate
  2633. Note:    called during ESDI drive formatting after each cylinder is completed
  2634. SeeAlso: INT 13/AH=1Ah
  2635. --------O-150F-------------------------------
  2636. INT 15 - VMiX - "sys_getqkey" - GET KEY FIELD OF QUEUED ELEMENT
  2637.     AH = 0Fh
  2638.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  2639.         WORD    ID of element in queue chain
  2640. Return: AX = key
  2641. SeeAlso: AH=0Ah"VMiX"
  2642. --------T-150F-------------------------------
  2643. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  2644.     AH = 0Fh
  2645.     DS:BX -> ASCIZ command
  2646. Return: after command has been processed
  2647. Notes:    specified string is executed as if it had been typed at the MultiDOS
  2648.       command prompt
  2649.     the task is placed on a queue which MultiDOS examines periodically and
  2650.       is suspended until MultiDOS has processed the command
  2651.     all lowercase characters up to the first blank are converted to upper
  2652.       case within the given buffer
  2653. --------O-1510-------------------------------
  2654. INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
  2655.     AH = 10h
  2656.     STACK:    DWORD    pointer to function
  2657.           N WORDs    function args
  2658. Return: AX = function's return value??? (not specified in documentation)
  2659. Note:    while the function is executing, the following global descriptors are
  2660.       available:
  2661.         20h stack segment
  2662.         38h code segment of function
  2663.         40h data alias for function's code segment
  2664.       additional GDT descriptors can be allocated using AH=02h with
  2665.       function "assign gdt"
  2666. SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
  2667. --------T-1510-------------------------------
  2668. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  2669.     AH = 10h
  2670.     AL = semaphore number (00h-3Fh)
  2671. Return: AH = status
  2672.         00h semaphore not in use
  2673.         01h semaphore owned by another task
  2674.         02h invalid semaphore number
  2675.         03h semaphore owned by caller
  2676. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  2677. --------Q-151000-----------------------------
  2678. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  2679.     AX = 1000h
  2680. Return: after other processes run
  2681. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  2682.       the current time-slice is set to expire at the next clock tick rather
  2683.       than immediately
  2684. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  2685. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  2686. SeeAlso: INT 7F/AH=E8h
  2687. --------Q-151001-----------------------------
  2688. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  2689.     AX = 1001h
  2690.     BX = number of bytes to allocate
  2691. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  2692.     AX = status (DV v2.42)
  2693.         0000h successful
  2694.         0001h failed
  2695. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  2696.       common memory.  Under DV v2.42, this call never generates a user
  2697.       prompt regardless of the SETERROR value; instead, it always returns
  2698.       AX=0001h and ES:DI=0000h:0000h if out of memory
  2699. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  2700. --------Q-151002-----------------------------
  2701. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  2702.     AX = 1002h
  2703.     ES:DI -> previously allocated block
  2704. Return: block freed
  2705. SeeAlso: AX=1001h,AX=DE0Dh
  2706. --------Q-151003-----------------------------
  2707. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  2708.     AX = 1003h
  2709.     BH = attribute
  2710.     BL = character
  2711.     DX = segment of object handle for window
  2712. Note:    BX=0 does not display anything, it only positions the hardware cursor
  2713. --------Q-1510-------------------------------
  2714. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  2715.     AH = 10h
  2716.     AL = 04h thru 12h
  2717. Return: pops up "Programming error" window in DV 2.x
  2718. --------Q-151013-----------------------------
  2719. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  2720.     AX = 1013h
  2721.     ES:DI -> FAR service routine
  2722. Return: BX = bit mask indicating which bit was allocated
  2723.          0000h if no more bits available
  2724. SeeAlso: AX=1014h,AX=1015h
  2725. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  2726.       interrupt; if other calls need to be made, the interrupt handler
  2727.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  2728. --------Q-151014-----------------------------
  2729. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  2730.     AX = 1014h
  2731.     BX = bit mask from INT 15/AX=1013h
  2732. SeeAlso: AX=1013h,AX=1015h
  2733. --------Q-151015-----------------------------
  2734. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  2735.     AX = 1015h
  2736.     BX = bit mask for interrupts to post
  2737. Return: indicated routines will be called: (DV 2.0x) at next task switch
  2738.                        (DV 2.2x) immediately on return from
  2739.                              hardware interrupt
  2740. SeeAlso: AX=1013h,AX=1014h
  2741. Notes:    this is one of the few TopView calls which are allowed from a hardware
  2742.       interrupt handler
  2743.     the handler will be called with ES containing the segment of the handle
  2744.       of the next task to be executed; on return, ES must be the segment of
  2745.       a task handle
  2746. --------Q-151016-----------------------------
  2747. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  2748.     AX = 1016h
  2749.     ES:DI = possible object handle
  2750. Return: BX = FFFFh if ES:DI is a valid object handle
  2751.          0000h if ES:DI is not
  2752. Note:    under DESQview versions prior to 2.50, an object handle is always a
  2753.       pointer to the object; for versions 2.50 and up, only task handles
  2754.       are always pointers (other handles may consist of a unique object
  2755.       number and offset into DESQview's common memory)
  2756. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  2757.  
  2758. Format of object:
  2759. Offset    Size    Description
  2760.  00h    WORD    offset in common memory of previous object of same type
  2761.  02h    WORD    offset in common memory of next object of same type
  2762.  04h    WORD    signature FEDCh (DV 2.42-)
  2763.         signature FEDCh or object number (DV 2.50+)
  2764.  06h    WORD    object type
  2765.         00h window/task
  2766.         01h mailbox
  2767.         02h keyboard
  2768.         03h timer
  2769.         04h pointer
  2770.         05h panel
  2771.         06h objectq
  2772.  08h    DWORD    object handle to return to caller
  2773.  0Ch    DWORD    canonicalized object address (segment = common memory)
  2774.  10h    WORD    offset in common memory of owning task
  2775.         (0000h for unowned OBJECTQs)
  2776.  12h    WORD    mapping context
  2777.         offset in common memory of mapping context record (see below)
  2778.     remainder varies by object type and DESQview version
  2779. ---v2.42 keyboard object---
  2780.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  2781.         bit 15: keyboard opened
  2782.  16h  4 BYTEs    ???
  2783.  1Ah    WORD    priority in OBJECTQ???
  2784.  1Ch    ...
  2785.  25h    WORD    offset in common memory of ??? task
  2786.  27h  4 BYTEs    ???
  2787. ---v2.42 objectq object---
  2788.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  2789.         bit 15: OBJECTQ opened
  2790.  16h  2 BYTEs    ???
  2791.  18h    WORD    offset in common memory of ??? task
  2792.  1Ah  6 BYTEs    ???
  2793. ---v2.42 mailbox object---
  2794.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  2795.         bit 15: mailbox opened
  2796.  1Ah    WORD    priority in OBJECTQ???
  2797.  1Ch  6 BYTEs    ???
  2798.  22h    WORD    offset in common memory of mailbox name (counted string)
  2799.         0000h if no name
  2800.      <= 5 BYTEs ???
  2801. ---v2.22-2.42,2.52,2.60 window/task object---
  2802.  14h    BYTE    00h window, 01h task
  2803.  15h    BYTE    internal (not Switch menu) window number???
  2804.  16h    BYTE    internal (not Switch menu) window number???
  2805.  17h    WORD    segment of internal window record (see below)
  2806.  19h  2 BYTEs    ???
  2807.  1Bh    BYTE    cursor row
  2808.  1Ch    BYTE    cursor column
  2809.  1Dh    BYTE    visible window origin, row
  2810.  1Eh    BYTE    visible window origin, column
  2811.  1Fh    BYTE    window height (logical)
  2812.  20h    BYTE    window width (logical)
  2813.  21h    BYTE    window position, row
  2814.  22h    BYTE    window position, column
  2815.  23h    BYTE    window height (visible)
  2816.  24h    BYTE    window width (visible)
  2817.  25h    BYTE    row of top of frame (or window if unframed)
  2818.  26h    BYTE    column of left of frame (or window if unframed)
  2819.  27h    BYTE    window height (physical, including frame)
  2820.  28h    BYTE    window width (physical, including frame)
  2821.  29h    BYTE    unzoomed visible origin, row (00h before first zoom)
  2822.  2Ah    BYTE    unzoomed visible origin, column (00h before first zoom)
  2823.  2Bh    BYTE    unzoomed window position, row (00h before first zoom)
  2824.  2Ch    BYTE    unzoomed window position, column (00h before first zoom)
  2825.  2Dh    BYTE    unzoomed window height (00h before first zoom)
  2826.  2Eh    BYTE    unzoomed window width (00h before first zoom)
  2827.         unzoomed parameters above are updated when window is zoomed
  2828.         to full    screen
  2829.  2Fh    BYTE    ??? initially logical window height
  2830.  30h    BYTE    ??? initially logical window width
  2831.  31h  2 BYTEs    ???
  2832.  33h    BYTE    minimum height of window
  2833.  34h    BYTE    minimum width of window
  2834.  35h    BYTE    maximum height of window
  2835.  36h    BYTE    maximum width of window
  2836.  37h  3 BYTEs    ???
  2837.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  2838.  42h 24 BYTEs    attributes???
  2839.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  2840.  62h  3 BYTEs    ???
  2841.  65h    BYTE    ??? bitflags
  2842.  66h    BYTE    bit 0: window is zoomed
  2843.  67h    BYTE    ???
  2844.  68h    WORD    offset in common memory of window name or 0000h if untitled
  2845.  6Ah    WORD    length of window name
  2846.  6Ch  2 BYTEs    ???
  2847.  6Eh    WORD    offset of logical cursor in window (in character cells)
  2848.  70h    DWORD    pointer to field table for window
  2849.  74h    BYTE    ???
  2850.  75h  2 BYTEs    ???
  2851.  77h    BYTE    number of last-visited field
  2852.  78h    DWORD    pointer to field table entry for last-visited field
  2853.  7Ch  3 BYTEs    ???
  2854.  7Fh    BYTE    select field marker character
  2855.  80h    BYTE    ??? bit flags
  2856.         bit 0: allow ECh window stream opcode to change reverse logattr
  2857.         bit 1: alternate field processing mode selected
  2858.  81h    BYTE    ???
  2859.  82h    DWORD    notification function (manager stream opcode 8Ah)
  2860.         no notification if segment = 0000h
  2861.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  2862.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  2863.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  2864.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  2865.  90h    BYTE    ??? bitflags
  2866.  91h    BYTE    ???
  2867.  ---task object only
  2868.  92h    BYTE    bit flags (bits 0-4)
  2869.  93h    BYTE    character for ??? (default 20h)
  2870.  94h    BYTE    ??? flag
  2871.  95h    WORD    offset in common memory of ???
  2872.  97h  2 BYTEs    ???
  2873.  99h    WORD    ???
  2874.  9Bh    BYTE    ??? bit flags
  2875.         bit 3: ???
  2876.         bit 6: perform protected-attribute processing on select fields
  2877.  9Ch    BYTE    ???
  2878.  9Dh    WORD    offset in common memory of current register save record
  2879.         (see below).  No register save record in use if < 01C0h
  2880.  9Fh    WORD    offset in common memory of task's keyboard object
  2881.  A1h    WORD    offset in common memory of task's OBJECTQ object
  2882.  A3h    WORD    offset in common memory of task's mailbox object
  2883.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  2884.  A7h    DWORD    user's SS:SP
  2885.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  2886.  ADh  6 BYTEs    ???
  2887.  B3h    BYTE    ??? bit flags
  2888.         bit 0: run in foreground only
  2889.  B4h    BYTE    ???
  2890.  B5h    BYTE    ??? bitflags
  2891.  B6h    BYTE    task status (see AX=DE2Ch)
  2892.  B7h  9 BYTEs    ???
  2893.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  2894.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  2895.  C4h  2 BYTEs    ??? (0000h)
  2896.  C6h    WORD    segment of keyboard buffer for task
  2897.  C8h    WORD    offset in common memory of ??? keyboard object
  2898.  CAh    BYTE    ???
  2899. ---v2.22-2.42
  2900.  CBh    WORD    offset in common memory of ??? object
  2901.  CEh    BYTE    ??? flag
  2902.  CFh    WORD    offset in common memory of default notify window for task
  2903.         or 0000h if none
  2904.  D1h  4 BYTEs    ???
  2905.  D5h    BYTE    window number on Switch Window menu
  2906.  D6h  5 BYTEs    ???
  2907.  DBh    WORD    offset in common memory of ??? object
  2908.  DDh  2 BYTEs    ???
  2909.  DFh    WORD    API level for task
  2910.  E1h    WORD    offset in common memory of object task is waiting on if task
  2911.         status is 'waiting', else 0000h
  2912.  E7h    WORD    segment of ???
  2913.  E9h 4    BYTEs    ???
  2914.  EDh    WORD    EMS handle of virtualization buffer, 0000h if no virtualization
  2915.  F1h 12 BYTEs    ???
  2916.  FBh    WORD    ???
  2917.  FDh    BYTE    ???
  2918.  FFh 12 BYTEs    ???
  2919. 10Bh    DWORD    pointer to process record (see below)
  2920. 10Dh 10 BYTEs    ???
  2921. 119h    DWORD    SS:SP for ???
  2922. 11Dh  4 BYTEs    ???
  2923. 121h    DWORD    pointer to ???
  2924. 125h 25 BYTEs    ???
  2925. 13Eh    DWORD    pointer to ??? in system memory
  2926. ---v2.22
  2927. 142h  3 BYTEs    ???
  2928. 145h        task's default keyboard object
  2929. ---v2.42
  2930. 142h    DWORD    pointer to first task instance data record in system memory
  2931. 148h    DWORD    pointer to last task instance data record in system memory
  2932.         (see below)
  2933. 14Ah    BYTE    ???
  2934. 14Dh 42 BYTEs    task's default keyboard object
  2935. 177h 32 BYTEs    task's ObjectQ object
  2936. 197h 41 BYTEs    task's default mailbox object
  2937. 1C0h 24 BYTEs    first register save record
  2938. 450h    --    default top of private stack
  2939. ---v2.52 (probably all DV/X)
  2940. Same as v2.60 below except there is an extra 29 bytes inserted somewhere
  2941.   before offset 9Fh, but not yet known exactly where.  Also, for the WAIT_ON
  2942.   field (v2.60 offset E3h), some X apps (probably waiting on a socket) have
  2943.   0000h even when waiting.
  2944. ---v2.60
  2945.  CBh    WORD    ??? (added in 2.50 - rest is same as 2.42)
  2946.  CDh    WORD    offset in common memory of ??? object
  2947.  D0h    BYTE    ??? flag
  2948.  D1h    WORD    offset in common memory of default notify window for task
  2949.         or 0000h if none
  2950.  D3h  4 BYTEs    ???
  2951.  D7h    BYTE    window number on Switch Window menu
  2952.  D8h  5 BYTEs    ???
  2953.  DDh    WORD    offset in common memory of ??? object
  2954.  DFh  2 BYTEs    ???
  2955.  E1h    WORD    API level for task
  2956.  E3h    WORD    If status at B6h=waiting, offset in common memory of object
  2957.         that task is waiting on, else 0000h. (Task with CPU also
  2958.         has 0000h here)
  2959.  E9h    WORD    segment of ???
  2960.  EBh 4    BYTEs    ???
  2961.  EFh    WORD    EMS handle of virtualization buffer, 0 if no virtualization
  2962.  F3h 12 BYTEs    ???
  2963.  FDh    WORD    ???
  2964.  FFh    BYTE    ???
  2965. 101h  8 BYTEs    ???
  2966. 109h    DWORD    pointer to process record in system memory
  2967. 10Dh 14 BYTEs  ???
  2968. 11Bh    DWORD    SS:SP for ???
  2969. 11Fh  4 BYTEs    ???
  2970. 123h    DWORD    pointer to ???
  2971. 127h 25 BYTEs    ???
  2972. 140h    DWORD    pointer to ??? in system memory
  2973. 144h    DWORD    pointer to first task instance data record in system memory
  2974. 148h    DWORD    pointer to last task instance data record in system memory
  2975.          (from INT 15/AX=DE27h, see below)
  2976. 14Ch    BYTE    ???
  2977. 14Eh 42 BYTEs    task's default keyboard object
  2978. 179h 32 BYTEs    task's ObjectQ object
  2979. 199h 41 BYTEs    task's default mailbox object
  2980. 1C2h 24 BYTEs    first register save record
  2981. 452h    --    default top of private stack
  2982.  
  2983. Format of Register Save Record:
  2984. Offset    Size    Description
  2985.  00h    WORD    AX
  2986.  02h    WORD    BX
  2987.  04h    WORD    CX
  2988.  06h    WORD    DX
  2989.  08h    WORD    DI
  2990.  0Ah    WORD    SI
  2991.  0Eh    WORD    DS
  2992.  10h    WORD    ES
  2993.  12h    DWORD    return address
  2994.  16h    WORD    original flags
  2995.  
  2996. Format of mapping context record:
  2997. Offset    Size    Description
  2998.  00h    WORD    lowest segment in process's memory
  2999.         (often start of system memory chain)
  3000.  02h    WORD    size of process's memory in paragraphs
  3001.  04h    BYTE    flag: 00h if process swapped out, 01h otherwise
  3002.  05h    BYTE    flag: 00h if allocated in conventional memory, 01h if EMS
  3003.  06h  2 BYTEs    ???
  3004.  08h    WORD    EMS handle if in EMS, else 0
  3005.  0Ah  2 BYTEs    ??? (nonzero if system memory resides in shared mem???)
  3006.  0Ch    WORD    segment of system memory block that contains process record,
  3007.         referenced from segment of start of system memory chain
  3008.  0Eh    BYTE    ???
  3009.  0Fh    WORD    size of system memory block that contains process record
  3010.         and DOS memory in paragraphs
  3011.  11h    BYTE    bit flags
  3012.         Bit 0: Swapped out???
  3013.         Bit 1: ???
  3014.         Bit 2: Swapped out???
  3015.  12h    BYTE    ???
  3016.  13h    BYTE    reference count
  3017.  ---v2.31
  3018.  14h 10 BYTEs    ???
  3019.  1Eh    WORD    segment of process record
  3020.  20h  2 BYTEs    ???
  3021.  22h    WORD    segment of ???    (in first free system memory block???)
  3022.  24h    WORD    segment of end of system memory chain
  3023.  26h    WORD    segment of start of system memory chain
  3024.  28h  8 BYTEs    ???
  3025.  2Ah    DWORD    pointer to ??? (process record???)
  3026.  2Dh 10 BYTEs    ???
  3027.  37h    BYTE    lowest interrupt vector to save on context switch
  3028.  38h    BYTE    highest interrupt vector to save on context switch
  3029.  39h    WORD    offset in common memory of main task with this context
  3030.  3Ah 12 BYTEs    ???
  3031.  46h    BYTE    internal mapping context number
  3032.  47h 12 BYTEs    ???
  3033.  ---v2.5x-2.60
  3034.  14h  6 BYTEs    ???
  3035.  1Ah    WORD    segment of process record
  3036.  1Ch  2 BYTEs    ???
  3037.  1Eh    WORD    segment of first free system memory block
  3038.  20h    WORD    segment of start of system memory chain
  3039.  22h    WORD    segment of end of system memory chain
  3040.  24h 8    BYTEs    ???
  3041.  2Ch    DWORD    pointer to ??? (1 segment into process record???)
  3042.  30h 3    BYTEs    ???
  3043.  33h    WORD    Offset in common memory of main task with this context
  3044.  35h 7    BYTEs    ???
  3045.  3Ch    BYTE    internal mapping context number
  3046.  3Dh 14 BYTEs    ???
  3047.  4Bh    WORD    first DOS memory segment (first MCB segment+1)
  3048.  4Dh    BYTE    ??? (flag???)
  3049.  ---v2.53 (2.5x???)
  3050.  4Eh 12 BYTEs    ???
  3051.  ---v2.60
  3052.  4Eh    WORD    segment of script buffer (see below)
  3053.  50h  6 BYTEs    ???
  3054.  
  3055. Format of Internal Window Record (v2.31-2.60):
  3056. Offset    Size    Description
  3057.  00h    BYTE    internal window number???
  3058.  01h    BYTE    display page???
  3059.  02h    BYTE    video mode
  3060.  03h  3 BYTEs    ???
  3061.  06h    BYTE    logical window height
  3062.  07h    BYTE    logical window width
  3063.  08h    DWORD    pointer to text video buffer
  3064.  0Ch 116 BYTEs    ???
  3065.  
  3066. Format of process record (v2.31):
  3067. Offset    Size    Description
  3068. -470h 13 BYTEs    filename of ??? Script
  3069. -463h 1117 BYTEs ??? (script buffer???)
  3070.  -6h  6 BYTEs    ???
  3071.  00h    WORD    segment of parent PSP in process
  3072.  02h  5 BYTEs    ???
  3073.  07h    WORD    segment of current PSP in process
  3074.  09h    WORD    segment of first MCB in process
  3075.  0Bh 13 BYTEs    ???
  3076.  18h 1024 BYTEs process's interrupt vector table
  3077. 418h 376 BYTEs    ???
  3078. 590h        first MCB in process
  3079.  
  3080. Format of process record (v2.53-v2.60) (probably also 2.5x):
  3081. Offset    Size    Description
  3082.  00h 28 BYTEs    EXE header of last EXE, ??? if last program run was COM
  3083.  1Ch ??? BYTEs    overwritten with ASCIZ filename of last program run (EXE/COM)
  3084. 11Ch    WORD    segment of parent PSP in process
  3085. 11Eh  4 BYTEs    ???
  3086. 122h    WORD    segment of current PSP
  3087. 124h    WORD    segment of current PSP
  3088. 126h    WORD    segment of first MCB in process
  3089. 128h  4 BYTEs    ???
  3090. 12Ch    DWORD    pointer to first process instance data record in system memory
  3091. 130h    DWORD    pointer to last process instance data record in system memory
  3092.         (from INT 15/AX=DE27h, see below)
  3093. 134h  8 BYTEs    ???
  3094. 13Ch    WORD    size of current environment
  3095. 13Eh    WORD    segment of current environment
  3096. 140h    WORD    segment of current PSP
  3097. 142h    DWORD    entry point of current program
  3098. 146h 10 BYTEs    ???
  3099. ---v2.52 (v2.5x???)
  3100. 150h    BYTE    ???
  3101. 151h    WORD    segment of parent PSP in process
  3102. 153h    WORD    ???
  3103. 155h    WORD    ???
  3104. 157h    WORD    ???
  3105. 159h  4 BYTEs    ???
  3106. 15Dh    WORD    segment of current environment
  3107. 15Fh    WORD    segment of current PSP
  3108. 161h    WORD    segment of ???
  3109. 162h    WORD    ???
  3110. 164h  3 BYTEs    ???
  3111. 168h 1024 BYTEs process's interrupt vector table
  3112. 568h 120 BYTEs    ???
  3113. 5E0h        first MCB in process
  3114. ---v2.60
  3115. 150h    WORD    segment of parent PSP in process
  3116. 152h    WORD    ???
  3117. 154h    WORD    ???
  3118. 156h    WORD    ???
  3119. 158h  4 BYTEs    ???
  3120. 15Ch    WORD    segment of current environment
  3121. 15Eh    WORD    segment of current PSP
  3122. 160h    WORD    segment of ???
  3123. 162h    WORD    ???
  3124. 164h 1024 BYTEs process's interrupt vector table
  3125. 564h 108 BYTEs    ???
  3126. 5D0h        first MCB in process
  3127.  
  3128. Format of task or process instance data record (v2.5x???, v2.60):
  3129. Offset    Size    Description
  3130.  00h    DWORD    pointer to next record of same type or 00000000
  3131.  04h    DWORD    pointer to previous record of same type or 00000000
  3132.  08h    DWORD    pointer to source area of memory during restore state
  3133.  0Ch    WORD    number of bytes to save/restore
  3134.  0Eh    DWORD    pointer to destination area of memory during restore state
  3135.  12h    WORD    ??? (0)
  3136.  14h  N BYTEs    source memory buffer during restore state
  3137.  
  3138. Format of script buffer (v2.60):
  3139. Offset    Size    Description
  3140.  00h 13 BYTEs    ASCIZ Script filename
  3141.  0Dh 80 BYTEs    ???
  3142.  5Eh  N BYTEs    script records (see below)
  3143.  
  3144. Format of one script record (v2.60):
  3145. Offset    Size    Description
  3146.  00h    BYTE    signature 12h
  3147.  01h 18 BYTEs    blank-padded script name
  3148.  13h    BYTE    ASCII code of key attached to script or 0 if non-ASCII key
  3149.  14h    BYTE    scan code of key attached to script if non-ASCII, else 0
  3150.  15h    BYTE    ???
  3151.  16h    WORD    size of script in bytes
  3152.  18h  N    BYTEs    script (ASCII code of each keystroke; if 0, next byte is
  3153.         scan code of non-ASCII key)
  3154.  
  3155. Format of Common Memory Header (v2.31-2.60) (at beginning of commom mem seg):
  3156. Offset    Size    Description
  3157.  00h    WORD    offset of lowest used block
  3158.  02h    WORD    bytes of commom memory, including header
  3159.  04h    WORD    offset of first free block
  3160.  06h  N BYTEs    size depends of DV version, ??? (DVP buffer???)
  3161.  
  3162. Format of Free block header:
  3163. Offset    Size    Description
  3164.  00h    WORD    size of block in bytes including header
  3165.  02h    WORD    offset of next free block
  3166.  04h  N BYTEs    free block
  3167.  
  3168. Format of Used block header:
  3169. Offset    Size    Description
  3170.  00h    WORD    size of block in bytes including header
  3171.  02h  N BYTEs    used block
  3172. --------Q-151017-----------------------------
  3173. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  3174.     AX = 1017h
  3175. Return: pops up "Programming error" window in DV 2.x
  3176. --------Q-151018-----------------------------
  3177. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  3178.     AX = 1018h
  3179.     BH = column
  3180.     BL = row
  3181.     ES = segment of object handle for window below which to search
  3182.          0000h = start search with topmost window
  3183. Return: ES = segment of object handle for window which is visible at the
  3184.            indicated position, or covered by indicated window
  3185.        = 0000h no window
  3186. SeeAlso: AX=1023h,AX=1024h
  3187. --------Q-151019-----------------------------
  3188. INT 15 - TopView - "SOUND" - MAKE TONE
  3189.     AX = 1019h
  3190.     BX = frequency in Hertz (0000h = silence)
  3191.     CX = duration in clock ticks (18.2 ticks/sec)
  3192. Return: immediately, tone continues to completion
  3193. Notes:    if another tone is already playing, the new tone does not start until
  3194.       completion of the previous one.  Up to 32 tones may be queued before
  3195.       the process is blocked until a note completes.
  3196.     in DV 2.00, the lowest tone allowed is 20 Hz
  3197.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  3198.       notes are also cancelled
  3199. SeeAlso: AH=82h"HUNTER",INT 16/AH=73h
  3200. --------Q-15101A-----------------------------
  3201. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  3202.     AX = 101Ah
  3203. Return: stack switched
  3204. Notes:    this call may not be nested; a second call must be preceded by a call
  3205.       to "USTACK" (AX=1025h)
  3206.     while TopView requires many API calls to be executed while on the
  3207.       task's internal stack, DESQview allows those calls to be executed
  3208.       regardless of the current stack
  3209. SeeAlso: AX=1025h
  3210. --------Q-15101B-----------------------------
  3211. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  3212.     AX = 101Bh
  3213. Return: task-switching temporarily disabled
  3214. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  3215.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  3216.       will again be disabled)
  3217.     suspends the caller until DOS is free
  3218. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  3219. SeeAlso: INT 60/DI=0602h
  3220. --------Q-15101C-----------------------------
  3221. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  3222.     AX = 101Ch
  3223. Return: task-switching enabled
  3224. Note:    this API call may be made from within a hardware interrupt handler
  3225. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  3226. --------Q-15101D-----------------------------
  3227. INT 15 - TopView - "STOP" - STOP TASK
  3228.     AX = 101Dh
  3229.     ES = segment of object handle for task to be stopped
  3230.          (== handle of main window for that task)
  3231. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  3232. Note:    once a task has been stopped, additional "STOP"s are ignored
  3233. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  3234.       current task
  3235. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  3236. --------Q-15101E-----------------------------
  3237. INT 15 - TopView - "START" - START TASK
  3238.     AX = 101Eh
  3239.     ES = segment of object handle for task to be started
  3240.          (== handle of main window for that task)
  3241. Return: indicated task is started up again
  3242. Note:    once a task has been started, additional "START"s are ignored
  3243. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  3244. --------Q-15101F-----------------------------
  3245. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  3246.     AX = 101Fh
  3247.     BX = bit fields
  3248.          bits 0-12: number of characters to display
  3249.          bits 13,14: which mouse button may be pressed to remove window
  3250.              00 = either
  3251.              01 = left
  3252.              10 = right
  3253.              11 = either
  3254.          bit 15: beep if 1
  3255.     ES:DI -> text of message
  3256.     CH = width of error window (0 = default)
  3257.     CL = height of error window (0 = default)
  3258.     DX = segment of object handle
  3259. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  3260. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  3261. --------Q-151020-----------------------------
  3262. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  3263.     AX = 1020h
  3264. Return: pops up "Programming error" window in DV v2.00+
  3265. --------Q-151021-----------------------------
  3266. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  3267.     AX = 1021h
  3268.     BX = segment of object handle for task to interrupt (not self)
  3269.     DX:CX -> FAR routine to jump to next time task is run
  3270. Return: nothing
  3271. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  3272.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  3273.       needs to be preserved
  3274.     multiple PGMINTs to a single task are processed last-in first-out
  3275.     if the other task is in a DOS or DV API call, the interruption will
  3276.       occur on return from that call
  3277. --------Q-151022BX0000-----------------------
  3278. INT 15 - TopView - "GETVER" - GET VERSION
  3279.     AX = 1022h
  3280.     BX = 0000h
  3281. Return: BX nonzero, TopView or compatible loaded
  3282.     (BL = major version, BH = minor version)
  3283. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  3284. --------Q-151023-----------------------------
  3285. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  3286.     AX = 1023h
  3287.     BX = segment of object handle for parent window within which to
  3288.          position the window (0 = full screen)
  3289.     ES = segment of object handle for window to be positioned
  3290.     DL = bit flags
  3291.          bits 0,1: horizontal position
  3292.         00 = current
  3293.         01 = center
  3294.         10 = left
  3295.         11 = right
  3296.          bits 2,3: vertical position
  3297.         00 = current
  3298.         01 = center
  3299.         10 = top
  3300.         11 = bottom
  3301.          bit 4: don't redraw screen if set
  3302.          bits 5-7 not used
  3303.     CH = number of columns to offset from position specified by DL
  3304.     CL = number of rows to offset from position specified by DL
  3305. Return: nothing
  3306. --------Q-151024-----------------------------
  3307. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  3308.     AX = 1024h
  3309.     BX = segment of object handle for window
  3310.           (0 = use default)
  3311. Return: ES:DI -> virtual screen
  3312.     CX = size of virtual screen in bytes
  3313.     DL = 00h text screen
  3314.          01h graphics screen
  3315. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  3316. --------Q-151025-----------------------------
  3317. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  3318.     AX = 1025h
  3319. Return: stack switched back
  3320. Notes:    call only after having switched to internal stack with AX=101Ah
  3321.     while TopView requires many API calls to be executed while on the
  3322.       task's private stack, DESQview allows those calls to be executed
  3323.       regardless of the current stack
  3324. SeeAlso: AX=101Ah
  3325. --------Q-1510-------------------------------
  3326. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  3327.     AH = 10h
  3328.     AL = 26h thru 2Ah
  3329. Return: pops up "Programming error" window in DV 2.x
  3330. --------Q-15102B-----------------------------
  3331. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  3332.     AX = 102Bh
  3333.     BX = segment of object handle for task
  3334. Return: nothing
  3335. Note:    forces a task which is waiting on its objectq to continue by placing
  3336.       the handle for the task on the objectq
  3337. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  3338. --------Q-15102C-----------------------------
  3339. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  3340.     AX = 102Ch
  3341.     ES:DI -> contents of .PIF/.DVP file (see below)
  3342.     BX = size of .PIF/.DVP info
  3343. Return: BX = segment of object handle for new task
  3344.          0000h on error
  3345. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  3346.  
  3347. Format of .PIF/.DVP file:
  3348. Offset    Size    Description
  3349.  00h    BYTE    reserved (0)
  3350.  01h    BYTE    checksum of bytes 02h through 170h
  3351.  02h 30 BYTEs    blank-padded program title
  3352.  20h    WORD    maximum memory to allocate to partition in KB
  3353.  22h    WORD    minimum memory required in KB
  3354.  24h 64 BYTEs    ASCIZ program pathname
  3355.  64h    BYTE    default drive letter ('A',...)
  3356.  65h 64 BYTEs    ASCIZ default directory name
  3357.  A5h 64 BYTEs    ASCIZ program parameters
  3358.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  3359.  E6h    BYTE    number of text pages used
  3360.  E7h    BYTE    number of first interrupt to save
  3361.  E8h    BYTE    number of last interrupt to save
  3362.  E9h    BYTE    rows in virtual screen buffer
  3363.  EAh    BYTE    columns in virtual screen buffer
  3364.  EBh    BYTE    initial window position, row
  3365.  ECh    BYTE    initial window position, column
  3366.  EDh    WORD    system memory in KB
  3367.  EFh 64 BYTEs    ASCIZ shared program name
  3368. 12Fh 64 BYTEs    ASCIZ shared program data file
  3369. 16Fh    BYTE    flags1
  3370.         bit 7: writes text directly to screen
  3371.         bit 6: runs in foreground only (see also offset 184h)
  3372.         bit 5: uses math coprocessor
  3373.         bit 4: accesses system keyboard buffer directly
  3374.         bits 3-1: reserved (0)
  3375.         bit 0: swappable
  3376. 170h    BYTE    flags2
  3377.         bit 6: uses command-line parameters in field at A5h
  3378.         bit 5: swaps interrupt vectors
  3379. ---information unique to .DVP files---
  3380. 171h  2 BYTEs    keys to use on open menu
  3381. 173h    WORD    size of script buffer in bytes
  3382. 175h    WORD    automatically give up CPU after this many tests for keyboard
  3383.         input in one clock tick (default 0 = never)
  3384. 177h    BYTE    nonzero = "uses own colors"
  3385. 178h    BYTE    nonzero if application swappable
  3386. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  3387.         in actual .DVP files, frequently 01h
  3388. 17Ch    BYTE    nonzero to automatically close on exit (see also offset 18Bh)
  3389. 17Dh    BYTE    nonzero if copy-protect floppy is required
  3390. ---information unique to DESQview 2.0+---
  3391. 17Eh    BYTE    .DVP version number
  3392.         00h DESQview v1.2+
  3393.         01h DESQview v2.0+
  3394.         02h DESQview v2.2+
  3395. 17Fh    BYTE    reserved (0)
  3396. 180h    BYTE    initial number of rows in physical window
  3397. 181h    BYTE    initial number of columns in physical window
  3398. 182h    WORD    maximum expanded memory to allow, in KB
  3399. 184h    BYTE    flags3
  3400.         bit 7: automatically assign window position
  3401.         bit 5: maximum memory value has been specified
  3402.         bit 4: disallow "Close" command
  3403.         bit 3: foreground-only when doing graphics
  3404.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  3405.         bit 2: don't virtualize (see also offset 18Bh)
  3406.         bit 1: foreground-only during DOS calls
  3407.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  3408. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  3409.         bit 3: save/restore entire INT 09 handler state every taskswtch
  3410.         bit 2: take special precautions for programs which read the
  3411.             BIOS keyboard buffer directly from memory
  3412.         bit 1: never indicate keystroke available during scripts/xfers
  3413.         bit 0: only indicate keystroke available every sixth poll
  3414. 186h    BYTE    number of graphics pages used
  3415. 187h    WORD    extra system memory size
  3416. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  3417. ---information unique to DESQview 2.2+---
  3418. 18Ah    BYTE    serial port usage
  3419.         FFh uses all serial ports
  3420.         00h no serial ports
  3421.         01h only COM1
  3422.         02h only COM2
  3423. 18Bh    BYTE    flags4
  3424.         bit 7: automatically close application on exit if .COM or .EXE
  3425.             specified (see also offset 17Ch)
  3426.         bit 6: swappable if not using serial ports
  3427.         bit 5: start program with window hidden (v2.26+)
  3428.         bit 4: start program in background (v2.26+)
  3429.         bit 3: virtualize text (see also offset 184h)
  3430.         bit 2: virtualize graphics (see also offset 184h)
  3431.         bit 1: share CPU when foreground
  3432.         bit 0: share EGA when foreground and zoomed
  3433. 18Ch    BYTE    protection level for 386 machines
  3434. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  3435. ---information unique to DESQview/X 1.0---
  3436. 18Dh    BYTE    X flags
  3437.         bits 3-7: unused (0)
  3438.         bit 2: don't display wait message when opening window
  3439.         bit 1: don't display DOS window
  3440.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  3441.                (NEWPROC) inherit DOS client layer usage
  3442. 18Eh    BYTE    X keyboard behavior (0-3)
  3443. 18Fh    BYTE    font scaling
  3444.         00h fixed fonts
  3445.         01h scalable fonts
  3446. 190h 10 BYTEs    reserved (0)
  3447. 19Ah    WORD    length of data follownig XDVP signature
  3448. 19Ch  4 BYTEs    signature "XDVP"
  3449. 1A0h  N BYTEs    list of variable length records (see below)
  3450.  
  3451. Format of variable length record:
  3452. Offset    Size    Description
  3453.  00h    WORD    length of following record, 0000h if end of record list
  3454.  02h    BYTE    record type
  3455.         01h script filename, up to 64 characters
  3456.         02h command-line parameters (allows >64 characters on cmdline)
  3457.         03h environment inheritance
  3458.         04h environment string
  3459.         05h starting window position
  3460. ---types 01h,02h,04h---
  3461.  03h  N BYTEs    ASCII data
  3462. ---type 03h---
  3463.  03h    BYTE    inheritance
  3464.         00h do not inherit
  3465.         01h inherit environment
  3466. ---type 05h---
  3467.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  3468.         starting row, starting column, starting height, starting width
  3469. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  3470.       only the last instance of each type is used; multiple occurrences of
  3471.       type 04h are concatenated
  3472. --------Q-15102D-----------------------------
  3473. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  3474.     AX = 102Dh
  3475.     BL = subfunction
  3476.          00h determine whether using keyboard mouse
  3477.         Return: BL = 00h using real mouse
  3478.                  01h using keyboard mouse
  3479.          01h turn keyboard mouse on
  3480.          02h turn keyboard mouse off
  3481. --------Q-15102E-----------------------------
  3482. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  3483.     AX = 102Eh
  3484.     BX = number of bytes
  3485. Return: AX = status
  3486.         0000h successful
  3487.         ES:DI -> allocated system memory
  3488.         0001h failed
  3489.         ES:DI = 0000h:0000h
  3490. Note:    under DV 2.42, this call is identical to AX=1001h
  3491. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  3492.  
  3493. Format of system memory block header (one paragraph before memory block):
  3494. Offset    Size    Description
  3495.  00h    WORD    segment of next header or 0000h
  3496.  02h    WORD    segment of previous header or 0000h
  3497.  04h    WORD    size of block in paragraphs, including header
  3498.  06h    BYTE    availability flag (00h in use, 01h free)
  3499. --------Q-1511-------------------------------
  3500. INT 15 - TopView commands
  3501.     AH = 11h
  3502.     AL = various (except 17h)
  3503. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  3504.       see those below
  3505. SeeAlso: AH=DEh
  3506. --------T-1511-------------------------------
  3507. INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
  3508.     AH = 11h
  3509.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  3510.             request (max len = 127)
  3511. Return: AX = status (SYS_OK or SYS_ERROR)
  3512. SeeAlso: AH=0Ch"VMiX"
  3513. --------T-1511-------------------------------
  3514. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  3515.     AH = 11h
  3516. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  3517. SeeAlso: AH=12h"MultiDOS"
  3518. Index:    hotkeys;MultiDOS Plus
  3519. --------Q-151117BX0000-----------------------
  3520. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  3521.     AX = 1117h
  3522.     BX = 0000h    get current mapping context without setting
  3523.          nonzero    set new mapping context
  3524. Return: BX = mapping context in effect before call
  3525.     interrupts enabled
  3526. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  3527.     mapping contexts determine conventional-memory addressability; setting
  3528.       a mapping context ensures that the associated program and data areas
  3529.       are in memory for access.  Usable by drivers, TSRs and shared
  3530.       programs.
  3531.     caller need not be running under DESQview, but must ensure that the
  3532.       stack in use will not be mapped out by the call
  3533. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  3534. --------m-1511DE-----------------------------
  3535. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  3536.     AX = 11DEh
  3537. Return: CF clear if installed
  3538.         AX = segment at which QEXT.SYS is located
  3539. Desc:    QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
  3540.       versions also implement the XMS standard
  3541. Note:    a private entry point may be found by searching the beginning of the
  3542.       returned segment for the signature string
  3543.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  3544.       prior to the signature contains the QEXT version number in BCD,
  3545.       and the word prior to that contains the offset within the QEXT
  3546.       code segment of the private entry point
  3547. SeeAlso: INT 2F/AX=4310h,INT 67/AH=3Fh
  3548.  
  3549. Call private entry point with:
  3550.     AH = 00h ???
  3551.     AH = nonzero ???
  3552. --------T-1512-------------------------------
  3553. INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
  3554.     AH = 12h
  3555.     STACK:    WORD    process ID
  3556. Return: AX = status (SYS_OK or SYS_ERROR)
  3557. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  3558. --------T-1512-------------------------------
  3559. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  3560.     AH = 12h
  3561. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  3562. SeeAlso: AH=11h"MultiDOS"
  3563. Index:    hotkeys;MultiDOS Plus
  3564. --------Q-1512--BH00-------------------------
  3565. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  3566.     AH = 12h
  3567.     BH = 00h
  3568.     BL = which handle to return
  3569.         00h handle in DWORD on top of stack
  3570.         01h current task's window handle
  3571.         02h given task's mailbox handle (task's handle on stack)
  3572.         03h current task's mailbox handle
  3573.         04h given task's keyboard handle (task's handle on stack)
  3574.         05h current task's keyboard object handle
  3575.         06h given task's OBJECTQ handle (task's handle on stack)
  3576.         07h current task's OBJECTQ handle
  3577.         08h      \
  3578.           thru > return 0000:0000 under DV < 2.26
  3579.         10h      /
  3580.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  3581.         0Dh (2.26+) task handle of owner (parent) of current task
  3582. Return: DWORD on top of stack is object handle
  3583. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  3584.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  3585.       window)
  3586. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  3587. --------Q-1512--BH01-------------------------
  3588. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  3589.     AH = 12h
  3590.     BH = 01h
  3591.     BL = object type to create
  3592.         00h (DV 2.0x only) handle is DWORD on top of stack
  3593.         01h (DV 2.0x only) use task's window handle
  3594.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  3595.         03h (DV 2.0x only) current task's mailbox
  3596.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  3597.         05h (DV 2.0x only) current task's keyboard object
  3598.         08h WINDOW class
  3599.         09h MAILBOX class
  3600.         0Ah KEYBOARD class
  3601.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  3602.         0Fh POINTER object
  3603.         10h PANEL object
  3604.     STACK: (if window object or WINDOW class)
  3605.            DWORD address to jump to (no new task if high word == 0)
  3606.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  3607.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  3608.            DWORD bytes system memory for input buffer for READ/READN
  3609.             (0 == none, -1 == default--same as logical window size)
  3610.            DWORD window size, columns
  3611.            DWORD window size, rows
  3612.            DWORD length of window title
  3613.            DWORD address of window title
  3614. Return: DWORD on top of stack is new object handle
  3615. Notes:    if a new task is created, it is started with
  3616.       AX = BX = SI = DI = BP = 0
  3617.       DX:CX = handle of parent task
  3618.       DS = ES = SS = segment of private stack (and new task's handle)
  3619.     new windows are orphans, inherit the colors/hidden status of the
  3620.       creating task's window, and are placed in the upper left hand corner
  3621.       of the screen but not automatically redrawn
  3622.     new keyboards are closed, and have all object bits cleared except for
  3623.       the hardware cursor bit
  3624. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  3625. --------Q-1512--BH02-------------------------
  3626. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  3627.     AH = 12h
  3628.     BH = 02h
  3629.     BL = object
  3630.         00h handle in DWORD on top of stack
  3631.         window: close window and free
  3632.         timer: free timer
  3633.         panel: free panel object
  3634.         pointer: free pointer
  3635.         01h task's window handle - kills task, never returns
  3636.         02h given task's mailbox (task's handle on top of stack)
  3637.         03h current task's mailbox
  3638.         04h given task's keyboard (task's handle on top of stack)
  3639.         05h current task's keyboard object
  3640. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  3641.       task windows also free any mailbox, objectq, and panel objects held
  3642.       by the task and any child tasks
  3643.     if the keyboard being freed is the default keyboard for a task, this
  3644.       call is equivalent to CLOSE
  3645.     panel and pointer objects are automatically closed if open
  3646. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  3647. --------Q-1512--BH03-------------------------
  3648. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  3649.     AH = 12h
  3650.     BH = 03h
  3651.     BL = object
  3652.         00h mailbox handle in DWORD on top of stack
  3653.         02h sender of last msg read from mailbox (task's handle on stack)
  3654.         03h sender of last msg read from current task's mailbox
  3655. Return: DWORD on stack is task handle of message sender
  3656. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  3657. --------Q-1512--BH03-------------------------
  3658. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  3659.     AH = 12h
  3660.     BH = 03h
  3661.     BL = window to be connected
  3662.         00h handle of window to be attached in DWORD on top of stack
  3663.         01h attach current task's main window
  3664.     STACK: DWORD handle of window to attach to or 00000000h to detach
  3665. Return: STACK popped
  3666. Notes:    when two windows are connected, both will move if the user moves either
  3667.     multiple windows may be attached to a single window, but each window
  3668.       may only be attached to one window at a time
  3669. SeeAlso: AH=12h/BH=83h
  3670. --------Q-1512--BX0300-----------------------
  3671. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  3672.     AH = 12h
  3673.     BX = 0300h
  3674.     STACK: DWORD handle of panel object
  3675. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  3676.            DWORD address of directory
  3677. Note:    a null string is returned if the object is not open
  3678. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  3679.  
  3680. Format of panel file:
  3681. Offset    Size    Description
  3682.  00h  2 BYTEs    C0h C3h
  3683.  02h    BYTE    number of panels in file
  3684.  03h    for each panel in file:
  3685.         8 BYTEs  blank-padded panel name
  3686.           DWORD  panel offset in file
  3687.           WORD   panel length
  3688.     data for panels (each consists of one or more window/query/manager
  3689.     streams)
  3690.         first byte of each panel must be 1Bh, fifth byte must be E5h
  3691. --------Q-1512--BH04-------------------------
  3692. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  3693.     AH = 12h
  3694.     BH = 04h
  3695.     BL = window to read from
  3696.         00h handle is DWORD on top of stack
  3697.         01h use calling task's default window
  3698.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  3699.         0Dh (DV 2.26+) default window of parent task of current task
  3700. Return: STACK:    DWORD number of bytes read
  3701.         DWORD address of buffer
  3702. Notes:    reading starts at the current logical cursor position; the cursor is
  3703.       updated to point at the character following the last one read
  3704.     any translucent blanks (FFh) which are visible on screen are changed
  3705.       to the character which is seen through them
  3706.     the string produced by the read is placed in an input buffer which may
  3707.       be reused by the next READ or READN of a window
  3708.     window stream opcodes D8h and D9h determine whether the read returns
  3709.       characters or attributes
  3710. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  3711. --------Q-1512--BH04-------------------------
  3712. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  3713.     AH = 12h
  3714.     BH = 04h
  3715.     BL = object
  3716.         00h handle is DWORD on top of stack
  3717.         mailbox: wait for and get next message
  3718.         keyboard: wait for and get pointer to next input buffer
  3719.         pointer: wait for and get next message
  3720.         02h get next message from mailbox (task's handle on top of stack)
  3721.         03h get next message from current task's mailbox
  3722.         04h get the next input from keyboard (handle on top of stack)
  3723.         05h get the next input from task's default keyboard
  3724.         06h wait for input from any object in OBJECTQ (handle on stack)
  3725.         07h wait for input from any object in task's default OBJECTQ
  3726. Return: STACK: (if objectq) DWORD handle of object with input
  3727.            (otherwise)  DWORD number of bytes
  3728.                 DWORD address
  3729. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  3730.       containing the character code as returned by the BIOS; the BIOS scan
  3731.       code is available via the STATUS call if the character is zero
  3732.     for a keyboard in field mode, the input buffer format is determined
  3733.       by the field table header for the window the keyboard is attached to
  3734.     keyboard input buffers and mailbox message buffers may be invalidated
  3735.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  3736. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  3737.  
  3738. Format of pointer message:
  3739. Offset    Size    Description
  3740.  00h    WORD    row
  3741.  02h    WORD    column
  3742.  04h    BYTE    status
  3743.         bit 7: set when press/release mode active and button pressed
  3744.         bit 6: set when press/release mode active and button released
  3745.         bits 7-2: number of clicks-1 if multiple-click mode active
  3746.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  3747.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  3748. --------Q-1512--BX0400-----------------------
  3749. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  3750.     AH = 12h
  3751.     BX = 0400h
  3752.     STACK: DWORD timer's handle
  3753. Return: after timer expires
  3754.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  3755. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  3756. --------Q-1512--BX0400-----------------------
  3757. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  3758.     AH = 12h
  3759.     BX = 0400h
  3760.     STACK: DWORD handle of panel object
  3761.            DWORD window's handle (or 0 for current task's window)
  3762.            DWORD length of panel name
  3763.            DWORD pointer to panel name
  3764. Return: STACK: DWORD handle of window which was used
  3765.            DWORD handle of keyboard or 0
  3766. Notes:    status of APPLY may be checked with STATUS message
  3767.     panel MUST have the following format
  3768.       first byte must be 1Bh (i.e. must start with a stream)
  3769.       first opcode in stream must be E5h
  3770.         single byte arg of opcode is interpreted thus:
  3771.           bits 7,6    11 means create new window
  3772.             10 means create new field table for existing window
  3773.             01 means use existing window and field table
  3774.           bit 5 if set, panel contains a field table
  3775.             (creates a new keyboard and puts it in field mode)
  3776.           bit 4 if set, panel contains input fields
  3777.           bit 3 if set, panel contains select fields but no input fields
  3778.     if the panel contains input or select fields, a keyboard handle is
  3779.       returned; either the window's current open keyboard or a
  3780.       newly-created keyboard object.  The caller should read that keyboard
  3781.       to obtain input from the panel.
  3782. SeeAlso: AH=12h/BH=84h
  3783. --------Q-1512--BH05------------------------
  3784. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  3785.     AH = 12h
  3786.     BH = 05h
  3787.     BL = object
  3788.         00h handle is DWORD on top of stack
  3789.         timer: start timer to end at a specified time
  3790.         keyboard: add input buffer to queue
  3791.         pointer: move pointer icon to specified position
  3792.         02h send message by value/status=0 to mbox (task's handle on stack)
  3793.         03h send message by value/status=0 to current task's mailbox
  3794.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  3795.         05h add input buffer to task's default KEYBOARD queue
  3796.         06h add an object to OBJECTQ (handle on top of stack)
  3797.         07h add an object to task's default OBJECTQ
  3798.     STACK: (if mailbox)  DWORD length
  3799.                  DWORD address
  3800.            (if keyboard) DWORD status (scan code in keystroke mode)
  3801.                  DWORD length (should be 1 in keystroke mode)
  3802.                  DWORD address
  3803.            (if objectq)  DWORD handle of object to add
  3804.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  3805.                    only accurate to 1/18 sec)
  3806.            (if pointer)  DWORD column relative to origin of window
  3807.                  DWORD row relative to origin of window
  3808. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  3809.     the data and status written to a keyboard object must match the format
  3810.       returned by the keyboard object in the current mode
  3811.     the pointer position is scaled according to the current scaling factors
  3812. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  3813. --------Q-1512--BH05-------------------------
  3814. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  3815.     AH = 12h
  3816.     BH = 05h
  3817.     BL = window to write to
  3818.         00h DWORD on top of stack is window handle
  3819.         01h write string to task's default window
  3820.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  3821.         0Dh (DV 2.26+) default window of parent of current task
  3822.     STACK: DWORD object handle if handle passed on stack
  3823.            DWORD total length of string (high word == 0)
  3824.            DWORD address of string to display
  3825. Return: indicated actions performed
  3826.     a. non-control characters are displayed (opcodes DEh and DFh control
  3827.        whether the attributes are left or changed to the current attrib)
  3828.     b. CR/LF/BS/Tab cause the usual cursor movement
  3829.     c. ESC starts a data structure with additional commands if following
  3830.        byte is less than 20h; otherwise, it is written to the window
  3831.     STACK:    DWORD handle of new window if window stream opcode E6h
  3832.         else nothing
  3833. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  3834.  
  3835. Data Structure:
  3836.     MAGIC  DB  1Bh
  3837.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  3838.     LENGTH DW  ?   ; length of remainder in bytes
  3839.     var-length fields follow, each an OPCODE followed by
  3840.          zero or more args
  3841.  
  3842. MODE 00h (set or display values) "WINDOW STREAM"
  3843.     Opcodes:args
  3844.     00h  display 20h blanks with the default attribute
  3845.     01h-1Fh display OPCODE blanks with the default attribute
  3846.     20h  display char with default attribute 20h times
  3847.          BYTE char to repeat
  3848.     21h-3Fh display char with default attribute OPCODE-20h times
  3849.          BYTE char to repeat
  3850.     40h  display 20h blanks with specified attribute
  3851.          BYTE attribute of blanks
  3852.     41h-5Fh display OPCODE-40h blanks with specified attribute
  3853.          BYTE attribute of blanks
  3854.     60h  display next 20h characters
  3855.          20h BYTEs characters to display
  3856.     61h-7Fh display next OPCODE-60h characters
  3857.          N BYTEs characters to display
  3858.     80h-87h     display N blanks with default attribute
  3859.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  3860.               [000h means 800h]
  3861.     88h-8Fh display N copies of the character
  3862.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  3863.               [000h means 800h]
  3864.          BYTE character to repeat
  3865.     90h-97h     display N blanks with specified attribute
  3866.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  3867.               [000h means 800h]
  3868.          BYTE attribute
  3869.     98h-9FH     display string at logical cursor pos
  3870.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  3871.               [000h means 800h]
  3872.          N BYTEs string to display
  3873.     A0h  set logical cursor row
  3874.          BYTE row number (0 is top)
  3875.     A1h  set logical cursor column
  3876.          BYTE column number (0 is leftmost)
  3877.     A2h  set top edge of scrolling region
  3878.          BYTE row
  3879.     A3h  set left edge of scrolling region
  3880.          BYTE column
  3881.     A4h  set row of physical window position
  3882.          BYTE line
  3883.     A5h  set column of physical window position
  3884.          BYTE column
  3885.     A6h  set height of physical window
  3886.          BYTE #rows
  3887.     A7h  set width of physical window
  3888.          BYTE #columns
  3889.     A8h  set viewport row
  3890.          BYTE row
  3891.     A9h  set viewport column
  3892.          BYTE column
  3893.     AAh  set virtual screen height [contents of window unpredictable after]
  3894.          BYTE rows
  3895.     ABh  set virtual screen width [contents of window unpredictable after]
  3896.          BYTE columns
  3897.     ACh-AEh     unused
  3898.     AFh  set compatible/preferred video modes
  3899.          BYTE compatibility/preference mask
  3900.         bit 7    compatible with monochrome
  3901.         bit 6    compatible with color text, EGA/VGA graphics
  3902.         bit 5    compatible with medium-resolution CGA graphics
  3903.         bit 4    compatible with high-resolution CGA graphics
  3904.         bit 3    prefer monochrome
  3905.         bit 2    prefer color text, EGA/VGA graphics
  3906.         bit 1    prefer medium-resolution CGA graphics
  3907.         bit 0    prefer high-resolution CGA graphics
  3908.     B0h  move logical cursor down
  3909.          BYTE #rows (signed, negative values move up)
  3910.             [if #rows=0 and hardware cursor owner, update hw crsr]
  3911.     B1h  move logical cursor right
  3912.          BYTE #cols (signed, negative values move left)
  3913.             [if #cols=0 and hardware cursor owner, update hw crsr]
  3914.     B2h  shift top edge of scrolling region
  3915.          BYTE #rows (signed)
  3916.     B3h  shift left edge of scrolling region
  3917.          BYTE #cols (signed)
  3918.     B4h  shift physical window down
  3919.          BYTE #lines (signed)
  3920.     B5h  shift physical window right
  3921.          BYTE #columns (signed)
  3922.     B6h  expand physical window vertically
  3923.          BYTE #lines (signed)
  3924.     B7h  expand physical window horizontally
  3925.          BYTE #columns (signed)
  3926.     B8h  adjust viewport row
  3927.          BYTE #rows (signed)
  3928.     B9h  adjust viewport column
  3929.          BYTE #columns (signed)
  3930.     BAh  adjust virtual screen height [contents of window unpredict after]
  3931.          BYTE #rows to increase (signed)
  3932.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  3933.          BYTE #cols to increase (signed)
  3934.     BCh-BFh     reserved (currently unused)
  3935.     C0h  set logical cursor position
  3936.          BYTE row number (0 is top border)
  3937.          BYTE column number (0 is left border)
  3938.     C1h  set top left corner of scrolling region
  3939.          BYTE row
  3940.          BYTE column
  3941.     C2h  set physical window pos
  3942.          BYTE upper left row (no top border if 0)
  3943.          BYTE upper left column (no left border if 0)
  3944.     C3h  set current window size
  3945.          BYTE #rows
  3946.          BYTE #cols
  3947.     C4h  set upper left corner of viewport (portion of virtual screen
  3948.          displayed in window)
  3949.          BYTE row
  3950.          BYTE column
  3951.     C5h  set size of virtual screen [contents unpredictable afterwards]
  3952.          BYTE #rows
  3953.          BYTE #cols
  3954.     C6h  unused
  3955.     C7h  unused
  3956.     C8h  set logical cursor relative to current position
  3957.          BYTE number of rows to move down (signed)
  3958.          BYTE number of columns to move right (signed)
  3959.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  3960.     C9h  shift top left corner of scrolling region
  3961.          BYTE #rows (signed)
  3962.          BYTE #cols (signed)
  3963.     CAh  set window pos relative to current position
  3964.          BYTE number of rows to shift down (signed)
  3965.          BYTE number of columns to shift right (signed)
  3966.     CBh  set window size relative to current size
  3967.          BYTE number of rows to expand (signed)
  3968.          BYTE number of cols to expand (signed)
  3969.     CCh  shift viewport relative to current position
  3970.          BYTE rows to shift (signed)
  3971.          BYTE cols to shift (signed)
  3972.     CDh  resize virtual screen
  3973.          BYTE #rows to expand (signed)
  3974.          BYTE #cols to expand (signed)
  3975.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  3976.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  3977.     D0h  allow window frame to extend beyond screen
  3978.     D1h  always display a complete frame, even if window extends beyond
  3979.          edge of screen
  3980.     D2h  allow DV to change logical colors on video mode switch (default)
  3981.     D3h  application changes logical attributes
  3982.     D4h  window is visible [must redraw to actually make visible]
  3983.     D5h  window is hidden [must redraw to actually remove]
  3984.     D6h  window has frame (default)
  3985.     D7h  window unframed [must redraw to actually remove frame]
  3986.     D8h  READ/READN will read characters from window (default)
  3987.     D9h  READ/READN will read attributes from window
  3988.     DAh  use logical attributes, which may be remapped
  3989.         attributes
  3990.            1 normal text
  3991.            2 highlighted normal text
  3992.            3 help text
  3993.            4 highlighted help text
  3994.            5 error message
  3995.            6 highlighted error message
  3996.            7 emphasized text
  3997.            8 marked text
  3998.            9-16 are reverse video versions of 1-8
  3999.     DBh  use physical attributes for characters
  4000.     DCh  enable special actions for control characters (default)
  4001.     DDh  disable special control char handling, all chars displayable by
  4002.          BIOS TTY call
  4003.     DEh  write both character and attribute (default)
  4004.     DFh  write character only, leave attribute untouched
  4005.     E0h  repeat following commands through E1h opcode
  4006.          BYTE number of times to repeat (00h means 256 times)
  4007.     E1h  end of commands to repeat, start repeating them
  4008.     E2h  set current output color
  4009.          BYTE color
  4010.     E3h  clear virtual screen from scroll origin to end using current color
  4011.     E4h  redraw window
  4012.     E5h  select menu style
  4013.          BYTE style (normally 18h)
  4014.         bits 5,4 = 01 use two-letter menu entries for remainder of
  4015.           this stream
  4016.     E5h  (panel file only)
  4017.          BYTE modifier
  4018.         bits 7,6 = 11 panel stream creates new window
  4019.              = 10 panel defines new field table for existing window
  4020.              = 01 panel stream uses existing window & field table
  4021.         bit 5 = 1 stream contains a field table (create kyboard object)
  4022.         bit 4 = 1 stream defines input fields (create keyboard object)
  4023.         bit 3 = 1 stream defines select fields but not input fields
  4024.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  4025.         bit 1 reserved
  4026.         bit 0 reserved
  4027.     E6h  create new window and perform rest of manipulations in new window
  4028.          BYTE number of rows
  4029.          BYTE number of columns
  4030.          Return: DWORD object handle of new window returned on stack at end
  4031.          Note: the window is created with a physical size of 0x0 at the
  4032.              same position as the window to which this stream was sent
  4033.     E7h  no operation
  4034.     E8h  scroll area up (top left corner defined by opcode C1h)
  4035.          BYTE height
  4036.          BYTE width
  4037.     E9h  scroll area down (top left corner defined by opcode C1h)
  4038.          BYTE height
  4039.          BYTE width
  4040.     EAh  scroll area left (top left corner defined by opcode C1h)
  4041.          BYTE height
  4042.          BYTE width
  4043.     EBh  scroll area right (top left corner defined by opcode C1h)
  4044.          BYTE height
  4045.          BYTE width
  4046.     ECh  set logical attributes for window contents
  4047.          BYTE video modes command applies to
  4048.         bit 7    monochrome
  4049.         bit 6    color text, EGA/VGA graphics
  4050.         bit 5    medium-resolution CGA graphics
  4051.         bit 4    high-resolution CGA graphics
  4052.          BYTE which attributes to set
  4053.         bit 7  if set, copy single following byte to indicated attribs
  4054.         bits 4-6  # of first attribute to change - 1
  4055.         bits 0-3  # of consecutive attributes to change
  4056.          N BYTEs new attributes
  4057.     EDh  set logical attributes for window frame
  4058.          BYTE video modes command applies to (see opcode ECh)
  4059.          BYTE which attributes to set
  4060.         bit 7  if set, copy single following byte to indicated attrs
  4061.         bits 4-6  # of first attribute to change - 1
  4062.         bits 0-3  # of consecutive attributes to change
  4063.          N BYTEs new attributes
  4064.           attributes
  4065.                1 = top left corner
  4066.                2 = top right corner
  4067.                3 = bottom left corner
  4068.                4 = bottom right corner
  4069.                5 = top edge
  4070.                6 = bottom edge
  4071.                7 = left edge
  4072.                8 = right edge
  4073.     EEh  set characters for window frame
  4074.          BYTE video modes command applies to (see opcode ECh)
  4075.          BYTE which characters to set
  4076.         bit 7  if set, copy single following byte to indicated chars
  4077.         bits 4-6  # of first char to change - 1
  4078.         bits 0-3  # of consecutive chars to change
  4079.          N BYTEs new chars (same relative position as attributes above)
  4080.     EFh  set window name
  4081.          BYTE length of name (should be in range 0 to logical screen width)
  4082.          N BYTEs name
  4083.     F0h  clear input field to blanks
  4084.          BYTE field number
  4085.     F1h  fill input field with character
  4086.          BYTE field number
  4087.          BYTE char
  4088.     F2h  set color of input field
  4089.          BYTE field number (1-N)
  4090.          BYTE attribute
  4091.     F3h  set initial contents of input field
  4092.          BYTE field number (1-N)
  4093.          N BYTEs enough chars to exactly fill field as defined by op FFh
  4094.     F4h  position cursor to start of specific input field
  4095.          BYTE field number (1-N)
  4096.     F5h  change field table entry
  4097.          BYTE field number
  4098.          7-8 BYTEs field table entry (see opcode FFh below)
  4099.     F6h  set field type
  4100.          BYTE field number
  4101.          BYTE type
  4102.             00h inactive
  4103.             40h output field
  4104.             80h input field
  4105.             C0h deselected field
  4106.             C2h selected field
  4107.     F7h  "broadcast write"    write data to fields with program output bit
  4108.         set in field table entry, in field number order
  4109.          N BYTEs (total length of all program output fields)
  4110.     F8h  scroll field up a line
  4111.          BYTE field number
  4112.     F9h  scroll field down a line
  4113.          BYTE field number
  4114.     FAh  scroll field left
  4115.          BYTE field number
  4116.     FBh  scroll field right
  4117.          BYTE field number
  4118.     FCh  set field table header
  4119.          BYTE number of fields (must be <= existing number of fields)
  4120.          BYTE screen behavior bits
  4121.         bit 7  reserved
  4122.         bit 6  set if menu items may be selected via keyboard
  4123.         bit 5  set if left mouse button in "status" mode (press
  4124.             anywhere in window immediately returns control to app)
  4125.         bit 4  set if right mouse button in "status" mode
  4126.         bit 3  if set, select fields return contents or blanks rather
  4127.             than 'Y' or 'N'
  4128.         bit 2  if set, modified bits reset on return to application
  4129.         bits 0,1 = 00 no data returned on read of keyboard
  4130.                01 data returned as array of chars containing
  4131.                 all fields packed together, with no field
  4132.                 numbers
  4133.                10 data returned as numbered variable-length
  4134.                 records for all fields
  4135.                11 data returned as numbered variable-length
  4136.                 records for the fields which were modified
  4137.          BYTE current input field (updated by DESQview)
  4138.          BYTE current select field (updated by DESQview)
  4139.          BYTE attribute for select fields when they are pointed at
  4140.          BYTE attribute for select fields which have been selected
  4141.     FDh  reset modified bit for all fields
  4142.     FEh  reset selected and modified bits for all fields
  4143.     FFh  set up input fields
  4144.          6 BYTEs table header (see opcode FCh above)
  4145.          the field table entries, one for each field
  4146.          BYTE start row       \
  4147.          BYTE start column  \ if menu selection and start is to
  4148.          BYTE end row        / right or below end, select from kbd only
  4149.          BYTE end column   /
  4150.          BYTE field type
  4151.             bits 7,6 = 00 inactive (non-entry) field
  4152.                    01 echos keystrokes input to make menu selection
  4153.                    10 fill-in field
  4154.                    11 select field
  4155.             bit 5  field can be filled by broadcast write (F7h opcode)
  4156.             bit 4  reserved
  4157.             bit 3  reserved
  4158.             bit 2  reserved
  4159.             bit 1  set if field selected
  4160.             bit 0  set if field modified
  4161.          BYTE modifier
  4162.               if type is fill-in, then bit flags to determine behavior
  4163.               bit 7     if set, automatically enter CR when field full
  4164.               bit 6     move to next field when current field is full
  4165.               bit 5     if set, enter text from right end (for numbers)
  4166.               bit 4     if set, force input to uppercase
  4167.               bit 3     if set, clear old contents on first keystroke
  4168.               bit 2     if set, input returned when cursor moves out
  4169.                  of modified field ("validate",API level 2.02+)
  4170.               bit 1     reserved
  4171.               bit 0     reserved
  4172.               if select field, first key to press to activate
  4173.               00h if have to point-&-click or is an extended-ASCII
  4174.                   keystroke (only if two-key menus enabled)
  4175.          BYTE (select field only) normal color of field
  4176.          BYTE second key for select field.  This byte is present iff
  4177.               two-letter menu entries selected with opcode E5h, and
  4178.               in that case is present regardless of field type
  4179.          Note: DESQview uses and updates the actual copy of the information
  4180.            which is contained in the stream.  Thus this info must remain
  4181.            intact until after the data entry is complete.
  4182.  
  4183. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  4184.     A0h return logical cursor row in next byte
  4185.     A1h return logical cursor column in next byte
  4186.     A2h return top row of scrolling region in next byte
  4187.     A3h return left column of scrolling region in next byte
  4188.     A4h return row of physical window origin in next byte
  4189.     A5h return column of physical window origin in next byte
  4190.     A6h return height of physcial window in next byte
  4191.     A7h return width of physical window in next byte
  4192.     A8h return row of viewport origin in next byte
  4193.     A9h return column of viewport origin in next byte
  4194.     AAh return height of virtual screen in next byte
  4195.     ABh return width of virtual screen in next byte
  4196.     AFh return current video mode in next byte
  4197.     C0h return current logical cursor position in next two bytes
  4198.     C1h return top left corner of scrolling region in next two bytes
  4199.     C2h return current window position in next two bytes
  4200.     C3h return current window size in next two bytes
  4201.     C4h return current viewport origin in next two bytes
  4202.     C5h return current virtual screen size in next two bytes
  4203.     D0h \ overwritten with D0h if frames may fall off screen edge
  4204.     D1h /               D1h if frames always displayed entirely
  4205.     D2h \ overwritten with D2h if DESQview controls color palette
  4206.     D3h /               D3h if application changes color palette
  4207.     D4h \ overwritten with D4h if window visible
  4208.     D5h /               D5h if window hidden
  4209.     D6h \ overwritten with D6h if window has frame
  4210.     D7h /               D7h if window unframed
  4211.     D8h \ overwritten with D8h if reading characters from window
  4212.     D9h /               D9h if reading attributes from window
  4213.     DAh \ overwritten with DAh if using logical attributes
  4214.     DBh /               DBh if using physical attributes
  4215.     DCh \ overwritten with DCh if TTY control char interpretation on
  4216.     DDh /               DDh if TTY control char interpretation off
  4217.     DEh \ overwritten with DEh if writing both characters and attributes
  4218.     DFh /               DFh if leaving attributes untouched
  4219.     E2h return current color in next byte
  4220.     ECh get logical attributes for window contents
  4221.         BYTE execute call if currently in specified video mode
  4222.         bit 7    monochrome
  4223.         bit 6    color text, EGA/VGA graphics
  4224.         bit 5    medium-resolution CGA graphics
  4225.         bit 4    high-resolution CGA graphics
  4226.         BYTE which attributes to get
  4227.         bit 7 unused???
  4228.         bits 4-6 first attribute to get - 1
  4229.         bits 0-3 # consecutive attributes
  4230.         N BYTEs buffer to hold attributes
  4231.     EDh get logical attributes for window frame
  4232.         BYTE execute call if currently in video mode (see opcode ECh)
  4233.         BYTE which attributes to get
  4234.         bit 7 unused???
  4235.         bits 4-6 first attribute to get - 1
  4236.         bits 0-3 # consecutive attributes
  4237.         N BYTEs buffer to hold attributes
  4238.     EEh get characters for window frame
  4239.         BYTE execute call if currently in video mode (see opcode ECh)
  4240.         BYTE which attributes to get
  4241.         bit 7 unused???
  4242.         bits 4-6 first char to get - 1
  4243.         bits 0-3 # consecutive chars
  4244.         N BYTEs buffer to hold chars
  4245.     EFh return first N characters of current window name
  4246.         BYTE    max length of returned name
  4247.         N BYTEs buffer to hold window name
  4248.     F3h return contents of specified field
  4249.         BYTE field number
  4250.         N BYTEs buffer to hold field contents (size exactly equal to field
  4251.             size)
  4252.     F5h get field table entry
  4253.         BYTE field number
  4254.         7-8 BYTEs buffer to hold field table entry
  4255.            Notes: DV < 2.26 always returns 7 bytes
  4256.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  4257.             table is using 8-byte entries and eighth byte after
  4258.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  4259.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  4260.             depending on the field table entry size
  4261.     F6h get type of a field
  4262.         BYTE field number
  4263.         BYTE type
  4264.     FCh get field table header
  4265.         6 BYTEs buffer to store header
  4266.  
  4267. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  4268.     00h allow window to be moved horizontally
  4269.     01h allow window to be moved vertically
  4270.     02h allow window to change width
  4271.     03h allow window to change height
  4272.     04h allow window to be scrolled horizontally
  4273.     05h allow window to be scrolled vertically
  4274.     06h allow "Close Window" menu selection for application
  4275.     07h allow "Hide Window" menu selection for application
  4276.     08h allow application to be suspended ("Rearrange/Freeze")
  4277.     0Eh allow "Scissors" menu
  4278.     10h allow DESQview main menu to be popped up
  4279.     11h allow "Switch Windows" menu
  4280.     12h allow "Open Window" menu
  4281.     13h allow "Quit" menu selection
  4282.     20h-33h opposite of 00h-13h, disallow specified action
  4283.     40h notify if horizontal position of window changes
  4284.     41h notify if vertical position of window changes
  4285.     42h notify if width of window changes
  4286.     43h notify if height of window changes
  4287.     44h notify if window scrolled horizontally
  4288.     45h notify if window scrolled vertically
  4289.     46h notify if window is closed--program has to clean up and exit itself
  4290.     47h notify if window is hidden
  4291.     48h notify if "?" on main menu selected
  4292.     49h notify if pointer message sent to window
  4293.     4Ah notify if window is placed in foreground
  4294.     4Bh notify if window is placed in background
  4295.     4Ch notify if video mode changes
  4296.     4Dh notify if "Scissors" menu "Cut" option selected
  4297.     4Eh notify if "Scissors" menu "Copy" option selected
  4298.     4Fh notify if "Scissors" menu "Paste" option selected
  4299.     50h notify if DESQview main menu about to pop up
  4300.     51h notify if DESQview main menu popped down
  4301.     60h-71h     opposite of 40h-51h: don't notify on specified event
  4302.     84h attach window to parent task's window (both move together)
  4303.     85h detach window from parent task's window (may move independently)
  4304.     86h disable background operation for application
  4305.     87h enable running in background
  4306.     88h set minimum size of physical window
  4307.         BYTE rows
  4308.         BYTE columns
  4309.     89h set maximum size of physical window
  4310.         BYTE rows
  4311.         BYTE cols
  4312.     8Ah set primary asynchronous notification routine
  4313.         DWORD address of routine, 0000h:0000h means none (see also below)
  4314.     8Bh set async notification parameter
  4315.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  4316.     ACh (DV2.2+) perform regular select field attribute processing
  4317.     ADh (DV2.2+) protect attributes in selected field from being lost
  4318.     AEh make window default notify window for owning app (API level 2.00+)
  4319.     AFh set selected field marker character
  4320.         BYTE character to display at left edge of selected fields
  4321.     BCh set standard field processing mode
  4322.     BDh set alternate field processing mode (enables cursor pad for menus)
  4323.     BEh disables changing reverse logical attributes with ECh opcode
  4324.     BFh enables changing reverse logical attributes with ECh opcode
  4325.     C0h make current window topmost in system
  4326.     C1h force current process into foreground
  4327.     C2h make current window topmost in process
  4328.     C3h position mouse pointer relative to origin of current field
  4329.         BYTE rows below upper left corner of field
  4330.         BYTE columns to right of upper left corner of field
  4331.     C4h position mouse pointer relative to origin of given field
  4332.         BYTE field number
  4333.         BYTE rows below upper left corner of field
  4334.         BYTE columns to right of upper left corner of field
  4335.     C5h orphan current window (also hides it)
  4336.         Note: must be last in stream; all subsequent commands ignored
  4337.     C6h show all windows for this process
  4338.     C7h hide all windows for this process
  4339.     C8h suspend process and hide all its windows
  4340.     C9h force current process into background
  4341.     CAh make current window bottom-most in process
  4342.     CBh cancel current window manager operation, remove DV menu, give
  4343.         control to topmost application
  4344.     CCh orphan window and give it to the system for use as paste data
  4345.     CEh reorder windows
  4346.         DWORD pointer to null-terminated list of words
  4347.           each word is segment of object handle for a window
  4348.     FFh no operation
  4349.  
  4350. MODES 14h to 1Fh "USER STREAMS"
  4351.     normally NOPs, but may be defined by SETESC message to invoke FAR
  4352.     routines, one for each mode number
  4353.       on entry to handler,
  4354.         DS:SI -> first byte of actual stream (not header)
  4355.         CX = #bytes in stream
  4356.         ES:DI = window's handle
  4357.  
  4358. Asynchronous notification routine defined by manager stream 8Ah called with:
  4359.     ES:DI = handle of window
  4360.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  4361.        mailbox contains message indicating event
  4362.           Opcode
  4363.            40h  horizontal movement
  4364.            DWORD object handle of window
  4365.            BYTE     new row
  4366.            BYTE     new col
  4367.            41h  vertical movement
  4368.            DWORD object handle of window
  4369.            BYTE     new row
  4370.            BYTE     new col
  4371.            42h  horizontal size change
  4372.            DWORD object handle of window
  4373.            BYTE     new rows
  4374.            BYTE     new cols
  4375.            43h  vertical size change
  4376.            DWORD object handle of window
  4377.            BYTE     new rows
  4378.            BYTE     new cols
  4379.            44h  scrolled horizontally
  4380.            DWORD object handle of window
  4381.            BYTE     mouse row within window
  4382.            BYTE     mouse column within window
  4383.            BYTE     field mouse is on, 0 if none
  4384.            BYTE     amount moved: >0 right, <0 left, 0 done
  4385.            45h  scrolled vertically
  4386.            DWORD object hande of window
  4387.            BYTE     mouse row within window
  4388.            BYTE     mouse column within window
  4389.            BYTE     field mouse is on, 0 if none
  4390.            BYTE     amount moved: >0 down, <0 up, 0 done
  4391.            46h  window close request
  4392.            DWORD object handle of window
  4393.            BYTE     mouse pointer row
  4394.            BYTE     mouse pointer column
  4395.            BYTE     field mouse is on, 0 if none
  4396.            47h  application's windows hidden
  4397.            48h  Help for Program selected
  4398.            DWORD object handle of window
  4399.            BYTE     mouse pointer row
  4400.            BYTE     mouse pointer column
  4401.            BYTE     field mouse is on, 0 if none
  4402.            49h  pointer message sent to window
  4403.            DWORD pointer handle which received message
  4404.            4Ah  switched to window from another ("raise")
  4405.            4Bh  switched away from the window ("lower")
  4406.            4Ch  video mode changed
  4407.            BYTE new BIOS video mode
  4408.            4Dh  Scissors/cUt selected
  4409.            DWORD object handle of window
  4410.            BYTE     row of upper left corner
  4411.            BYTE     column of upper left corner
  4412.            BYTE     field number ul corner is in, 0=none
  4413.            DWORD handle of orphaned window created with
  4414.              copy of data from specified region
  4415.            BYTE     height of region
  4416.            BYTE     width of region
  4417.            4Eh  Scissors/Copy selected
  4418.            DWORD object handle of window
  4419.            BYTE     row of upper left corner
  4420.            BYTE     column of upper left corner
  4421.            BYTE     field number ul corner is in, 0=none
  4422.            DWORD handle of orphaned window created with
  4423.              copy of data from specified region
  4424.            BYTE     height of region
  4425.            BYTE     width of region
  4426.            4Fh  Scissors/Paste selected
  4427.            DWORD object handle of window
  4428.            BYTE     row of upper left corner
  4429.            BYTE     column of upper left corner
  4430.            BYTE     field number ul corner is in, 0=none
  4431.            DWORD handle of orphaned window with data
  4432.            BYTE     height of region
  4433.            BYTE     width of region
  4434.             Note: orphaned data window should be adopted or freed
  4435.                 when done
  4436.            50h  main menu about to pop up
  4437.            51h  main menu popped down
  4438. Return: all registers unchanged
  4439. --------Q-1512--BH06-------------------------
  4440. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  4441.     AH = 12h
  4442.     BH = 06h
  4443.     BL = object
  4444.         00h object handle in DWORD on top of stack
  4445.         mailbox, keyboard, pointer, or timer
  4446.         (DV 2.50+) window
  4447.         01h (DV 2.50+) current task's window
  4448.         04h given task's keyboard (task's handle on top of stack)
  4449.         05h current task's default keyboard
  4450.     STACK: DWORD new priority of object in task's OBJECTQ
  4451.             (new priority of task if window handle)
  4452. Notes:    initially all objects have the same default value.  Should only make
  4453.       relative adjustments to this default value.
  4454.     when changing priorities, all objects already on the objectq are
  4455.       reordered
  4456.     for window handles, only the non-blocked task(s) with the highest
  4457.       priority receive CPU time under DESQview 2.50-2.52; the default
  4458.       priority is 0Ah
  4459. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  4460. --------Q-1512--BH07-------------------------
  4461. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  4462.     AH = 12h
  4463.     BH = 07h
  4464.     BL = object
  4465.         00h object handle in DWORD on top of stack
  4466.         mailbox, keyboard, pointer, or timer
  4467.         (DV 2.50+) window
  4468.         01h (DV 2.50+) current task's window
  4469.         04h given task's keyboard (task's handle on top of stack)
  4470.         05h current task's default keyboard
  4471. Return: STACK: DWORD object priority
  4472. Note:    initially all objects have the same default value.  Should only make
  4473.       relative adjustments to this default value.
  4474. SeeAlso: AH=12h/BH=06h
  4475. --------Q-1512--BH08-------------------------
  4476. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  4477.     AH = 12h
  4478.     BH = 08h
  4479.     BL = object
  4480.         00h handle in DWORD on top of stack
  4481.         window: total character positions in window
  4482.         timer: elapsed time since timer started
  4483.         pointer: number of messages queued to pointer object
  4484.         panel: number of panels in panel file
  4485.         keyboard: number of input buffers queued
  4486.         01h total chars in current task's default window
  4487.         02h number of messages in task's mailbox (task's handle on stack)
  4488.         03h number of messages in current task's mailbox
  4489.         04h number of input buffers queued in task's kbd (handle on stack)
  4490.         05h number of input buffers queued for current task's default kbd
  4491.         06h number of objects queued in OBJECTQ (task's handle on stack)
  4492.         07h number of objects queued in current task's OBJECTQ
  4493.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  4494.         0Dh (DV 2.26+) total chars in parent task's window
  4495. Return: DWORD on top of stack is result
  4496. Note:    for panel objects, a count of zero is returned if no panel file is open
  4497.       for the object
  4498. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  4499. --------Q-1512--BH09-------------------------
  4500. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  4501.     AH = 12h
  4502.     BH = 09h
  4503.     BL = object
  4504.         00h handle in DWORD on top of stack
  4505.         window: get chars/line
  4506.         timer: get 1/100 seconds remaining before timer expires
  4507.         mailbox: (DV/X) get number of bytes queued to mailbox
  4508.         01h get number of chars/line in current task's default window
  4509.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  4510.         0Dh (DV 2.26+) get chars/line in parent task's window
  4511. Return: DWORD on top of stack is length
  4512. SeeAlso: AH=12h/BH=08h
  4513. --------Q-1512--BH0A-------------------------
  4514. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  4515.     AH = 12h
  4516.     BH = 0Ah
  4517.     BL = window to write to
  4518.         00h window handle is DWORD on top of stack
  4519.         01h current task's default window
  4520.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  4521.         0Dh (DV 2.26+) default window of parent of current task
  4522.     STACK:    DWORD count of attributes
  4523.         DWORD address of attribute string
  4524.         DWORD count of characters
  4525.         DWORD address of character string
  4526. Notes:    if one string is longer than the other, the shorter one will be reused
  4527.       until the longer one is exhausted
  4528.     the cursor is left just after the last character written
  4529. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  4530. --------Q-1512--BH0A-------------------------
  4531. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  4532.     AH = 12h
  4533.     BH = 0Ah
  4534.     BL = mailbox to write to
  4535.         00h handle is DWORD on top of stack
  4536.         02h default mailbox of task whose handle is on top of stack
  4537.         03h current task's default mailbox
  4538.     STACK:    DWORD    status (low byte)
  4539.         DWORD    length of message
  4540.         DWORD    address of message
  4541. Notes:    the message is copied into either system or common memory
  4542.     insufficient memory normally causes the process to be aborted; under
  4543.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  4544. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  4545. --------Q-1512--BH0A-------------------------
  4546. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  4547.     AH = 12h
  4548.     BH = 0Ah
  4549.     BL = object
  4550.         00h handle is DWORD on top of stack
  4551.         timer: start timer for specified interval
  4552.         pointer: set control flags
  4553.         keyboard: set control flags
  4554.         04h set control flags on KEYBOARD object (handle on top of stack)
  4555.         05h set control flags on task's default KEYBOARD object
  4556.     STACK: (if timer)   DWORD duration in 1/100 seconds
  4557.            (otherwise)  DWORD bits to set
  4558. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  4559.  
  4560. For keyboard objects, the bits have the following significance:
  4561.     bit 15 reserved, can't be set
  4562.     bit 14 unused
  4563.     bit 13 reserved, can't be set
  4564.     bit 12-6 unused
  4565.     bit 5  (DV 2.2+) exclusive input
  4566.     bit 4  filter all keys (used with handler established by SETESC)
  4567.         if 0, only keys that would normally be displayed are filtered
  4568.     bit 3  program continues executing while input in progress
  4569.     bit 2  insert mode active for field mode
  4570.     bit 1  hardware cursor displayed when task is hardware cursor owner
  4571.         must be set if keyboard in field mode and field table includes
  4572.         input fields
  4573.     bit 0  keyboard is in field mode rather than keystroke mode
  4574.  
  4575. For pointer objects, the bits have the following significance:
  4576.     bit 15 reserved, can't be set
  4577.     bit 14-8 unused
  4578.     bit 7  mouse pointer is hidden while in window
  4579.     bit 6  get messages even if window not topmost
  4580.     bit 5  get messages even if window not foreground
  4581.     bit 4  multiple clicks separated by less than 1/3 second are counted
  4582.         and returned in a single message
  4583.     bit 3  pointer position is relative to screen origin, not window origin
  4584.     bit 2  send message on button release as well as button press
  4585.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  4586.         pointer leaves the window
  4587.     bit 0  send message only on button activity, not movement
  4588.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  4589. --------Q-1512--BH0B-------------------------
  4590. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  4591.     AH = 12h
  4592.     BH = 0Bh
  4593.     BL = window to write attributes to
  4594.         00h handle is DWORD on top of stack
  4595.         01h current task's default window
  4596.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  4597.         0Dh (DV 2.26+) default window of parent of current task
  4598.     STACK:    DWORD number of attributes to write
  4599.         DWORD address of attributes
  4600. Note:    the attributes are written starting at the current cursor position; the
  4601.       cursor is left just after the last position written
  4602. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  4603. --------Q-1512--BH0B-------------------------
  4604. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  4605.     AH = 12h
  4606.     BH = 0Bh
  4607.     BL = mailbox to write to
  4608.         00h handle is DWORD on top of stack
  4609.         02h default mailbox of task whose handle is on top of stack
  4610.         03h current task's default mailbox
  4611.     STACK:    DWORD    status (low byte)
  4612.         DWORD    length of message
  4613.         DWORD    address of message
  4614. Notes:    only a pointer to the message is stored, but the write may still fail
  4615.       due to insufficient memory
  4616.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  4617. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  4618. --------Q-1512--BH0B-------------------------
  4619. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  4620.     AH = 12h
  4621.     BH = 0Bh
  4622.     BL = OBJECTQ from which to remove all copies of a particular object
  4623.         06h OBJECTQ of task whose handle is on top of stack
  4624.         07h task's default OBJECTQ
  4625.     STACK:    DWORD    handle of object to remove
  4626. Note:    should be sent whenever an object is erased or closed
  4627. --------Q-1512--BH0B-------------------------
  4628. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  4629.     AH = 12h
  4630.     BH = 0Bh
  4631.     BL = object
  4632.         00h handle is DWORD on top of stack
  4633.         pointer: reset control flags
  4634.         keyboard: reset control flags
  4635.         04h clear control flags on KEYBOARD object (handle on top of stack)
  4636.         05h clear control flags on task's default KEYBOARD object
  4637.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  4638. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  4639. --------Q-1512--BH0C-------------------------
  4640. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  4641.     AH = 12h
  4642.     BH = 0Ch
  4643.     BL = object
  4644.         00h handle is DWORD on top of stack
  4645.         window:      fill with given character from scroll origin to end
  4646.         keyboard: attach to a window
  4647.         timer:      open
  4648.         pointer:  start taking input for window
  4649.         panel:      associate with a panel file
  4650.         01h fill task's default window with given char from scrl org to end
  4651.         02h open given task's mailbox for input (task's handle on stack)
  4652.         03h open current task's mailbox
  4653.         04h attach a KEYBOARD to a window (handle on top of stack)
  4654.         05h attach task's default KEYBOARD to a window
  4655.         06h open a task's OBJECTQ (task's handle on top of stack)
  4656.         07h open current task's OBJECTQ
  4657.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  4658.         0Dh (DV 2.26+) fill default window of parent of current task
  4659.      STACK: (if window)   DWORD character to fill with
  4660.         (if keyboard) DWORD handle of window to attach to
  4661.         (if pointer)  DWORD handle of window to attach to
  4662.         (if panel)    DWORD length of filename or resident panel
  4663.                   DWORD address of filename or resident panel
  4664.         (otherwise)   nothing
  4665. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  4666.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  4667.       the panel file
  4668.     result code of open may be retrieved with STATUS message
  4669.     logical cursor is left at scroll origin after filling window
  4670.     the task opening a mailbox becomes its owner, and the only task allowed
  4671.       to read the mailbox
  4672.     messages are only sent to a pointer object when the mouse is positioned
  4673.       in the window to which the pointer has been attached
  4674.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  4675.       messages automatically open the timer
  4676. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  4677. --------Q-1512--BH0D-------------------------
  4678. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  4679.     AH = 12h
  4680.     BH = 0Dh
  4681.     BL = object
  4682.         00h handle is DWORD on top of stack
  4683.         timer:      close
  4684.         keyboard: detach from window and discard queued input
  4685.         pointer:  stop taking input
  4686.         panel:      close
  4687.         mailbox:  close, unlock, and discard any pending messages
  4688.         02h close given task's mailbox (task's handle on top of stack)
  4689.         03h close task's default mailbox
  4690.         04h close KEYBOARD object (handle on top of stack)
  4691.         05h close task's default KEYBOARD
  4692.         06h close given task's OBJECTQ (task's handle on top of stack)
  4693.         07h close current task's OBJECTQ
  4694. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  4695.       ERASE message (AH=12h/BH=0Eh)
  4696.     when a panel object is closed, the panel file and any panels currently
  4697.       in use are freed; window and keyboard objects created by APPLY are
  4698.       not affected, but field mode input ceases
  4699.     open but idle timer objects consume a small amount of CPU time
  4700. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  4701. --------Q-1512--BH0E-------------------------
  4702. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  4703.     AH = 12h
  4704.     BH = 0Eh
  4705.     BL = object
  4706.         00h handle is DWORD on top of stack
  4707.         window:      clear from scroll origin to end of window
  4708.         keyboard: discard input
  4709.         timer:      cancel current interval
  4710.         pointer:  discard all pending messages
  4711.         mailbox:  discard all pending messages
  4712.         01h clear task's default window from scroll origin to end
  4713.         02h discard all queued messages in mailbox (handle on top of stack)
  4714.         03h discard all queued messages in current task's default mailbox
  4715.         04h discard all input queued to KEYBOARD (handle on top of stack)
  4716.         05h discard all input queued to task's default KEYBOARD
  4717.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  4718.         07h remove all objects from current task's OBJECTQ
  4719.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  4720.         0Dh (DV 2.26+) clear default window of parent of current task
  4721. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  4722. SeeAlso: AH=12h/BH=02h
  4723. --------Q-1512--BH0F-------------------------
  4724. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  4725.     AH = 12h
  4726.     BH = 0Fh
  4727.     BL = object
  4728.         00h handle is DWORD on top of stack
  4729.         timer:     is it running?
  4730.         pointer: return status of last message
  4731.         panel:     verify success of last OPEN or APPLY
  4732.         02h return status of last msg READ from mailbox (handle on stack)
  4733.         03h return status of last msg READ from task's default mailbox
  4734.         04h get stat of last msg from task's KEYBOARD (task handle on stk)
  4735.         05h get status of last msg from task's default KEYBOARD
  4736.         06h return whether OBJECTQ is open or not (handle on top of stack)
  4737.         07h return whether task's default OBJECTQ is open or not
  4738. Return: DWORD on top of stack is status
  4739. Notes:    if object is a panel object, the status indicates the error code:
  4740.       00h successful
  4741.       14h panel name not in panel directory
  4742.       15h not enough memory to apply panel
  4743.       16h invalid panel format
  4744.       17h panel file already open
  4745.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  4746.       95h not enough memory to open panel file     > that the panel was
  4747.       98h null panel file name            /  not opened
  4748.     if object is a timer, the status is:
  4749.       00000000h open but not running
  4750.       40000000h open and running
  4751.       80000000h closed
  4752.     if object is an OBJECTQ, the status is:
  4753.       00000000h open
  4754.       80000000h closed
  4755.     if object is a keyboard in keystroke mode, the status is the extended
  4756.       character code (scan code) of the last keystroke
  4757.     if object is a keyboard in field mode, the status indicates the reason
  4758.       for the last return from the field manager
  4759.       00h Enter key pressed
  4760.       01h Button 1 or keystroke selection
  4761.       02h Button 2
  4762.       03h validation
  4763.       04h auto Enter on field
  4764.       1Bh Escape pressed
  4765.       46h ^Break pressed
  4766.       other: extended code for key terminating input
  4767.     the status of mailbox messages sent by the window manager is always 80h
  4768.     the status of a pointer message is the same as the status field in the
  4769.       message
  4770. SeeAlso: AH=12h/BH=04h"READ"
  4771. --------Q-1512--BH10-------------------------
  4772. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  4773.     AH = 12h
  4774.     BH = 10h
  4775.     BL = object
  4776.         00h handle is DWORD on top of stack
  4777.         window: return TRUE if logical cursor past end of window
  4778.         mailbox: ???
  4779.         01h returns TRUE if logical cursor past end of task's def window
  4780.         02h return ??? for task's mailbox (task's handle on top of stack)
  4781.         03h return ??? for current task's mailbox
  4782.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  4783.         0Dh (DV 2.26+) check log cursor of window of parent task
  4784. Return: DWORD on top of stack is status
  4785. --------Q-1512--BH11-------------------------
  4786. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  4787.     AH = 12h
  4788.     BH = 11h
  4789.     BL = window for which to move cursor
  4790.         00h window's handle is DWORD on top of stack
  4791.         01h task's default window
  4792.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  4793.         0Dh (DV 2.26+) default window of parent of current task
  4794.     STACK: DWORD column
  4795.            DWORD row
  4796. --------Q-1512--BH11-------------------------
  4797. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  4798.     AH = 12h
  4799.     BH = 11h
  4800.     BL = mailbox to name
  4801.         00h DWORD on top of stack is mailbox handle
  4802.         02h use given task's mailbox (task's handle on top of stack)
  4803.         03h use current task's default mailbox
  4804.     STACK: DWORD length of name
  4805.            DWORD address of name
  4806. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  4807. --------Q-1512--BX1100-----------------------
  4808. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  4809.     AH = 12h
  4810.     BX = 1100h
  4811.     STACK: DWORD object handle for pointer object
  4812.            DWORD number of colums to scale pointer position to
  4813.            DWORD number of rows to scale pointer position to
  4814. SeeAlso: AH=12h/BX=1200h
  4815. --------Q-1512--BH12-------------------------
  4816. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  4817.     AH = 12h
  4818.     BH = 12h
  4819.     BL = window to read from
  4820.         00h handle is DWORD on top of stack
  4821.         01h read next N chars or attributes on task's default window
  4822.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  4823.         0Dh (DV 2.26+) read default window of parent of current task
  4824.     STACK: DWORD count
  4825. Return: STACK: DWORD number of bytes actually read
  4826.            DWORD address of buffer containing data
  4827. Notes:    reading starts at the current logical cursor position; the cursor is
  4828.       updated to point at the character following the last one read
  4829.     any translucent blanks (FFh) which are visible on screen are changed
  4830.       to the character which is seen through them
  4831.     the string produced by the read is placed in an input buffer which may
  4832.       be reused by the next READ or READN of a window
  4833.     window stream opcodes D8h and D9h determine whether the read returns
  4834.       characters or attributes
  4835. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  4836. --------Q-1512--BH12-------------------------
  4837. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  4838.     AH = 12h
  4839.     BH = 12h
  4840.     BL = mailbox for which to retrieve name
  4841.         00h DWORD on top of stack is mailbox handle
  4842.         02h use given task's mailbox (task's handle on top of stack)
  4843.         03h use current task's default mailbox
  4844.     STACK: DWORD length of buffer for name
  4845.            DWORD pointer to buffer
  4846. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  4847. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  4848. Note:    the returned name is not NUL-terminated
  4849. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  4850. --------Q-1512--BX1200-----------------------
  4851. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  4852.     AH = 12h
  4853.     BX = 1200h
  4854.     STACK: DWORD object handle for pointer
  4855. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  4856.            DWORD pointer pos scaled as if window were this many rows high
  4857. SeeAlso: AH=12h/BX=1100h
  4858. --------Q-1512--BH13-------------------------
  4859. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  4860.     AH = 12h
  4861.     BH = 13h
  4862.     BL = window object
  4863.         00h DWORD on top of stack is handle for window to redraw
  4864.         01h redraw task's default window
  4865.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  4866.         0Dh (DV 2.26+) redraw default window of parent of current task
  4867. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  4868. --------Q-1512--BH13-------------------------
  4869. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  4870.     AH = 12h
  4871.     BH = 13h
  4872.     BL = mailbox from which to read
  4873.         00h DWORD on top of stack is mailbox handle
  4874.         02h use given task's mailbox (task's handle on top of stack)
  4875.         03h use current task's default mailbox
  4876.     STACK: DWORD size of buffer in bytes
  4877.            DWORD pointer to buffer
  4878. Return: STACK: DWORD number of bytes read
  4879. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  4880. Notes:    this call blocks if no input is available, but will return less than
  4881.       the requested number of bytes if some (but insufficient) data is
  4882.       available
  4883.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  4884.       4 or 5 set, as common memory may be exhausted by that call when
  4885.       attempting to read the next message
  4886. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  4887. --------Q-1512--BX1300-----------------------
  4888. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  4889.     AH = 12h
  4890.     BX = 1300h
  4891.     STACK: DWORD object handle for pointer
  4892.            DWORD character to use for pointer
  4893. --------Q-1512--BH14-------------------------
  4894. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  4895.     AH = 12h
  4896.     BH = 14h
  4897.     BL = message modifier
  4898.         00h handle is DWORD on top of stack
  4899.         01h define user stream
  4900.         04h intercept keystrokes from KEYBOARD to window (handle on stack)
  4901.         05h intercept keystrokes from task's default KEYBOARD to a window
  4902.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  4903.                  DWORD address of FAR user stream handler
  4904.            (if keyboard) DWORD address of FAR filter function
  4905.  
  4906. The keyboard filter function is called when the keyboard is in field mode.  On
  4907. entry,
  4908.     AL = character
  4909.     AH = 00h or extended ASCII code if AL = 00h
  4910.     BL = field number
  4911.     CH = cursor column
  4912.     CL = cursor row
  4913.     DL = field type modifier (sixth item in field table entry)
  4914.     DH = seventh item in field table entry
  4915.     ES:SI = window's handle
  4916.     DS:DI -> field table entry for field containing the cursor
  4917. The filter function should return
  4918.     AH = 00h use keystroke
  4919.          01h ignore keystroke
  4920.          FFh beep and ignore keystroke
  4921. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  4922. --------Q-1512--BH14-------------------------
  4923. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  4924.     AH = 12h
  4925.     BH = 14h
  4926.     BL = object
  4927.         00h mailbox handle is DWORD on top of stack
  4928.         02h use given task's mailbox (task's handle on top of stack)
  4929.         03h use current task's default mailbox
  4930. Note:    release exclusive access by sending CLOSE message to mailbox
  4931.     access may be requested multiple times, and requires multiple CLOSEs
  4932. SeeAlso: AH=12h/BH=0Dh
  4933. --------Q-1512--BH15-------------------------
  4934. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  4935.     AH = 12h
  4936.     BH = 15h
  4937.     BL = object
  4938.         00h DWORD on top of stack
  4939.         mailbox, keyboard, or pointer only
  4940.         02h mailbox for task whose handle is on top of stack
  4941.         03h mailbox for current task
  4942.         04h keyboard for task whose handle is on top of stack
  4943.         05h keyboard for current task
  4944.     STACK: DWORD flags
  4945.         if mailbox:
  4946.             bit 0: all mail messages in common memory
  4947.             bit 1: allow write even if closed
  4948.             bit 2: don't erase messages when mailbox closed
  4949.             bit 4: (DV/X) append messages with like status and
  4950.                 sender (stream-oriented mail)
  4951.             bit 5: (DV/X) store mail in expanded memory (pool
  4952.                 grows as needed)
  4953.             bit 6: (DV/X) make mailbox into non-owned mailbox
  4954.         if keyboard:
  4955.             bit 5: exclusive input when keyboard in use for input
  4956. Return: nothing
  4957. Notes:    only available if the API level has been set to at least 2.20
  4958.     equivalent to performing SUBFROM and ADDTO calls on the object
  4959.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  4960.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  4961. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  4962. --------Q-1512--BH16-------------------------
  4963. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  4964.     AH = 12h
  4965.     BH = 16h
  4966.     BL = object
  4967.         00h DWORD on top of stack
  4968.         mailbox, keyboard, or pointer only
  4969.         02h mailbox for task whose handle is on top of stack
  4970.         03h mailbox for current task
  4971.         04h keyboard for task whose handle is on top of stack
  4972.         05h keyboard for current task
  4973. Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
  4974. Notes:    only available if the API level has been set to at least 2.20
  4975.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  4976.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  4977. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  4978. --------Q-1512--BH17-------------------------
  4979. INT 15 - DESQview v2.42-2.52 - BUG
  4980.     AH = 12h
  4981.     BH = 17h
  4982.     BL = object
  4983.         00h DWORD on top of stack
  4984.         mailbox, keyboard, or pointer only
  4985.         02h mailbox for task whose handle is on top of stack
  4986.         03h mailbox for current task
  4987.         04h keyboard for task whose handle is on top of stack
  4988.         05h keyboard for current task
  4989. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  4990.       keyboards, and pointers, but causes a random branch
  4991.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  4992. --------Q-1512--BH80-------------------------
  4993. INT 15 - DESQview v2.50+ - SEND MESSAGE 00h WITH ERROR RECOVERY
  4994.     AH = 12h
  4995.     BH = 80h
  4996. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  4997.       not pop up a "Programming Error" window, instead returning an error
  4998.       code in AL:
  4999.         00h no error
  5000.         01h invalid values
  5001.         02h alias invalid
  5002.         03h handle valid but wrong type
  5003.         04h invalid handle
  5004. SeeAlso: AH=12h/BH=00h
  5005. --------Q-1512--BH81-------------------------
  5006. INT 15 - DESQview v2.50+ - SEND MESSAGE 01h WITH ERROR RECOVERY
  5007.     AH = 12h
  5008.     BH = 81h
  5009. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  5010.       not pop up a "Programming Error" window, instead returning an error
  5011.       code in AL (see AH=12h/BH=80h)
  5012. SeeAlso: AH=12h/BH=01h
  5013. --------Q-1512--BH82-------------------------
  5014. INT 15 - DESQview v2.50+ - SEND MESSAGE 02h WITH ERROR RECOVERY
  5015.     AH = 12h
  5016.     BH = 82h
  5017. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  5018.       not pop up a "Programming Error" window, instead returning an error
  5019.       code in AL (see AH=12h/BH=80h)
  5020. SeeAlso: AH=12h/BH=02h
  5021. --------Q-1512--BH83-------------------------
  5022. INT 15 - DESQview v2.50+ - SEND MESSAGE 03h WITH ERROR RECOVERY
  5023.     AH = 12h
  5024.     BH = 83h
  5025. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  5026.       not pop up a "Programming Error" window, instead returning an error
  5027.       code in AL (see AH=12h/BH=80h)
  5028. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  5029. --------Q-1512--BH84-------------------------
  5030. INT 15 - DESQview v2.50+ - SEND MESSAGE 04h WITH ERROR RECOVERY
  5031.     AH = 12h
  5032.     BH = 84h
  5033. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  5034.       not pop up a "Programming Error" window, instead returning an error
  5035.       code in AL (see AH=12h/BH=80h)
  5036. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  5037. --------Q-1512--BH85-------------------------
  5038. INT 15 - DESQview v2.50+ - SEND MESSAGE 05h WITH ERROR RECOVERY
  5039.     AH = 12h
  5040.     BH = 85h
  5041. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  5042.       not pop up a "Programming Error" window, instead returning an error
  5043.       code in AL (see AH=12h/BH=80h)
  5044. SeeAlso: AH=12h/BH=05h
  5045. --------Q-1512--BH86-------------------------
  5046. INT 15 - DESQview v2.50+ - SEND MESSAGE 06h WITH ERROR RECOVERY
  5047.     AH = 12h
  5048.     BH = 86h
  5049. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  5050.       not pop up a "Programming Error" window, instead returning an error
  5051.       code in AL (see AH=12h/BH=80h)
  5052. SeeAlso: AH=12h/BH=06h
  5053. --------Q-1512--BH87-------------------------
  5054. INT 15 - DESQview v2.50+ - SEND MESSAGE 07h WITH ERROR RECOVERY
  5055.     AH = 12h
  5056.     BH = 87h
  5057. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  5058.       not pop up a "Programming Error" window, instead returning an error
  5059.       code in AL (see AH=12h/BH=80h)
  5060. SeeAlso: AH=12h/BH=07h
  5061. --------Q-1512--BH88-------------------------
  5062. INT 15 - DESQview v2.50+ - SEND MESSAGE 08h WITH ERROR RECOVERY
  5063.     AH = 12h
  5064.     BH = 88h
  5065. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  5066.       not pop up a "Programming Error" window, instead returning an error
  5067.       code in AL (see AH=12h/BH=80h)
  5068. SeeAlso: AH=12h/BH=08h
  5069. --------Q-1512--BH89-------------------------
  5070. INT 15 - DESQview v2.50+ - SEND MESSAGE 09h WITH ERROR RECOVERY
  5071.     AH = 12h
  5072.     BH = 89h
  5073. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  5074.       not pop up a "Programming Error" window, instead returning an error
  5075.       code in AL (see AH=12h/BH=80h)
  5076. SeeAlso: AH=12h/BH=09h
  5077. --------Q-1512--BH8A-------------------------
  5078. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah WITH ERROR RECOVERY
  5079.     AH = 12h
  5080.     BH = 8Ah
  5081. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  5082.       not pop up a "Programming Error" window, instead returning an error
  5083.       code in AL (see AH=12h/BH=80h)
  5084. SeeAlso: AH=12h/BH=0Ah
  5085. --------Q-1512--BH8B-------------------------
  5086. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh WITH ERROR RECOVERY
  5087.     AH = 12h
  5088.     BH = 8Bh
  5089. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  5090.       not pop up a "Programming Error" window, instead returning an error
  5091.       code in AL (see AH=12h/BH=80h)
  5092. SeeAlso: AH=12h/BH=0Bh
  5093. --------Q-1512--BH8C-------------------------
  5094. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch WITH ERROR RECOVERY
  5095.     AH = 12h
  5096.     BH = 8Ch
  5097. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  5098.       not pop up a "Programming Error" window, instead returning an error
  5099.       code in AL (see AH=12h/BH=80h)
  5100. SeeAlso: AH=12h/BH=0Ch
  5101. --------Q-1512--BH8D-------------------------
  5102. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh WITH ERROR RECOVERY
  5103.     AH = 12h
  5104.     BH = 8Dh
  5105. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  5106.       not pop up a "Programming Error" window, instead returning an error
  5107.       code in AL (see AH=12h/BH=80h)
  5108. SeeAlso: AH=12h/BH=0Dh
  5109. --------Q-1512--BH8E-------------------------
  5110. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh WITH ERROR RECOVERY
  5111.     AH = 12h
  5112.     BH = 8Eh
  5113. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  5114.       not pop up a "Programming Error" window, instead returning an error
  5115.       code in AL (see AH=12h/BH=80h)
  5116. SeeAlso: AH=12h/BH=0Eh
  5117. --------Q-1512--BH8F-------------------------
  5118. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh WITH ERROR RECOVERY
  5119.     AH = 12h
  5120.     BH = 8Fh
  5121. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  5122.       not pop up a "Programming Error" window, instead returning an error
  5123.       code in AL (see AH=12h/BH=80h)
  5124. SeeAlso: AH=12h/BH=0Fh
  5125. --------Q-1512--BH90-------------------------
  5126. INT 15 - DESQview v2.50+ - SEND MESSAGE 10h WITH ERROR RECOVERY
  5127.     AH = 12h
  5128.     BH = 90h
  5129. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  5130.       not pop up a "Programming Error" window, instead returning an error
  5131.       code in AL (see AH=12h/BH=80h)
  5132. SeeAlso: AH=12h/BH=10h
  5133. --------Q-1512--BH91-------------------------
  5134. INT 15 - DESQview v2.50+ - SEND MESSAGE 11h WITH ERROR RECOVERY
  5135.     AH = 12h
  5136.     BH = 91h
  5137. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  5138.       not pop up a "Programming Error" window, instead returning an error
  5139.       code in AL (see AH=12h/BH=80h)
  5140. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  5141. --------Q-1512--BH92-------------------------
  5142. INT 15 - DESQview v2.50+ - SEND MESSAGE 12h WITH ERROR RECOVERY
  5143.     AH = 12h
  5144.     BH = 92h
  5145. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  5146.       not pop up a "Programming Error" window, instead returning an error
  5147.       code in AL (see AH=12h/BH=80h)
  5148. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  5149. --------Q-1512--BH93-------------------------
  5150. INT 15 - DESQview v2.50+ - SEND MESSAGE 13h WITH ERROR RECOVERY
  5151.     AH = 12h
  5152.     BH = 93h
  5153. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  5154.       not pop up a "Programming Error" window, instead returning an error
  5155.       code in AL (see AH=12h/BH=80h)
  5156. SeeAlso: AH=12h/BH=13h
  5157. --------Q-1512--BH94-------------------------
  5158. INT 15 - DESQview v2.50+ - SEND MESSAGE 14h WITH ERROR RECOVERY
  5159.     AH = 12h
  5160.     BH = 94h
  5161. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  5162.       not pop up a "Programming Error" window, instead returning an error
  5163.       code in AL (see AH=12h/BH=80h)
  5164. SeeAlso: AH=12h/BH=14h
  5165. --------Q-1512--BH95-------------------------
  5166. INT 15 - DESQview v2.50+ - SEND MESSAGE 15h WITH ERROR RECOVERY
  5167.     AH = 12h
  5168.     BH = 95h
  5169. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  5170.       not pop up a "Programming Error" window, instead returning an error
  5171.       code in AL (see AH=12h/BH=80h)
  5172. SeeAlso: AH=12h/BH=15h
  5173. --------Q-1512--BH96-------------------------
  5174. INT 15 - DESQview v2.50+ - SEND MESSAGE 16h WITH ERROR RECOVERY
  5175.     AH = 12h
  5176.     BH = 96h
  5177. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  5178.       not pop up a "Programming Error" window, instead returning an error
  5179.       code in AL (see AH=12h/BH=80h)
  5180. SeeAlso: AH=12h/BH=16h
  5181. --------T-1513-------------------------------
  5182. INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
  5183.     AH = 13h
  5184.     STACK:    WORD    process ID
  5185. Return: AX = status (SYS_OK or SYS_ERROR)
  5186. SeeAlso: AH=12h"VMiX"
  5187. --------T-1513-------------------------------
  5188. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  5189.     AH = 13h
  5190. Return: BX:AX -> task control block (see below)
  5191. SeeAlso: AH=15h"MultiDOS"
  5192.  
  5193. Format of MultiDOS Plus v4.0 task control block:
  5194. Offset    Size    Description
  5195.  00h    DWORD    pointer to next TCB
  5196.  04h  8 BYTEs    ASCIZ task name
  5197.  0Ch  2 BYTEs    ???
  5198.  0Eh    WORD    task PSP segment
  5199.  10h    WORD    abort/suspend flags
  5200.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  5201.  14h    WORD    priority level (0000h-FFFEh)
  5202.  16h    WORD    time slice counter
  5203.  18h  2 BYTEs    ???
  5204.  1Ah    WORD    suspend timer value
  5205.  1Ch    WORD    stack segment
  5206.  1Eh    WORD    stack pointer
  5207.  20h    WORD    display type
  5208.  22h    WORD    display memory
  5209.  24h  2 BYTEs    ???
  5210.  26h    WORD    termination count
  5211.  28h    WORD    equipment flag for BIO10 driver
  5212.  2Ah    BYTE    background CRT mode
  5213.  2Bh    WORD    screen width in columns
  5214.  2Dh    WORD    screen size in bytes
  5215.  2Fh    WORD    segment of physical screen memory
  5216.  31h 16 BYTEs    eight cursor positions
  5217.  41h    WORD    current cursor shape
  5218.  43h    BYTE    active display page
  5219.  44h    WORD    CRT controller I/O port base
  5220.  46h  2 BYTEs    ???
  5221.  48h    WORD    foreground task flag
  5222.  4Ah  6 BYTEs    ???
  5223.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  5224.  52h    DWORD    old INT 22
  5225.  56h    DWORD    old INT 23
  5226.  5Ah    DWORD    old INT 24
  5227.  5Eh    WORD    top of memory for task
  5228.  60h  4 BYTEs    ???
  5229.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  5230.  66h    WORD    DTA offset
  5231.  68h  4 BYTEs    ???
  5232.  6Ch    BYTE    current ANSI.SYS attribute
  5233.  6Dh    BYTE    current ANSI.SYS column
  5234.  6Eh    BYTE    current ANSI.SYS row
  5235.  6Fh    BYTE    current ANSI.SYS display state
  5236.  70h    BYTE    maximum ANSI.SYS columns
  5237.  71h    BYTE    current ANSI.SYS page
  5238.  72h    WORD    saved ANSI.SYS cursor position
  5239.  74h    BYTE    ANSI.SYS parameter buffer index
  5240.  75h    BYTE    current ANSI.SYS screen mode
  5241.  76h    BYTE    ANSI.SYS wrap flag
  5242.  77h  6 BYTEs    ANSI.SYS parameter buffer
  5243.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  5244.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  5245.  85h  3 BYTEs    ???
  5246.  88h 16 BYTEs    request header for DOS driver calls
  5247.  98h 14 BYTEs    ???
  5248.  A6h    WORD    segment of EMS map if EMS task
  5249.  A8h    WORD    flag: task makes EMS calls
  5250.  AAh    WORD    EMS handle for task
  5251.  ACh    WORD    keyboard shift state
  5252.  AEh 12 BYTEs    ???
  5253.  BAh    WORD    TCB of parent if child task
  5254.  BCh    WORD    termination code
  5255.  BEh    WORD    COM port number
  5256.  C0h  4 BYTEs    ???
  5257.  C4h    WORD    current IRQ number
  5258.  C6h  2 BYTEs    ???
  5259.  C8h    WORD    miscellaneous flag word
  5260.  CAh  2 BYTEs    ???
  5261.  CCh    DWORD    old INT 10
  5262.  D0h    WORD    EMS alternate map set number
  5263.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  5264. --------T-1514-------------------------------
  5265. INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
  5266.     AH = 14h
  5267.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  5268.         WORD    bottom right corner of window (high = row, low = col)
  5269. Return: AX = status (SYS_OK)
  5270. Note:    clears window to color set with "sys_setcolors" (AH=18h)
  5271. SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
  5272. --------T-1514-------------------------------
  5273. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  5274.     AH = 14h
  5275. Return: AX = current state
  5276.         0000h MultiDOS Plus command prompt is background task
  5277.         0001h command prompt is foreground task
  5278. SeeAlso: AH=0Bh"MultiDOS"
  5279. --------T-1515-------------------------------
  5280. INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
  5281.     AH = 15h
  5282.     STACK:    DWORD    pointer to ASCIZ banner message for top of screen
  5283. Return: AX = status (SYS_OK)
  5284. SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
  5285. --------T-1515-------------------------------
  5286. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  5287.     AH = 15h
  5288. Return: BX:AX -> system block (see below)
  5289. SeeAlso: AH=13h"MultiDOS"
  5290.  
  5291. Format of MultiDOS Plus 4.0 system block:
  5292. Offset    Size    Description
  5293.  00h    WORD    segment of system control block
  5294.  02h    WORD    redirection flag set by /NOREDIRECT
  5295.  04h    WORD    no-INT 10 flag set by /NO10
  5296.  06h    DWORD    old INT 10
  5297.  0Ah    DWORD    new INT 10
  5298.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  5299.  12h    DWORD    pointer to WORD with idle task TCB offset
  5300.  16h    DWORD    pointer to WORD with foreground TCB offset
  5301.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  5302.  1Eh    WORD    Task Control Block size
  5303.  20h    WORD    number of TCBs
  5304.  22h    WORD    flag: EMS present
  5305.  24h    WORD    EMS page frame base segment
  5306.  26h    WORD    16K pages in EMS page frame
  5307.  28h    WORD    base segment for conventional memory tasks
  5308.  2Ah    WORD    conventional memory size in paragraphs
  5309.  2Ch    DWORD    pointer to list of queue pointers
  5310. --------T-1516-------------------------------
  5311. INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
  5312.     AH = 16h
  5313.     STACK:    DWORD    pointer to I/O Request Packet
  5314.         WORD    top left corner of window (high byte = row, low = col)
  5315.         WORD    bottom right corner of window (high = row, low = col)
  5316. Return: AX = status (SYS_OK or SYS_ERROR)
  5317. SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
  5318. --------T-1516-------------------------------
  5319. INT 15 - MultiDOS Plus - INITIALIZATION
  5320.     AH = 16h
  5321. Note:    used internally during initialization; any other calls will cause
  5322.       unpredictable results
  5323. --------T-1517-------------------------------
  5324. INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
  5325.     AH = 17h
  5326. Return: AH = foreground color
  5327.     AL = background color
  5328. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  5329. --------T-1517-------------------------------
  5330. INT 15 - MultiDOS Plus - MAP IRQ
  5331.     AH = 17h
  5332.     AL = IRQ to map (01h-0Fh)
  5333.     BX = offset of task control block (see AH=13h) to associate with IRQ
  5334. Return: AX = status
  5335.         0000h successful
  5336.         other invalid IRQ
  5337. Note:    the EMS map of the specified TCB is associated with the given interrupt
  5338. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  5339. --------T-1518-------------------------------
  5340. INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
  5341.     AH = 18h
  5342.     STACK:    WORD    new background/foreground colors
  5343.             bits 3-0: foreground
  5344.             bits 7-4: background
  5345.             bits 15-8: unused
  5346. Return: AX = color
  5347. SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
  5348. --------T-1518-------------------------------
  5349. INT 15 - MultiDOS Plus - UNMAP IRQ
  5350.     AH = 18h
  5351.     AL = IRQ to unmap (01h-0Fh)
  5352. Return: AX = status
  5353.         0000h successful
  5354.         0001h invalid IRQ
  5355. Note:    results are unpredictable if the IRQ has not been mapped
  5356. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  5357. --------T-1519-------------------------------
  5358. INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
  5359.     AH = 19h
  5360.     STACK:    WORD    new background/foreground colors
  5361.             bits 3-0: foreground
  5362.             bits 7-4: background
  5363.             bits 15-8: unused
  5364. Return: AX = color
  5365. SeeAlso: AH=18h"VMiX"
  5366. --------T-1519-------------------------------
  5367. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  5368.     AH = 19h
  5369. Return: AX destroyed
  5370. Note:    for MultiDOS internal use only
  5371. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  5372. --------T-151A-------------------------------
  5373. INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
  5374.     AH = 1Ah
  5375.     STACK:    WORD    interrupt number
  5376.         DWORD    pointer to register structure
  5377. Return: AX = returned flags
  5378. --------T-151A-------------------------------
  5379. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  5380.     AH = 1Ah
  5381.     DS:SI -> 8-byte name
  5382. Return: AL = status
  5383.         00h successful
  5384.         AH = semaphore number (20h-3Fh)
  5385.         04h out of string space
  5386. Notes:    all eight bytes of the name are significant
  5387.     if the name does not already exist, it is added to the name table and
  5388.       associated with a free semaphore number
  5389.     names cannot be destroyed
  5390. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  5391. --------T-151B-------------------------------
  5392. INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
  5393.     AH = 1Bh
  5394.     STACK:    DWORD    source address
  5395.         DWORD    destination address
  5396.         WORD    number of words to move
  5397. Return: nothing
  5398. --------T-151B-------------------------------
  5399. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  5400.     AH = 1Bh
  5401.     DS:SI -> 8-byte name
  5402. Return: AH = status
  5403.         00h successful
  5404.         02h invalid semaphore number
  5405.         03h caller already owns semaphore
  5406.         04h out of string space
  5407. Notes:    (see AH=01h"MultiDOS")
  5408.     equivalent to AH=1Ah followed by AH=01h
  5409. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  5410. --------T-151C-------------------------------
  5411. INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
  5412.     AH = 1Ch
  5413.     STACK:    WORD    AND/OR pixel with background (00h = OR, 01h = AND)
  5414.         DWORD    pointer to object bitmap
  5415.         WORD    object width in pixels
  5416.         WORD    object height in pixels
  5417. Return: nothing
  5418. SeeAlso: AH=1Dh"VMiX"
  5419. --------T-151C-------------------------------
  5420. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  5421.     AH = 1Ch
  5422.     DS:SI -> 8-byte name
  5423. Return: AH = status
  5424.         00h successful
  5425.         01h not semaphore owner
  5426.         02h invalid semaphore number
  5427.         04h out of string space
  5428. Notes:    (see AH=02h"MultiDOS")
  5429.     equivalent to AH=1Ah followed by AH=02h
  5430. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  5431. --------T-151D-------------------------------
  5432. INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
  5433.     AH = 1Dh
  5434. Return: AX = current font number (00h-03h)
  5435. SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
  5436. --------T-151D-------------------------------
  5437. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  5438.     AH = 1Dh
  5439.     DS:SI -> 8-byte name
  5440. Return: AH = status
  5441.         00h semaphore not in use
  5442.         01h semaphore owned by another task
  5443.         02h invalid semaphore number
  5444.         03h caller owns semaphore
  5445.         04h out of string space
  5446. Notes:    (see AH=10h"MultiDOS")
  5447.     equivalent to AH=1Ah followed by AH=10h
  5448. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  5449. --------T-151E-------------------------------
  5450. INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
  5451.     AH = 1Eh
  5452.     STACK: WORD new font number (00h-03h)
  5453. Return: AX = current font number (00h-03h)
  5454. SeeAlso: AH=1Dh"VMiX"
  5455. --------T-151E00-----------------------------
  5456. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  5457.     AX = 1E00h
  5458.     DX = event/trigger number (00h-3Fh)
  5459. Return: AH = status
  5460.         00h successful
  5461. SeeAlso: AX=1E01h,AX=1E02h
  5462. --------T-151E01-----------------------------
  5463. INT 15 - MultiDOS Plus - TRIGGER EVENT
  5464.     AX = 1E01h
  5465.     DX = event/trigger number (00h-3Fh)
  5466. Return: AH = status
  5467.         00h successful
  5468.         01h invalid event/trigger number
  5469. Notes:    schedules any task waiting for event; if no task is waiting, the event
  5470.       counter is incremented (and will roll over if it was 65535)
  5471.     may be invoked by interrupt handler
  5472. SeeAlso: AX=1E00h,AX=1E02h
  5473. --------T-151E02-----------------------------
  5474. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  5475.     AX = 1E02h
  5476.     DX = event/trigger number (00h-3Fh)
  5477. Return: AH = status
  5478.         00h successful
  5479.         01h invalid event/trigger number
  5480. Note:    if the event counter is zero, the task is suspended until the event is
  5481.       triggered with AX=1E01h; else, the counter is decremented and the
  5482.       call returns immediately
  5483. SeeAlso: AX=1E00h,AX=1E01h
  5484. --------T-151E08-----------------------------
  5485. INT 15 - MultiDOS Plus 4.01 - SET CONTEXT-SWITCH FUNCTIONS
  5486.     AX = 1E08h
  5487.     DX:BX -> context save handler
  5488.     DX:CX -> context restore handler
  5489. Note:    handlers may be removed by setting addresses to 0000h:0000h
  5490.  
  5491. Handlers are called with:
  5492.     ES:BX -> task's TCB
  5493. Return: all registers preserved
  5494. --------T-151F-------------------------------
  5495. INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
  5496.     AH = 1Fh
  5497.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  5498.         WORD    bottom right corner of window
  5499. Return: AX = status (SYS_OK)
  5500. SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
  5501. --------T-151F-------------------------------
  5502. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  5503.     AH = 1Fh
  5504. Return: BX = first segment of conventional memory
  5505.     DX = first segment of EMS swap frame into which MultiDOS will load
  5506.         programs
  5507. --------T-1520-------------------------------
  5508. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  5509.     AH = 20h
  5510. Return: AX = current state
  5511.         0000h multitasking enabled
  5512.         other TCB of task that disabled multitasking
  5513. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  5514. --------c-152000-----------------------------
  5515. INT 15 U - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  5516.     AX = 2000h
  5517. Desc:    stop setting user flag on entry to PRINT critical region
  5518. Note:    also supported by PC Network v1.00 RECEIVER.COM
  5519. SeeAlso: AX=2001h
  5520. --------c-152001-----------------------------
  5521. INT 15 U - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  5522.     AX = 2001h
  5523.     ES:BX -> byte which is to be incremented while in a DOS call
  5524. Desc:    specify a user flag which PRINT should set to let an interested
  5525.       application know it is in a critical region
  5526. Note:    also supported by PC Network v1.00 RECEIVER.COM
  5527. SeeAlso: AX=2000h
  5528. --------O-152010-----------------------------
  5529. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  5530.     AX = 2010h
  5531.     ???
  5532. Return: ???
  5533. SeeAlso: AX=2011h
  5534. --------O-152011-----------------------------
  5535. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  5536.     AX = 2011h
  5537.     ???
  5538. Return: ???
  5539. SeeAlso: AX=2010h
  5540. --------B-1521-------------------------------
  5541. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  5542.     AH = 21h
  5543.     AL = subfunction
  5544.         00h read POST log
  5545.         01h write POST log
  5546.         BH = device ID
  5547.         BL = error code
  5548. Return: CF set on error
  5549.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  5550.     if function 00h:
  5551.        BX = number of error codes stored
  5552.        ES:DI -> error log
  5553. Note:    the log is a series of words, the first byte of which identifies the
  5554.       error code and the second the device.
  5555. --------B-1522-------------------------------
  5556. INT 15 - SYSTEM - later PS/2s - LOCATE ROM BASIC
  5557.     AH = 22h
  5558. Return: CF set on error
  5559.         AH = status (86h if function not supported)
  5560.     CF clear on success
  5561.         AH = 00h
  5562.         ES:BX -> ROM BASIC
  5563. Note:    if this function is not supported, ROM BASIC is at F600h:0000h
  5564. SeeAlso: INT 86"BASIC",INT F0"BASIC"
  5565. --------b-152400-----------------------------
  5566. INT 15 - SYSTEM - later PS/2s - DISABLE A20 GATE
  5567.     AX = 2400h
  5568. Return: CF clear if successful
  5569.         AH = 00h
  5570.     CF set on error
  5571.         AH = status
  5572.         01h keyboard controller is in secure mode
  5573.         86h function not supported
  5574. Note:    also supported by Qualitas 386MAX v6.01+
  5575. SeeAlso: AX=2401h,AX=2402h,AX=2403h
  5576. --------b-152401-----------------------------
  5577. INT 15 - SYSTEM - later PS/2s - ENABLE A20 GATE
  5578.     AX = 2401h
  5579. Return: CF clear if successful
  5580.         AH = 00h
  5581.     CF set on error
  5582.         AH = status
  5583.         01h keyboard controller is in secure mode
  5584.         86h function not supported
  5585. Note:    also supported by Qualitas 386MAX v6.01+
  5586. SeeAlso: AX=2400h,AX=2402h
  5587. --------b-152402-----------------------------
  5588. INT 15 - SYSTEM - later PS/2s - GET A20 GATE STATUS
  5589.     AX = 2402h
  5590. Return: CF clear if successful
  5591.         AH = 00h
  5592.         AL = current state (00h disabled, 01h enabled)
  5593.     CF set on error
  5594.         AH = status
  5595.         01h keyboard controller is in secure mode
  5596.         86h function not supported
  5597. Note:    also supported by Qualitas 386MAX v6.01+
  5598. SeeAlso: AX=2400h,AX=2401h
  5599. --------b-152403-----------------------------
  5600. INT 15 - SYSTEM - later PS/2s - QUERY A20 GATE SUPPORT
  5601.     AX = 2403h
  5602. Return: CF clear if successful
  5603.         AH = 00h
  5604.         BX = status of A20 gate support
  5605.         bit 0: supported with bit 1 of I/O port 92h
  5606.         bit 1: supported on keyboard controller
  5607.         bit 15: additional data is available (location not yet defined)
  5608.     CF set on error
  5609.         AH = status
  5610.         01h keyboard controller is in secure mode
  5611.         86h function not supported
  5612. Note:    also supported by Qualitas 386MAX v6.01+
  5613. SeeAlso: AX=2402h
  5614. --------B-1540-------------------------------
  5615. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  5616.     AH = 40h
  5617.     AL = subfunction
  5618.         00h get system profile in CX and BX
  5619.         01h set system profile from CX and BX
  5620.         02h get internal modem profile in BX
  5621.         03h set internal modem profile from BX
  5622. Return: CF clear if successful
  5623.         AH = 00h
  5624.     CF set on error
  5625.         AH = status (80h = profile execution failed)
  5626. --------V-154000-----------------------------
  5627. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  5628.     AX = 4000h
  5629. Return: AX = 4000h
  5630.     CL = timeout in minutes, 00h if disabled
  5631. SeeAlso: AX=4001h,AX=4600h
  5632. --------V-154001-----------------------------
  5633. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  5634.     AX = 4001h
  5635.     CL = timeout in minutes, 00h to disable
  5636. Return: AL = status
  5637.         00h timeout modified
  5638.         01h timeout cannot be modified
  5639.         40h timeout cannot be modified
  5640.     CL = timeout in minutes, 00h if disabled
  5641. SeeAlso: AX=4000h,AX=4601h
  5642. --------B-1541-------------------------------
  5643. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE and some others)
  5644.     AH = 41h
  5645.     AL = condition type
  5646.         bits 0-2: condition to wait for
  5647.              0 any external event
  5648.              1 compare and return if equal
  5649.              2 compare and return if not equal
  5650.              3 test and return if not zero
  5651.              4 test and return if zero
  5652.         bit 3:    reserved
  5653.         bit 4:    1=port address, 0=user byte
  5654.         bits 5-7: reserved
  5655.     BH = condition compare or mask value
  5656.     BL = timeout value times 55 milliseconds
  5657.         00h means no timeout
  5658.     DX = I/O port address if AL bit 4 set
  5659.     ES:DI -> user byte if AL bit 4 clear
  5660. Note:    call AH=C0h and examine bit 3 of feature byte 1 to determine whether
  5661.       this function is supported
  5662. SeeAlso: AH=83h,AH=86h,AH=C0h
  5663. --------B-1542-------------------------------
  5664. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  5665.     AH = 42h
  5666.     AL = suspend type
  5667.         00h to use system profile
  5668.         01h to force suspend regardless of system profile
  5669. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  5670.       power-up, execution will resume following the instruction calling
  5671.       this function
  5672. SeeAlso: AH=44h
  5673. --------b-154280-----------------------------
  5674. INT 15 - Compaq SLT/286 - ENTER STANDBY
  5675.     AX = 4280h
  5676. Return: AH = 42h
  5677.     CF clear if successful
  5678.     CF set if unable to enter standby
  5679. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  5680. --------B-1543-------------------------------
  5681. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  5682.     AH = 43h
  5683. Return: AL = status bits (see below)
  5684.  
  5685. Bitfields for Convertible system status:
  5686.  bit 0    LCD detached
  5687.  bit 1    reserved
  5688.  bit 2    RS232/parallel adapter powered on
  5689.  bit 3    internal modem powered on
  5690.  bit 4    power activated by alarm
  5691.  bit 5    standby power lost
  5692.  bit 6    external power in use
  5693.  bit 7    power low
  5694. --------B-1544-------------------------------
  5695. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  5696.     AH = 44h
  5697.     AL = new modem power state (00h power off, 01h power on)
  5698. SeeAlso: AH=42h
  5699. --------b-1544C0-----------------------------
  5700. INT 15 - Olivetti Quaderno - INITIALIZE DIGITAL SIGNAL PROCESSING???
  5701.     AX = 44C0h
  5702.     ES:DI -> new DSP procedure (exchanged with CMOS[28h])
  5703.     ES:SI -> ??? buffer
  5704. Return: ES:DI -> old DSP procedure
  5705.     ES:SI buffer filled with ten bytes from CMOS (addresses 14h-1Ch)
  5706.       followed by 00h (addresses 15h-1Ch copied only if less than 21h)
  5707. Note:    this function is also supported by XBIOS.COM
  5708. SeeAlso: AX=44C9h
  5709. --------b-1544C1-----------------------------
  5710. INT 15 - Olivetti Quaderno - ???
  5711.     AX = 44C1h
  5712.     ???
  5713. Return: ???
  5714. Note:    this function is also supported by XBIOS.COM
  5715. SeeAlso: AX=44C9h
  5716. --------b-1544C2-----------------------------
  5717. INT 15 - Olivetti Quaderno - ???
  5718.     AX = 44C2h
  5719.     DL = byte to be written to I/O port 350h
  5720. Note:    this function is also supported by XBIOS.COM
  5721. SeeAlso: AX=44C3h,AX=44C9h
  5722. --------b-1544C3-----------------------------
  5723. INT 15 - Olivetti Quaderno - GET ???
  5724.     AX = 44C3h
  5725. Return: DH = bitfields
  5726.         bits 0,1: "tres complique"
  5727.         bits 2-4: zero
  5728.         bits 5-7: bits 5-7 read from I/O port 351h
  5729.     DL = value read from I/O port 350h
  5730. Note:    this function is also supported by XBIOS.COM
  5731. SeeAlso: AX=44C2h,AX=44C9h
  5732. --------b-1544C4-----------------------------
  5733. INT 15 - Olivetti Quaderno - ???
  5734.     AX = 44C4h and 44C5h
  5735.     ???
  5736. Return: ???
  5737. Note:    this function is also supported by XBIOS.COM
  5738. SeeAlso: AX=44C9h
  5739. --------b-1544C6-----------------------------
  5740. INT 15 - Olivetti Quaderno - READ LCD
  5741.     AX = 44C6h
  5742. Return: DX = FFFFh clock is displayed on LCD display
  5743.     DX = other: hex number displayed in first four positions of display
  5744.     BH = left alphanumeric character on display (see below)
  5745.     BL = right alphanumeric character on display (see below)
  5746.     CL = flags
  5747.         bit 0: right colon on
  5748.         bit 1: left colon on
  5749.         bits 2-7 unused    
  5750. Notes:    the LCD display has the format HH:HH:AA, where H is a hex digit and A
  5751.       is an alphanumeric character
  5752.     this function is also supported by XBIOS.COM
  5753. SeeAlso: AX=44C7h,AX=44C9h
  5754.  
  5755. Values for alphanumeric characters:
  5756.  00h-0Fh hex digit
  5757.  2Bh    "+"
  5758.  2Dh    "-"
  5759.  30h-39h "0" to "9"
  5760.  41h-5Ah "A" to "Z"
  5761.  61h-6Ah "a" to "z"
  5762.  else    blank
  5763. --------b-1544C7-----------------------------
  5764. INT 15 - Olivetti Quaderno - WRITE LCD
  5765.     AX = 44C7h
  5766.     DX = hex display
  5767.         FFFFh display clock and "HI", "Md", or "Lo"
  5768.         BH,BL,CL unused
  5769.         other: display specified hex number in first four positions
  5770.         BH = left alphanumeric character on display (see AX=44C6h)
  5771.         BL = right alphanumeric character on display (see AX=44C6h)
  5772.         CL = flags
  5773.             bit 0: right colon on
  5774.             bit 1: left colon on
  5775.             bits 2-7 unused
  5776. Note:    this function is also supported by XBIOS.COM
  5777. SeeAlso: AX=44C6h
  5778. --------b-1544C8-----------------------------
  5779. INT 15 - Olivetti Quaderno - ???
  5780.     AX = 44C8h
  5781.     CL = ??? (00h,02h,21h)
  5782.     CH = ???
  5783.     ???
  5784. Return: ???
  5785. Note:    this function is also supported by XBIOS.COM
  5786. SeeAlso: AX=44C9h
  5787. --------b-1544C9-----------------------------
  5788. INT 15 - Olivetti Quaderno - GET XBIOS VERSION
  5789.     AX = 44C9h
  5790. Return: AL = major version
  5791.     AH = minor version
  5792. Note:    this function is also supported by XBIOS.COM
  5793. --------b-154600-----------------------------
  5794. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  5795.     AX = 4600h
  5796. Return: AH = modem configuration information
  5797.         bit 0 powerup state (0 off, 1 on)
  5798.         bit    1 modem installed
  5799.         bit    2 IRQ line assignment (0 IRQ 4, 1 IRQ 3)
  5800.         bit 3 COM port assignment (0 = COM 2, 1 = COM 1)
  5801.         bit 4 modem state (0 not assigned, 1 assigned)
  5802.         bit 5 modem is on
  5803.     AL = power conservation status information
  5804.         bit 0  power source (0 internal, 1 external)
  5805.         bits 1-2 low battery state
  5806.             00 no low battery condition
  5807.             01 low battery 1
  5808.             10 reserved
  5809.             11 low battery 2
  5810.         bits 3-4 power conservation mode
  5811.             00 automatic
  5812.             01 on
  5813.             10 off
  5814.             11 reserved
  5815.     BH = default system inactivity timeout (1-21 minutes)
  5816.     BL = current system inactivity timeout (1-21 minutes)
  5817.     CH = default video display inactivity timeout (1-63 minutes)
  5818.     CL = current video display inactivity timeout (1-63 minutes)
  5819.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  5820.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  5821. SeeAlso: AX=4280h,AX=4601h,INT 77
  5822. --------b-154601-----------------------------
  5823. INT 15 - Compaq SLT/286 - MODIFY POWER CONSERVATION/MODEM CONFIGURATION
  5824.     AX = 4601h
  5825.     BL = system inactivity timeout (1-21 minutes)
  5826.         FFh do not change
  5827.     CL = video display inactivity timeout (1-63 minutes)
  5828.         FFh do not change
  5829.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  5830.         FFh do not change
  5831.     DH = new modem state (00h turn off, 01h turn on, FFh don't change)
  5832. Return: CF clear if successful
  5833.         AH = 00h
  5834.         BL = current system inactivity timeout (1-21 minutes)
  5835.         CL = current video display inactivity timeout (1-63 minutes)
  5836.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  5837.         DH = modem state (FFh unchanged, 00h turned off, 01h turned on)
  5838.     CF set on error
  5839.         AH = error code
  5840.         01h input is out of range
  5841.         02h no modem present
  5842. SeeAlso: AX=4600h,INT 77
  5843. --------b-154604-----------------------------
  5844. INT 15 - Compaq Contura 486 and "Alladin" 08/05/93 ROMs - GET ???
  5845.     AX = 4604h
  5846. Return: CF clear if successful
  5847.         AL = byte read from I/O port 03F8h
  5848.     CF set on error (not supported)
  5849.         AH = 86h (unsupported function)
  5850. Note:    also supported by 7/26/93 LTE Lite 386 ROM
  5851. --------b-154605-----------------------------
  5852. INT 15 - Compaq Contura 486 and "Alladin" 08/05/93 ROMs - ???
  5853.     AX = 4605h
  5854. Return: CF clear if successful
  5855.     CF set on error (not supported)
  5856.         AH = 86h (unsupported function)
  5857. Note:    this function is a NOP (other than clearing CF) in the 08/05/93 version
  5858.       of the Contura 486/486c/486cx and "Aladdin" ROM, and the 7/26/93
  5859.       LTE Lite 386 ROM
  5860. --------D-154900-----------------------------
  5861. INT 15 - Far East MS-DOS - GET DOS TYPE
  5862.     AX = 4900h
  5863. Return: CF clear if successful
  5864.         AH = 00h
  5865.         BL = type of DOS running
  5866.         00h DOS/V
  5867.         01h DOS/J or DOS/K (early IBM Japan versions of MS-DOS)
  5868.     CF set on error
  5869.         AH = 86h (function not supported)
  5870. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  5871. SeeAlso: INT 21/AH=30h
  5872. --------b-154DD4-----------------------------
  5873. INT 15 - HP 95LX - INSTALLATION CHECK
  5874.     AX = 4DD4h
  5875. Return: BX = 4850h ("HP") if HP 95LX
  5876.         CX = ??? (0101h)
  5877.         DL = ??? (00h)
  5878. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  5879. SeeAlso: INT 61"HP 95LX"
  5880. --------b-154E-------------------------------
  5881. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  5882.     AH = 4Eh
  5883.     AL = light sleep
  5884.         00h disabled
  5885.         01h enabled
  5886. Note:    when light sleep is disabled, the system will continue running at full
  5887.       speed; when enabled, it may automatically slow to conserve batteries
  5888. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  5889. --------B-154F-------------------------------
  5890. INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  5891.     AH = 4Fh
  5892.     AL = hardware scan code
  5893.     CF set
  5894. Return: CF set
  5895.        AL = hardware scan code
  5896.     CF clear
  5897.        scan code should be ignored
  5898. Note:    called by INT 09 handler to translate scan codes; the INT 09 code does
  5899.       not examine the scan code it reads from the keyboard until after
  5900.       this function returns.  This permits software to rearrange the
  5901.       keyboard; for example, swapping the CapsLock and Control keys, or
  5902.       turning the right Shift key into Enter.
  5903. SeeAlso: INT 09,INT 15/AH=C0h
  5904. --------T-1550-------------------------------
  5905. INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
  5906.     AH = 50h
  5907.     BX = segment of page directory table
  5908.     CX = page number of page table
  5909. SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
  5910. --------T-1551-------------------------------
  5911. INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
  5912.     AH = 51h
  5913.     STACK:    DWORD    selector:offset of function
  5914. Return: registers as returned by function
  5915. Note:    executes function with privilege level 0 (highest privilege)
  5916. SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
  5917. --------B-155101-----------------------------
  5918. INT 15 - SYSTEM - later PS/2s - EXPANSION UNIT, RETURN CONFIGURATION NUMBER
  5919.     AX = 5101h
  5920. Return: CF set if successful
  5921.         AH = 00h
  5922.         AL = current configuration number
  5923.         00h system unit only
  5924.         FFh configuration not recognized
  5925.         BX = status flag
  5926.         bits 0-14: reserved
  5927.         bit 15: additional data is available (location TBD)
  5928.     CF clear on error
  5929.         AH = status
  5930.         01h expansion unit is not present
  5931.         86h function not supported
  5932. Note:    CF convention is the reverse of the standard convention for this
  5933.       interrupt.  (Perhaps a typo in the IBM BIOS Tech Ref?)
  5934. --------T-1552-------------------------------
  5935. INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
  5936.     AH = 52h
  5937. SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
  5938. --------p-155300BX0000-----------------------
  5939. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  5940.     AX = 5300h
  5941.     BX = 0000h (device ID of system BIOS)
  5942. Return: CF clear if successful
  5943.         AH = major version (BCD)
  5944.         AL = minor version (BCD)
  5945.         BX = 504Dh ("PM")
  5946.         CX = flags
  5947.         bit 0: 16-bit protected mode interface supported
  5948.         bit 1: 32-bit protected mode interface supported
  5949.         bit 2: CPU idle call reduces processor speed
  5950.         bit 3: BIOS power management disabled
  5951.         bits 4-7 reserved
  5952.     CF set on error
  5953.         AH = error code (86h) (see below)
  5954.  
  5955. Values for error code:
  5956.  01h    power management functionality disabled
  5957.  02h    interface connection already in effect
  5958.  03h    interface not connected
  5959.  04h    real-mode interface not connected
  5960.  05h    16-bit protected-mode interface already connected
  5961.  06h    16-bit protected-mode interface not supported
  5962.  07h    32-bit protected-mode interface already connected
  5963.  08h    32-bit protected-mode interface not supported
  5964.  09h    unrecognized device ID
  5965.  0Ah    invalid parameter value in CX
  5966.  0Bh-1Fh reserved for other interface and general errors
  5967.  20h-3Fh reserved for CPU errors
  5968.  40h-5Fh reserved for device errors
  5969.  60h    can't enter requested state
  5970.  61h-7Fh reserved for other system errors
  5971.  80h    no power management events pending
  5972.  81h-85h reserved for other power management event errors
  5973.  86h    APM not present
  5974.  87h-9Fh reserved for other power management event errors
  5975. --------p-155301BX0000-----------------------
  5976. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  5977.     AX = 5301h
  5978.     BX = 0000h (device ID of system BIOS)
  5979. Return: CF clear if successful
  5980.     CF set on error
  5981.         AH = error code (02h,09h) (see AX=5300h)
  5982. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  5983. --------p-155302BX0000-----------------------
  5984. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  5985.     AX = 5302h
  5986.     BX = 0000h (device ID of system BIOS)
  5987. Return: CF clear if successful
  5988.         AX = real-mode segment base address of protected-mode 16-bit code
  5989.         segment
  5990.         BX = offset of entry point
  5991.         CX = real-mode segment base address of protected-mode 16-bit data
  5992.         segment
  5993.     CF set on error
  5994.         AH = error code (05h,06h,09h) (see AX=5300h)
  5995. Notes:    the caller must initialize two consecutive descriptors with the
  5996.       returned segment base addresses; these descriptors must be valid
  5997.       whenever the protected-mode interface is called, and will have
  5998.       their limits arbitrarily set to 64K.
  5999.     the protected mode interface is invoked by making a far call with the
  6000.       same register values as for INT 15; it must be invoked while CPL=0,
  6001.       the code segment descriptor must have a DPL of 0, the stack must be
  6002.       in a 16-bit segment and have enough room for BIOS use and possible
  6003.       interrupts, and the current I/O permission bit map must allow access
  6004.       to the I/O ports used for power management.
  6005.     functions 00h-03h are not available from protected mode
  6006. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  6007. --------p-155303BX0000-----------------------
  6008. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  6009.     AX = 5303h
  6010.     BX = 0000h (device ID of system BIOS)
  6011. Return: CF clear if successful
  6012.         AX = real-mode segment base address of protected-mode 32-bit code
  6013.         segment
  6014.         EBX = offset of entry point
  6015.         CX = real-mode segment base address of protected-mode 16-bit code
  6016.         segment
  6017.         DX = real-mode segment base address of protected-mode 16-bit data
  6018.         segment
  6019.     CF set on error
  6020.         AH = error code (07h,08h,09h) (see AX=5300h)
  6021. Notes:    the caller must initialize three consecutive descriptors with the
  6022.       returned segment base addresses for 32-bit code, 16-bit code, and
  6023.       16-bit data, respectively; these descriptors must be valid whenever
  6024.       the protected-mode interface is called, and will have their limits
  6025.       arbitrarily set to 64K.
  6026.     the protected mode interface is invoked by making a far call to the
  6027.       32-bit code segment with the same register values as for INT 15; it
  6028.       must be invoked while CPL=0, the code segment descriptor must have a
  6029.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  6030.       for BIOS use and possible interrupts, and the current I/O permission
  6031.       bit map must allow access to the I/O ports used for power management.
  6032.     functions 00h-03h are not available from protected mode
  6033. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  6034. --------p-155304BX0000-----------------------
  6035. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  6036.     AX = 5304h
  6037.     BX = 0000h (device ID of system BIOS)
  6038. Return: CF clear if successful
  6039.     CF set on error
  6040.         AH = error code (03h,09h) (see AX=5300h)
  6041. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  6042. --------p-155305-----------------------------
  6043. INT 15 - Advanced Power Management Specification - CPU IDLE
  6044.     AX = 5305h
  6045. Return: after system leaves idle state
  6046.     CF clear
  6047. Notes:    call when the system is idle and should be suspended until the next
  6048.       system event or interrupt
  6049.     should not be called from within a hardware interrupt handler to avoid
  6050.       reentrance problems
  6051.     if an interrupt causes the system to resume normal processing, the
  6052.       interrupt may or may not have been handled when the BIOS returns
  6053.       from this call; thus, the caller should allow interrupts on return
  6054.     interrupt handlers may not retain control if the BIOS allows
  6055.       interrupts while in idle mode even if they are able to determine
  6056.       that they were called from idle mode
  6057.     the caller should issue this call continuously in a loop until it needs
  6058.       to perform some processing of its own
  6059. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  6060. --------p-155306-----------------------------
  6061. INT 15 - Advanced Power Management Specification - CPU BUSY
  6062.     AX = 5306h
  6063. Return: CF clear
  6064. Notes:    called to ensure that the system runs at full speed even on systems
  6065.       where the BIOS is unable to recognize increased activity (especially
  6066.       if interrupts are hooked by other programs and not chained to the
  6067.       BIOS)
  6068.     this call may be made even when the system is already running at full
  6069.       speed, but it will create unnecessary overhead
  6070.     should not be called from within a hardware interrupt handler to avoid
  6071.       reentrance problems
  6072. SeeAlso: AX=5305h
  6073. --------p-155307-----------------------------
  6074. INT 15 - Advanced Power Management Specification - SET POWER STATE
  6075.     AX = 5307h
  6076.     BX = device ID (see below)
  6077.     CX = system state ID
  6078.         0000h ready (not supported for device ID 0001h)
  6079.         0001h stand-by
  6080.         0002h suspend
  6081.         0003h off (not supported for device ID 0001h)
  6082.         0004h-FFFFh reserved
  6083. Return: CF clear if successful
  6084.     CF set on error
  6085.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  6086. Note:    should not be called from within a hardware interrupt handler to avoid
  6087.       reentrance problems
  6088.  
  6089. Values for device IDs:
  6090.  0000h    system BIOS
  6091.  0001h    all devices for which the system BIOS manages power
  6092.  01xxh    display (01FFh for all attached display devices)
  6093.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  6094.  03xxh    parallel ports (03FFh for all attached parallel ports)
  6095.  04xxh    serial ports (04FFh for all attached serial ports)
  6096.  0500h-FFFFh reserved
  6097. --------p-155307BX0001-----------------------
  6098. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  6099.     AX = 5307h
  6100.     BX = 0001h
  6101.     CX = 0001h
  6102. Return: CF clear
  6103. Notes:    puts the entire system into stand-by mode; normally called in response
  6104.       to a System Stand-by Request notification after any necessary
  6105.       processing, but may also be invoked at the caller's discretion
  6106.     should not be called from within a hardware interrupt handler to avoid
  6107.       reentrance problems
  6108.     the stand-by state is typically exited on an interrupt
  6109. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  6110. --------p-155307BX0001-----------------------
  6111. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  6112.     AX = 5307h
  6113.     BX = 0001h
  6114.     CX = 0002h
  6115. Return: after system is resumed
  6116.     CF clear
  6117. Notes:    puts the entire system into a low-power suspended state; normally
  6118.       called in response to a Suspend System Request notification after
  6119.       any necessary processing, but may also be invoked at the caller's
  6120.       discretion
  6121.     should not be called from within a hardware interrupt handler to avoid
  6122.       reentrance problems
  6123.     the caller may need to update its date and time values because the
  6124.       system could have been suspended for a long period of time
  6125. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  6126. --------p-155308BXFFFF-----------------------
  6127. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  6128.     AX = 5308h
  6129.     BX = FFFFh
  6130.     CX = new state
  6131.         0000h disabled
  6132.         0001h enabled
  6133. Return: CF clear if successful
  6134.     CF set on error
  6135.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  6136. Notes:    when power management is disabled, the system BIOS will not
  6137.       automatically power down devices, enter stand-by or suspended mode,
  6138.       or perform any power-saving actions in response to AX=5305h calls
  6139.     should not be called from within a hardware interrupt handler to avoid
  6140.       reentrance problems
  6141. SeeAlso: AX=5309h
  6142. --------p-155309BXFFFF-----------------------
  6143. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  6144.     AX = 5309h
  6145.     BX = FFFFh
  6146. Return: CF clear if successful
  6147.     CF set on error
  6148.         AH = error code (09h) (see AX=5300h)
  6149. Note:    should not be called from within a hardware interrupt handler to avoid
  6150.       reentrance problems
  6151. SeeAlso: AX=5308h
  6152. --------p-15530ABX0001-----------------------
  6153. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  6154.     AX = 530Ah
  6155.     BX = 0001h
  6156. Return: CF clear if successful
  6157.         BH = AC line status
  6158.         00h off-line
  6159.         01h on-line
  6160.         FFh unknown
  6161.         other reserved
  6162.         BL = battery status
  6163.         00h high
  6164.         01h low
  6165.         02h critical
  6166.         03h charging
  6167.         FFh unknown
  6168.         other reserved
  6169.         CL = remaining battery life
  6170.         00h-64h (0-100) percentage of full charge
  6171.         FFh unknown
  6172.     CF set on error
  6173.         AH = error code (09h) (see AX=5300h)
  6174. Note:    should not be called from within a hardware interrupt handler to avoid
  6175.       reentrance problems
  6176. --------p-15530B-----------------------------
  6177. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  6178.     AX = 530Bh
  6179. Return: CF clear if successful
  6180.         BX = event code
  6181.         0001h system stand-by request
  6182.         0002h system suspend request
  6183.         0003h normal resume system notification
  6184.         0004h critical resume system notification
  6185.         0005h battery low notification
  6186.     CF set on error
  6187.         AH = error code (03h,80h) (see AX=5300h)
  6188. Notes:    although power management events are often asynchronous, notification
  6189.       will not be made until polled via this call to permit software to
  6190.       only receive event notification when it is prepared to process
  6191.       power management events; since these events are not very time-
  6192.       critical, it should be sufficient to poll once or twice per second
  6193.     the critical resume notification is made after the system resumes
  6194.       from an emergency suspension; normally, the system BIOS only notifies
  6195.       its partner that it wishes to suspend and relies on the partner to
  6196.       actually request the suspension, but no notification is made on an
  6197.       emergency suspension
  6198.     should not be called from within a hardware interrupt handler to avoid
  6199.       reentrance problems
  6200. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  6201. --------T-155400-----------------------------
  6202. INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
  6203.     AX = 5400h
  6204.     ES:BX -> device information tables
  6205.     DI:DX -> dispatcher entry point
  6206. Note:    called by OmniView to notify programs loaded before OmniView of state
  6207.       changes inside OmniView
  6208. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  6209. --------T-155401-----------------------------
  6210. INT 15 C - Omniview Multitasker - PROCESS CREATION
  6211.     AX = 5401h
  6212.     ES:BX = process handle
  6213. Note:    called by OmniView to notify programs loaded before OmniView of state
  6214.       changes inside OmniView
  6215. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  6216. --------T-155402-----------------------------
  6217. INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
  6218.     AX = 5402h
  6219.     ES:DX = process handle
  6220. Note:    called by OmniView to notify programs loaded before OmniView of state
  6221.       changes inside OmniView
  6222. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  6223. --------T-155403-----------------------------
  6224. INT 15 C - Omniview Multitasker - SAVE
  6225.     AX = 5403h
  6226.     ES:DX = process swapping out
  6227. Note:    called by OmniView to notify programs loaded before OmniView of state
  6228.       changes inside OmniView
  6229. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  6230. --------T-155404-----------------------------
  6231. INT 15 C - Omniview Multitasker - RESTORE
  6232.     AX = 5404h
  6233.     ES:DX = process swapping in
  6234. Note:    called by OmniView to notify programs loaded before OmniView of state
  6235.       changes inside OmniView
  6236. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  6237. --------T-155405-----------------------------
  6238. INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
  6239.     AX = 5405h
  6240.     ES:DX = process swapping in
  6241. Note:    called by OmniView to notify programs loaded before OmniView of state
  6242.       changes inside OmniView
  6243. SeeAlso: AX=5406h
  6244. --------T-155406-----------------------------
  6245. INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
  6246.     AX = 5406h
  6247.     ES:DX = process swapping in
  6248. Note:    called by OmniView to notify programs loaded before OmniView of state
  6249.       changes inside OmniView
  6250. SeeAlso: AX=5405h
  6251. --------T-155407-----------------------------
  6252. INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
  6253.     AX = 5407h
  6254. Note:    called by OmniView to notify programs loaded before OmniView of state
  6255.       changes inside OmniView
  6256. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  6257. --------b-1560------------------------------------
  6258. INT 15 - HUNTER 16 - SET SYSTEM CLOCK SPEED
  6259.     AH = 60h
  6260.     AL = new speed
  6261.         00h normal (8 MHz)
  6262.         01h Slow Mode 1 (4 MHz)
  6263.         02h Slow Mode 2 (2 MHz)
  6264. Note:    the Husky Hunter 16 is an 8088-based ruggedized laptop.     Other family
  6265.       members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
  6266. SeeAlso: AX=6301h
  6267. --------b-1561------------------------------------
  6268. INT 15 - HUNTER 16 - GET POWER LEVEL
  6269.     AH = 61h
  6270. Return: AH = percentage of full power left (0..100)
  6271. Desc:    determine how much battery power is left
  6272. SeeAlso: AH=62h,AH=66h,AH=73h"HUNTER"
  6273. --------b-1562------------------------------------
  6274. INT 15 - HUNTER 16 - SET LOW POWER THRESHOLD
  6275.     AH = 62h
  6276.     AL = level (00h 5%, 01h 10%, ... 12h 95%)
  6277.     BX = interval between power low warnings in seconds (1..600)
  6278. Return: AH = Status
  6279. Desc:    set the level (relative to full power) when power-low warnings begin
  6280.       and the interval between the warnings
  6281. SeeAlso: AH=61h,AH=65h,AH=66h
  6282. --------b-156300----------------------------------
  6283. INT 15 - HUNTER 16 - GET IDLE TIMEOUT
  6284.     AX = 6300h
  6285. Return: AH = status
  6286.     BX = timeout in seconds (0-3600)
  6287. Desc:    get the idle timeout value, the interval without keyboard or
  6288.        communications activity before the system shuts down
  6289. SeeAlso: AX=6301h
  6290. --------b-156301----------------------------------
  6291. INT 15 - HUNTER 16 - SET IDLE TIMEOUT
  6292.     AX = 6301h
  6293.     BX = timeout in seconds (0-3600)
  6294. Desc:    sets the idle timeout value, the interval without keyboard or
  6295.       communications activity before the system shuts down
  6296. SeeAlso: AX=6300h
  6297. --------b-1564------------------------------------
  6298. INT 15 - HUNTER 16 - CONTROL RESUME MODE
  6299.     AH = 64h
  6300.     AL = new state
  6301.         00h disable Resume mode
  6302.         01h enable Resume mode
  6303. Return: AH = status
  6304. Desc:    turn Resume mode on or off. In Resume mode the system starts in
  6305.       the application that was running when it shut down as if nothing 
  6306.       had happened.
  6307. SeeAlso: AH=67h,AH=68h,AH=69h
  6308. --------b-1565------------------------------------
  6309. INT 15 - HUNTER 16 - AUTHORISE CHARGING
  6310.     AH = 65h
  6311.     AL = charging level
  6312.         01h charging not allowed
  6313.         02h charging allowed until power down
  6314.         03h charging allowed until batteries changed or fail.
  6315.         Ask user if charging is still allowed on next poweron
  6316.         04h charging allowed indefinitely
  6317.     BX = 0203h
  6318.     CX = 0405h
  6319.     DX = 0607h
  6320. Return: AH = status
  6321. SeeAlso: AH=66h,AH=68h
  6322. --------b-1566------------------------------------
  6323. INT 15 - HUNTER 16 - SET BATTERY LEVEL
  6324.     AH = 66h
  6325.     AL = level in percent of maximum (0..100)
  6326. Return: AH = status
  6327. SeeAlso: AH=61h,AH=65h
  6328. --------b-1567------------------------------------
  6329. INT 15 - HUNTER 16 - CONTROL STOP MODE
  6330.     AH = 67h
  6331.     AL = mode when waiting for input
  6332.         00h use STOP mode (allows communication)
  6333.         01h use HALT mode (disallows communication)
  6334. Return: AH = status
  6335. Desc:    select the power save mode to use when waiting for input
  6336. SeeAlso: AH=69h
  6337. --------b-1568------------------------------------
  6338. INT 15 - HUNTER 16 - REQUEST POWER DOWN
  6339.     AH = 68h
  6340. Desc:    turns off the Hunter 16 if power down is allowed (see AH=69h)
  6341. SeeAlso: AH=69h
  6342. --------b-1569------------------------------------
  6343. INT 15 - HUNTER 16 - CONTROL POWER DOWN AVAILABILITY
  6344.     AH = 69h
  6345.     AL = mode
  6346.         00h inhibit power down
  6347.         01h allow power down
  6348. Return: AH = status
  6349. SeeAlso: AH=67h,AH=68h,AH=6Ah
  6350. --------b-156A------------------------------------
  6351. INT 15 - HUNTER 16 - CONTROL SLOW MODE
  6352.     AH = 6Ah
  6353.     AL = mode
  6354.         00h inhibit Slow mode
  6355.         01h allow Slow mode
  6356. Return: AH = status
  6357. SeeAlso: AH=69h
  6358. --------b-156B------------------------------------
  6359. INT 15 - HUNTER 16 - GET ROM BIOS VERSION
  6360.     AH = 6Bh
  6361. Return: BH = version number (ASCII)
  6362.     BL = release number (ASCII)
  6363.     CH = minor release number (ASCII)
  6364.     CL = minor release number (ASCII)
  6365. SeeAlso: AH=6Ch
  6366. --------b-156C------------------------------------
  6367. INT 15 - HUNTER 16 - GET SERIAL NUMBER
  6368.     AH = 6Ch
  6369. Return: BL:CX = BCD serial number
  6370. Note:    when shipped, all Hunter 16s have the same Serial Number, but a
  6371.       different number can be stored (see AH=72h)
  6372. SeeAlso: AH=6Bh,AH=72h
  6373. --------b-156D------------------------------------
  6374. INT 15 - HUNTER 16 - GET EVENT DETAIL
  6375.     AH = 6Dh
  6376. Return: AH = 00h if successful
  6377.     CX:BX = event flags bit 0..31 (see below)
  6378. Note:    this function allows testing for events
  6379. SeeAlso: AH=6Eh,AH=6Fh
  6380.  
  6381. Bitfields for events:
  6382.  bit 0    PWR button pressed
  6383.  bit 1    error on COM1
  6384.  bit 2    error on COM2
  6385.  bit 3    data received on COM1
  6386.  bit 4    data received on COM2
  6387.  bit 5    RTC Alarm
  6388.  bit 6    RI received
  6389. --------b-156E------------------------------------
  6390. INT 15 - HUNTER 16 - ENABLE/TRAP EVENT
  6391.     AH = 6Eh
  6392.     AL = Software Interrupt
  6393.           00h  do not trap event
  6394.           else trap as software interrupt number AL
  6395.     BH = event number (see AH=6Dh)
  6396.     BL = enable mask
  6397.         00h disable event
  6398.         01h enable event
  6399. Return: AH = 00h if successful
  6400. SeeAlso: AH=6Dh,AH=6Fh
  6401. --------b-156F------------------------------------
  6402. INT 15 - HUNTER 16 - ACKNOWLEDGE EVENT
  6403.     AH = 6Fh
  6404.     AL = event number (see AH=6Dh)
  6405. Return: AH = 00h if successful
  6406. Desc:    Acknowledges the event, so the next similar event can be detected 
  6407. SeeAlso: AH=6Dh"HUNTER",AH=6Eh
  6408. ----------157000-----------------------------
  6409. INT 15 - Tandy 1000SL/TL - READ FROM EEPROM
  6410.     AX = 7000h
  6411.     BL = number of word to read (00h-3Fh)
  6412. Return: CF clear if function supported
  6413.         DX = contents of EEPROM word
  6414. Note:    newer Tandy 1000-series machines use EEPROM instead of CMOS RAM in
  6415.       the clock chip to store system configuration information
  6416. SeeAlso: AX=7001h
  6417. ----------157001-----------------------------
  6418. INT 15 - Tandy 1000SL/TL - WRITE TO EEPROM
  6419.     AX = 7001h
  6420.     BL = number of word to read (00h-3Fh)
  6421.     DX = new value for EEPROM word
  6422. Return: CF clear if function supported
  6423. Note:    the EEPROMs are normally written only by the system setup program;
  6424.       changing the values can badly mess up a Tandy
  6425. SeeAlso: AX=7000h
  6426. --------b-1570------------------------------------
  6427. INT 15 - HUNTER 16 - CONTROL SOUND
  6428.     AH = 70h
  6429.     AL = new state
  6430.         00h disable sound
  6431.         else enable sound
  6432. Note:    the Husky Hunter 16 is an 8088-based ruggedized laptop.     Other family
  6433.       members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
  6434. --------b-1571------------------------------------
  6435. INT 15 - HUNTER 16 - SELECT POWER UP KEYS
  6436.     AH = 71h
  6437.     BL = column
  6438.     BH = row
  6439.     AL = column switch (00h disable, 01h enable)
  6440.     CL = row switch (00h disable, 01h enable)
  6441. Return: AH = status
  6442. SeeAlso: AH=7Bh,AH=88h
  6443. --------b-157200----------------------------------
  6444. INT 15 - HUNTER 16 - RESET SERIAL NUMBER
  6445.     AX = 7200h
  6446. Return: AH = 00h if successful
  6447. Desc:    reset the serial number to the default serial number present when the
  6448.       Hunter 16 was shipped
  6449. SeeAlso: AH=6Ch,AH=72h
  6450. --------b-1572------------------------------------
  6451. INT 15 - HUNTER 16 - REDIRECT SERIAL NUMBER
  6452.     AH = 72h
  6453.     AL nonzero
  6454.     DS:BX -> new serial number (6 ASCII digits)
  6455. Return: AH = 00h if successful
  6456. Desc:    install a new serial number
  6457. SeeAlso: AH=6Ch,AX=7200h
  6458. --------b-1573------------------------------------
  6459. INT 15 - HUNTER 16 - GET ORACLE GT POWER LEVEL
  6460.     AH = 73h
  6461.     AL = drive (0: A:, 1: B:)
  6462. Return: AH = status
  6463.         00h successful
  6464.         FFh Oracle GT drive not connected
  6465.     AL = power level in percent of maximum (0..100)
  6466. Desc:    get the power remaining in the Oracle GT batteries
  6467. SeeAlso: AH=61h
  6468. --------b-1574------------------------------------
  6469. INT 15 - HUNTER 16 - SET BACKLIGHT POWER UP STATE
  6470.     AH = 74h
  6471.     AL = new level
  6472.         01h off
  6473.         02h unchanged
  6474.         03h change level
  6475.         BL = desired level (00h-7Fh)
  6476. Return: AH = status
  6477. Desc:    select the backlight level to use when the Hunter is next turned on
  6478. SeeAlso: AH=64h,AH=75h,INT 10/AH=64h,INT 10/AH=78h
  6479. --------b-1575------------------------------------
  6480. INT 15 - HUNTER 16 - SET CONTRAST POWER UP STATE
  6481.     AH = 75h
  6482.     AL = new level
  6483.         01h off
  6484.         02h unchanged
  6485.         03h change level
  6486.         BL = desired level (00h-7Fh)
  6487. Return: AH = status
  6488. Desc:    select the LCD contrast level to use when the Hunter is next turned on
  6489. SeeAlso: AH=63h,AH=74h
  6490. --------b-1576------------------------------------
  6491. INT 15 - HUNTER 16 - CONTROL POWER SAVE
  6492.     AH = 76h
  6493.     BX = Control
  6494.          bit 0 power save enabled
  6495.          bit 1 inhibit power save when waiting for COM1 data
  6496.          bit 2 inhibit power save when waiting for COM2 data
  6497.          bit 3 inhibit power save when waiting for data from barcode wand
  6498.          bit 4 inhibit power up on timer tick
  6499. SeeAlso: AH=74h
  6500. --------b-1579------------------------------------
  6501. INT 15 - HUNTER 16 - REDIRECT LPT1
  6502.     AH = 79h
  6503.     AL = port to which to redirect (00h COM1, 01h COM2)
  6504. --------b-157A------------------------------------
  6505. INT 15 - HUNTER 16 - INVOKE HOT KEY
  6506.     AH = 7Ah
  6507. Desc:    this function has the same effect as pressing the HOT key
  6508. SeeAlso: AH=7Bh
  6509. --------b-157B------------------------------------
  6510. INT 15 - HUNTER 16 - CONTROL HOT KEY
  6511.     AH = 7Bh
  6512.     AL = 00h prevent HOT key
  6513.         else allow HOT key
  6514. Desc:    Allow or prevent the HOT key function which is used to examine and
  6515.       change the Hunter setup
  6516. SeeAlso: AH=71h,AH=7Ah,AH=7Ch
  6517. --------b-157C------------------------------------
  6518. INT 15 - HUNTER 16 - CONTROL HOT KEY POWER OPTION
  6519.     AH = 7Ch
  6520.     AL = 00h prevent HOT key power option
  6521.         else allow HOT key power option
  6522. Desc:    allow or prevent changing the power options
  6523. SeeAlso: AH=7Bh,AH=7Dh
  6524. --------b-157D------------------------------------
  6525. INT 15 - HUNTER 16 - OVERRIDE LOW POWER TURN OFF
  6526.     AH = 7Dh
  6527.     AL = 00h turn off after 10 warnings
  6528.         else never turn off
  6529. Desc:    specify whether the Hunter 16 turns off after 10 low power warnings
  6530. SeeAlso: AH=7Ch
  6531. --------b-157E------------------------------------
  6532. INT 15 - HUNTER 16 - CONTROL BATTERY CHANGE FACILITIES (APM)
  6533.     AH = 7Eh
  6534.     AL = 00h do not prompt
  6535.         else prompt
  6536. Desc:    select whether the user is prompted for the battery state if the
  6537.       battery cap has been off when the system is turned on
  6538. SeeAlso: AH=7Fh
  6539. --------b-157F------------------------------------
  6540. INT 15 - HUNTER 16 - SET BATTERY TYPE (APM)
  6541.     AH = 7Fh
  6542.     AL = battery type
  6543.         00h     non-rechargeable
  6544.         else rechargeable
  6545. SeeAlso: AH=7Eh
  6546. --------B-1580-------------------------------
  6547. INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  6548.     AH = 80h
  6549.     BX = device ID
  6550.     CX = process ID
  6551.     CF clear
  6552. Return: CF clear if successful
  6553.         AH = 00h
  6554.     CF set on error
  6555.         AH = status
  6556.         80h invalid command (PC,PCjr)
  6557.         86h function not supported (XT)
  6558. Note:    this function should be hooked by a multitasker which wishes to keep
  6559.       track of device ownership; the default BIOS handler merely returns
  6560.       successfully
  6561. SeeAlso: AH=81h,AH=82h
  6562. --------b-1580------------------------------------
  6563. INT 15 - HUNTER 16 - GET/SET BATTERY CAPACITY (APM)
  6564.     AH = 80h
  6565.     AL = function
  6566.         00h get
  6567.         Return: AL = capacity (500mA + AL * 50mA, max 40 = 2500mA)
  6568.         else set
  6569.         BL = battery capacity (same as AL above)
  6570. SeeAlso: AH=61h"HUNTER",AH=81h"HUNTER"
  6571. --------B-1581-------------------------------
  6572. INT 15 C - OS HOOK - DEVICE CLOSE
  6573.     AH = 81h
  6574.     BX = device ID
  6575.     CX = process ID
  6576.     CF clear
  6577. Return: CF clear if successful
  6578.         AH = 00h
  6579.     CF set on error
  6580.         AH = status (see AH=80h)
  6581. Note:    this function should be hooked by a multitasker which wishes to keep
  6582.       track of device ownership; the default BIOS handler merely returns
  6583.       successfully
  6584. SeeAlso: AH=80h,AH=82h
  6585. --------b-1581------------------------------------
  6586. INT 15 - HUNTER 16 - CONTROL POWER OUTPUT
  6587.     AH = 81h
  6588.     AL = new state of power output (00h off, nonzero on)
  6589. Desc:    turn the +5V low power output on or off
  6590. SeeAlso: AH=80h"HUNTER"
  6591. --------B-1582-------------------------------
  6592. INT 15 C - OS HOOK - PROGRAM TERMINATION
  6593.     AH = 82h
  6594.     BX = process ID
  6595.     CF clear
  6596. Return: CF clear if successful
  6597.         AH = 00h
  6598.     CF set on error
  6599.         AH = status (see AH=80h)
  6600. Notes:    closes all devices opened by the given process ID with function 80h
  6601.     this function should be hooked by a multitasker which wishes to keep
  6602.       track of device ownership; the default BIOS handler merely returns
  6603.       successfully
  6604. SeeAlso: AH=80h,AH=81h
  6605. --------b-1582------------------------------------
  6606. INT 15 - HUNTER 16 - SOUND OUTPUT
  6607.     AH = 82h
  6608.     DX = length (duration in seconds = DX * 666670 / frequency)
  6609.     BX = pitch (see below)
  6610. Desc:    Sound the tone specified in BX for the duration in DX
  6611. SeeAlso: AX=1019h
  6612.  
  6613. Values for pitch:
  6614. BX(dec)     Note    Frequency    BX(dec)     Note    Frequency
  6615.   425    G    1568.000     1515    A     440.000
  6616.   451    F#    1479.503     1605    G#     415.307
  6617.   477    F    1396.900     1701    G     392.000
  6618.   506    E    1318.500     1802    F#     369.998
  6619.   536    D#    1244.523     1909    F     349.230
  6620.   568    D    1174.700     2022    E     329.630
  6621.   601    C#    1108.749     2143    D#     311.127
  6622.   637    C    1046.500     2270    D     293.660
  6623.   675    B     958.770     2405    C#     277.183
  6624.   715    A#     932.329     2548    MID C     261.630
  6625.   758    A     880.000     2700    B     246.940
  6626.   803    G#     830.609     2860    A#     233.081
  6627.   850    G     783.990     3030    A     220.000
  6628.   901    F#     739.990     3210    G#     207.654
  6629.   954    F     698.460     3401    G     196.000
  6630.  1011    E     659.260     3604    F#     184.996
  6631.  1071    D#     622.257     3818    F     174.610
  6632.  1135    D     587.330     4045    E     164.810
  6633.  1203    C#     554.365     4286    D#     155.560
  6634.  1274    C     523.250     4540    D     146.830
  6635.  1350    B     493.880     4668    C#     142.827
  6636.  1430    A#     466.162     4803    C     138.810
  6637. --------B-1583-------------------------------
  6638. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  6639.     AH = 83h
  6640.     AL = subfunction
  6641.         00h set interval
  6642.         CX:DX = microseconds to delay
  6643.         ES:BX -> byte whose high bit is to be set at end of interval
  6644.         01h cancel wait interval
  6645. Return: CF set on error or function already busy
  6646.         AH = status
  6647.         80h invalid command (PC,PCjr)
  6648.         86h function not supported (XT and later)
  6649.     CF clear if successful
  6650. Notes:    the resolution of the wait period is 977 microseconds on most systems
  6651.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  6652.       real-time clock chip which is available on INT 70
  6653.     IBM AT 1/10/84 BIOS ignores AL and always performs subfunction 00h
  6654. SeeAlso: AH=41h,AH=86h,INT 70
  6655. --------b-1583------------------------------------
  6656. INT 15 - HUNTER 16 - CONTROL SCREEN SYNCHRONISATION
  6657.     AH = 83h
  6658.     AL = state of LCD window (00h disabled, nonzero enabled)
  6659. Desc:    Enable/disable the facility where the displayed window tracks the
  6660.       cursor output to keep the focus visible
  6661. --------B-1584-------------------------------
  6662. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  6663.     AH = 84h
  6664.     DX = subfunction
  6665.         0000h read joystick switches
  6666.         Return: AL bits 7-4 = switch settings
  6667.         0001h read positions of joysticks
  6668.         Return: AX = X position of joystick A
  6669.             BX = Y position of joystick A
  6670.             CX = X position of joystick B
  6671.             DX = Y position of joystick B
  6672. Return: CF set on error
  6673.         AH = status
  6674.         80h invalid command (PC,PCjr)
  6675.         86h function not supported (other)
  6676.     CF clear if successful
  6677. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  6678.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  6679.     a 250kOhm joystick typically returns 0000h-01A0h
  6680. --------b-158400----------------------------------
  6681. INT 15 - HUNTER 16 - GET DISKETTE PORT
  6682.     AX = 8400h
  6683.     BH = Drive (0: A:, 1: B:)
  6684. Return: AL = Port (0: COM1, >0: COM2)
  6685. Desc:    return the COM port used for the floppy drive
  6686. SeeAlso: AX=8401h
  6687. --------b-158401----------------------------------
  6688. INT 15 - HUNTER 16 - SET DISKETTE PORT
  6689.     AX = 8401h
  6690.     BH = Drive (0: A:, 1: B:)
  6691.     BL = Port (0: COM1, >0: COM2)
  6692. Desc:    set the COM port used for the floppy drive
  6693. SeeAlso: AX=8400h
  6694. --------B-1585-------------------------------
  6695. INT 15 C - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  6696.     AH = 85h
  6697.     AL = SysRq key action (00h pressed, 01h released)
  6698.     CF clear
  6699. Return: CF clear if successful
  6700.         AH = 00h
  6701.     CF set on error
  6702.         AH = status (see AH=84h)
  6703. Notes:    called by keyboard decode routine
  6704.     the default handler simply returns successfully; programs which wish
  6705.       to monitor the SysRq key must hook this call
  6706. SeeAlso: INT 09
  6707. --------b-158500----------------------------------
  6708. INT 15 - HUNTER 16 - RESTORE POWER MENU (APM)
  6709.     AX = 8500h
  6710. Desc:    restore the standard power menu
  6711. SeeAlso: AX=8501h"HUNTER"
  6712. --------b-158501----------------------------------
  6713. INT 15 - HUNTER 16 - SET POWER MENU (APM)
  6714.     AX = 8501h
  6715.     BL = user software interrupt number
  6716. Desc:    install an alternate power menu routine
  6717. SeeAlso: AX=8500h"HUNTER"
  6718. --------B-1586-------------------------------
  6719. INT 15 - BIOS - WAIT (AT,PS)
  6720.     AH = 86h
  6721.     CX:DX = interval in microseconds
  6722. Return: CF clear if successful (wait interval elapsed)
  6723.     CF set on error or AH=83h wait already in progress
  6724.         AH = status (see AH=84h)
  6725. Note:    the resolution of the wait period is 977 microseconds on most systems
  6726.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  6727.       real-time clock chip which is available on INT 70
  6728. SeeAlso: AH=41h,AH=83h,INT 1A/AX=FF01h,INT 70
  6729. --------b-1586------------------------------------
  6730. INT 15 - HUNTER 16 - GET/SET SCREEN ATTRIBUTE TABLE
  6731.     AH = 86h
  6732.     AL = function (00h get, nonzero set)
  6733.     BX = 1234h
  6734.     DS:SI -> 256-byte Attribute buffer
  6735. Note:    In text modes each character has its attribute byte XOR'd with the
  6736.       corresponding byte in the attribute table.  If the attribute is 15,
  6737.       15 is XOR'd with Table[15]
  6738. --------B-1587-------------------------------
  6739. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  6740.     AH = 87h
  6741.     CX = number of words to copy (max 8000h)
  6742.     ES:SI -> global descriptor table
  6743. Return: CF set on error
  6744.     CF clear if successful
  6745.     AH = status
  6746.         00h source copied into destination
  6747.         01h parity error
  6748.         02h interrupt error
  6749.         03h address line 20 gating failed
  6750.         80h invalid command (PC,PCjr)
  6751.         86h unsupported function (XT,PS30)
  6752. Notes:    copy is done in protected mode with interrupts disabled by the default
  6753.       BIOS handler; many 386 memory managers perform the copy with
  6754.       interrupts enabled
  6755.     this function is incompatible with the OS/2 compatibility box
  6756. SeeAlso: AH=88h,AH=89h
  6757.  
  6758. Format of global descriptor table:
  6759. Offset    Size    Description
  6760.  00h 16 BYTEs    zeros
  6761.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  6762.  12h  3 BYTEs    24-bit linear source address, low byte first
  6763.  15h    BYTE    source segment access rights (93h)
  6764.  16h    WORD    zero
  6765.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  6766.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  6767.  1Dh    BYTE    destination segment access rights (93h)
  6768.  1Eh 18 BYTEs    zeros
  6769. --------b-1587------------------------------------
  6770. INT 15 - HUNTER 16 - SET INT 72h VECTOR
  6771.     AH = 87h
  6772.     DS:DX = new service routine
  6773. Desc:    set the INT 72h vector which is called in 2 cases:
  6774.       - when the machine is about to turn off or reboot, INT 72h is called
  6775.         with AH=0
  6776.       - when the machine is powering up INT 72h is called with AH=01h
  6777. Note:    the actual INT 72h vector must also be changed with INT 21/AH=25h
  6778. --------B-1588-------------------------------
  6779. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  6780.     AH = 88h
  6781. Return: CF clear if successful
  6782.         AX = number of contiguous KB starting at absolute address 100000h
  6783.     CF set on error
  6784.         AH = status
  6785.         80h invalid command (PC,PCjr)
  6786.         86h unsupported function (XT,PS30)
  6787. Notes:    TSRs which wish to allocate extended memory to themselves often hook
  6788.       this call, and return a reduced memory size.    They are then free to
  6789.       use the memory between the new and old sizes at will.
  6790.     the standard BIOS only returns memory between 1MB and 16MB; use AH=C7h
  6791.       for memory beyond 16MB
  6792.     not all BIOSes correctly return the carry flag, making this call
  6793.       unreliable unless one first checks whether it is supported through
  6794.       a mechanism other than calling the function and testing CF
  6795. SeeAlso: AH=87h,AH=C7h
  6796. --------b-1588------------------------------------
  6797. INT 15 - HUNTER 16 - GET POWER UP KEYS
  6798.     AH = 88h
  6799. Return: AH = 00h
  6800.     BX = column
  6801.     CL = row
  6802. SeeAlso: AH=71h
  6803. --------B-1589-------------------------------
  6804. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  6805.     AH = 89h
  6806.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  6807.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  6808.     ES:SI -> GDT for protected mode
  6809.            offset 0h  null descriptor (initialize to zeros)
  6810.               8h  GDT descriptor
  6811.              10h  IDT descriptor
  6812.              18h  DS
  6813.              20h  ES
  6814.              28h  SS
  6815.              30h  CS
  6816.              38h  uninitialized, used to build descriptor for BIOS CS
  6817. Return: CF set on error
  6818.        AH = FFh  error enabling address line 20
  6819.     CF clear if successful
  6820.        AH = 00h
  6821.        in protected mode at specified address
  6822. Notes:    BL and BH must be multiples of 8
  6823.     the protected-mode CS must reference the same memory as the CS this
  6824.       function is called from because execution continues with the address
  6825.       following the interrupt call
  6826. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  6827. --------b-158900----------------------------------
  6828. INT 15 - HUNTER 16 - GET POWER MODE
  6829.     AX = 8900h
  6830. Return: AH = 00h
  6831.     BL = current power mode
  6832.         00h Standard Power Mode (SPM)
  6833.         01h Advanced Power Mode (APM)
  6834. SeeAlso: AX=8901h
  6835. --------b-158901----------------------------------
  6836. INT 15 - HUNTER 16 - SET POWER MODE
  6837.     AX = 8901h
  6838.     BL = new mode
  6839.         00h Standard Power Mode (SPM)
  6840.         01h Advanced Power Mode (APM)
  6841. Return: AH = 00h
  6842. SeeAlso: AX=8900h
  6843. --------b-158A------------------------------------
  6844. INT 15 - HUNTER 16 - CONTROL POWER INPUT (SPM)
  6845.     AH = 8Ah
  6846.     AL = new state of Power Input (00h disabled, nonzero enabled)
  6847.     SI = 1234h
  6848.     DI = 5678h
  6849. Return: AH = status
  6850.         00h success
  6851.         FFh failure
  6852. Desc:    Enable or disable Power Input. When Power Input is disabled the AC
  6853.       adaptor will neither charge the batteries nor supply power to the
  6854.       Hunter 16. Disable Power Input if using Alkaline batteries.
  6855. --------b-158B------------------------------------
  6856. INT 15 - HUNTER 16 - GET/SET CHARGER TEMPERATURE OVERRIDE
  6857.     AH = 8Bh
  6858.     AL = function
  6859.         00h get
  6860.         Return:    BH = Maximum charging temperature
  6861.                 Temp = -20 + (n * 0.63) degrees Centigrade
  6862.             BL = Minimum charging temperature
  6863.         else set
  6864.         BH = maximum charging temperature (as above)
  6865.         BL = minimum charging temperature (as above)
  6866. Return: AH = status
  6867.         00h success
  6868.         FFh failure 
  6869. Desc:    get/set the temperature interval within which the charger should 
  6870.       operate
  6871. --------b-158C------------------------------------
  6872. INT 15 - HUNTER 16 - GET/SET POWER SAVE ENTRY FLAG
  6873.     AH = 8Ch
  6874.     AL = function
  6875.         00h get
  6876.         Return: BX = which operations disable power save (see below)
  6877.         else set
  6878.         BX = which operations should disable power save (see below)
  6879. SeeAlso: AH=8Dh
  6880.  
  6881. Bitfields for operations disablign power save:
  6882.  bit 0    INT 10h prevents power save
  6883.  bit 1    INT 13h prevents power save
  6884.  bit 2    INT 14h prevents power save
  6885.  bit 3    INT 15h prevents power save
  6886.  bit 4    INT 1Ah prevents power save
  6887.  bit 5    INT 21h prevents power save
  6888.  bit 6    direct write to video RAM prevents power save
  6889.  bit 7    access to 8250 UART prevents power save
  6890.  bit 8    access to 8253 (Sound) prevents power save
  6891. --------b-158D------------------------------------
  6892. INT 15 - HUNTER 16 - GET/SET BOOST CHARGE (SPM)
  6893.     AH = 8Dh
  6894.     AL = function
  6895.         00h get
  6896.         Return: AL = Fast Charge state (00h prevented, else allowed)
  6897.         nonzero set
  6898.         BH = Fast Charge state (00h prevent, nonzero allow)
  6899. Return: AH = status
  6900.         00h success
  6901.         FFh failure
  6902. Desc:    control whether Fast Charging (200ma rather than 70ma) is allowed
  6903. SeeAlso: AH=8Ch
  6904. --------B-1590-------------------------------
  6905. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  6906.     AH = 90h
  6907.     AL = device type (see below)
  6908.     ES:BX -> request block for type codes 80h through BFh
  6909.     CF clear
  6910. Return: CF set if wait time satisfied
  6911.     CF clear if driver must perform wait
  6912.         AH = 00h
  6913. Notes:    type codes are allocated as follows:
  6914.       00-7F non-reentrant devices; OS must arbitrate access
  6915.       80-BF reentrant devices; ES:BX points to a unique control block
  6916.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  6917.     floppy and hard disk BIOS code uses this call to implement a timeout;
  6918.       for device types 00h and 01h, a return of CF set means that the
  6919.       timeout expired before the disk responded.
  6920.     this function should be hooked by a multitasker to allow other tasks
  6921.       to execute while the BIOS is waiting for I/O completion; the default
  6922.       handler merely returns with AH=00h and CF clear
  6923. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  6924.  
  6925. Values for device type:
  6926.  00h    disk
  6927.  01h    diskette
  6928.  02h    keyboard
  6929.  03h    PS/2 pointing device
  6930.  21h    waiting for keyboard input (Phoenix BIOS)
  6931.  80h    network
  6932.  FBh    digital sound (Tandy)
  6933.  FCh    disk reset (PS)
  6934.  FDh    diskette motor start
  6935.  FEh    printer
  6936. --------B-1591-------------------------------
  6937. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  6938.     AH = 91h
  6939.     AL = device type (see AH=90h)
  6940.     ES:BX -> request block for type codes 80h through BFh
  6941.     CF clear
  6942. Return: AH = 00h
  6943. Note:    this function should be hooked by a multitasker to allow other tasks
  6944.       to execute while the BIOS is waiting for I/O completion; the default
  6945.       handler merely returns with AH=00h and CF clear
  6946. SeeAlso: AH=90h
  6947. --------b-15BC-------------------------------
  6948. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED FOR DELAY LOOPS
  6949.     AH = BCh
  6950. Return: CF clear
  6951.     (Phoenix 1.10 10a) BYTE 0040h:00B0h set to delay loop count
  6952.     (Dell 4xxDE BIOS A11) WORD 0040h:00ECh set to delay loop count
  6953. Note:    this function reads system timer channel 0 twice, then does
  6954.       calculations on the returned values to determine the delay loop
  6955.       counter needed by the BIOS for beeps and floppy timeouts
  6956. --------E-15BF00-----------------------------
  6957. INT 15 - Rational Systems DOS/16M - ???
  6958.     AX = BF00h
  6959.     ???
  6960. Return: ???
  6961. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  6962. SeeAlso: AX=BF02h
  6963. --------E-15BF01-----------------------------
  6964. INT 15 - Rational Systems DOS/16M - ???
  6965.     AX = BF01h
  6966.     ???
  6967. Return: ???
  6968. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  6969.     called by DOS/4GW
  6970. SeeAlso: AX=BF00h,AX=BF02h
  6971. --------E-15BF02DX0000-----------------------
  6972. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  6973.     AX = BF02h
  6974.     DX = 0000h
  6975. Return: DX = nonzero if installed
  6976.         DX:SI -> XBRK structure (see below)
  6977. Note:    this function is also supported by DOS/4G
  6978. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  6979. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  6980.  
  6981. Format of XBRK structure:
  6982. Offset    Size    Description
  6983.  00h    DWORD    linear address of first available byte
  6984.  04h    DWORD    linear address of last available byte + 1 ???
  6985.  08h    DWORD    real-mode address of XBRK structure???
  6986.  0Ch    DWORD    ???
  6987.  10h  2 BYTEs    ???
  6988.  12h    WORD    segment of ???
  6989.  14h  8 BYTEs    ???
  6990.  1Ch 512 BYTEs    protected-mode IDT
  6991. 21Ch  N BYTEs    protected-mode GDT
  6992. --------E-15BF03-----------------------------
  6993. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  6994.     AX = BF03h
  6995.     BX = PSP segment of extender
  6996.     ???
  6997. Return: ???
  6998. Note:    if BX is not the PSP segment of the extender, it passes the call down
  6999.       the INT 15 chain; this allows nested instances of the extender
  7000. SeeAlso: AX=BF06h
  7001. --------E-15BF04-----------------------------
  7002. INT 15 - Rational Systems DOS/4GW - ???
  7003.     AX = BF04h
  7004.     BX = PSP segment of extender
  7005. Return: nothing???
  7006. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  7007.       the INT 15 chain; this allows nested instances of the extender
  7008.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  7009. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  7010. --------E-15BF05-----------------------------
  7011. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  7012.     AX = BF05h
  7013.     BX = PSP segment of extender
  7014. Return: nothing???
  7015. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  7016.       the INT 15 chain; this allows nested instances of the extender
  7017.     calls INT 67/AX=DE01h if ???
  7018. --------E-15BF06-----------------------------
  7019. INT 15 - Rational Systems DOS/4GW - ???
  7020.     AX = BF06h
  7021.     BX = PSP segment of extender
  7022.     ???
  7023. Return: ???
  7024. Note:    if BX is not the PSP segment of the extender, it passes the call down
  7025.       the INT 15 chain; this allows nested instances of the extender
  7026. SeeAlso: AX=BF03h
  7027. --------E-15BFDCDX0000-----------------------
  7028. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  7029.     AX = BFDCh
  7030.     DX = 0000h
  7031.     SI = 0000h
  7032. Return: DX = nonzero if installed
  7033.         DX:SI -> XBRK structure (see AX=BF02h)
  7034. SeeAlso: AX=BF02h
  7035. --------E-15BFDEBX0000-----------------------
  7036. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  7037.     AX = BFDEh
  7038.     BX = 0000h
  7039. Return: AX = ??? (0003h)
  7040.     BX = FFFFh
  7041. SeeAlso: AX=BF02h
  7042. --------E-15BFDEBX0001-----------------------
  7043. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  7044.     AX = BFDEh
  7045.     BX = 0001h
  7046. Return: BX = 0000h (success)
  7047.     CX:DX -> name of process manager executable
  7048. SeeAlso: AX=BFDEh/BX=0000h
  7049. --------E-15BFDEBX0002-----------------------
  7050. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  7051.     AX = BFDEh
  7052.     BX = 0002h
  7053.     CX:DX -> ???
  7054. Return: BX = 0000h (success)
  7055. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  7056. --------E-15BFDEBX0003-----------------------
  7057. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  7058.     AX = BFDEh
  7059.     BX = 0003h
  7060. Return: BX = 0000h (success)
  7061.     CX:DX -> ???
  7062. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  7063. --------E-15BFDEBX0004-----------------------
  7064. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  7065.     AX = BFDEh
  7066.     BX = 0004h
  7067.     CL = ???
  7068. Return: BX = 0000h (success)
  7069.     CX:DX -> XBRK structure (see AX=BF02h)
  7070. SeeAlso: AX=BFDEh/BX=0000h
  7071. --------E-15BFDEBX0005-----------------------
  7072. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  7073.     AX = BFDEh
  7074.     BX = 0005h
  7075.     CX = new value for ???
  7076. Return: BX = 0000h (success)
  7077.     AX = old value of ???
  7078.     DS:SI -> ??? (if AX nonzero on return)
  7079.     ES:DI -> ??? (if AX zero on return)
  7080. Note:    called by DOS4GW.EXE
  7081. SeeAlso: AX=BFDEh/BX=0000h
  7082. --------E-15BFDEBX0006-----------------------
  7083. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  7084.     AX = BFDEh
  7085.     BX = 0006h
  7086. Return: BX = 0000h (success)
  7087.     AH = interrupt number??? (BEh)
  7088.     CX:DX = ???
  7089. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  7090. --------E-15BFDEBX0007-----------------------
  7091. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  7092.     AX = BFDEh
  7093.     BX = 0007h
  7094.     CX:DX = ???
  7095. Return: BX = 0000h (success)
  7096. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  7097. --------E-15BFDEBX0008-----------------------
  7098. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  7099.     AX = BFDEh
  7100.     BX = 0008h
  7101.     CX = segment of ???
  7102.     DS = ???
  7103. Return: BX = status
  7104.         0000h successful
  7105.         AL = ??? (80h or C0h)
  7106.         DX = ??? (0603h) if AL=C0h
  7107.         0001h failed
  7108.         AX = 0000h
  7109. Note:    called by DOS4GW.EXE
  7110. SeeAlso: AX=BFDEh/BX=0000h
  7111. --------E-15BFDEBX0009-----------------------
  7112. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  7113.     AX = BFDEh
  7114.     BX = 0009h
  7115. Return: BX = 0000h (success)
  7116.     CX:DX -> full pathname to LOAD32.EXP
  7117. SeeAlso: AX=BFDEh/BX=0000h
  7118. --------E-15BFDEBX000A-----------------------
  7119. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
  7120.     AX = BFDEh
  7121.     BX = 000Ah
  7122. Return: BX = 0000h (success)
  7123.     AX = new value of ??? counter
  7124. Notes:    also resets a variety of values if the counter goes negative
  7125.     called by DOS4GW.EXE
  7126. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  7127. --------E-15BFDEBX000B-----------------------
  7128. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
  7129.     AX = BFDEh
  7130.     BX = 000Bh
  7131. Return: AX = new value of ??? counter
  7132. Note:    called by DOS4GW.EXE
  7133. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  7134. --------E-15BFDEBX000C-----------------------
  7135. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  7136.     AX = BFDEh
  7137.     BX = 000Ch
  7138.     CL = ???
  7139.         00h
  7140.         nonzero
  7141. Return: ???
  7142. SeeAlso: AX=BFDEh/BX=0000h
  7143. --------E-15BFDEBX000D-----------------------
  7144. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  7145.     AX = BFDEh
  7146.     BX = 000Dh
  7147.     ???
  7148. Return: ???
  7149. SeeAlso: AX=BFDEh/BX=0000h
  7150. --------E-15BFDEBX000E-----------------------
  7151. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  7152.     AX = BFDEh
  7153.     BX = 000Eh
  7154.     DX:CX -> ???
  7155. Return: AX = segment of handle for calling task
  7156.     BX = ??? (probably destroyed)
  7157.     DX:CX -> ???
  7158. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  7159. --------E-15BFDEBX000F-----------------------
  7160. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  7161.     AX = BFDEh
  7162.     BX = 000Fh
  7163. Return: AX = segment of handle for calling task
  7164.     BX = ??? (probably destroyed)
  7165.     DX:CX -> ???
  7166. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  7167. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  7168. --------E-15BFDEBX0010-----------------------
  7169. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
  7170.     AX = BFDEh
  7171.     BX = 0010h
  7172. Return: AX = segment of caller's task handle
  7173.     BX destroyed
  7174. SeeAlso: AX=BFDEh/BX=000Fh
  7175. --------E-15BFDEBX0011-----------------------
  7176. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  7177.     AX = BFDEh
  7178.     BX = 0011h
  7179. Return: CX = code segment of DVDOS4GX.DVR
  7180.     BX = ??? (0004h)
  7181. SeeAlso: AX=BFDEh/BX=0000h
  7182. --------E-15BFDEBX0012-----------------------
  7183. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  7184.     AX = BFDEh
  7185.     BX = 0012h
  7186. Return: DX = code segment of DVDOS4GX.DVR
  7187.     BX = ??? (012Ch)
  7188.     CX = ??? (0006h)
  7189. SeeAlso: AX=BFDEh/BX=0000h
  7190. --------E-15BFDEBX0013-----------------------
  7191. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  7192.     AX = BFDEh
  7193.     BX = 0013h
  7194. Return: DX:CX -> ???
  7195. SeeAlso: AX=BFDEh/BX=000Eh
  7196. --------E-15BFDEBX0014-----------------------
  7197. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
  7198.     AX = BFDEh
  7199.     BX = 0014h
  7200.     CX = index of ??? mailbox
  7201.         (0000h-0004h valid, but no range checking done)
  7202. Return: AX,BX destroyed
  7203. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  7204. --------E-15BFDEBX0015-----------------------
  7205. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  7206.     AX = BFDEh
  7207.     BX = 0015h
  7208.     CX = index of ??? mailbox
  7209.         (0000h-0004h valid, but no range checking done)
  7210. Return: AX,BX destroyed
  7211. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  7212. --------E-15BFDEBX0016-----------------------
  7213. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  7214.     AX = BFDEh
  7215.     BX = 0016h
  7216.     CX = index of ??? mailbox
  7217.         (0000h-0004h valid, but no range checking done)
  7218. Return: AX = status
  7219.         0000h no one owns mailbox
  7220.         0001h mailbox has an owner
  7221.     BX destroyed
  7222. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  7223. --------E-15BFDEBX0017-----------------------
  7224. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  7225.     AX = BFDEh
  7226.     BX = 0017h
  7227.     CX = index of ??? mailbox
  7228.         (0000h-0004h valid, but no range checking done)
  7229. Return: AX = segment of mailbox owner's handle
  7230.     BX = segment of caller's task handle
  7231. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  7232. --------E-15BFDEBXFFFD-----------------------
  7233. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  7234.     AX = BFDEh
  7235.     BX = FFFDh
  7236. Return: CX:DX = ???
  7237. SeeAlso: AX=BFDEh/BX=FFFEh
  7238. --------E-15BFDEBXFFFE-----------------------
  7239. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  7240.     AX = BFDEh
  7241.     BX = FFFEh
  7242.     CX:DX = ???
  7243. SeeAlso: AX=BFDEh/BX=FFFDh
  7244. --------E-15BFDEBXFFFF-----------------------
  7245. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
  7246.     AX = BFDEh
  7247.     BX = FFFFh
  7248. SeeAlso: AX=BFDEh/BX=0000h
  7249. --------B-15C0-------------------------------
  7250. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  7251.     AH = C0h
  7252. Return: CF set if BIOS doesn't support call
  7253.     CF clear on success
  7254.         ES:BX -> ROM table (see below)
  7255.     AH = status
  7256.         00h successful
  7257.         86h unsupported function
  7258. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  7259.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  7260.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  7261.       and a model byte at absolute address FE845h
  7262.     Hewlett-Packard machines contain the signature "HP" at F000h:00F8h and
  7263.       a product identifier at F000h:00FAh (see below)
  7264.     Compaq machines can be identified by the signature string "COMPAQ" at
  7265.       F000h:FFEAh, and is preceded by additional information (see below)
  7266.     Tandy 1000 machines contain 21h in the byte at F000h:C000h and FFh in
  7267.       the byte at FFFFh:000Eh; Tandy 1000SL/TL machines only provide the
  7268.       first three data bytes (model/submodel/revision) in the returned
  7269.       table
  7270.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  7271.       past the end of the configuration table
  7272.     the Phoenix 386 BIOS contains a second version and date string
  7273.       (presumably the last modification for that OEM version) beginning at
  7274.       F000h:FFD8h, with each byte doubled (so that both ROM chips contain
  7275.       the complete information)
  7276. SeeAlso: AH=C7h,AH=C9h,AH=D1h
  7277.  
  7278. Format of ROM configuration table:
  7279. Offset    Size    Description
  7280.  00h    WORD    number of bytes following
  7281.  02h    BYTE    model (see below)
  7282.  03h    BYTE    submodel (see below)
  7283.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  7284.  05h    BYTE    feature byte 1 (see below)
  7285.  06h    BYTE    feature byte 2 (see below)
  7286.  07h    BYTE    feature byte 3 (see below)
  7287.  08h    BYTE    feature byte 4:
  7288.         bit 7: ??? (set on N51SX, CL57SX)
  7289.         bits 6-4: reserved
  7290.         bit 3: ??? (set on some 1992 PS/1's, 35SX, 40SX)
  7291.         bits 2-1: reserved
  7292.         bit 0: ??? (set on N51SX, CL57SX, 57SX)
  7293.  09h    BYTE    feature byte 5:
  7294.         reserved (0) (IBM)
  7295.         ??? (08h) (Phoenix 386 v1.10)
  7296. ---AWARD BIOS---
  7297.  0Ah  N BYTEs    AWARD copyright notice
  7298. ---Phoenix BIOS---
  7299.  0Ah    BYTE    ??? (00h)
  7300.  0Bh    BYTE    major version
  7301.  0Ch    BYTE    minor version (BCD)
  7302.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  7303. ---Quadram Quad386---
  7304.  0Ah 17 BYTEs    ASCII signature string "Quadram Quad386XT"
  7305.  
  7306. Bitfields for feature byte 1:
  7307.  bit 7    DMA channel 3 used by hard disk BIOS
  7308.  bit 6    2nd 8259 installed
  7309.  bit 5    Real-Time Clock installed
  7310.  bit 4    INT 15/AH=4Fh called upon INT 09h
  7311.  bit 3    wait for external event (INT 15/AH=41h) supported
  7312.  bit 2    extended BIOS area allocated (usually at top of RAM)
  7313.  bit 1    bus is Micro Channel instead of ISA
  7314.  bit 0    system has dual bus (Micro Channel + ISA)
  7315.  
  7316. Bitfields for feature byte 2:
  7317.  bit 7    reserved
  7318.  bit 6    INT 16/AH=09h (keyboard functionality) supported
  7319.  bit 5    INT 15/AH=C6h (get POS data) supported
  7320.  bit 4    INT 15/AH=C7h (return memory map info) supported
  7321.  bit 3    INT 15/AH=C8h (en/disable CPU functions) supported
  7322.  bit 2    non-8042 keyboard controller
  7323.  bit 1    data streaming supported
  7324.  bit 0    reserved
  7325.  
  7326. Bitfields for feature byte 3:
  7327.  bits 7-5 reserved
  7328.  bit 4    ??? (set on 1992 PS/1's, N51SX, CL57SX, 35SX?, 40SX?)
  7329.  bit 3    SCSI subsystem supported on system board
  7330.  bit 2    information panel installed
  7331.  bit 1    IML (Initial Machine Load) system
  7332.  bit 0    SCSI supported in IML
  7333.  
  7334. Values for model/submodel/revision:
  7335. Model  Submdl  Rev    BIOS date    System
  7336.  FFh    *    *    04/24/81    PC (original)
  7337.  FFh    *    *    10/19/81    PC (some bugfixes)
  7338.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  7339.  FFh    00h    rev      ???        Tandy 1000SL
  7340.  FFh    01h    rev      ???        Tandy 1000TL
  7341.  FFh    46h    ***      ???        Olivetti M15
  7342.  FEh    *    *    08/16/82    PC XT
  7343.  FEh    *    *    11/08/82    PC XT and Portable
  7344.  FEh    43h    ***      ???        Olivetti M240
  7345.  FEh    A6h    ???      ???        Quadram Quad386
  7346.  FDh    *    *    06/01/83    PCjr
  7347.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  7348.  FCh    00h    00h      ???        PC3270/AT
  7349.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  7350.  FCh    00h    > 01h      ???        7531/2 Industrial AT
  7351.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  7352.  FCh    01h    00h    09/17/87    Tandy 3000
  7353.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  7354.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  7355.  FCh    01h    00h    04/05A92    Toshiba T4500SX-C
  7356.  FCh    01h    00h    07/17o92    Toshiba T1800SX
  7357.  FCh    01h    00h    12/25n92    Toshiba T1850SX
  7358.  FCh    01h    00h    01/13E93    Toshiba T4400C
  7359.             (Those date characters are not typos)
  7360.  FCh    01h    00h    03/08/93    Compaq DESKPRO/i
  7361.  FCh    01h    00h     various    Compaq DESKPRO, SystemPro, ProSignia
  7362.  FCh    01h    20h    06/10/92    AST
  7363.  FCh    01h    30h      ???        Tandy 3000NL
  7364.  FCh    01h    ???      ???        Compaq 286/386
  7365.  FCh    02h    00h    04/21/86    PC XT-286
  7366.  FCh    02h    00h     various    Compaq LTE Lite
  7367.  FCh    02h    00h    08/05/93    Compaq Contura 486/486c/486cx
  7368.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  7369.  FCh    04h    02h      ???        PS/2 Model 50
  7370.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  7371.  FCh    04h    04h      ???        PS/2 Model 50Z
  7372.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  7373.  FCh    06h    00h      ???        IBM 7552-140 "Gearbox"
  7374.  FCh    06h    01h      ???        IBM 7552-540 "Gearbox"
  7375.  FCh    08h    ***      ???        Epson, unknown model
  7376.  FCh    08h    00h      ???        PS/2 Model 25/286
  7377.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  7378.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  7379.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  7380.  FCh    20h    00h    02/18/93    Compaq ProLinea
  7381.  FCh    30h    ***      ???        Epson, unknown model
  7382.  FCh    31h    ***      ???        Epson, unknown model
  7383.  FCh    33h    ***      ???        Epson, unknown model
  7384.  FCh    42h    ***      ???        Olivetti M280
  7385.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  7386.  FCh    48h    ***      ???        Olivetti M290
  7387.  FCh    4Fh    ***      ???        Olivetti M250
  7388.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  7389.  FCh    51h    ***      ???        Olivetti PCS286
  7390.  FCh    52h    ***      ???        Olivetti M300
  7391.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  7392.  FCh    81h    01h      ???        "OEM machine"
  7393.  FCh    82h    01h      ???        "OEM machine"
  7394.  FCh    94h    00h      ???        Zenith 386
  7395.  FBh    00h    01h    01/10/86    PC XT-089, Enh Keyb, 3.5" support
  7396.  FBh    00h    02h    05/09/86    PC XT
  7397.  FBh    4Ch    ***      ???        Olivetti M200
  7398.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  7399.  FAh    00h    01h    12/12/86    PS/2 Model 30
  7400.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  7401.  FAh    30h    00h      ???        IBM Restaurant Terminal
  7402.  FAh    4Eh    ***      ???        Olivetti M111
  7403.  FAh    FEh    00h      ???        IBM PCradio 9075
  7404.  F9h    00h    00h    09/13/85    PC Convertible
  7405.  F9h    FFh    00h      ???        PC Convertible
  7406.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  7407.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  7408.  F8h    02h    00h      ???        PS/2 Model 55-5571
  7409.  F8h    04h    00h      ???        PS/2 Model 70
  7410.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  7411.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  7412.  F8h    05h    00h      ???        IBM PC 7568
  7413.  F8h    06h    00h      ???        PS/2 Model 55-5571
  7414.  F8h    07h    00h      ???        IBM PC 7561/2
  7415.  F8h    07h    01h      ???        PS/2 Model 55-5551
  7416.  F8h    07h    02h      ???        IBM PC 7561/2
  7417.  F8h    07h    03h      ???        PS/2 Model 55-5551
  7418.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  7419.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  7420.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  7421.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  7422.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  7423.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  7424.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  7425.  F8h    0Eh    00h      ???        PS/1 486SX
  7426.  F8h    0Fh    00h      ???        PS/1 486DX
  7427.  F8h    10h    00h      ???        PS/2 Model 55-5551
  7428.  F8h    11h    00h    10/01/90    PS/2 Model 90 XP (25 MHz 486)
  7429.  F8h    12h    00h      ???        PS/2 Model 95 XP
  7430.  F8h    13h    00h    10/01/90    PS/2 Model 90 XP (33 MHz 486)
  7431.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486), 95 XP
  7432.  F8h    15h    00h      ???        PS/2 Model 90 XP
  7433.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  7434.  F8h    17h    00h      ???        PS/2 Model 90 XP
  7435.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  7436.  F8h    1Ah    00h      ???        PS/2 Model 95 XP
  7437.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  7438.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  7439.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  7440.  F8h    23h    00h      ???        PS/2 Model L40 SX
  7441.  F8h    23h    01h      ???        PS/2 Model L40 SX (20 MHz 386SX)
  7442.  F8h    25h    00h      ???        PS/2 Model 57 SLC
  7443.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  7444.  F8h    26h    00h      ???        PS/2 Model 57 SX
  7445.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  7446.  F8h    28h    00h      ???        PS/2 Model 95 XP
  7447.  F8h    29h    00h      ???        PS/2 Model 90 XP
  7448.  F8h    2Ah    00h      ???        PS/2 Model 95 XP (50 MHz 486)
  7449.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  7450.  F8h    2Ch    00h      ???        PS/2 Model 95 XP
  7451.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  7452.  F8h    2Dh    00h      ???        PS/2 Model 90 XP (20 MHz 486SX)
  7453.  F8h    2Eh    00h      ???        PS/2 Model 95 XP
  7454.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  7455.  F8h    2Fh    00h      ???        PS/2 Model 90 XP (20 MHz 486SX + 487SX)
  7456.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  7457.  F8h    33h    00h      ???        PS/2 Model 30-386
  7458.  F8h    34h    00h      ???        PS/2 Model 25-386
  7459.  F8h    36h    00h      ???        PS/2 Model 95 XP
  7460.  F8h    37h    00h      ???        PS/2 Model 90 XP
  7461.  F8h    38h    00h      ???        PS/2 Model 57
  7462.  F8h    39h    00h      ???        PS/2 Model 95 XP
  7463.  F8h    3Fh    00h      ???        PS/2 Model 90 XP
  7464.  F8h    40h    00h      ???        PS/2 Model 95 XP
  7465.  F8h    41h    00h      ???        PS/2 Model 77
  7466.  F8h    45h    00h      ???        PS/2 Model 90 XP (Pentium)
  7467.  F8h    46h    00h      ???        PS/2 Model 95 XP (Pentium)
  7468.  F8h    47h    00h      ???        PS/2 Model 90/95 E (Pentium)
  7469.  F8h    48h    00h      ???        PS/2 Model 85
  7470.  F8h    49h    00h      ???        PS/ValuePoint 325T
  7471.  F8h    4Ah    00h      ???        PS/ValuePoint 425SX
  7472.  F8h    4Bh    00h      ???        PS/ValuePoint 433DX
  7473.  F8h    4Eh    00h      ???        PS/2 Model 295
  7474.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  7475.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  7476.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  7477.  F8h    56h    00h      ???        PS/2 Model CL57 SX
  7478.  F8h    57h    00h      ???        PS/2 Model 90 XP
  7479.  F8h    58h    00h      ???        PS/2 Model 95 XP
  7480.  F8h    59h    00h      ???        PS/2 Model 90 XP
  7481.  F8h    5Ah    00h      ???        PS/2 Model 95 XP
  7482.  F8h    5Bh    00h      ???        PS/2 Model 90 XP
  7483.  F8h    5Ch    00h      ???        PS/2 Model 95 XP
  7484.  F8h    5Dh    00h      ???        PS/2 Model N51 SLC
  7485.  F8h    5Eh    00h      ???        IBM ThinkPad 700
  7486.  F8h    61h    ***      ???        Olivetti P500
  7487.  F8h    62h    ***      ???        Olivetti P800
  7488.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  7489.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  7490.  F8h    81h    00h      ???        PS/2 Model 55-5502
  7491.  F8h    87h    00h      ???        PS/2 Model N33SX
  7492.  F8h    88h    00h      ???        PS/2 Model 55-5530T
  7493.  F8h    97h    00h      ???        PS/2 Model 55 Note N23SX
  7494.  F8h    99h    00h      ???        PS/2 Model N51 SX
  7495.  F8h    F2h    30h      ???        Reply Model 32
  7496.  F8h    F6h    30h      ???        Memorex Telex
  7497.  F8h    FDh    00h      ???        IBM Processor Complex (with VPD)
  7498.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  7499.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  7500.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  7501.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  7502.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  7503.  E1h    00h    00h      ???        PS/2 Model 55-5530 Laptop
  7504.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  7505.  30h    ???    ???      ???        Sperry PC
  7506.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  7507.  ???    56h    ???      ???        Olivetti, unknown model
  7508.  ???    74h    ???      ???        Olivetti, unknown model
  7509.     * This BIOS call is not implemented in these early versions.
  7510.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  7511.    ** These BIOS versions require the DASDDRVR.SYS patches.
  7512.   *** These Olivetti and Epson machines store the submodel in the byte at
  7513.     F000h:FFFDh.
  7514.  
  7515. Values for Dell model byte:
  7516.  02h    Dell 200
  7517.  03h    Dell 300
  7518.  05h    Dell 220
  7519.  06h    Dell 310
  7520.  07h    Dell 325
  7521.  09h    Dell 310A
  7522.  0Ah    Dell 316
  7523.  0Bh    Dell 220E
  7524.  0Ch    Dell 210
  7525.  0Dh    Dell 316SX
  7526.  0Eh    Dell 316LT
  7527.  0Fh    Dell 320LX
  7528.  11h    Dell 425E
  7529.  
  7530. Format of Compaq product information:
  7531. Address        Size    Description
  7532. F000h:FFE4h    BYTE    product family code (first byte)
  7533. F000h:FFE4h    BYTE    Point release number
  7534. F000h:FFE4h    BYTE    ROM version code
  7535. F000h:FFE4h    BYTE    product family code (second byte)
  7536. F000h:FFE8h    WORD    BIOS type code
  7537.  
  7538. Bitfields for Hewlett-Packard product identifier:
  7539.  bits 4-0    machine code
  7540.         0 original Vectra
  7541.         1 ES/12
  7542.         2 RS/20
  7543.         3 Portable/CS
  7544.         4 ES
  7545.         5 CS
  7546.         6 RS/16
  7547.         other reserved
  7548.  bits 7-5    CPU type
  7549.         0 = 80286
  7550.         1 = 8088
  7551.         2 = 8086
  7552.         3 = 80386
  7553.         other reserved
  7554. --------B-15C1-------------------------------
  7555. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  7556.     AH = C1h
  7557. Return: CF set on error
  7558.     CF clear if successful
  7559.         ES = segment of data area
  7560. SeeAlso: AH=04h"ABIOS"
  7561. --------M-15C200-----------------------------
  7562. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  7563.     AX = C200h
  7564.     BH = new state
  7565.         00h disabled
  7566.         01h enabled
  7567. Return: CF set on error
  7568.     AH = status
  7569.         00h successful
  7570.         01h invalid function
  7571.         02h invalid input
  7572.         03h interface error
  7573.         04h need to resend
  7574.         05h no device handler installed
  7575. --------M-15C201-----------------------------
  7576. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  7577.     AX = C201h
  7578. Return: CF set on error
  7579.         AH = status (see AX=C200h)
  7580.     CF clear if successful
  7581.         BH = device ID
  7582.         BL = value returned by attached device after reset
  7583.         AAh if device is a mouse
  7584. Note:    after successful completion of this call, the pointing device is set
  7585.       as follows: disabled, sample rate 100 Hz, resolution 4 counts/mm,
  7586.       scaling 1:1, unchanged data package size
  7587. SeeAlso: INT 33/AX=0000h
  7588. --------M-15C202-----------------------------
  7589. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  7590.     AX = C202h
  7591.     BH = sampling rate
  7592.         00h 10/second
  7593.         01h 20/second
  7594.         02h 40/second
  7595.         03h 60/second
  7596.         04h 80/second
  7597.         05h 100/second
  7598.         06h 200/second
  7599. Return: CF set on error
  7600.         AH = status (see AX=C200h)
  7601. SeeAlso: INT 33/AX=001Ch
  7602. --------M-15C203-----------------------------
  7603. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  7604.     AX = C203h
  7605.     BH = resolution
  7606.         00h one count per mm
  7607.         01h two counts per mm
  7608.         02h four counts per mm
  7609.         03h eight counts per mm
  7610. Return: CF set on error
  7611.         AH = status (see AX=C200h)
  7612. --------M-15C204-----------------------------
  7613. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  7614.     AX = C204h
  7615. Return: CF set on error
  7616.         AH = status (see AX=C200h)
  7617.     CF clear if successful
  7618.         BH = device ID
  7619. --------M-15C205-----------------------------
  7620. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  7621.     AX = C205h
  7622.     BH = data package size (1 - 8 bytes)
  7623. Return: CF set on error
  7624.         AH = status (see AX=C200h)
  7625. Note:    the pointing device is set as follows: disabled, 100 Hz sample rate,
  7626.       resolution 4 counts/mm, scaling 1:1
  7627. SeeAlso: AX=C201h
  7628. --------M-15C206-----------------------------
  7629. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - EXTENDED COMMANDS
  7630.     AX = C206h
  7631.     BH = subfunction
  7632.         00h return device status
  7633.         Return: BL = pointing device status (see below)
  7634.             CL = resolution (see AX=C203h)
  7635.             DL = sample rate, reports per second
  7636.         01h set scaling at 1:1
  7637.         02h set scaling at 2:1
  7638. Return: CF set on error
  7639.         AH = status (see AX=C200h)
  7640.  
  7641. Bitfields for pointing device status:
  7642.  bit 0    right button pressed
  7643.  bit 1    reserved
  7644.  bit 2    left button pressed
  7645.  bit 3    reserved
  7646.  bit 4    0 if 1:1 scaling, 1 if 2:1 scaling
  7647.  bit 5    device enabled
  7648.  bit 6    0 if stream mode, 1 if remote mode
  7649.  bit 7    reserved
  7650. --------M-15C207-----------------------------
  7651. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  7652.     AX = C207h
  7653.     ES:BX -> FAR user device handler
  7654. Return: CF set on error
  7655.         AH = status (see AX=C200h)
  7656. Note:    when the subroutine is called, it is passed the following values on
  7657.       the stack; the handler should return with a FAR return without
  7658.       popping the stack:
  7659.         WORD 1: status (see below)
  7660.         WORD 2: X data (high byte = 00h)
  7661.         WORD 3: Y data (high byte = 00h)
  7662.         WORD 4: 0000h
  7663. SeeAlso: INT 33/AX=000Ch
  7664.  
  7665. Bitfields for status:
  7666.  bits 15-8 reserved (0)
  7667.  bit 7    Y data overflowed
  7668.  bit 6    X data overflowed
  7669.  bit 5    Y data is negative
  7670.  bit 4    X data is negative
  7671.  bit 3    reserved (1)
  7672.  bit 2    reserved (0)
  7673.  bit 1    right button pressed
  7674.  bit 0    left button pressed
  7675. --------B-15C3------------------------------
  7676. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  7677.     AH = C3h
  7678.     AL = function
  7679.         00h disable PS/2 watchdog timer
  7680.         01h enable PS/2 watchdog timer
  7681.         BX = timer counter (0001h-00FFh)
  7682.         02h disable Gearbox system
  7683.         03h enable Gearbox system
  7684. Return: CF set on error
  7685.     CF clear if successful
  7686. Note:    the watchdog timer generates an NMI
  7687. --------B-15C4-------------------------------
  7688. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  7689.     AH = C4h
  7690.     AL = subfunction
  7691.         00h return base POS register address
  7692.         01h enable selected slot for setup
  7693.         BL = slot number (1 to 8)
  7694.         02h disable setup for all slots
  7695. Return: CF set on error
  7696.     DX = base POS register address (if subfunction 00h)
  7697. SeeAlso: AH=C6h
  7698. --------B-15C5-------------------------------
  7699. INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  7700.     AH = C5h
  7701.     AL = interrupt being invoked
  7702.         01h INT 19
  7703.         02h INT 14
  7704.         03h INT 16
  7705.         04h INT 40 (floppy INT 13)
  7706.         05h INT 17
  7707.         06h INT 10
  7708.         07h INT 12
  7709.         08h INT 11
  7710.         09h INT 1A
  7711. Return: all registers except AX must be preserved
  7712. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  7713.       handlers on the PS/2 Models 30/286, 50Z, and 95
  7714.     default handler does nothing and returns CF clear for the above
  7715.       subfunctions, CF set and AH=86h for all other subfunctions
  7716.     value of AX passed to the original interrupt handler is pushed on
  7717.       stack immediately prior to call
  7718. --------B-15C6-------------------------------
  7719. INT 15 U - later PS/2 models - GET POS DATA
  7720.     AH = C6h
  7721.     ???
  7722. Return: ???
  7723. Notes:    this function is referenced by name and number in some IBM BIOS manuals
  7724.     IBM reports that "there are a number of problems with this call" and
  7725.       does not recommend its use.
  7726. SeeAlso: AH=C4h
  7727. --------B-15C7-------------------------------
  7728. INT 15 - SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION
  7729.     AH = C7h
  7730.     DS:SI -> user supplied memory map table (see below)
  7731. Note:    call AH=C0h and examine bit 4 of feature byte 2 to check if this
  7732.       function is supported
  7733. Return: CF set on error, clear if successful
  7734. SeeAlso: AH=C0h,AH=C9h,AH=D1h
  7735.  
  7736. Format of memory-map table structure:
  7737. Offset    Size    Description
  7738.  00h    WORD    length of table (excluding this word)
  7739.  02h    DWORD    local memory between 1M and 16M, in 1K blocks
  7740.  06h    DWORD    local memory between 16M and 4G, in 1K blocks
  7741.  0Ah    DWORD    system memory between 1M and 16M, in 1K blocks
  7742.  0Eh    DWORD    system memory between 16M and 4G, in 1K blocks
  7743.  12h    DWORD    cacheable memory between 1M and 16M, in 1K blocks
  7744.  16h    DWORD    cacheable memory between 16M and 4G, in 1K blocks
  7745.  1Ah    DWORD    1K blocks before start of non-system memory between 1M and 16M
  7746.  1Eh    DWORD    1K blocks before start of non-system memory between 16M and 4G
  7747.  22h  2 DWORDs    reserved
  7748. --------B-15C8-------------------------------
  7749. INT 15 - SYSTEM - ENABLE/DISABLE PROCESSOR FUNCTIONS
  7750.     AH = C8h
  7751.     AL = function
  7752.         00h disable cache or (90 and 95) disable cache L1
  7753.         01h enable cache or (90 and 95) enable cache L1
  7754.         ---models 90 and 95 only---
  7755.         02h disable cache L2
  7756.         03h enable cache L2
  7757.         04h disable both caches
  7758.         05h enable both caches
  7759.         06h return status of both caches
  7760.         07h-FFh Reserved
  7761. Return: CF set on error
  7762.     CF clear if successful
  7763.         AH = status (see below)
  7764.     For subfunction 06h only:
  7765.         BH = status of cache L2
  7766.         00h enabled
  7767.         01h disabled or not installed
  7768.         BL = status of cache L1 (same codes as BH)
  7769. Notes:     supported by at least PS/2 70, 70/486, 80-A21, 90, 95
  7770.     call AH=C0h and examine bit 3 of feature byte 2 to check if this
  7771.       function is supported.
  7772.     on a 486 system, any external caches must be disabled when the
  7773.       on-chip cache (L1) is disabled.
  7774. SeeAlso: AH=C0h
  7775.  
  7776. Values for status:
  7777.  00h    operation successful
  7778.  01h    function choice (in AL) is invalid
  7779.  02h    NVRAM data is invalid
  7780.  03h    cache test error
  7781.  04h    (90 and 95 only) cannot perform operation requested due to state of
  7782.       other cache (see note above)
  7783.  05h    no L2 cache is present
  7784. --------B-15C9-------------------------------
  7785. INT 15 - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  7786.     AH = C9h
  7787.     AL = 10h (may be required on some non-PS BIOSes)
  7788. Return: CF clear if successful
  7789.         AH = 00h
  7790.         CH = CPU type
  7791.         03h 80386DX or clone
  7792.         04h 80486
  7793.         23h 80386SX or clone
  7794.         CL = mask revision (stepping level)
  7795.         80386:
  7796.             03h B1
  7797.             05h D0
  7798.             08h D1/D2/E1
  7799.         80386SX:
  7800.             04h A0
  7801.             05h    B
  7802.             08h C/D1
  7803.     CF set on error
  7804.         AH = status (80h,86h = function not supported)
  7805. Notes:    the BIOS must save DX at startup in order to be able to support this
  7806.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  7807.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  7808. --------B-15CA-------------------------------
  7809. INT 15 U - PS/2 Model 95 - RESERVED
  7810.     AH = CAh
  7811.     ???
  7812. Return: ???
  7813. --------B-15CB-------------------------------
  7814. INT 15 U - PS/2 Model 95 - RESERVED
  7815.     AH = CBh
  7816.     ???
  7817. Return: ???
  7818. --------B-15CC-------------------------------
  7819. INT 15 U - PS/2 Model 95 - RESERVED
  7820.     AH = CCh
  7821.     ???
  7822. Return: ???
  7823. --------B-15CD-------------------------------
  7824. INT 15 U - PS/2 Model 95 - RESERVED
  7825.     AH = CDh
  7826.     ???
  7827. Return: ???
  7828. --------B-15CE--BL00-------------------------
  7829. INT 15 - later PS/2s - ALLOCATE DMA ARBITRATION LEVEL
  7830.     AH = CEh
  7831.     BL = 00h-0Eh arbitration level to be allocated
  7832.          0Fh-FFh reserved
  7833.     AL = option byte
  7834.         bit 7-1: reserved (0)
  7835.         bit 0: 0 = need DMA channel for arbitration level requested
  7836.            1 = no channel required for arbitration level
  7837. Return: CF set on error
  7838.         AH = status (80h,86h = function not supported)
  7839.     CF clear on success
  7840.         AL = channel number
  7841.         00h-07h channel number allocated for the arbiration level
  7842.         08h-FEh reserved
  7843.         FFh    no channel requested for arbitration level
  7844.         AH = status
  7845.         00h success
  7846.         01h arbitration level not available
  7847.         02h channel not available
  7848.         03h invalid arbitration level passed
  7849. Notes:     arbitration level 00h has the highest priority, 0Eh the lowest
  7850.      to perform a DMA transfer operation, be sure to call this function
  7851.        first, and call AH=CFh afterward.  Failure to use this function
  7852.        can cause unpredictable results.
  7853. SeeAlso: AH=CFh
  7854. --------B-15CF-------------------------------
  7855. INT 15 - later PS/2s - DEALLOCATE DMA ARBITRATION LEVEL
  7856.     AH = CFh
  7857.     BL = arbitration level to be deallocated (see AH=CEh)
  7858. Return: CF set on error
  7859.         AH = status (80h,86h = function not supported)
  7860.     CF clear on success
  7861.         AH = status
  7862.         00h success
  7863.         04h arbitration level not allocated
  7864. SeeAlso: AH=CEh
  7865. --------B-15D0-------------------------------
  7866. INT 15 - later PS/2s - RESERVED
  7867.     AH = D0h
  7868.     ???
  7869. Return: ???
  7870. --------B-15D100DX0000-----------------------
  7871. INT 15 - later PS/2s - GET NUMBER OF DEVICE DESCRIPTOR TABLE (DDT) ENTRIES
  7872.     AX = D100h
  7873.     DX = 0000h (reserved, must set to 0)
  7874. Return: BL = size of one DDT entry, in bytes
  7875.     CX = number of DDT entries
  7876.     AH = return code (see below)
  7877.     CF set on error
  7878.     CF clear on success
  7879. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D101h,AX=D102h,AX=D103h,AX=D104h
  7880.  
  7881. Values for return code:
  7882.  00h    success
  7883.  01h    requested DDT entry not found
  7884.  02h    DDT data not valid
  7885.  86h    function not supported
  7886. --------B-15D101-----------------------------
  7887. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY NUMBER
  7888.     AX = D101h
  7889.     BX = number of requested entry (starting with 1)
  7890.     DX = 0000h (reserved, must be set to 0)
  7891.     ES:DI -> buffer to contain DDT entry (see below)
  7892. Return:    AH = return code (see AX=D100h)
  7893.     CF set on error
  7894.     CF clear on success
  7895.         ES:DI buffer filled with DDT entry
  7896. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D102h,AX=D104h
  7897.  
  7898. Format of DDT:
  7899. Offset    Size    Description
  7900.  00h    BYTE    bits 7-4: reserved (set to 0)
  7901.         bits 3-0: slot of device (0 = system board)
  7902.  01h    BYTE    bits 7-4: second interrupt for this device (0 = none)
  7903.         bits 3-0: first interrupt for this device (0 = none)
  7904.  02h    BYTE    bits 7-4: second arbitration level for this device
  7905.         bits 3-0: first arbitration level for this device
  7906.  03h    WORD    DDT indicators (see below)
  7907.  05h    BYTE    reserved (0)
  7908.  06h    WORD    device ID (0 = none)
  7909.  08h    WORD    starting address of first  I/O block (0 = none)
  7910.  0Ah    WORD    starting address of second I/O block (0 = none)
  7911.  OCh    WORD    starting address of third  I/O block (0 = none)
  7912.  OEh    DWORD    start of first non-system memory block (0 = none)
  7913.  12h    WORD    size of first non-system memory block (in kilobytes)
  7914.  14h    DWORD    start of second non-system memory block (0 = none)
  7915.  18h    WORD    size of second non-system memory block (in kilobytes)
  7916.  1Ah    BYTE    implementation identifier of the device
  7917.  1Bh    BYTE    implementation revision level of the device
  7918. Note:    I/O block addresses and non-system memory addresses are listed in
  7919.       ascending order in each DDT entry.
  7920.  
  7921. Bitfields for DDT indicators:
  7922.  bit 15 reserved (0)
  7923.  bit 14 second arbitration level exists
  7924.  bit 13 first arbitration level exists
  7925.  bit 12 serial interface is RS-422
  7926.  bit 11 not address limited
  7927.  bit 10 DMA channel used
  7928.  bit 9    second arbitration level can be shared
  7929.  bit 8    first arbitration level can be shared
  7930.  bits 7-0 reserved (0)
  7931. --------B-15D102-----------------------------
  7932. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY I/O ADDRSS
  7933.     AX = D102h
  7934.     BX = entry number at which to start searching
  7935.     CX = requested I/O port address
  7936.     DX = 0000h (reserved, must be set to 0)
  7937.     ES:DI -> buffer to contain DDT entry (see AX=D101h)
  7938. Return:    AH = return code (see AX=D100h)
  7939.     BX = DDT entry number where I/O port was found, or total entries
  7940.          plus 1 if port was not found.
  7941.     CF set on error
  7942.     CF clear on success
  7943.         ES:DI buffer filled with DDT entry
  7944. Desc:    the DDT is searched from the specified entry for the I/O port in CX,
  7945.       and the first entry in which it is found is returned
  7946. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h,AX=D104h
  7947. --------B-15D103DX0000-----------------------
  7948. INT 15 - later PS/2s - RETURN ENTIRE DDT
  7949.     AX = D103h
  7950.     DX = 0000h (reserved, must be set to 0)
  7951.     ES:DI -> buffer to contain DDT entry (see AX=D101h)
  7952. Return:    AH = return code (see AX=D100h)
  7953.     CF set on error
  7954.     CF clear on success
  7955.         ES:DI buffer filled with DDT entry
  7956. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D104h
  7957. --------B-15D104-----------------------------
  7958. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY DEVICE ID
  7959.     AX = D104h
  7960.     BX = entry number at which to start searching
  7961.     CX = requested device ID
  7962.     DX = 0000h (reserved, must be set to 0)
  7963.     ES:DI -> buffer to contain DDT entry (see AX=D101h for format)
  7964. Return:    AH = return code (see AX=D100h)
  7965.     BX = DDT entry number where device ID was found, or total entries
  7966.          plus 1 if port was not found.
  7967.     CF set on error
  7968.     CF clear on success
  7969.         ES:DI buffer filled with DDT entry
  7970. Desc:    the DDT is searched from the specified entry for the device ID in CX,
  7971.       and the first entry in which it is found is returned.
  7972. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h
  7973. --------B-15D2-------------------------------
  7974. INT 15 - later PS/2s - RESERVED
  7975.     AH = D2h
  7976.     ???
  7977. Return: ???
  7978. --------B-15D3-------------------------------
  7979. INT 15 - later PS/2s - RESERVED
  7980.     AH = D3h
  7981.     ???
  7982. Return: ???
  7983. --------B-15D4-------------------------------
  7984. INT 15 - later PS/2s - GET PHYSICAL FIXED DISK DRIVE NUMBER (SELECTABLE BOOT)
  7985.     AH = D4h
  7986.     DL = logical fixed disk drive number
  7987. Return:    AH = return code
  7988.         00h success
  7989.         01h specified logical drive number is invalid
  7990.         86h function not supported
  7991.         80h function not supported (on PCjr and PC)
  7992.     CF set on error
  7993.     CF clear on success
  7994.         AL = physical fixed disk drive number
  7995. --------B-15D5-------------------------------
  7996. INT 15 - later PS/2s - RESERVED
  7997.     AH = D5h
  7998.     ???
  7999. Return: ???
  8000. --------B-15D600BL00-------------------------
  8001. INT 15 - later PS/2s - READ BOOT DEVICE ID
  8002.     AX = D600h
  8003.     BL = 00h
  8004.     DX = device ID
  8005. Return: CF clear if successful
  8006.         AH = 00h
  8007.     CF set on error
  8008.         AH = status (86h for function not supported)
  8009. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h,AX=D602h
  8010. --------B-15D600BL01-------------------------
  8011. INT 15 - later PS/2s - WRITE BOOT DEVICE ID
  8012.     AX = D600h
  8013.     BL = 01h
  8014.     DX = device ID
  8015. Return: CF clear on success
  8016.         AH = 00h
  8017.     CF set on error
  8018.         AH = status (86h for function not supported)
  8019. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h
  8020. --------B-15D601BL00-------------------------
  8021. INT 15 - later PS/2s - READ BOOT DEVICE KEY
  8022.     AX = D601h
  8023.     BL = 00h
  8024.     DX = device ID
  8025. Return: CF clear on success
  8026.         AH = 00h
  8027.     CF set on error
  8028.         AH = status (86h for function not supported)
  8029. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h,AX=D602h
  8030. --------B-15D601BL01-------------------------
  8031. INT 15 - later PS/2s - WRITE BOOT DEVICE KEY
  8032.     AX = D601h
  8033.     BL = 01h
  8034.     DX = device ID
  8035. Return: CF clear on success
  8036.         AH = 00h
  8037.     CF set on error
  8038.         AH = status (86h for function not supported)
  8039. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h
  8040. --------B-15D602-----------------------------
  8041. INT 15 - later PS/2s - QUERY BOOT REFERENCE PARTITION
  8042.     AX = D602h
  8043. Return: CF clear on success
  8044.         AH = 00h
  8045.         AL = status of reference-partition boot request
  8046.         00h boot not requested
  8047.         01h boot requested
  8048.     CF set on error
  8049.         AH = status (86h for function not supported)
  8050. SeeAlso: AX=D601h/BL=00h
  8051. --------X-15D800-----------------------------
  8052. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  8053.     AX = D800h
  8054.     CL = slot number (including embedded and virtual)
  8055. Return: CF clear if successful
  8056.         AH = 00h
  8057.     CF set on error
  8058.         AH = error code
  8059.         80h invalid slot number
  8060.         82h EISA CMOS corrupt
  8061.         83h empty slot
  8062.         86h invalid BIOS-FW function call
  8063.         87h invalid system configuration
  8064.     AL bit flags
  8065.         bit 7: set if duplicate IDs
  8066.         bit 6: set if product ID readable
  8067.         bits 4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  8068.         bits 0-3: duplicate ID number if bit 7 set
  8069.     BH = major revision level of configuration utility
  8070.     BL = minor revision level of configuration utility
  8071.     CX = checksum of configuration file
  8072.     DH = number of device functions
  8073.     DL = combined function information byte
  8074.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  8075. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  8076. SeeAlso: AX=D801h,AX=D804h
  8077. --------X-15D801-----------------------------
  8078. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  8079.     AX = D801h
  8080.     CH = function number to read
  8081.     CL = slot number (including embedded and virtual)
  8082.     DS:SI -> 320-byte buffer for standard configuration data block
  8083. Return: CF clear if successful
  8084.         AH = 00h
  8085.         DS:SI buffer filled
  8086.     CF set on error
  8087.         AH = error code
  8088.         80h invalid slot number
  8089.         81h invalid function number
  8090.         82h EISA CMOS corrupt
  8091.         83h empty slot
  8092.         86h invalid BIOS-FW function call
  8093.         87h invalid system configuration
  8094.     BX destroyed
  8095. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  8096. --------X-15D802-----------------------------
  8097. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  8098.     AX = D802h
  8099.     BH = EISA config utility major revision level
  8100.     BL = EISA config utility minor revision level
  8101. Return: CF clear if successful
  8102.         AH = 00h
  8103.     CF set on error
  8104.         AH = error code
  8105.         84h error clearing CMOS
  8106.         86h invalid BIOS-FW function call
  8107.         88h config utility version not supported
  8108. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  8109. SeeAlso: AX=D803h
  8110. --------X-15D803-----------------------------
  8111. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  8112.     AX = D803h
  8113.     CX = length of data structure (0000h = empty slot)
  8114.         includes two bytes for config file checksum
  8115.     DS:SI -> configuration data
  8116. Return: CF clear if successful
  8117.         AH = 00h
  8118.     CF set on error
  8119.         AH = error code
  8120.         84h error clearing CMOS
  8121.         85h EISA CMOS is full
  8122.         86h invalid BIOS-FW function call
  8123. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  8124. SeeAlso: AX=D802h
  8125. --------X-15D804-----------------------------
  8126. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  8127.     AX = D804h
  8128.     CL = slot number (including embedded and virtual)
  8129. Return: CF clear if successful
  8130.         AH = 00h
  8131.     CF set on error
  8132.         AH = error code
  8133.         80h invalid slot number
  8134.         83h empty slot
  8135.         86h invalid BIOS-FW function call
  8136.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  8137. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  8138. SeeAlso: AX=D800h
  8139. --------b-15D820-----------------------------
  8140. INT 15 - Compaq LTE Lite - GET ???
  8141.     AX = D820h
  8142.     DS:SI -> 17-byte buffer for ???
  8143. Return: DS:SI buffer filled (first byte is length of remaining data, unless
  8144.       it is greater than 10h, in which case the second byte is 00h and no
  8145.       other data is returned)
  8146. Note:    this function is also supported by Compaq's EISA System ROM, Contura
  8147.       486/486c/486cx and recent DESKPRO/i ROMs
  8148. SeeAlso: AX=D821h
  8149. --------b-15D821-----------------------------
  8150. INT 15 - Compaq LTE Lite - SET ???
  8151.     AX = D821h
  8152.     DS:SI -> counted string (should not be more than 16 bytes)
  8153. Return: AH = 00h
  8154. Note:    this function is also supported by Compaq's EISA System ROM, Contura
  8155.       486/486c/486cx and recent DESKPRO/i ROMs
  8156. SeeAlso: AX=D820h
  8157. --------b-15D822BL00-------------------------
  8158. INT 15 - Compaq EISA System ROM 04/08/93 - GET ???
  8159.     AX = D822h
  8160.     BL = 00h
  8161.     CX = size of buffer or 0000h to retrieve required buffer size
  8162.     DS:SI -> buffer for ??? (if CX nonzero)
  8163. Return: CF clear if successful
  8164.         AH = 00h
  8165.         DH = 08h
  8166.         CX = required buffer size to retrieve all data (if CX=0 on entry)
  8167.         DS:SI buffer filled (if CX nonzero on entry)
  8168.     CF set on error (BL nonzero)
  8169.         AH = 86h
  8170. --------b-15D823-----------------------------
  8171. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  8172.     AX = D823h
  8173.     BL = subfunction??? (00h or 80h)
  8174.     BH = ???
  8175.     DS:SI -> buffer for ??? (see below)
  8176. Return: CF clear if successful
  8177.         AH = 00h
  8178.         DH = 08h
  8179.         DL = ???
  8180.     CF set on error
  8181.         AH = error code
  8182.         86h BL neither 00h nor 80h
  8183.         87h ???
  8184.  
  8185. Format of buffer:
  8186. Offset    Size    Description
  8187.  00h    BYTE    ???
  8188.  01h    WORD    ???
  8189.  03h    BYTE    ???
  8190.  04h    WORD    ???
  8191.  06h    WORD    ???
  8192.     ???
  8193. ----------15D824-----------------------------
  8194. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  8195.     AX = D824h
  8196.     CX = ???
  8197.     DS:SI -> ASCIZ string containing ???
  8198. Return: CF clear if successful
  8199.         AH = 00h
  8200.         CX = ???
  8201.     CF set on error
  8202.         AH = error code
  8203.         87h ??? failed
  8204.         88h ???
  8205. Note:    these functions are only available if ??? from keyboard controller
  8206.       command C0h
  8207. ----------15D825-----------------------------
  8208. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  8209.     AX = D825h
  8210.     CX = ???
  8211.     SI = ???
  8212.     DI = ???
  8213.     ???
  8214. Return: CF clear if successful
  8215.         AH = 00h
  8216.         CX = ???
  8217.     CF set on error
  8218.         AH = error code
  8219.         87h ??? failed
  8220.         88h ???
  8221.             CX = ???
  8222. Note:    these functions are only available if ??? from keyboard controller
  8223.       command C0h
  8224. ----------15D826-----------------------------
  8225. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  8226.     AX = D826h
  8227.     BX = ???
  8228.     CX = size of buffer in bytes
  8229.     DS:SI -> buffer for ???
  8230.     ???
  8231. Return: CF clear if successful
  8232.         AH = 00h
  8233.         CX = ???
  8234.     CF set on error
  8235.         AH = error code
  8236.         87h ??? failed
  8237.         88h ???
  8238. Note:    these functions are only available if ??? from keyboard controller
  8239.       command C0h
  8240. --------X-15D8-------------------------------
  8241. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  8242.     AH = D8h
  8243.     AL = 80h to 84h
  8244.     other registers as appropriate for AL=00h to 04h
  8245. Return: as appropriate for AL=00h to 04h
  8246. Note:    these functions are identical to AX=D800h to D804h, except that they
  8247.       should be called when using 32-bit CS addressing mode (pointers use
  8248.       ESI rather than SI as offset) instead of 16-bit addressing mode
  8249. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  8250. --------b-15D8-------------------------------
  8251. INT 15 - Compaq EISA System ROM 04/08/93 - 32-bit CS ADDRESSING MODE CALLS
  8252.     AH = D8h
  8253.     AL = A0h to A6h
  8254.     other registers as appropriate for AL=20h to 26h
  8255. Return: as appropriate for AL=20h to 26h
  8256. Note:    these functions are identical to AX=D820h to D826h, except that they
  8257.       should be called when using 32-bit CS addressing mode
  8258. --------Q-15DE00-----------------------------
  8259. INT 15 - DESQview - GET PROGRAM NAME
  8260.     AX = DE00h
  8261. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  8262.         the "Switch Windows" menu (see below)
  8263. Note:    always returns AX=0000h under DESQview/X
  8264. SeeAlso: AX=DE07h
  8265.  
  8266. Format of program entry in DESQVIEW.DVO:
  8267. Offset    Size    Description
  8268.  00h    BYTE    length of name (FFh if end of file)
  8269.  01h  N BYTEs    name
  8270.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  8271.     BYTE    program type
  8272.         00h normal program
  8273.         04h divider
  8274.         80h Delete a Program
  8275.         81h Change a Program
  8276.     WORD    ??? apparently always 0000h
  8277. --------Q-15DE01-----------------------------
  8278. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  8279.     AX = DE01h
  8280. Return: nothing
  8281. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  8282.     NOP for DESQview/X
  8283. --------Q-15DE02-----------------------------
  8284. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  8285.     AX = DE02h
  8286. Return: nothing
  8287. Note:    this call is a NOP in DV 2.x
  8288. SeeAlso: AX=DE03h
  8289. --------Q-15DE03-----------------------------
  8290. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  8291.     AX = DE03h
  8292. Return: AX = ??? for current window
  8293.     BX = ??? for current window
  8294. Note:    this call is a NOP in DV 2.x
  8295. SeeAlso: AX=DE02h
  8296. --------Q-15DE04-----------------------------
  8297. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  8298.     AX = DE04h
  8299. Return: BX = bytes of common memory available
  8300.     CX = largest block available
  8301.     DX = total common memory in bytes
  8302. SeeAlso: AX=DE05h,AX=DE06h
  8303. --------Q-15DE05-----------------------------
  8304. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  8305.     AX = DE05h
  8306. Return: BX = KB of memory available
  8307.     CX = largest block available
  8308.     DX = total conventional memory in KB
  8309. SeeAlso: AX=DE04h,AX=DE06h
  8310. --------Q-15DE06-----------------------------
  8311. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  8312.     AX = DE06h
  8313. Return: BX = KB of expanded memory available
  8314.     CX = largest block available
  8315.     DX = total expanded memory in KB
  8316. SeeAlso: AX=DE04h,AX=DE05h
  8317. --------Q-15DE07-----------------------------
  8318. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  8319.     AX = DE07h
  8320. Return: AX = number of program as it appears on the "Switch Windows" menu
  8321. Note:    this API call may be made from a hardware interrupt handler
  8322. SeeAlso: AX=DE00h
  8323. --------Q-15DE08-----------------------------
  8324. INT 15 - DESQview - GET ???
  8325.     AX = DE08h
  8326. Return: AX = 0000h if ??? is not set to the current task
  8327.          0001h if ??? is set to the current task
  8328. --------Q-15DE09-----------------------------
  8329. INT 15 - DESQview - UNIMPLEMENTED
  8330.     AX = DE09h
  8331. Return: nothing (NOP in DV 1.x and 2.x)
  8332. --------Q-15DE0A-----------------------------
  8333. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  8334.     AX = DE0Ah
  8335.     BL = character
  8336. Return: character displayed, next call will display in next position (which
  8337.     wraps back to the start of the line if off the right edge of screen)
  8338. Notes:    displays character on bottom line of *physical* screen, regardless
  8339.       of current size of window (even entirely hidden)
  8340.     does not know about graphics display modes, just pokes the characters
  8341.       into display memory
  8342.     this API call may be made from a hardware interrupt handler
  8343. SeeAlso: AX=1003h
  8344. --------Q-15DE0B-----------------------------
  8345. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  8346.     AX = DE0Bh
  8347.     BL = API level minor version number
  8348.     BH = API level major version number
  8349. Return: AX = maximum API level (AH = major, AL = minor)
  8350. Notes:    if the requested API level is greater than the version of DESQview, a
  8351.       "You need a newer version" error window is popped up
  8352.     the API level defaults to 1.00, and is inherited by child tasks
  8353. --------Q-15DE0C-----------------------------
  8354. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  8355.     AX = DE0Ch
  8356.     BX = number of bytes
  8357. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  8358. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  8359.       system memory
  8360. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  8361. --------Q-15DE0D-----------------------------
  8362. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  8363.     AX = DE0Dh
  8364.     ES:DI -> previously allocated block
  8365. Return: nothing
  8366. SeeAlso: AX=1002h,AX=DE0Ch
  8367. --------Q-15DE0E-----------------------------
  8368. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  8369.     AX = DE0Eh
  8370.     ES:DI -> name to find
  8371.     CX = length of name
  8372. Return: BX = 0000h not found
  8373.          0001h found
  8374.         DS:SI = object handle
  8375. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  8376.  
  8377. Special mailbox names:
  8378.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  8379.  "DESQview/X Help Engine"
  8380.  "DESQview/X Network Server"  Network Manager
  8381.  "DESQview X Server0"    X-Windows server
  8382.  "DESQview X Server7"    X-Windows printing service
  8383.  "INBOX"        DESQview/X LPD requests
  8384.  "OUTBOX"        DESQview/X LPD responses
  8385.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  8386.  "_DVNM_"        DV/X v1.10 network manager
  8387. --------Q-15DE0F-----------------------------
  8388. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  8389.     AX = DE0Fh
  8390. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  8391. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  8392.     enables an additional mouse mode
  8393. --------Q-15DE10-----------------------------
  8394. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  8395.     AX = DE10h
  8396.     BH = scan code
  8397.     BL = character
  8398. Return: nothing
  8399. Notes:    a later read will get the keystroke as if it had been typed by the user
  8400.     multiple pushes are read last-in first-out
  8401.     if a script exists for the pushed key in the current application, the
  8402.       script will be executed
  8403.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  8404. SeeAlso: INT 16/AH=05h
  8405. --------Q-15DE11BL00-------------------------
  8406. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  8407.     AX = DE11h
  8408.     BL = 00h      viewport will not move automatically
  8409.          nonzero  viewport will move to keep cursor visible (default)
  8410. Return: nothing
  8411. --------Q-15DE12BX0000-----------------------
  8412. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  8413.     AX = DE12h
  8414.     BX = 0000h    select normal style (linefeed only moves down)
  8415.          nonzero  select C style (linefeed moves to start of next line)
  8416. Return: nothing
  8417. Note:    set on a per-task basis, and inherited from the parent task
  8418. --------Q-15DE13-----------------------------
  8419. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  8420.     AX = DE13h
  8421. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  8422.          without matching ENDC (see INT 15/AX=101Ch)
  8423. Note:    this API call may be made from within a hardware interrupt handler
  8424. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  8425. --------Q-15DE14-----------------------------
  8426. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  8427.     AX = DE14h
  8428.     ES:DI -> object
  8429. Return: BL = 00h not an object
  8430.          08h window or task
  8431.          09h mailbox
  8432.          0Ah keyboard
  8433.          0Bh timer
  8434.          0Ch objectq
  8435.          0Fh pointer
  8436.          10h panel
  8437. SeeAlso: AX=1016h
  8438. --------Q-15DE15-----------------------------
  8439. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  8440.     AX = DE15h
  8441.     BL = error handling mode
  8442.         00h post system error on all error conditions
  8443.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  8444.         messages sent to mailboxes which fail due to lack of system
  8445.         or common memory
  8446.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  8447.         calls which fail due to lack of system memory
  8448. Return: nothing
  8449. SeeAlso: AX=DE0Ch,AX=DE16h
  8450. --------Q-15DE16-----------------------------
  8451. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  8452.     AX = DE16h
  8453. Return: BL = current mode
  8454.         00h always post system error
  8455.         01h return carry flag set on failed mailbox writes
  8456.         02h return CF set on failed mailbox writes and NULL on failed
  8457.         GETMEM calls
  8458. SeeAlso: AX=DE15h
  8459. --------Q-15DE17-----------------------------
  8460. INT 15 - DESQview v2.20-2.25 - reserved
  8461.     AX = DE17h
  8462. Return: pops up "Programming error" window
  8463. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  8464. SeeAlso: AX=1117h
  8465. --------Q-15DE17-----------------------------
  8466. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  8467.     AX = DE17h
  8468.     BX = function
  8469.         0000h   get current mapping context without setting
  8470.         nonzero set new mapping context to BX
  8471. Return: BX = mapping context in effect before call
  8472. Notes:    mapping contexts determine conventional-memory addressability; setting
  8473.       a mapping context ensures that the associated program and data areas
  8474.       are in memory for access.  Usable by drivers, TSRs and shared
  8475.       programs.
  8476.     caller need not be running under DESQview
  8477.     this API call may be made from a hardware interrupt handler
  8478. SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
  8479. --------Q-15DE18-----------------------------
  8480. INT 15 - DESQview v2.20+ - internal - ???
  8481.     AX = DE18h
  8482.     BP = function number
  8483.         high byte must be 10h
  8484.         low byte is function
  8485.         00h set ???
  8486.             BL = ???  (00h-10h, video mode???)
  8487.             BH = value to store
  8488.         03h set ???
  8489.             BL = ??? (stored in driver)
  8490.         0Ah get ???
  8491.             ES:DI -> 18-byte buffer to hold ???
  8492. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  8493. --------Q-15DE19-----------------------------
  8494. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  8495.     AX = DE19h
  8496.     BX = number of bytes to allocate
  8497. Return: AX = 0000h successful
  8498.         ES:DI -> allocated block
  8499.          nonzero insufficient memory
  8500. Note:    this API call may be made from within a hardware interrupt handler
  8501. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  8502. --------Q-15DE1A-----------------------------
  8503. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  8504.     AX = DE1Ah
  8505.     ES:DI -> previously allocated block
  8506. Return:    AX = 0000h (successful)
  8507. Note:    this function may be called from within a hardware interrupt handler
  8508. SeeAlso: AX=DE0Dh,AX=DE19h
  8509. --------Q-15DE1B-----------------------------
  8510. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  8511.     AX = DE1Bh
  8512. Return: nothing
  8513. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  8514. --------Q-15DE1C-----------------------------
  8515. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  8516.     AX = DE1Ch
  8517. Return: nothing
  8518. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  8519.       that DOS is free
  8520.     the official documentation states that this call should be paired with
  8521.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  8522.     this API call may be made from within a hardware interrupt handler
  8523. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  8524. --------Q-15DE1D-----------------------------
  8525. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  8526.     AX = DE1Dh
  8527.     DX = segment of handle for task to receive keystroke
  8528.     BL = character
  8529.     BH = scan code
  8530. Return: AX = 0000h if successful
  8531.        nonzero if receiver's keyboard buffer was full
  8532. Notes:    the key is treated as though the user had pressed it, ignoring any
  8533.       script which may be bound to the key, and using the current field
  8534.       table if the keyboard object is in field processing mode
  8535.     multiple PUTKEYs are seen in the order in which they are executed
  8536. SeeAlso: AX=DE10h
  8537. --------Q-15DE1E-----------------------------
  8538. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  8539.     AX = DE1Eh
  8540. Return: CL = actual number of rows on screen
  8541.     CH = actual number of columns on screen
  8542.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  8543. Note:    this API call may be made from a hardware interrupt handler
  8544. SeeAlso: INT 10/AH=0Fh
  8545. --------Q-15DE1F-----------------------------
  8546. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  8547.     AX = DE1Fh
  8548. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  8549. Note:    this API call may be made from within a hardware interrupt handler
  8550. SeeAlso: AX=DE13h,INT 21/AH=34h
  8551. --------Q-15DE20-----------------------------
  8552. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  8553.     AX = DE20h
  8554.     BX = segment of handle of task to interupt
  8555.     DX:CX -> FAR interrupt routine
  8556.     BP,SI,DI,DS,ES as required by interrupt routine
  8557. Return: nothing
  8558. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  8559.       making the DISPATCHINT call
  8560.     multiple "DISPATCHINT" calls are processed in the order in which they
  8561.       were executed
  8562.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  8563.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  8564.       needs to be preserved
  8565.     this API call may be made from within a hardware interrupt handler
  8566. SeeAlso: AX=1021h,AX=DE2Ah
  8567. --------Q-15DE21-----------------------------
  8568. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  8569.     AX = DE21h
  8570.     BX = new state
  8571.         0000h turn off
  8572.         nonzero turn on
  8573. Return: BX = old state of virtualization
  8574. Notes:    this API call may be made from within a hardware interrupt handler
  8575.     under DV 2.40 and 2.42, this call appears to have no effect and always
  8576.       returns a nonzero value in BX which appears to be the offset within
  8577.       the DV common memory segment of the caller's task object; it may
  8578.       only have an effect within a hardware interrupt handler
  8579. SeeAlso: AX=1117h,AX=DE17h
  8580. --------Q-15DE22-----------------------------
  8581. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  8582.     AX = DE22h
  8583.     DX = segment of task handle
  8584. Return: DX = total amount of memory in paragraphs
  8585.     BX = amount of system memory in paragraphs
  8586.     CX = largest block of system memory available in paragraphs
  8587.     AX = flags
  8588.         bit 0: system memory resides in shared memory
  8589.         bit 1: process's memory is swapped out
  8590.         bit 2: process's system memory is swapped out
  8591. Notes:    if the task handle is a child task, the returned values will be for the
  8592.       process containing the task, rather than the task itself
  8593.     if the process's system memory is swapped out, BX,CX,DX remain
  8594.       unchanged, because the memory usage cannot be determined
  8595. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  8596. --------Q-15DE23-----------------------------
  8597. INT 15 U - DESQview v2.31+ - ???
  8598.     AX = DE23h
  8599.     BX = ??? IRQ number on first PIC?
  8600.     CX = ??? IRQ number on second PIC?
  8601. Return: ???
  8602. Note:    called by QEMM 6.00+
  8603. --------Q-15DE24-----------------------------
  8604. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  8605.     AX = DE24h
  8606.     BX = length of .DVP data
  8607.     CX = length of ??? string
  8608.     DS:SI -> ??? string
  8609.     ES:DI -> .DVP data (see AX=102Ch)
  8610. Return: BX = segment of task handle??? or 0000h on error
  8611. Note:    this call is similar to AX=102Ch except that it can interpret the
  8612.       extended DVP data
  8613. SeeAlso: AX=102Ch
  8614. --------Q-15DE25-----------------------------
  8615. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  8616.     AX = DE25h
  8617.     ES:DI -> 67-byte buffer for ASCIZ directory name
  8618. Return: ES:DI buffer filled with directory from which DESQview was started
  8619. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  8620.       name, so if the buffer is not cleared to zeros before the call,
  8621.       there is no way to tell where the directory name ends.  This bug
  8622.       has been fixed in DV 2.52 (DV/X 1.02)
  8623. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  8624. --------Q-15DE26-----------------------------
  8625. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  8626.     AX = DE26h
  8627. Return: BX = segment of handle for task with keyboard focus
  8628. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  8629.       "direct" window is active
  8630. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  8631. --------Q-15DE27-----------------------------
  8632. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  8633.     AX = DE27h
  8634.     BX = type
  8635.         0000h process
  8636.         0001h task
  8637.     ES:DI -> list of Instance Item Structures (see below)
  8638. Return: CF clear if successful
  8639.         AX = ???
  8640.         BX = ???
  8641.     CF set on error
  8642.         AX = error code???
  8643.         0004h invalid BX value
  8644. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8645. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  8646.  
  8647. Format of Instance Item Structure [one element of list]:
  8648. Offset    Size    Description
  8649.  00h    WORD    length of data area DESQview should save and restore on context
  8650.         switches (0000h = end of list)
  8651.  02h    DWORD    pointer to area to be saved/restored
  8652. --------Q-15DE28-----------------------------
  8653. INT 15 U - DESQview v2.50+ - ???
  8654.     AX = DE28h
  8655.     BX = segment of ??? or 0000h for default
  8656.     ???
  8657. Return: ???
  8658. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8659. SeeAlso: AX=DE2Ah
  8660. --------Q-15DE29BX0000-----------------------
  8661. INT 15 U - DESQview/X - ???
  8662.     AX = DE29h
  8663.     BX = 0000h
  8664.     ???
  8665. Return: CF clear if successful
  8666.         ???
  8667.     CF set on error
  8668. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8669.     under DESQview 2.60, this function and all other subfunctions of
  8670.       AX=DE29h always return CF set, as they are unique to DESQview/X
  8671. --------Q-15DE29BX0001-----------------------
  8672. INT 15 U - DESQview/X - ???
  8673.     AX = DE29h
  8674.     BX = 0001h
  8675.     DX = segment of window handle
  8676. Return: CF clear if successful
  8677.         AX = ???
  8678.         DX = ???
  8679.     CF set on error
  8680. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8681. --------Q-15DE29BX0002-----------------------
  8682. INT 15 U - DESQview/X - ???
  8683.     AX = DE29h
  8684.     BX = 0002h
  8685.     DX = segment of window handle
  8686. Return: CF clear if successful
  8687.         AX = ???
  8688.         DX = ???
  8689.     CF set on error
  8690. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8691. --------Q-15DE29BX0003-----------------------
  8692. INT 15 U - DESQview/X - ???
  8693.     AX = DE29h
  8694.     BX = 0003h
  8695.     DX = segment of window handle
  8696. Return: CF clear if successful
  8697.         ???
  8698.     CF set on error
  8699. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8700. --------Q-15DE29BX0004-----------------------
  8701. INT 15 U - DESQview/X - GET DISPLAY NAME
  8702.     AX = DE29h
  8703.     BX = 0004h
  8704.     CX = size of buffer in bytes
  8705.     DX = segment of window handle
  8706.     ES:DI -> buffer for display name
  8707. Return: CF clear if successful
  8708.         buffer filled with ASCIZ display name (truncated if necessary) or
  8709.           null string if no display
  8710.     CF set on error
  8711. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8712.     the name ":0" refers to the local display
  8713. --------Q-15DE29BX0005-----------------------
  8714. INT 15 U - DESQview/X - ???
  8715.     AX = DE29h
  8716.     BX = 0005h
  8717.     ???
  8718. Return: CF clear if successful
  8719.         ???
  8720.     CF set on error
  8721. Note:    under DESQview 2.60, this function and all other subfunctions of
  8722.       AX=DE29h always return CF set, as they are unique to DESQview/X
  8723. --------Q-15DE2A-----------------------------
  8724. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  8725.     AX = DE2Ah
  8726.     BX = segment of handle for task to interrupt or 0000h for caller
  8727.     DX:CX -> interrupt routine
  8728.     BP,SI,DI,DS,ES as required by interrupt routine
  8729. Return: nothing
  8730. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8731.     this call is the same as AX=DE20h except that it will delay
  8732.       interrupting the specified task until after it has exited DOS
  8733. SeeAlso: AX=1021h,AX=DE20h
  8734. --------Q-15DE2B-----------------------------
  8735. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  8736.     AX = DE2Bh
  8737.     ES:DI -> starting object
  8738.         0000h:0000h for first object in list???
  8739. Return: AX = status
  8740.         0000h successful
  8741.         ES:DI -> next object of same type (window/non-window)
  8742.         0001h failed (ES:DI was not a valid handle)
  8743. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8744.     there are two separate lists, one for window/task objects and one
  8745.       for all other objects
  8746. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  8747. --------Q-15DE2C-----------------------------
  8748. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  8749.     AX = DE2Ch
  8750.     DX = window information format version (0100h for DESQview 2.5x)
  8751.     BX = segment of window handle or 0000h for default
  8752.     ES:DI -> buffer for window information (see below)
  8753. Return: AX = status
  8754.         0000h successful
  8755. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8756. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  8757.  
  8758. Format of window information:
  8759. Offset    Size    Description
  8760.  00h    BYTE    task flag: 00h window, 01h task
  8761.  01h    BYTE    process number if owner task
  8762.         00h if non-owner task
  8763.  02h    WORD    segment of owner's handle, 0000h if orphaned
  8764.  04h    WORD    mapping context (see AX=1016h)
  8765.  06h    BYTE    task status (see below)
  8766.  07h    BYTE    unused
  8767.  08h    WORD    status bits (see below)
  8768.  0Ah    BYTE    01h if foreground-only window
  8769.  
  8770. Values for task status:
  8771.  00h    "Waiting" waiting for input
  8772.  01h    "Idle" keyboard poll limit reached
  8773.  03h    same as 01h
  8774.  04h    "Pausing" INT 15/AX=1000h pause called
  8775.  04h    DV/X direct: user did something to allow task switch
  8776.  05h    "ModeChg" video mode about to be changed
  8777.  06h    "ModeNtf" notify that video mode changed
  8778.  07h    "MoniCh" requested change to other monitor
  8779.  08h    "StartPgm" control relinquished to start new process
  8780.  09h    "MgrCan" made window manager CANCEL command
  8781.  0Ah    "Slicing" time slice expired
  8782.  0Bh    "Exit DOS" notify on DOS calls
  8783.  0Ch    "Enter DOS" process is re-entering DOS
  8784.  0Dh    "Terminate" INT 21/AH=4Ch or task freed
  8785.  0Eh    "BrkNxt" Control-Break pressed
  8786.  0Fh    "MgrCol" keyboard focus taken away
  8787.  10h    "PgmInt" interrupted by API call from another task
  8788.  11h    "BldOpen" call to INT 15/AX=DE01h
  8789.  
  8790. Bitfields for status bits:
  8791.  bit 0    DESQview process
  8792.  bit 1    process swapped out
  8793.  bit 2    process is resized direct window (suspended)
  8794.  bit 3    process suspended itself
  8795.  bit 4    user suspended process
  8796.  bit 5    process is being created
  8797.  bit 6    task is freeing another task
  8798. --------Q-15DE2D-----------------------------
  8799. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  8800.     AX = DE2Dh
  8801.     CX = direction
  8802.         FFFFh set socket handler
  8803.         DX:BX -> FAR function for socket interface
  8804.             must be of the format described under INT 63"DESQview"
  8805.         other get socket handler
  8806.         Return: DX:BX -> socket handler
  8807. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8808.     the "set" subfunction is normally called only by SOCKET.DVR
  8809. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  8810. --------Q-15DE2E-----------------------------
  8811. INT 15 U - DESQview v2.50+ - SOCKET API
  8812.     AX = DE2Eh
  8813.     DX:BX -> socket record or 0000h:0000h to create a new socket record
  8814. Return: CX = size of socket record in bytes
  8815.     DX:BX -> socket record which was used
  8816. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8817.     socket records are allocated from common memory
  8818.     for Unix compatibility, each socket and connection on a socket is
  8819.       allocated a DOS file handle (referencing an SFT for NUL) which is
  8820.       used on various calls to specify which of possibly multiple
  8821.       connections is to be operated upon
  8822. SeeAlso: AX=DE2Dh,INT 61/AX=0001h"VINES",INT 63"DESQview"
  8823.  
  8824. Values for function number:
  8825.  0000h    initialize socket???
  8826.  0001h    "gethostname"
  8827.  0002h    "ioctl" check for input
  8828.  0003h    "sleep" delay for specified period
  8829.  0004h    "htons" convert word to network (big-endian) byte order
  8830.  0005h    "select"
  8831.  0006h    "bsd_close"/"so_close" close socket
  8832.  0007h    NOP
  8833.  0008h    "connect" initiate connection on socket
  8834.  0009h    "recv"/"recvfrom" read from socket
  8835.  000Ah    "socket"
  8836.  000Bh    ???
  8837.  000Ch    "gethostbyname"
  8838.  000Dh    "send"/"sendto" write to socket
  8839.  000Eh    ??? (does something to all connections for process)
  8840.  000Fh    "getpid" get process identifier
  8841.  0010h    "gettimeofday"
  8842.  0011h    "bind" assign name to socket
  8843.  0012h    "listen" listen for connections on socket
  8844.  0013h    "accept" accept connection on socket
  8845.  0014h    connect to X server
  8846.  0015h    "gethostbyaddr" get host information for an address
  8847.  0016h    "getprotobyname"
  8848.  0017h    "getprotobynumber"
  8849.  0018h    "getservbyname"
  8850.  0019h    "getservbyport"
  8851.  001Ah    "getsockname" determine name bound to socket
  8852.  001Bh    "getpeername" get name of connected peer
  8853.  001Ch    "getsockopt"/"setsockopt"
  8854.  001Dh    "so_exit"     close all sockets for calling process
  8855.  001Eh    "issock" determine whether file handle references socket
  8856.  001Fh    "so_attach" reattach previously detached socket
  8857.  0020h    "so_detach" temporarily detach socket
  8858.  0021h    get DESQview directory
  8859.  0022h    "NewProc" start new application (see AX=102Ch)
  8860.  0023h    "so_linkup"
  8861.  0024h    canonicalize filename
  8862.  0025h    indirect INT 15h call
  8863.  0026h    Network Manager interface
  8864.  0027h    "so_unlink"    close connection from "so_linkup"
  8865.  0028h    "raisepriority"
  8866.  0029h    "lowerpriority"
  8867.  002Ah    ???
  8868.  FFFFh    "NetExit" (appears to be a NOP)
  8869.  
  8870. Format of socket record:
  8871. Offset    Size    Description
  8872.  00h    WORD    signature F0ADh
  8873.  02h    WORD    function number (see above)
  8874.  04h    WORD    returned error code (see below)
  8875.  06h    WORD    maximum message size??? (usually 0400h)
  8876.  08h    WORD    PSP segment to use or 0000h if socket not valid
  8877.  0Ah    WORD    scratch space (JFT size)
  8878.  0Ch    DWORD    scratch space (JFT address)
  8879.  10h    DWORD    mailbox handle (initialized by function 0000h)
  8880.  14h    DWORD    timer object handle (initialized by function 0000h)
  8881. ---function 0000h---
  8882.  18h    WORD    (return) ???
  8883. ---function 0001h---
  8884.  18h    WORD    (return) status???
  8885.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  8886.  9Ah    WORD    maximum length of hostname to return
  8887. ---function 0002h---
  8888.  18h    WORD    (return) status
  8889.  1Ah    WORD    socket's file handle
  8890.  1Ch    WORD    IOCTL function
  8891.         05h "FIONREAD" determine available input
  8892.         06h "FIONBIO" set blocking state of socket
  8893.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  8894.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  8895. ---function 0003h---
  8896.  18h  2 BYTEs    unused
  8897.  1Ah    WORD    delay time in seconds
  8898. ---function 0004h---
  8899.  18h    WORD    (return) result in network (big-endian) byte order
  8900.  1Ah    WORD    value to convert to network byte order
  8901. ---function 0005h---
  8902.  18h    WORD    (return) number of handles meeting the specified conditions???
  8903.  1Ah    WORD    number of file handles in each bitset???
  8904.  1Ch    DWORD    bitset of socket handles to check for readability???
  8905.  20h    DWORD    bitset of socket handles to check for writability???
  8906.  24h    DWORD    bitset of socket handles to check for errors???
  8907.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  8908.  2Ah    DWORD    ???
  8909.  2Eh    DWORD    ???
  8910. ---function 0006h---
  8911.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8912.  1Ah    WORD    socket's file handle
  8913. ---function 0008h---
  8914.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8915.  1Ah    WORD    socket's file handle
  8916.  1Ch    WORD    0001h if socket name specified, 0000h if not
  8917.  1Eh    WORD    length of socket name
  8918.  20h  N BYTEs    name of socket to which to connect
  8919. ---function 0009h---
  8920.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  8921.             closed, or FFFFh on error
  8922.  1Ah    WORD    socket's file handle
  8923.  1Ch    WORD    number of bytes to read
  8924.  1Eh    WORD    flags
  8925.  20h    WORD    0000h if no source address desired
  8926.         0001h if source address is to be stored (datagram sockets)
  8927.  22h    WORD    length of source address
  8928.  24h 110 BYTEs    source address
  8929.  92h 1K BYTEs    buffer for data to be read
  8930. ---function 000Ah---
  8931.  18h    WORD    (return) socket's file handle or FFFFh on error
  8932.  1Ah    WORD    address family (0001h,0002h)
  8933.  1Ch    WORD    socket type
  8934.  1Eh    WORD    protocol
  8935. ---function 000Bh---
  8936.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  8937.  1Ah    WORD    socket's file handle
  8938.  1Eh    WORD    (call) ???
  8939. ---function 000Ch---
  8940.  18h 128 BYTEs    buffer containing ASCIZ hostname
  8941.         special case if empty string or "unix"
  8942.  98h    ???    'struct hostent' ???
  8943.  A2h    ???    (return) ???
  8944. ---function 000Dh---
  8945.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  8946.  1Ah    WORD    socket's file handle
  8947.  1Ch    WORD    number of bytes to write
  8948.  1Eh    WORD    number of bytes to follow in subsequent writes???
  8949.  20h    WORD    flags
  8950.  22h    WORD    0000h if no destination specified, 0001h if destination present
  8951.  24h    WORD    ???
  8952.  26h    WORD    length of destination address
  8953.  28h 110 BYTEs    destination address
  8954.  96h 1K BYTEs    buffer containing data to be written
  8955. ---function 000Eh---
  8956.  no additional fields
  8957. ---function 000Fh---
  8958.  18h    DWORD    (return) DESQview task handle of calling process
  8959. ---function 0010h---
  8960.  18h    DWORD    (return) current time
  8961.  1Ch    DWORD    (return) ???
  8962. ---function 0011h---
  8963.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8964.  1Ah    WORD    socket's file handle
  8965.  1Ch    WORD    length of name
  8966.  1Eh  N BYTEs    buffer for socket name
  8967. ---function 0012h---
  8968.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8969.  1Ah    WORD    socket's file handle
  8970.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  8971. ---function 0013h---
  8972.  18h    WORD    (return) file handle for new connection or FFFFh on error
  8973.  1Ah    WORD    listen()ing socket's file handle
  8974.  1Ch    WORD    (call) length of buffer for connecting entity's address
  8975.         (return) actual length of address
  8976.  1Eh  N BYTEs    buffer for connecting entity's address
  8977. ---function 0014h---
  8978.  18h    WORD    (return) socket's file handle or FFFFh on error
  8979.  1Ah  4 BYTEs    (return) ???
  8980.  1Eh    WORD    (return) ???
  8981.  20h    WORD    (return) ???
  8982.  22h 256 BYTEs    ASCIZ X display name
  8983. 122h    ???
  8984. ---function 0015h---
  8985.  18h    WORD    (call) type of address??? (test for 0001h seen)
  8986.  1Ah    WORD    (call) length of buffer for host address
  8987.  1Ch 110 BYTEs    buffer containing host address
  8988.  8Ah    WORD    (return) offset of official host name???
  8989.  8Ch    WORD    (return) offset of alias list???
  8990.  8Eh    WORD    (return) address type???
  8991.  90h    WORD    (return) length of an address in bytes???
  8992.  92h    WORD    (return) offset of address???
  8993.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  8994. ---function 0016h---
  8995.  18h    ???    buffer for protocol name???
  8996.  98h    ???
  8997. ---function 0017h---
  8998.  18h    WORD    (call) protocol number???
  8999.  1Ah    WORD    (return) ??? or 0001h
  9000. ---function 0018h---
  9001.  18h 128 BYTEs    buffer containing ???
  9002.  98h 128 BYTEs    buffer containing ???
  9003. 118h    WORD    (return) ???
  9004. ---function 0019h---
  9005.  18h    WORD    length of name???
  9006.  1Ah 128 BYTEs    buffer for name???
  9007.  9Ah    WORD    (return) ???
  9008. ---function 001Ah---
  9009.  18h    WORD    (return) 0000h if successful, FFFFh on error
  9010.  1Ah    WORD    socket's file handle
  9011.  1Ch    WORD    (call) length of buffer for socket name
  9012.         (return) actual length of socket name
  9013.  1Eh  N BYTEs    buffer for socket name
  9014. ---function 001Bh---
  9015.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  9016.  1Ah    WORD    socket's file handle
  9017.  1Ch    WORD    (call) size of buffer for name
  9018.         (return) actual size of name
  9019.  1Eh  N BYTEs    buffer for peer's name
  9020. ---function 001Ch---
  9021.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  9022.  1Ah    WORD    direction: 0000h to get, 0001h to set
  9023.  1Ch    WORD    socket's file handle
  9024.  1Eh    WORD    option level
  9025.  20h    WORD    option name
  9026.  22h    WORD    (call) length of buffer for option value
  9027.         (return) actual length of option value
  9028.  24h  N BYTEs    buffer for option value
  9029. ---function 001Dh---
  9030.  no additional fields
  9031. ---function 001Eh---
  9032.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  9033.  1Ah    WORD    file handle which may or may not be a socket
  9034. ---function 001Fh---
  9035.  18h    WORD    (return) file handle or FFFFh on error
  9036.  1Ah    DWORD    (call) pointer to Socket Context Record (see below) of a
  9037.             previously detached socket
  9038. ---function 0020h---
  9039.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  9040.  1Ah    WORD    socket's file handle
  9041.  1Ch    DWORD    (return) pointer to Socket Context Record (see below) for
  9042.             the file handle
  9043. ---function 0021h---
  9044.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  9045. ---function 0022h---
  9046.  18h    DWORD    (return) task handle of new application
  9047.  1Ch    WORD    size of .DVP data
  9048.  1Eh 129 BYTEs    ASCIZ ???
  9049.  9Fh  N BYTEs    .DVP data (see AX=102Ch)
  9050. ---function 0023h---
  9051.  18h    WORD    (return) ??? or FFFFh on error
  9052.  1Ah    WORD    socket's file handle???
  9053. ---function 0024h---
  9054.  18h    WORD    (return) DOS error code (see INT 21/AH=59h)
  9055.             0000h if successful
  9056.  1Ah 129 BYTEs    ASCIZ filename/pathname
  9057. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  9058. ---function 0025h---
  9059.  18h    WORD    value of AX
  9060.  1Ah    WORD    value of BX
  9061.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  9062.         (call) number of stack parameters if AH value is 12h
  9063.         (return) returned CX for calls other than INT 15/AH=12h
  9064.  1Eh    WORD    value of DX
  9065.  20h    WORD    value of DI
  9066.  22h    WORD    value of SI
  9067.  24h    WORD    value of DS
  9068.  26h    WORD    value of ES
  9069.  28h    WORD    (return) value of FLAGS after call
  9070.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  9071.         (return) stack results from INT 15/AH=12h call
  9072. ---function 0026h---
  9073.  18h    WORD    (call) Network Manager subfunction (see below)
  9074.         (return) status???
  9075.  1Ah    WORD    (call) size of parameter data
  9076.         (return) size of returned data
  9077.  1Ch  N BYTEs    (call) parameter data required by call (see below)
  9078.         (return) result data (see below)
  9079. ---function 0027h---
  9080.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  9081.  1Ah    WORD    socket's file handle
  9082. ---functions 0028h,0029h---
  9083.  18h    WORD    (call) file handle for which to set priority low/high
  9084.             FFFFh to change calling task's priority
  9085. ---function 002Ah---
  9086.  no additional fields
  9087.  
  9088. Values for Network Manager subfunction:
  9089.  0004h    "so_exit"???
  9090.  0005h    "gethostbyname"
  9091.  0006h    "gethostname"
  9092.  0009h    "socket"
  9093.  000Dh    "gethostbyaddr"
  9094.  000Fh    "getprotobyname"
  9095.  0010h    get protocol name for protocol number
  9096.  0011h    "getservbyname"
  9097.  0012h    "getservbyport"
  9098.  0013h    "getsockname"???
  9099.  0016h    ???
  9100.  0017h    kill Network Manager
  9101.  0018h    "getpeername"???
  9102.  0019h    ??? (called by socket function 0000h)
  9103.  001Ah    ???
  9104.  001Bh    "so_linkup"
  9105.  001Dh    get network services
  9106.  001Fh    "getpwuid"
  9107.  0020h    "getpwnam"
  9108.  0021h    "getpwvar"
  9109.  0022h    "crypt"
  9110.  0023h    "so_unlink"
  9111.  0024h    "getlogin"
  9112.  0028h    "sethostent"
  9113.  0029h    "gethostent"
  9114.  002Ah    "soaddhost"
  9115.  002Bh    "soupdatehost"
  9116.  002Ch    "sodeletehost"
  9117.  002Dh    "setservent"
  9118.  002Eh    "getservent"
  9119.  002Fh    "setpwent"
  9120.  0030h    "getpwent"
  9121.  0031h    ???
  9122.  0032h    ???
  9123.  0033h    ???
  9124.  0034h    get IP network number
  9125.  0035h    ??? (pops up Network Manager window)
  9126.  0037h    ???
  9127.  0038h    get machine name and IP address
  9128.  0039h    ???
  9129.  
  9130. Format of Function 0026h/Subfunction 000Fh data:
  9131. Offset    Size    Description
  9132.  00h  8 BYTEs    (return) ???
  9133.  
  9134. Format of Function 0026h/Subfunction 0010h data:
  9135. Offset    Size    Description
  9136.  00h  2 BYTEs    (return) ???
  9137.  02h    WORD    (return) protocol number
  9138.  04h    WORD    (call) protocol number for which to get name
  9139.  06h    WORD    (return) ???
  9140.  08h    var    (return) ASCIZ protocol name
  9141.  N    var    (return) ASCIZ protocol name
  9142.  
  9143. Format of Function 0026h/Subfunction 0011h data:
  9144. Offset    Size    Description
  9145.  00h  8 BYTEs    ???
  9146.  08h    var    (return) ASCIZ protocol name
  9147.     var    (return) ASCIZ ??? name
  9148.     var    (return) ASCIZ ??? name
  9149.  
  9150. Format of Function 0026h/Subfunction 0012h data:
  9151. Offset    Size    Description
  9152.  00h  8 BYTEs    (return) ???
  9153.  
  9154. Format of Function 0026h/Subfunction 0013h data:
  9155. Offset    Size    Description
  9156.  00h 116 BYTEs    (return) ???
  9157.  
  9158. Format of Function 0026h/Subfunction 0016h data:
  9159. Offset    Size    Description
  9160.  00h  4 BYTEs    (return) ???
  9161.  
  9162. Format of Function 0026h/Subfunction 0018h data:
  9163. Offset    Size    Description
  9164.  00h 116 BYTEs    (return) ???
  9165.  
  9166. Format of Function 0026h/Subfunction 0019h data:
  9167. Offset    Size    Description
  9168.  00h  4 BYTEs    (return) ???
  9169.  04h    DWORD    (return) task handle of ???
  9170.  
  9171. Format of Function 0026h/Subfunction 001Ah data:
  9172. Offset    Size    Description
  9173.  00h 38 BYTEs    (return) ???
  9174.  
  9175. Format of Function 0026h/Subfunction 001Bh data:
  9176. Offset    Size    Description
  9177.  00h 10 BYTEs    (return) ???
  9178.  
  9179. Format of Function 0026h/Subfunction 001Dh return data [array]:
  9180. Offset    Size    Description
  9181.  00h    WORD    ??? or FFFFh if end of array
  9182.  02h  7 BYTEs    ???
  9183.  09h 27 BYTEs    ASCIZ name of service
  9184.  
  9185. Format of Function 0026h/Subfunction 0024h return data:
  9186. Offset    Size    Description
  9187.  00h    var    ASCIZ username
  9188.  
  9189. Format of Function 0026h/Subfunction 0030h data:
  9190. Offset    Size    Description
  9191.  00h    WORD    (call) UID or 0000h for current user
  9192.         (return) ???
  9193.  02h    WORD    (return) UID
  9194.  04h  6 BYTEs    (return) ???
  9195.  0Ah    var    (return) ASCIZ username
  9196.     var    (return) ASCIZ encrypted password
  9197.     var    (return) ASCIZ initial ("home") directory
  9198.  
  9199. Format of Function 0026h/Subfunction 0034h data:
  9200. Offset    Size    Description
  9201.  00h  1-3 BYTEs IP network number of caller's machine (low byte first)
  9202.  
  9203. Format of Function 0026h/Subfunction 0038h return data:
  9204. Offset    Size    Description
  9205.  00h    BYTE    ???
  9206.  01h  4 BYTEs    IP address
  9207.  05h    var    ASCIZ machine name
  9208.     ???
  9209.  
  9210. Values for error code:
  9211.  0000h    successful
  9212.  0009h    "BADF" bad file handle
  9213.  000Ch    "ENOMEM" out of memory
  9214.  000Eh    "EFAULT" bad address
  9215.  0016h    "EINVAL" invalid argument
  9216.  0018h    "EMFILE" too many open files
  9217.  0020h    "EPIPE" ??? broken pipe
  9218.  0023h    "EWOULDBLOCK" operation cannot be completed at this time
  9219.  0024h    "EINPROGRESS" operation now in progress
  9220.  0026h    "ENOTSOCK" socket invalid
  9221.  0028h    "EMSGSIZE" message too long to send atomically
  9222.  002Ch    "ESOCKTNOSUPPORT" socket type not supported
  9223.  002Fh    "EAFNOSUPPORT" address family not supp. by protocol fam.
  9224.  0031h    "EDOM" argument too large
  9225.  0038h    "EISCONN" socket is already connected
  9226.  0039h    "ENOTCONN" socket is not connected
  9227.  
  9228. Format of Socket Context Record:
  9229. Offset    Size    Description
  9230.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  9231.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  9232.  06h    WORD    PSP segment of owner or 0000h
  9233.  08h    WORD    mapping context of owning window (see AX=1016h)
  9234.  0Ah  2 BYTEs    ???
  9235.  0Ch    WORD    address family
  9236.  0Eh    WORD    socket type
  9237.  10h    WORD    protocol
  9238.  12h    WORD    socket state
  9239.         0001h created
  9240.         0002h bound
  9241.         0003h listening???
  9242.         0005h connected
  9243.  14h    DWORD    timer object handle
  9244.  18h    DWORD    object handle (mailbox???)
  9245.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  9246.  20h    DWORD    pointer to ??? or 0000h
  9247.  24h  6 BYTEs    ???
  9248.  2Ah    WORD    file handle for socket or FFFFh
  9249.  2Ch  2 BYTEs    ???
  9250.  2Eh    WORD    nonzero if socket nonblocking
  9251. ---network connections only---
  9252.  30h  2 BYTEs    ???
  9253.  32h    WORD    ???
  9254.  34h  4 BYTEs    (big-endian) IP address of remote
  9255.  38h  6 BYTEs    ???
  9256. --------Q-15DE2F-----------------------------
  9257. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  9258.     AX = DE2Fh
  9259. Return: BX = status
  9260.         0001h keyboard focus has been given to a direct window since the
  9261.         last call
  9262.         0000h if not
  9263. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  9264.     Quarterdeck stated that this call would not be available under future
  9265.       versions of DESQview Classic, but it is still present in v2.60
  9266. --------Q-15DE30-----------------------------
  9267. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  9268.     AX = DE30h
  9269. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  9270. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  9271.     you must first check the DESQview version to verify that it is 2.50 or
  9272.       greater
  9273. SeeAlso: INT 21/AH=2Bh/CX=4445h
  9274. --------Q-15DE31-----------------------------
  9275. INT 15 - DESQview/X v1.10 - ???
  9276.     AX = DE31h
  9277.     CX = ???
  9278.         0000h ???
  9279.         nonzero ???
  9280.     ???
  9281. Return: ???
  9282. --------b-15DF-------------------------------
  9283. INT 15 - Juko UNIQUE UX BIOS - TURBO MODE CONTROL
  9284.     AH = DFh
  9285.     AL = function
  9286.         00h turn on Turbo mode
  9287.         01h turn off Turbo mode
  9288.         02h set Turbo mode according to hardware switch
  9289. SeeAlso: INT 13/AX=FFFFh
  9290. --------b-15E00F-----------------------------
  9291. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  9292.     AX = E00Fh
  9293.     ES:BX -> start of 2nd processor's execution
  9294. Return: AL = status
  9295.         0Fh successful
  9296.         00h failure
  9297. SeeAlso: AX=E10Eh,AX=E200h
  9298. --------b-15E10E-----------------------------
  9299. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  9300.     AX = E10Eh
  9301.     ES:BX -> start of 2nd processor's execution
  9302. Return: AL = status
  9303.         0Fh successful (halted)
  9304.         00h failure (not halted)
  9305. SeeAlso: AX=E00Fh,AX=E200h
  9306. --------b-15E200-----------------------------
  9307. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  9308.     AX = E200h
  9309. Return: AX bit 15 set if 2nd processor available
  9310. SeeAlso: AX=E00Fh,AX=E10Eh
  9311. --------b-15E4-------------------------------
  9312. INT 15 - Tandy??? - ???
  9313.     AH = E4h
  9314.     AL = subfunction
  9315.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  9316.     DL = ???
  9317. Return: DL = 00h if successful???
  9318. Note:    the section of code in 386MAX which calls these functions also checks
  9319.       whether the ROM BIOS has both Tandy and Phoenix Technologies
  9320.       signatures if these calls fail; the Tandy 1000SL/TL BIOS does not
  9321.       support this function, however, returning the usual CF set/AH=86h for
  9322.       "unsupported function".
  9323. --------b-15E4-------------------------------
  9324. INT 15 - Compaq ROM BIOS 03/08/93 and newer - ???
  9325.     AH = E4h
  9326.     AL = subfunction
  9327.         00h get ???
  9328.         Return: CF clear
  9329.             AH = 00h
  9330.             CX = 0000h
  9331.             BX = ??? (read from [XBDA:0094h])
  9332.         01h,02h unsupported by this ROM version
  9333.         Return: CF set, AH = 86h
  9334.         80h,90h,A0h,B0h,C0h,D0h,E0h,F0h set ???
  9335.         Return: CF clear
  9336.             AH = 00h
  9337.             CX = 0000h
  9338.             BX = ???
  9339.         81h,91h,A1h,B1h,C1h,D1h,E1h,F1h unsupported by 3/8/93&4/8/93 ROMs
  9340.         Return: CF set, AH = 86h
  9341. Notes:    functions 80h/90h/etc. are not supported by the 4/8/93 EISA System ROM
  9342.     these functions are not supported by the 7/26/93 LTE Lite 386 ROM
  9343. --------b-15E800-----------------------------
  9344. INT 15 - Compaq Contura - GET ???
  9345.     AX = E800h
  9346. Return: AX = 0000h
  9347.     BH = 00h
  9348.     BL = ??? (read from port 0C7Ch)
  9349.     CH = ???
  9350.     CL = ???
  9351.     DX = 0000h
  9352. Note:    also supported by 3/8/93 DESKPRO/i and 7/26/93 LTE Lite 386 ROM BIOS
  9353. --------b-15E801-----------------------------
  9354. INT 15 - Compaq Contura - GET ???
  9355.     AX = E801h
  9356. Return: CF clear
  9357.     AX = extended memory in K (read from CMOS locations 30h and 31h)
  9358.     BH = ???
  9359.     BL = ???
  9360.     CX = extended memory in K (read from CMOS locations 17h and 18h)
  9361.     DX = ???
  9362. Note:    also supported by 3/8/93 DESKPRO/i and 7/26/93 LTE Lite 386 ROM BIOS
  9363. --------b-15E802-----------------------------
  9364. INT 15 - Compaq Contura - GET ???
  9365.     AX = E802h
  9366. Return: CF clear
  9367.     AX = 0000h
  9368.     BX = ???
  9369.     CX = 0000h
  9370. Note:    this function is also supported by the LTE Lite 25c, 25E, and 486; not
  9371.       supported by LTE Lite 20 and 25.
  9372. --------m-15F200CX454D-----------------------
  9373. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  9374.     AX = F200h
  9375.     CX = 454Dh
  9376. Return: CF clear if hardware already initialised
  9377.         BX = upper RAM areas in use
  9378.         bit 0: C000-C3FF
  9379.         bit 1: C400-C7FF
  9380.         ...
  9381.         bit 11: EC00-EFFF
  9382.     CF set if hardware not initialised yet
  9383. --------!------------------------------------
  9384.