home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / inter42.doc / interrup.j < prev    next >
Encoding:
Text File  |  1994-08-07  |  300.0 KB  |  7,885 lines

  1. Interrupt List, part 10 of 12
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------*-61---------------------------------
  4. INT 61 - reserved for user interrupt
  5. --------b-61---------------------------------
  6. INT 61 - Atari Portfolio - EXTENDED BIOS
  7. Desc:    provides subfunctions such as turning off the machine, accessing
  8.       internal variables, and mapping memory cards
  9. SeeAlso: INT 60"Atari"
  10. --------b-61---------------------------------
  11. INT 61 - HP 95LX System Manager - LOAD DS
  12. SeeAlso: INT 0F"HP 95LX",INT 60"HP 95LX"
  13. --------r-61---------------------------------
  14. INT 61 - JPI TopSPEED Modula-2 v1 - PROCEDURE EXIT TRAP
  15. SeeAlso: INT 60"JPI"
  16. --------d-61---------------------------------
  17. INT 61 - Adaptec and OMTI controllers - DRIVE 0 DATA
  18. Desc:    this vector stores the second four bytes of the parameter table for
  19.       hard disk 0
  20. SeeAlso: INT 60"Adaptec",INT 62"Adaptec",INT 63"Adaptec"
  21. --------I-61---------------------------------
  22. INT 61 - Sangoma CCIP (CCPOP 3270 resident module) INTERFACE
  23.     BX:DX -> control block
  24. SeeAlso: INT 67"Sangoma"
  25. --------v-61---------------------------------
  26. INT 61 - VIRUS - "SEMTEX"/"Screen Trasher" - INT 21h SUBSTITUTE
  27. Note:    the virus copies the original INT 21h vector into INT 61h
  28. SeeAlso: INT 21h,INT 60"VIRUS",INT 6B"VIRUS"
  29. --------U-61---------------------------------
  30. INT 61 - PC-Magazin - PAGE, SWAPx
  31.     details not yet available
  32. Program: PAGE and SWAPx are utilities from PC-Magazin, the German edition of
  33.       PC Magazine, issue 47/85, page 31
  34. SeeAlso: INT 66"INCA"
  35. --------N-61---------------------------------
  36. INT 61 - TCPOpen kernel - API
  37.     ES:BX -> request packet (see #1783)
  38. Program: TCPOpen is a TCP/IP protocol stack by Lanera
  39. Range:    INT 60 to INT 7F, selected by configuration file
  40. Note:    there does not appear to be an installation check, though function
  41.       FFFFh can be used to verify that the software is indeed functioning
  42.  
  43. Format of TCPOpen request packet:
  44. Offset    Size    Description    (Table 1783)
  45.  00h  8 BYTEs    ???
  46.  08h    WORD    function number (0000h-001Ah or FFF9h-FFFFh)
  47.  0Ah    WORD    ???
  48.  0Ch  2 BYTEs    ???
  49.  0Eh    WORD    (return) return code
  50.  10h  2 BYTEs    ???
  51.  12h    WORD    ???
  52.  14h    WORD    (return) 0001h if requested function complete
  53.  16h    WORD    (return) ???
  54.  18h  6 BYTEs    ???
  55.  1Eh    DWORD    -> ???
  56.  22h    WORD    ??? or 0000h
  57.  24h    WORD    (return) ???
  58.  
  59. (Table 1784)
  60. Call TCPOpen Function FFFFh: installation verification
  61. Return: offset 10h = BEEFh
  62.     offset 14h = 0001h
  63.     offset 24h = ???
  64. Index:    installation check;TCPOpen kernel
  65. --------N-61---------------------------------
  66. INT 61 - FTP Software PC/TCP - TCP/IP TSR System Call interface
  67.     AH = system call number (see also entries below)
  68.         01h "pkt_alloc" (v2.05; this is "net_config" in v2.1+)
  69.         02h "pkt_free" (v2.05; this is "get_kernel_info" in v2.1+)
  70. Return: CF clear if successful
  71.     CF set on error
  72.         AL = basic error (see #1785)
  73.         AH = suberror number (see #1786,#1787)
  74. Range:    INT 20h to INT E0h, selected by configuration
  75. Notes:    the installation check consists of testing for the signature "TCPTSR"
  76.       three bytes beyond the start of the interrupt handler
  77. BUG:    the SLIP kernel for v2.05 bounds-checks the wrong register, so values
  78.       greater than 54h in AH may crash the system.    Other kernels may have
  79.       this bug as well.
  80. SeeAlso: INT 61/AH=00h"PC/TCP",INT 61/AH=2Ah,INT 61/AH=54h
  81. Index:    installation check;PC/TCP
  82.  
  83. (Table 1785)
  84. Values for PC/TCP error code:
  85.  00h "NET_NOERR" successful
  86.  01h "NET_ERR_INUSE" protocol or socket already in use
  87.  02h "NET_DOS_ERR" MS-DOS error (returned as suberror code in AH)
  88.  03h "NET_ERR_NOMEM" out of memory
  89.  04h "NET_ERR_NOTNETCONN" not a network descriptor
  90.  05h "NET_ERR_ILLEGALOP" invalid operation on given kind of network descriptor
  91.  06h "NET_ERR_BADPKT" illegal or corrupted packet
  92.  07h "NET_ERR_NOHOST" no host bound to specified connection
  93.  08h "NET_ERR_CANTOPEN" unable to open file
  94.  09h "NET_ERR_NET_UNREACHABLE" network is unreachable
  95.  0Ah "NET_ERR_HOST_UNREACHABLE" host is unreachable (see subcodes below)
  96.  0Bh "NET_ERR_PROT_UNREACHABLE" protocol is unreachable
  97.  0Ch "NET_ERR_PORT_UNREACHABLE" port is unreachable
  98.  0Dh "NET_ERR_TIMEOUT" operation timed out
  99.  0Eh "NET_ERR_HOSTUNKNOWN" unable to resolve host name
  100.  0Fh "NET_ERR_NOSERVERS" no name servers configured
  101.  10h "NET_ERR_SERVER_ERR" bad reply from name server
  102.     Subcodes: 0= no error, 1 = Host unreachable
  103.  11h "NET_ERR_BADFORMAT" bad format for IP address or field in IP address struc
  104.             is zero
  105.  12h "NET_ERR_BADARG" invalid argument
  106.  13h "NET_ERR_EOF" foreign host closed its end of connection
  107.  14h "NET_ERR_RESET" connection has been reset
  108.  15h "NET_ERR_WOULDBLOCK" recv() call was done on a non-blocking connection
  109.             with no data available
  110.  16h "NET_ERR_UNBOUND" insufficient resources to do operation
  111.  17h "NET_ERR_NODESC" could not allocate network descriptor
  112.  18h "NET_ERR_BADSYSCALL" invalid/unsupported kernel call
  113.  19h "NET_ERR_CANTBROADCAST" unable to broadcast
  114.  1Ah "NET_ERR_NOTESTAB" operation illegal because connection not established
  115.  1Bh kernel busy, try again later
  116.  1Ch "NET_ERR_ICMPMESG" an ICMP message was received (not on streams)
  117.     (see subcodes below)
  118. ---v2.1+---
  119.  1Dh "NET_ERR_TERMINATING" internal kernel fatal error
  120.  1Eh "NET_ERR_TAG_LOCKED" not allowed to set this tag (net_config)
  121.  1Fh "NET_ERR_BAD_INTERFACE" non existent interface specified
  122.  20h "NET_ERR_BADCONFIG" kernel cannot run - bad configuration
  123.  21h "NET_ERR_EMM" expanded memory error
  124.  22h "NET_ERR_CANT_SHUTDOWN" cant unload kernel (multitasker running)
  125.  23h "NET_ERR_PARKED_IN" unable to unhook DOS interrupt
  126.  24h "NET_ERR_NOQIOS" ran out of resources; try again later
  127.  25h "NET_ERR_WOULD_TRUNCATE" datagram too large and "don't truncate" was set
  128.  
  129. (Table 1786)
  130. Values for subcodes of PC/TCP error 0Ah "NET_ERR_HOST_UNREACHABLE":
  131.  00h    no error
  132.  01h    host unreachable
  133.  02h    ARP failed
  134.  03h    hardware failure
  135.  04h    link failure
  136.  05h    no route
  137.  06h    gateway down
  138.  
  139. (Table 1787)
  140. Values for subcodes of PC/TCP error 1Ch "NET_ERR_ICMPMESG":
  141.  07h    unrecognised
  142.  08h    can't fragment
  143.  09h    srcr_fail
  144.  0Ah    source quench
  145.  0Bh    time exceeded
  146.  0Ch    parameter problem
  147.  0Dh    admin_prohib. see also code 0Ah
  148. --------N-6100-------------------------------
  149. INT 61 U - PC/TCP kernel v2.05+ - GET DEBUG INFORMATION
  150.     AH = 00h
  151.     DS:SI -> 216-byte buffer for network debugging information (see #1788)
  152. Return: CF clear
  153.     AX = 0000h
  154.     buffer filled
  155. Notes:    this call is not documented by FTP, Inc. for any version
  156.     most of the information returned by this call is available via the
  157.       documented get_kernel_info or net_info commands.
  158.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  159. SeeAlso: INT 61"PC/TCP",INT 61/AH=2Ah"PC/TCP"
  160.  
  161. Format of network debugging information:
  162. Offset    Size    Description    (Table 1788)
  163.  00h    DWORD    number of interrupts
  164.  04h    DWORD    receive buffer low-water mark
  165.  08h    DWORD    transmit buffer low-water mark
  166.  0Ch    DWORD    number of packets received
  167.  10h    DWORD    number of packets transmitted
  168.  14h    DWORD    total receive errors
  169.  18h    DWORD    total transmit errors
  170.  1Ch  4 BYTEs    ???
  171.  20h    DWORD    receive resets
  172.  24h    DWORD    transmit resets
  173.  28h    DWORD    number of "runts" received
  174.  2Ch    DWORD    number of alignment errors on received packets
  175.  30h    DWORD    number of CRC errors on received packets
  176.  34h    DWORD    number of parity errors on received packets
  177.  38h    DWORD    number of receive overflow errors
  178.  3Ch    DWORD    number of oversized packets received
  179.  40h    DWORD    number of packets lost due to lack of buffers
  180.  44h    DWORD    receive timeouts
  181.  48h 32 BYTEs    ???
  182.  68h    DWORD    number of transmit collisions
  183.  6Ch    DWORD    number of transmit timeouts
  184.  70h    DWORD    number of transmit underflows
  185.  74h    DWORD    number of lost "crs" on transmit
  186.  78h    DWORD    number of times heartbeat failed on transmit
  187.  7Ch 24 BYTEs    ???
  188.  94h    WORD    free packet buffers
  189.  96h    WORD    total packet buffers
  190.  98h    WORD    minimum number of packet buffers free since kernel started
  191.  9Ah 24 BYTEs    ???
  192.  B2h    DWORD    pointer to TCP connection list???
  193.  B6h    DWORD    pointer to IP routing table???
  194.  BAh 30 BYTEs    ???
  195. --------V-610000-----------------------------
  196. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - ZOOM DISPLAY
  197.     AX = 0000h
  198.     BX = zoom factor (0-7)
  199. Desc:    zooms the display based on the given zoom factor
  200. Notes:    INT 61h is the default interrupt; the actual interrupt number can be
  201.       obtained by calling INT 16/AH=FFh
  202.     not all vendors include the Tseng TSR which supports these functions
  203. SeeAlso: AX=0001h"OPTIMA",AX=0002h"OPTIMA",AX=0005h"OPTIMA"
  204. SeeAlso: INT 16/AH=FFh"OPTIMA"
  205. --------N-610001SF0001-----------------------
  206. INT 61 - Banyan VINES - "Sosock" - OPEN COMMUNICATIONS SOCKET
  207.     AX = 0001h subfn 0001h
  208.     DS:DX -> communications control block (function 0001h)
  209. Return: AX = status (0000h-0002h,0098h,009Eh-00A2h) (see #1789)
  210. Range:    INT 60h to INT 66h
  211. Note:    The Banyan interrupt handler is identified by the string "BANV" in
  212.       the four bytes immediately preceding the interrupt handler
  213. SeeAlso: AX=0001h/SF=0002h,AX=0001h/SF=0008h,INT 15/AX=DE2Eh
  214.  
  215. (Table 1789)
  216. Values for VINES status:
  217.  0000h    successful
  218.  0001h    service not installed
  219.  0002h    invalid service ID
  220.  0098h    resource already in use
  221.  0003h-000Ah reserved for BANV interface errors
  222.  0097h    invalid socket identifier
  223.  009Bh    destination node unreachable
  224.  009Ch    message overflow
  225.  009Dh    destination socket nonexistent
  226.  009Eh    address family does not exist
  227.  009Fh    socket type does not exist
  228.  00A0h    protocol does not exist
  229.  00A1h    no more sockets available
  230.  00A2h    no more buffer space available
  231.  00A3h    timeout
  232.  00A5h    resource not available
  233.  00A6h    internal communication failure
  234.  00B1h    resource disconnect
  235.  
  236. Format of VINES control block to open socket:
  237. Offset    Size    Description    (Table 1790)
  238.  00h    WORD    0001h
  239.  02h    WORD    pointer to argument block
  240.  04h    WORD    error return code
  241.  06h  4 BYTEs    reserved
  242.  
  243. Format of VINES argument block for opening socket:
  244. Offset    Size    Description    (Table 1791)
  245.  00h    WORD    pointer to 2-byte buffer for socket identifier
  246.  02h    WORD    address family
  247.         0003h Banyan
  248.  04h    WORD    socket type
  249.         in address family 0003h
  250.             0001h IPC socket
  251.             0002h SPP socket
  252.  06h    WORD    protocol number
  253.         FFFFh default
  254.  08h    WORD    pointer to 16-byte buffer for socket address
  255.  0Ah    WORD    local port number
  256.         0000h if service should assign transient port number
  257.         0001h to 01FFh well-known port number (assigned by Banyan)
  258.  
  259. Format of IPC port:
  260. Offset    Size    Description    (Table 1792)
  261.  00h    WORD    address family (always 0003h for Banyan ports)
  262.  04h  4 BYTEs    network number (server's serial number)
  263.  06h    WORD    subnet number  (0001h = server, 8000h-FFFEh = PC)
  264.  08h    WORD    port ID (0001h-01FFh for "well-known" ports)
  265.  0Ah    BYTE    hop count
  266.  0Bh  5 BYTEs    filler
  267. --------N-610001SF0002-----------------------
  268. INT 61 - Banyan VINES - "Sosend" - INITIATE OUTPUT EVENT
  269.     AX = 0001h subfn 0002h
  270.     DS:DX -> communications control block (function 0002h) (see #1793)
  271. Return: AX = status (0000h-0002h,0097h,009Bh-009Dh,00A2h,00A3h,00B1h)
  272.         (see #1789)
  273. Range:    INT 60h to INT 66h
  274. Note:    The Banyan interrupt handler is identified by the string "BANV" in
  275.       the four bytes immediately preceding the interrupt handler
  276. SeeAlso: AX=0001h/SF=0001h,AX=0001h/SF=0005h
  277.  
  278. Format of VINES control block for subfunction 0002h:
  279. Offset    Size    Description    (Table 1793)
  280.  00h    WORD    0002h
  281.  02h    WORD    pointer to argument block (see #1794)
  282.  04h    WORD    error return code (0000h,0097h,00A2h,00A3h,00A5h,00A6h,00B1h)
  283.         (see #1789)
  284.  06h  4 BYTEs    reserved
  285.  
  286. Format of VINES argument block for subfunction 0002h:
  287. Offset    Size    Description    (Table 1794)
  288.  00h    WORD    routine metric
  289.  02h    WORD    error return code
  290.  04h    WORD    socket identifier
  291.  06h    WORD    pointer to send buffer (see #1796)
  292.  08h    WORD    length of send buffer
  293.  0Ah    WORD    message request flags (see #1795)
  294.  0Ch 16 BYTEs    socket address (see #1797)
  295.  1Ch    WORD    timeout value in multiples of 200ms
  296.  1Eh    WORD    connection identifier
  297.  20h    WORD    type of request
  298.         0001h send message
  299.         0002h establish a virtual connection
  300.         0003h terminate a virtual connection
  301.  
  302. Bitfields for message request flags:
  303. Bit(s)    Description    (Table 1795)
  304.  0    async request
  305.  1    reliable message
  306.  2    flush receive buffer on overflow
  307.  3    end of user message received
  308.  4    vectored request (if set, send buffer contains buffer descriptors)
  309.  5    connection-specific receive
  310.  6    change to connection-specific receive mode
  311.  
  312. Format of buffer descriptor:
  313. Offset    Size    Description    (Table 1796)
  314.  00h    WORD    data segment
  315.  02h    WORD    buffer pointer
  316.  04h    WORD    buffer length
  317.  06h    WORD    character count
  318.  
  319. Format of VINES socket address for unreliable datagrams:
  320. Offset    Size    Description    (Table 1797)
  321.  00h    WORD    0003h      address family
  322.  02h    DWORD    FFFFFFFFh network number
  323.  06h    WORD    FFFFh      subnet number
  324.  08h    WORD          local port number
  325.  0Ah    BYTE    00h-0Fh      hop count
  326.  0Bh  5 BYTEs    0000h      filler
  327. --------N-610001SF0003-----------------------
  328. INT 61 - Banyan VINES - "Sorec" - RECEIVE INPUT EVENT NOTIFICATION
  329.     AX = 0001h subfn 0003h
  330.     DS:DX -> communications control block (function 0003h) (see #1798)
  331. Return: AX = status (00-0Ah,97h,A2h,A3h) (see #1789)
  332. Range:    INT 60h to INT 66h
  333. Note:    The Banyan interrupt handler is identified by the string "BANV" in
  334.       the four bytes immediately preceding the interrupt handler
  335. SeeAlso: AX=0001h/SF=0002h
  336.  
  337. Format of VINES control block for subfunction 0003h:
  338. Offset    Size    Description    (Table 1798)
  339.  00h    WORD    0003h
  340.  02h    WORD    pointer to argument block (see #1799)
  341.  04h    WORD    error return code (0000h,0097h,00A2h,00A3h,00A5h,00A6h,00B1h)
  342.         (see #1789)
  343.  06h  4 BYTEs    reserved
  344.  
  345. Format of VINES argument block for subfunction 0003h:
  346. Offset    Size    Description    (Table 1799)
  347.  00h    WORD    character count
  348.  02h    WORD    error return code
  349.  04h    WORD    socket identifier
  350.  06h    WORD    pointer to receive buffer
  351.  08h    WORD    length of receive buffer
  352.  0Ah    WORD    message request flags (see #1795)
  353.  0Ch 16 BYTEs    socket address
  354.  1Ch    WORD    timeout value in multiples of 200ms
  355.  1Eh    WORD    connection identifier
  356.  20h    WORD    type of response
  357.         0001h message received
  358.         0002h virtual connection established
  359.         0003h virtual connection terminated
  360.  
  361. Format of buffer descriptor:
  362. Offset    Size    Description    (Table 1800)
  363.  00h    WORD    data segment
  364.  02h    WORD    buffer pointer
  365.  04h    WORD    buffer length
  366.  06h    WORD    character count
  367. --------N-610001SF0004-----------------------
  368. INT 61 - Banyan VINES - "Soclose" - CLOSE A SOCKET
  369.     AX = 0001h subfn 0004h
  370.     DS:DX -> communications control block (function 0004h)
  371. Return: AX = status (0000h-000Ah,0097h) (see #1789)
  372. Range:    INT 60h to INT 66h
  373. Note:    The Banyan interrupt handler is identified by the string "BANV" in
  374.       the four bytes immediately preceding the interrupt handler
  375. SeeAlso: AX=0001h/SF=0001h,INT 15/AX=DE2Eh
  376.  
  377. Format of VINES control block to close socket:
  378. Offset    Size    Description    (Table 1801)
  379.  00h    WORD    0004h
  380.  02h    WORD    pointer to argument block (see #1802)
  381.  04h    WORD    error return code (see #1789)
  382.  06h  4 BYTEs    reserved
  383.  
  384. Format of VINES argument block for closing socket:
  385. Offset    Size    Description    (Table 1802)
  386.  00h    WORD    socket identifier
  387. --------N-610001SF0005-----------------------
  388. INT 61 - Banyan VINES - "Sowait" - WAIT FOR ASYNCHRONOUS EVENT COMPLETION
  389.     AX = 0001h subfn 0005h
  390.     DS:DX -> communications control block (see #1804)
  391. Return: AX = status (0000h-000Ah,00A2h,00A3h) (see #1803)
  392. Range:    INT 60h to INT 66h
  393. Notes:    The Banyan interrupt handler is identified by the string "BANV" in
  394.       the four bytes immediately preceding the interrupt handler
  395.     returns results for all asynchronous operations invoked from the
  396.       data segment used for this call
  397. SeeAlso: AX=0001h/SF=0002h,AX=0001h/SF=0009h
  398.  
  399. (Table 1803)
  400. Values for VINES function status:
  401.  0000h    successful
  402.  0001h    service not installed
  403.  0002h    invalid service ID
  404.  0003h-000Ah reserved for BANV interface errors
  405.  00A2h    no more buffer space available
  406.  00A3h    timeout event
  407.  
  408. Format of VINES control block for subfunction 0005h:
  409. Offset    Size    Description    (Table 1804)
  410.  00h    WORD    0005h
  411.  02h    WORD    pointer to argument block (see #1805)
  412.  04h    WORD    error return code
  413.  06h  4 BYTEs    reserved
  414.  
  415. Format of VINES argument block for subfunction 0005h:
  416. Offset    Size    Description    (Table 1805)
  417.  00h    WORD    pointer to WORD event pointer
  418.  02h    WORD    timeout in multiples of 200ms, FFFFh = infinite
  419. --------N-610001SF0008-----------------------
  420. INT 61 - Banyan VINES - "Sosession" - REGISTER APPLICATION WITH COMM SERVICE
  421.     AX = 0001h subfn 0008h
  422.     DS:DX -> communications control block (function 0008h)
  423. Return: AX = status
  424.         0000h  successful
  425.         00A2h  no more buffer space available
  426. Range:    INT 60h to INT 66h
  427. Note:    The Banyan interrupt handler is identified by the string "BANV" in
  428.       the four bytes immediately preceding the interrupt handler
  429. SeeAlso: AX=0001h/SF=0001h,AX=0001h/SF=0009h
  430.  
  431. Format of VINES control block for subfunction 0006h:
  432. Offset    Size    Description    (Table 1806)
  433.  00h    WORD    0008h
  434.  02h    WORD    process type
  435.         0001h transient process
  436.         0002h resident process
  437.  04h    WORD    error return code
  438.  06h  4 BYTEs    reserved
  439. --------N-610001SF000B-----------------------
  440. INT 61 - Banyan VINES - "Soint" - SET USER COMPLETION FUNCTION
  441.     AX = 0001h subfn 000Bh
  442.     DS:DX -> communications control block (function 000Bh) (see #1807)
  443. Return: AX = status (00h-0Ah,A2h) (see #1803)
  444. Range:    INT 60h to INT 66h
  445. Note:    The Banyan interrupt handler is identified by the string "BANV" in
  446.       the four bytes immediately preceding the interrupt handler
  447. SeeAlso: AX=0001h/SF=0005h,AX=0001h/SF=0008h
  448.  
  449. Format of VINES control block for subfunction 000Bh:
  450. Offset    Size    Description    (Table 1807)
  451.  00h    WORD    000Bh
  452.  02h    WORD    pointer to argument block (see #1808)
  453.  04h    WORD    error return code (see #1789)
  454.  06h  2 BYTEs    reserved
  455.  08h    WORD    user CS register
  456.  
  457. Format of VINES argument block for subfunction 000Bh:
  458. Offset    Size    Description    (Table 1808)
  459.  00h    WORD    pointer to user interrupt function (see #1809)
  460.  02h    WORD    pointer to user stack
  461.  04h    WORD    initial timeout value in multiples of 200ms, FFFFh = infinite
  462.  
  463. (Table 1809)
  464. Values FAR user function is invoked with:
  465.     SS = DS = ES = segment of control block
  466.     STACK:    DWORD    return address
  467.         WORD    argument pointer (sosend or sorec argument block)
  468.         WORD    error return code
  469.             0000h argument pointer is valid
  470.             00A3h timeout
  471. --------V-610001-----------------------------
  472. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - CENTER ZOOM WINDOW
  473.     AX = 0001h
  474.     BX = X coordinate to center
  475.     CX = Y coordinate to center
  476. Desc:    Positions the zoom window such that the specified window-relative
  477.       coordinates appear as close as possible to the center of the
  478.       display.  Useful for scrolling and panning.
  479. Range:    unknown
  480. Notes:    INT 61h is the default interrupt; the actual interrupt number can be
  481.       obtained by calling INT 16/AH=FFh
  482.     not all vendors include the Tseng TSR which supports these functions
  483. SeeAlso: AX=0000h"OPTIMA",AX=0002h"OPTIMA",AX=0005h"OPTIMA"
  484. SeeAlso: INT 16/AH=FFh"OPTIMA"
  485. --------I-610002-----------------------------
  486. INT 61 - Banyan VINES - 3270 INTERFACE
  487.     AX = 0002h
  488.     BH = function number (see #1810)
  489.     DS:CX -> argument block (except BH=00h,1Ah)
  490. Return: AX = status (see #1811)
  491. Notes:    Either 3270/SNA or 3270/BSC interface may use AX=0002h, depending on
  492.       which is loaded first.  The other interface will use AX=000Ah
  493.     Status codes greater than 63h indicate an inconsistency in the 3270/SNA
  494.       or 3270/BSC resident driver, which must be reloaded by the user
  495.  
  496. (Table 1810)
  497. Values for VINES 3270 interface function number:
  498.  00h "pi2reset"     reset 3270/SNA or 3270/BSC driver
  499.  02h "pi2bsc"     (3270/BSC only)
  500.  03h "pi2get"     get information stored in 3270 resident driver
  501.  04h "pi2put"     store information in 3270 resident driver
  502.  05h "pi2gcur"     get current screen position
  503.  07h "pi2sdat"     send data keystroke
  504.  08h "pi2scom"     send command keystroke
  505.  0Ah "pi2field"     get field info for arbitrary screen positions
  506.  0Fh "pi2stat"     get logical unit/device status
  507.  12h "pi2nlus"     determine logical unit/device assignment
  508.  13h "pi2gate"     specifies comm port address to gateway service
  509.  14h "pi2attach" attach a logical unit/device
  510.  15h "pi2sdev"     save logical unit/device info in resident driver
  511.         (not supported in >3.0)
  512.  16h "pi2gdev"     get device information (not supported in >3.0)
  513.  17h "pi2luinfo" get info about specific logical unit/device
  514.  18h "pi2gerr"     get finer error detail
  515.  19h "pi2dhold"     (3270/SNA only)  holds a 3270 device
  516.  1Ah "pi2shut"     release memory-resident module
  517.  1Ch "pi2sprof"     save profile info in res driver (not supp in >3.0)
  518.  1Dh "pi2gprof"     get prevsly stored profile info (not supp in >3.0)
  519.  
  520. (Table 1811)
  521. Values for VINES 3270 status:
  522.  0000h    successful
  523.  000Bh    invalid parameter or data does not fit data area
  524.  000Ch    another code path currently active in resident driver
  525.  000Dh    operation currently not allowed
  526.  0032h    encountered connection disconnect error
  527.  0033h    encountered "sosend" completion error
  528.  0034h    encountered "sosend" communication error
  529.  0035h    attach request refused.    extended error info via "pi2gerr":
  530.     01h resource unavailable
  531.     02h invalid type
  532.     03h version mismatch
  533.     04h invalid logical unit number
  534.     05h error during ARL processing
  535.     06h no access for user
  536.  0071h    encountered "sosock" error
  537.  0072h    encountered unrecognizable error
  538.  0073h    encountered "sowait" error (extended info via "pi2gerr")
  539.  0074h    encountered invalid type-of-request on "sowait"
  540.  0075h    encountered "sorec" error (extended info via "pi2gerr")
  541.  0076h    encountered "sorec" completion error (ext info via "pi2gerr")
  542.  0077h    encountered connection request
  543.  0078h    encountered unrecognizable data
  544.  0079h    encountered unknown connection ID (ext info via "pi2gerr")
  545.  
  546. Format of argument block for BH=03h,04h:
  547. Offset    Size    Description    (Table 1812)
  548.  00h    WORD    size of data area (max 256)
  549.  02h  N BYTEs    data area
  550.  
  551. Format of argument block for BH=05h:
  552. Offset    Size    Description    (Table 1813)
  553.  00h    WORD    logical unit/device number
  554.  02h    WORD    pointer to WORD buffer for cursor index
  555.  04h    WORD    pointer to BYTE buffer for current field attribute
  556.  
  557. Format of argument block for BH=07h:
  558. Offset    Size    Description    (Table 1814)
  559.  00h    WORD    logical unit/device number
  560.  02h    WORD    ASCII data byte
  561.  04h    WORD    pointer to WORD count of characters which will need updating
  562.  
  563. Format of argument block for BH=08h:
  564. Offset    Size    Description    (Table 1815)
  565.  00h    WORD    logical unit/device number
  566.  02h    WORD    3270 keystroke (see #1816)
  567.  
  568. (Table 1816)
  569. Values for 3270 keystroke:
  570.  0000h    Enter
  571.  0001h    Clear
  572.  0002h    PA1
  573.  0003h    PA2
  574.  0004h    PA3
  575.  0005h    PF1
  576.  ...
  577.  001Ch    PF24
  578.  001Dh    CSELECT (cursor select)
  579.  001Eh    Insert
  580.  001Fh    Delete
  581.  0020h    EOField
  582.  0021h    EINPUT (erase input)
  583.  0022h    Reset
  584.  0023h    Attention
  585.  0024h    SysReq
  586.  0025h    Duplicate
  587.  0026h    Fieldmark
  588.  0027h    Home
  589.  0028h    NextLine
  590.  0029h    Tab
  591.  002Ah    BackTab
  592.  002Bh    cursor up
  593.  002Ch    cursor down
  594.  002Dh    cursor right
  595.  002Eh    cursor left
  596.  002Fh    double cursor right
  597.  0030h    double cursor left
  598.  0031h    PRINT
  599.  0032h    CANCEL
  600.  0033h    Backspace    
  601.  
  602. Format of argument block for BH=0Ah:
  603. Offset    Size    Description    (Table 1817)
  604.  00h    WORD    logical unit/device number
  605.  02h    WORD    screen index
  606.  04h    WORD    pointer to WORD buffer for field length
  607.  06h    WORD    pointer to WORD buffer for offset in screen of field start
  608.  
  609. Format of argument block for BH=0Fh:
  610. Offset    Size    Description    (Table 1818)
  611.  00h    WORD    logical unit/device number
  612.  02h    WORD    clear mask (clear these bits of status after returning status)
  613.  04h    WORD    pointer to WORD buffer for device status (see #1819)
  614.  
  615. Bitfields for device status:
  616. Bit(s)    Description    (Table 1819)
  617.  10    status modified
  618.  9    buffer modified
  619.  8    set cursor
  620.  5    sound alarm
  621.  1-0    size of print line for printer logical units
  622.     00  unformatted line
  623.     01  40-character line
  624.     10  64-character line
  625.     11  80-character line
  626.  
  627. Format of argument block for BH=12h:
  628. Offset    Size    Description    (Table 1820)
  629.  00h    WORD    pointer to WORD buffer for number of logical units or devices
  630.  02h    WORD    pointer to WORD buffer for version number
  631.  04h    WORD    pointer to 64-byte buffer for logical unit/device list
  632.  
  633. Format of argument block for BH=13h:
  634. Offset    Size    Description    (Table 1821)
  635.  00h 16 BYTEs    communications port address (see #1792)
  636.  
  637. Format of argument block for BH=14h:
  638. Offset    Size    Description    (Table 1822)
  639.  00h    WORD    logical unit/device number
  640.         0000h attach any free device of the specified type
  641.  02h    WORD    logical unit/device type
  642.         (3270/SNA) 01h, 02h, or 03h
  643.         (3270/BSC) 02h display
  644.         (3270/BSC) 03h printer
  645.  04h    WORD    pointer to WORD buffer for attached logical unit/device number
  646.  
  647. Format of argument block for BH=16h:
  648. Offset    Size    Description    (Table 1823)
  649.  00h    WORD    pointer to 18-byte buffer for device block (see #1828)
  650.         first WORD must be set to desired logical unit/device number
  651.  
  652. Format of argument block for BH=17h:
  653. Offset    Size    Description    (Table 1824)
  654.  00h    WORD    logical unit/device number
  655.  02h    WORD    pointer to information block in caller's DS (see #1829)
  656.  
  657. Format of argument block for BH=18h:
  658. Offset    Size    Description    (Table 1825)
  659.  00h    WORD    pointer to WORD buffer for major error code
  660.  02h    WORD    pointer to WORD buffer for minor error code
  661.  
  662. Format of argument block for BH=19h:
  663. Offset    Size    Description    (Table 1826)
  664.  00h    WORD    logical unit/device number
  665.  
  666. Format of argument block for BH=1Ch,1Dh:
  667. Offset    Size    Description    (Table 1827)
  668.  00h    WORD    pointer to profile block in caller's DS (see #1832)
  669.  
  670. Format of device block, argument block for BH=15h:
  671. Offset    Size    Description    (Table 1828)
  672.  00h    WORD    logical unit/device number
  673.  02h    WORD    logical unit/device type
  674.  04h    WORD    display model number
  675.  06h    WORD    numeric checking
  676.  08h    WORD    status line
  677.  0Ah    BYTE    unprotected normal field attribute
  678.  0Bh    BYTE    unprotected intensified field attribute
  679.  0Ch    BYTE    protected normal field attribute
  680.  0Dh    BYTE    protected intensified field attribute
  681.  0Eh    WORD    reserved
  682.  10h    WORD    printer port number
  683.  
  684. Format of information block:
  685. Offset    Size    Description    (Table 1829)
  686.  00h    WORD    device model number
  687.  02h    DWORD    screen buffer pointer
  688.  06h    DWORD    status line pointer (see #1830)
  689.  0Ah    DWORD    reserved
  690.  
  691. Format of status line:
  692. Offset    Size    Description    (Table 1830)
  693.  00h    BYTE    comm line status
  694.         00h inactive
  695.         01h active
  696.  01h    BYTE    activation level
  697.         01h physical unit activated
  698.         02h logical unit also activated
  699.         03h session is bound
  700.  02h    BYTE    data traffic state
  701.         00h inactive
  702.         01h active
  703.  03h    BYTE    screen ownership
  704.         00h SLU->PLU session owns screen
  705.         01h SLU->SSCP session owns screen
  706.  04h    BYTE    keyboard status (see #1831)
  707.  05h    BYTE    insert mode
  708.         01h if in insert mode
  709.  06h    BYTE    numeric
  710.         01h if current screen buffer is numeric only
  711.  07h    BYTE    printer status
  712.         00h printer not assigned
  713.         01h printer is inactive
  714.         02h printer error
  715.         03h currently printing
  716.         04h printer is busy
  717.         05h printer is very busy
  718.  08h    BYTE    printer assignment
  719.  09h    BYTE    maximum size of network name
  720.  0Ah  N BYTEs    ASCIZ network name
  721.     BYTE    maximum size of message window
  722.       M BYTEs    null-terminated message window
  723.     BYTE    code set
  724.         00h EBCDIC
  725.         01h ASCII
  726.       M BYTEs    extended attributes
  727.         01h extended attributes are in effect (stored at screen+1920)
  728.             each extended attribute specifies
  729.             bits 0,1: 00=normal, 01=blink, 10=reverse, 11=underscor
  730.             bits 2-4: 000=default,001=blue,010=red,011=pink,
  731.                   100=green,101=turquoise,110=yellow,111=white
  732.     BYTE    extended color
  733.         01h other than base color is in effect
  734.  
  735. (Table 1831)
  736. Values for keyboard status:
  737.  00h    UNLOCK - ready to accept data
  738.  01h    TIME - aid was struck
  739.  02h    SYSTEM - received response no restore
  740.  03h    FUNCTION - unavailable keyboard function
  741.  04h    INPUT - not currently used
  742.  05h    ENDFIELD - field filled in insert mode
  743.  06h    PROTECTED - attempt to enter in protected field
  744.  07h    NUMERIC - attempt to enter in numeric field
  745.  08h    PROGRAM - error in outbound data stream
  746.  
  747. Format of profile block:
  748. Offset    Size    Description    (Table 1832)
  749.  00h 64 BYTEs    gateway service name
  750.  40h 16 BYTEs    gateway comm port address
  751.  50h    WORD    primary logical unit number
  752.  52h    WORD    secondary logical unit type
  753.  54h    WORD    secondary logical unit number
  754.  56h    WORD    printer assignment
  755.  58h 50 BYTEs    keyboard definitions filename
  756. --------V-610002-----------------------------
  757. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - END ZOOM
  758.     AX = 0002h
  759. Desc:    switches off zoom and returns window to its original state
  760. Range:    unknown
  761. Notes:    INT 61h is the default interrupt; the actual interrupt number can be
  762.       obtained by calling INT 16/AH=FFh
  763.     not all vendors include the Tseng TSR which supports these functions
  764. SeeAlso: AX=0000h"OPTIMA",INT 16/AH=FFh"OPTIMA"
  765. --------N-610003SF00-------------------------
  766. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - INIT USER BUFFER PTR INFO
  767.     AX = 0003h subfn 00h
  768.     DS:BX -> argument block (see #1834)
  769. Return: AX = status (see #1833)
  770. SeeAlso: AX=0003h/SF=06h,AX=0003h/SF=08h,AX=0003h/SF=0Dh
  771.  
  772. (Table 1833)
  773. Values for VINES function status:
  774.  0000h    successful
  775.  000Bh    invalid session ID
  776.  000Ch    session not active
  777.  000Dh    invalid request type
  778.  000Eh    invalid parameters
  779.  000Fh    out of heap space
  780.  0010h    timeout on send
  781.  0011h    Banyan communications error
  782.  0012h    session not waiting for host
  783.  0013h    session is active
  784.  0014h    duplicate suspend session request
  785.  0015h    no session suspended
  786.  0016h    ring data buffer full
  787.  0017h    printer error encountered
  788.  0018h    Banyan communications error
  789.  0019h    unable to make connection
  790.  001Ah    no ring buffer specified at startup
  791.  001Bh    service is down
  792.  001Ch    invalid service name
  793.  001Dh    service is closed
  794.  001Eh    invalid connection name
  795.  001Fh    max session limit reached for service
  796.  0020h    access rights list for connection/dialout does not include this user
  797.  0021h    service not responding
  798.  0022h    missing telephone number
  799.  
  800. Format of VINES argument block:
  801. Offset    Size    Description    (Table 1834)
  802.  00h    BYTE    session ID (00h)
  803.  01h    BYTE    00h (func "initialize user buffer pointer information area")
  804.  02h    WORD    -> user buffer ptr info area in caller's current DS (see #1835)
  805.  
  806. Format of user buffer ptr info area:
  807. Offset    Size    Description    (Table 1835)
  808.  00h    WORD    flags
  809.         0000h don't read interface's data buffer
  810.         0001h read data buffer
  811.  02h    DWORD    pointer to ring buffer
  812.  06h    WORD    length of ring buffer
  813.  08h    WORD    ring buffer offset to last byte read by caller
  814.  0Ah    DWORD    pointer to WORD containing offset of last byte
  815.           in ring buffer filled
  816.  0Eh    DWORD    pointer to screen buffer
  817.  12h    DWORD    pointer to field containing cursor position
  818.  16h    DWORD    pointer to terminal status area (see #1836)
  819.  
  820. Format of VINES terminal status area:
  821. Offset    Size    Description    (Table 1836)
  822.  00h    BYTE    status of session: 4Eh=oNline, 46h=oFfline, 57h=Waiting
  823.  01h    BYTE    terminal type (00h=VT100, 01h=TTY, 02h=VT52, 03h=IBM3101)
  824.  02h    BYTE    current keypad mode (VT100,VT52 only)
  825.         4Eh ("N") numeric mode
  826.         41h ("A") application mode
  827.  03h  4 BYTEs    current state of LEDs (VT100 only)
  828.         00h off
  829.         01h on
  830.  07h    WORD    line error count
  831.  09h    WORD    primary error code (see #1837)
  832.  0Bh    WORD    secondary error code
  833.  
  834. (Table 1837)
  835. Values for VINES primary error code:
  836.  0000h    no error
  837.  0001h    unable to make connection
  838.  0002h    communications error, restart session
  839.  0003h    async terminal emulation service unavailable
  840.  0004h    lost carrier
  841.  0005h    all matching lines busy
  842.  0006h    no lines defined for connection name
  843.  0007h    no dial lines available on server
  844.  0008h    no matching dial lines available
  845.  0009h    out of heap space
  846.  000Ah    service error encountered
  847.  000Bh    timed out waiting to connect
  848.  000Ch    communications error
  849.  000Dh    communications error
  850.  000Eh    host wants file transferred to/from PC
  851.  000Fh    host software changed session parameter
  852.  0010h    host software changed tap settings
  853.  0011h    host software changed LED indicator
  854.  0012h    host software changed display background (secondary error code 00h for
  855.       white on black, 01h for black on white)
  856.  0013h    host software changed display option (secondary error code 00h for off,
  857.       01h for on)
  858.  0014h    communications error
  859.  0015h    communications error
  860.  0016h    unable to make connection
  861.  0017h    unable to make connection
  862. --------N-610003SF01-------------------------
  863. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SEND TO HOST
  864.     AX = 0003h subfn 01h
  865.     DS:BX -> argument block (see #1838)
  866. Return: AX = status (see #1833)
  867. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=02h,AX=0003h/SF=14h
  868.  
  869. Format of VINES argument block for Function 0003h subfunction 01h:
  870. Offset    Size    Description    (Table 1838)
  871.  00h    BYTE    session ID (00h)
  872.  01h    BYTE    01h (function "send to host")
  873.  02h    BYTE    type
  874.         00h ASCII byte
  875.         01h ASCII string
  876.         02h terminal function code
  877.         03h up arrow
  878.         04h down arrow
  879.         05h left arrow
  880.         06h right arrow
  881.         07h break
  882.  03h  N BYTEs    type-specific info (see #1839)
  883.  
  884. Format of type-specific info:
  885. Offset    Size    Description    (Table 1839)
  886. ---ASCII byte---
  887.  03h    BYTE    byte to send to host
  888. ---ASCII string---
  889.  03h    WORD    length of string
  890.  05h    WORD    pointer to string
  891. ---terminal function code (VT52/VT100)---
  892.  03h    BYTE    function code
  893.         00h keypad 0
  894.         01h keypad 1
  895.         ...
  896.         09h keypad 9
  897.         0Ah keypad -
  898.         0Bh keypad ,
  899.         0Ch keypad .
  900.         0Dh keypad ENTER
  901.         0Eh PF1
  902.         0Fh PF2
  903.         10h PF3
  904.         11h PF4
  905. ---terminal function code (IBM3101)---
  906.  03h    BYTE    function code
  907.         00h PF1
  908.         ...
  909.         07h PF8
  910.         08h Home
  911. --------N-610003SF02-------------------------
  912. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - "CONTROL MONITOR"
  913.     AX = 0003h subfn 02h
  914.     DS:BX -> argument block (see #1840)
  915. Return: AX = status (see #1833)
  916. SeeAlso: AX=0003h/SF=03h,AX=0003h/SF=05h
  917.  
  918. Format of VINES argument block for Function 0003h subfunction 02h:
  919. Offset    Size    Description    (Table 1840)
  920.  00h    BYTE    session ID (00h)
  921.  01h    BYTE    02h (function "control monitor")
  922.  02h    BYTE    display flag
  923.         00h don't display data received from host
  924.         01h display data
  925. --------N-610003SF03-------------------------
  926. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - "FLOW CONTROL DATA"
  927.     AX = 0003h subfn 03h
  928.     DS:BX -> argument block (see #1841)
  929. Return: AX = status (see #1833)
  930. Desc:    this function permits the caller to freeze/unfreeze the display and
  931.       the ring buffer
  932. SeeAlso: AX=0003h/SF=02h,AX=0003h/SF=06h
  933.  
  934. Format of VINES argument block for Function 0003h subfunction 03h:
  935. Offset    Size    Description    (Table 1841)
  936.  00h    BYTE    session ID (00h)
  937.  01h    BYTE    03h (function "flow control data")
  938.  02h    BYTE    flow control flag
  939.         00h allow characters to be put into display or ring buffer
  940.         01h don't place any more characters into display or ring buffer
  941. --------N-610003SF04-------------------------
  942. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - END ACTIVE SESSION
  943.     AX = 0003h subfn 04h
  944.     DS:BX -> argument block (see #1842)
  945. Return: AX = status (see #1833)
  946. SeeAlso: AX=0003h/SF=0Ah,AX=0003h/SF=0Dh,AX=0003h/SF=0Fh
  947.  
  948. Format of VINES argument block for ending active session:
  949. Offset    Size    Description    (Table 1842)
  950.  00h    BYTE    session ID (00h)
  951.  01h    BYTE    04h (function "end active session")
  952. --------N-610003SF05-------------------------
  953. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SET SESSION PARAMETER
  954.     AX = 0003h subfn 05h
  955.     DS:BX -> argument block (see #1843)
  956. Return: AX = status (see #1833)
  957. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=06h,AX=0003h/SF=08h
  958.  
  959. Format of VINES argument block for setting session parameters:
  960. Offset    Size    Description    (Table 1843)
  961.  00h    BYTE    session ID (00h)
  962.  01h    BYTE    05h (function "set session parameter")
  963.  02h    BYTE    parameter number (see #1844)
  964.  03h    BYTE    new parameter value
  965.  
  966. (Table 1844)
  967. Values for parameter number:
  968.  00h    line speed (00h=any, 01h=50, 02h=110, 03h=134.5, 04h=150,
  969.           05h=300, 06h=600, 07h=1200, 08h=2400, 09h=4800, 0Ah=9600)
  970.  01h    parity (00h=none, 01h=odd, 02h=even)
  971.  02h    duplex (00h=full, 01h=half)
  972.  03h    character size (00h=7 bits, 01h=8 bits)
  973.  04h    stop bits (00h=1, 01h=2)
  974.  05h    XON/XOFF flow control (00h=no, 01h=yes)
  975.  07h    intercharacter delay in tenths of a second
  976.  08h    interline delay in tenths of a second
  977.  09h    auto linefeed (00h=no, 01h=yes)
  978.  0Ah    filter control characters (00h=no, 01h=yes)
  979.  0Bh    terminal type (00h=VT100,01h=glassTTY,02h=VT52,03h=IBM3101)
  980.  0Ch    auto wrap (00h=no, 01h=yes)
  981.  0Dh    cursor shape (00h=underscore, 01h=block)
  982.  0Eh    character set (00h=UK, 01h=US ASCII)
  983.  0Fh    printer port (00h=LPT1, 01h=LPT2, 02h=LPT3)
  984. --------N-610003SF06-------------------------
  985. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - GET SESSION PARAMETER
  986.     AX = 0003h subfn 06h
  987.     DS:BX -> argument block (see #1845)
  988. Return: AX = status (see #1833)
  989. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=05h,AX=0003h/SF=07h
  990.  
  991. Format of VINES argument block for getting session parameters:
  992. Offset    Size    Description    (Table 1845)
  993.  00h    BYTE    session ID (00h)
  994.  01h    BYTE    06h (function "get session parameter")
  995.  02h    BYTE    parameter number (see #1844)
  996.  03h    BYTE    (return) current parameter value
  997. --------N-610003SF07-------------------------
  998. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SET TAB SETTINGS
  999.     AX = 0003h subfn 07h
  1000.     DS:BX -> argument block (see #1846)
  1001. Return: AX = status (see #1833)
  1002. SeeAlso: AX=0003h/SF=05h,AX=0003h/SF=08h
  1003.  
  1004. Format of VINES argument block for setting tab settings:
  1005. Offset    Size    Description    (Table 1846)
  1006.  00h    BYTE    session ID (00h)
  1007.  01h    BYTE    07h (function "set tab settings")
  1008.  02h    WORD    pointer to 80-byte buffer in caller's current DS
  1009.           each byte = 00h if no tab, 01h if tab at that position
  1010. --------N-610003SF08-------------------------
  1011. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - GET TAB SETTINGS
  1012.     AX = 0003h subfn 08h
  1013.     DS:BX -> argument block (see #1847)
  1014. Return: AX = status (see #1833)
  1015. SeeAlso: AX=0003h/SF=06h,AX=0003h/SF=07h
  1016.  
  1017. Format of VINES argument block for getting tab settings:
  1018. Offset    Size    Description    (Table 1847)
  1019.  00h    BYTE    session ID (00h)
  1020.  01h    BYTE    08h (function "get tab settings")
  1021.  02h    WORD    pointer to 80-byte buffer in caller's current DS
  1022.         each byte set to 00h if no tab, 01h if tab at that position
  1023. --------N-610003SF09-------------------------
  1024. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - REFRESH EMULATION SCREEN
  1025.     AX = 0003h subfn 09h
  1026.     DS:BX -> argument block (see #1848)
  1027. Return: AX = status (see #1833)
  1028. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=0Bh
  1029.  
  1030. Format of VINES argument block for Function 0003h subfunction 09h:
  1031. Offset    Size    Description    (Table 1848)
  1032.  00h    BYTE    session ID (00h)
  1033.  01h    BYTE    09h (function "refresh emulation screen")
  1034. --------N-610003SF0A-------------------------
  1035. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SUSPEND SESSION TEMPORARILY
  1036.     AX = 0003h subfn 0Ah
  1037.     DS:BX -> argument block (see #1849)
  1038. Return: AX = status (see #1833)
  1039. SeeAlso: AX=0003h/SF=04h,AX=0003h/SF=09h,AX=0003h/SF=0Bh,AX=0003h/SF=0Dh
  1040.  
  1041. Format of VINES argument block:
  1042. Offset    Size    Description    (Table 1849)
  1043.  00h    BYTE    session ID (00h)
  1044.  01h    BYTE    0Ah (function "suspend session temporarily")
  1045.  02h    WORD    size of session information to be saved
  1046.  04h    WORD    pointer to buffer in caller's DS
  1047. --------N-610003SF0B-------------------------
  1048. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - RESUME SUSPENDED SESSION
  1049.     AX = 0003h subfn 0Bh
  1050.     DS:BX -> argument block (see #1850)
  1051. Return: AX = status (see #1833)
  1052. SeeAlso: AX=0003h/SF=09h,AX=0003h/SF=0Ah
  1053.  
  1054. Format of VINES argument block:
  1055. Offset    Size    Description    (Table 1850)
  1056.  00h    BYTE    session ID (00h)
  1057.  01h    BYTE    0Bh (function "restore previously suspended session")
  1058.  02h    WORD    size of buffer into which session info is restored
  1059.  04h    WORD    pointer to buffer in caller's DS
  1060. --------N-610003SF0C-------------------------
  1061. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SET SCROLL LOCK CHECKING
  1062.     AX = 0003h subfn 0Ch
  1063.     DS:BX -> argument block (see #1851)
  1064. Return: AX = status (see #1833)
  1065. SeeAlso: AX=0003h/SF=00h
  1066.  
  1067. Format of VINES argument block:
  1068. Offset    Size    Description    (Table 1851)
  1069.  00h    BYTE    session ID (00h)
  1070.  01h    BYTE    0Ch (function "set state of scroll lock checking")
  1071.  02h    BYTE    check_scroll_lock flag
  1072.         00h off
  1073.         01h on (display of host data stopped while ScrollLock on)
  1074. --------N-610003SF0D-------------------------
  1075. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - EXIT EMULATION
  1076.     AX = 0003h subfn 0Dh
  1077.     DS:BX -> argument block (see #1852)
  1078. Return: AX = status (see #1833)
  1079. SeeAlso: AX=0003h/SF=04h,AX=0003h/SF=0Ah
  1080.  
  1081. Format of VINES argument block:
  1082. Offset    Size    Description    (Table 1852)
  1083.  00h    BYTE    session ID (00h)
  1084.  01h    BYTE    0Dh (function "exit emulation")
  1085. --------N-610003SF0E-------------------------
  1086. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - INTERRUPT ON CHAR FROM HOST
  1087.     AX = 0003h subfn 0Eh
  1088.     DS:BX -> argument block (see #1853)
  1089. Return: AX = status (see #1833)
  1090. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=14h
  1091.  
  1092. Format of VINES argument block:
  1093. Offset    Size    Description    (Table 1853)
  1094.  00h    BYTE    session ID (00h)
  1095.  01h    BYTE    0Eh (function "interrupt on character from host")
  1096.  02h    DWORD    pointer to routine to be called (0000h:0000h = don't call)
  1097.  06h    DWORD    stack pointer to use when call is made
  1098. --------N-610003SF0F-------------------------
  1099. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - START A SESSION
  1100.     AX = 0003h subfn 0Fh
  1101.     DS:BX -> argument block (see #1854)
  1102. Return: AX = status (see #1833)
  1103. SeeAlso: AX=0003h/SF=04h,AX=0003h/SF=0Bh
  1104.  
  1105. Format of VINES argument block:
  1106. Offset    Size    Description    (Table 1854)
  1107.  00h    BYTE    session ID (00h)
  1108.  01h    BYTE    0Fh (function "start a session")
  1109.  02h    WORD    pointer to information area in caller's current DS (see #1855)
  1110.  
  1111. Format of VINES information area:
  1112. Offset    Size    Description    (Table 1855)
  1113.  00h    WORD    length of service name
  1114.  02h    WORD    pointer to service name in caller's DS
  1115.  04h    BYTE    type of connection (00h=connection name, 01h=dialout)
  1116.  05h    WORD    length of connection name/telephone number
  1117.  07h    WORD    pointer to connection name/telephone number
  1118. --------N-610003SF10-------------------------
  1119. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - START/STOP PRINTING
  1120.     AX = 0003h subfn 10h
  1121.     DS:BX -> argument block (see #1856)
  1122. Return: AX = status (see #1833)
  1123. SeeAlso: AX=0003h/SF=06h,AX=0003h/SF=13h
  1124.  
  1125. Format of VINES argument block:
  1126. Offset    Size    Description    (Table 1856)
  1127.  00h    BYTE    session ID (00h)
  1128.  01h    BYTE    10h (function "start/stop printing of data received from host)
  1129.  02h    WORD    print capture flag (00h=off, 01h=on)
  1130. --------N-610003SF11-------------------------
  1131. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - GET FILE TRANSFER PARAMETERS
  1132.     AX = 0003h subfn 11h
  1133.     DS:BX -> argument block (see #1857)
  1134. Return: AX = status (see #1833)
  1135. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=12h
  1136.  
  1137. Format of VINES argument block:
  1138. Offset    Size    Description    (Table 1857)
  1139.  00h    BYTE    session ID (00h)
  1140.  01h    BYTE    11h (function "get file transfer parameters")
  1141.  02h    WORD    pointer to info area in caller's current DS (see #1858)
  1142.  
  1143. Format of VINES info area:
  1144. Offset    Size    Description    (Table 1858)
  1145.  00h    BYTE    protocol flag (00h none, 01h Kermit)
  1146.  01h    BYTE    direction flag (00h send, 01h receive)
  1147.  02h    BYTE    length of null-terminated PC filename
  1148.  03h    DWORD    pointer to null-terminated PC filename
  1149.  07h    BYTE    length of null-terminated host filename
  1150.  08h    DWORD    pointer to null-terminated host filename
  1151. --------N-610003SF12-------------------------
  1152. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - GET CONNECTION INFORMATION
  1153.     AX = 0003h subfn 12h
  1154.     DS:BX -> argument block (see #1859)
  1155. Return: AX = status (see #1833)
  1156. SeeAlso: AX=0003h/SF=11h,AX=0003h/SF=15h
  1157.  
  1158. Format of VINES argument block:
  1159. Offset    Size    Description    (Table 1859)
  1160.  00h    BYTE    session ID (00h)
  1161.  01h    BYTE    12h (function "get connection information")
  1162.  02h    WORD    offset of buffer for connection information (see #1860)
  1163.  
  1164. Format of VINES connection information:
  1165. Offset    Size    Description    (Table 1860)
  1166.  00h    WORD    length of service name (returned)
  1167.  02h    WORD    pointer to 64-byte buffer for service name
  1168.  04h    BYTE    type of connection
  1169.         00h connection name
  1170.         01h dialout
  1171.  05h    WORD    length of connection name/telephone number
  1172.  07h    WORD    pointer to 64-byte buffer for name/telno
  1173.  09h    BYTE    server line number being used (returned)
  1174. --------N-610003SF13-------------------------
  1175. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - START/STOP TRACING TRAFFIC
  1176.     AX = 0003h subfn 13h
  1177.     DS:BX -> argument block (see #1861)
  1178. Return: AX = status (see #1833)
  1179. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=0Eh
  1180.  
  1181. Format of VINES argument block:
  1182. Offset    Size    Description    (Table 1861)
  1183.  00h    BYTE    session ID (00h)
  1184.  01h    BYTE    13h (function "start/stop tracing data traffic in session")
  1185.  02h    BYTE    trace flag (00h=off, 01h=on)
  1186. --------N-610003SF14-------------------------
  1187. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - INTERRUPT ON HOST MESSAGE
  1188.     AX = 0003h subfn 14h
  1189.     DS:BX -> argument block (see #1862)
  1190. Return: AX = status (see #1833)
  1191. SeeAlso: AX=0003h/SF=0Eh
  1192.  
  1193. Format of VINES argument block:
  1194. Offset    Size    Description    (Table 1862)
  1195.  00h    BYTE    session ID (00h)
  1196.  01h    BYTE    14h (function "interrupt on message from host")
  1197.  02h    DWORD    pointer to routine to be called (0000h:0000h = don't call)
  1198.  06h    DWORD    stack pointer to use when call is made
  1199. --------N-610003SF15-------------------------
  1200. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - RESET ERROR
  1201.     AX = 0003h subfn 15h
  1202.     DS:BX -> argument block (see #1863)
  1203. Return: AX = status (see #1833)
  1204. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=12h
  1205.  
  1206. Format of VINES argument block:
  1207. Offset    Size    Description    (Table 1863)
  1208.  00h    BYTE    session ID (00h)
  1209.  01h    BYTE    15h (function "reset error")
  1210. --------V-610003-----------------------------
  1211. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - REPORT ZOOM FACTOR
  1212.     AX = 0003h
  1213. Return: AX = zoom factor
  1214. Desc:    returns the current zoom factor
  1215. Range:    unknown
  1216. Notes:    INT 61h is the default interrupt; the actual interrupt number can be
  1217.       obtained by calling INT 16/AH=FFh
  1218.     not all vendors include the Tseng TSR which supports these functions
  1219. SeeAlso: AX=0000h"OPTIMA",AX=0005h"OPTIMA",INT 16/AH=FFh"OPTIMA"
  1220. --------N-610004SF0008-----------------------
  1221. INT 61 - Banyan VINES - GET SERVER SERIAL NUMBER
  1222.     AX = 0004h subfn 0008h
  1223.     DS:DX -> request block (see #1864)
  1224. Return: AX = status
  1225.         0000h server ID returned in request block
  1226.         000Fh invalid drive
  1227.         0015h drive not ready
  1228.  
  1229. Format of VINES request block for getting server serial number:
  1230. Offset    Size    Description    (Table 1864)
  1231.  00h    WORD    0008h
  1232.  02h    WORD    drive number (0=default, 1=A, ...)
  1233.  04h  6 BYTEs    buffer for server ID
  1234. --------V-610004-----------------------------
  1235. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - ENTER SPECIFY MODE
  1236.     AX = 0004h
  1237. Range:    unknown
  1238. Notes:    Specify Mode is enabled by hot key (seeAlso below), and allows
  1239.       panning and zooming via the numeric keypad.
  1240.     INT 61 is the default interrupt; the actual interrupt number can be
  1241.       obtained by calling INT 16/AH=FFh
  1242.     not all vendors include the Tseng TSR which supports these functions
  1243. SeeAlso: AX=0000h"OPTIMA",AX=0007h"OPTIMA",INT 16/AH=FFh"OPTIMA"
  1244. --------N-610005-----------------------------
  1245. INT 61 - Banyan VINES - PRINTER CONTROL
  1246.     AX = 0005h
  1247.     DS:DX -> request block (see #1865)
  1248. Return: AX = status
  1249.         0000h successful
  1250.         0001h network software not installed or incompatible
  1251. SeeAlso: INT 2F/AX=D702h
  1252.  
  1253. Format of VINES request block for printer control:
  1254. Offset    Size    Description    (Table 1865)
  1255.  00h    WORD    function
  1256.         0201h "endspool" all data for a print job has been sent
  1257.         0205h "getactive" get currently active printer port
  1258.  02h    WORD    number of active port (1-3)
  1259.  04h    WORD    ??? (0 for func 0201h, 3 for func 0205h)
  1260.  06h    WORD    0000h
  1261. --------V-610005-----------------------------
  1262. INT 61 - OPTIMA 1024 VGA-Sync - QUERY ZOOM WINDOW
  1263.     AX = 0005h
  1264.     BX:CX -> buffer for window parameters (see #1866)
  1265. Range:    unknown
  1266. Notes:    INT 61 is the default interrupt; the actual interrupt number can be
  1267.       obtained by calling INT 16/AH=FFh
  1268.     not all vendors include the Tseng TSR which supports these functions
  1269. SeeAlso: AX=0000h"OPTIMA",AX=0003h"OPTIMA",AX=0006h"OPTIMA"
  1270. SeeAlso: INT 16/AH=FFh"OPTIMA"
  1271.  
  1272. Format of Optima 1024 window parameters:
  1273. Offset    Size    Description    (Table 1866)
  1274.  00h    WORD    X start of zoom window
  1275.  02h    WORD    Y start of zoom window
  1276.  04h    WORD    X end of zoom window
  1277.  06h    WORD    Y end of zoom window
  1278.  08h    WORD    current zoom factor
  1279.  0Ah    WORD    zoom offset start X
  1280.  0Ch    WORD    zoom offset start Y
  1281. --------V-610006-----------------------------
  1282. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - SET ZOOM WINDOW
  1283.     AX = 0006h
  1284.     BX:CX -> zoom window description (see #1867)
  1285. Range:    unknown
  1286. Notes:    width of zoom window must be a multiple of the pixel replication (zoom)
  1287.       factor
  1288.     INT 61 is the default interrupt; the actual interrupt number can be
  1289.       obtained by calling INT 16/AH=FFh
  1290.     not all vendors include the Tseng TSR which supports these functions
  1291. SeeAlso: AX=0000h"OPTIMA",AX=0001h"OPTIMA",AX=0005h"OPTIMA",AX=0008h"OPTIMA"
  1292. SeeAlso: INT 16/AH=FFh"OPTIMA"
  1293.  
  1294. Format of Optima 1024 zoom window description:
  1295. Offset    Size    Description    (Table 1867)
  1296.  00h    WORD    X start of zoom window
  1297.  02h    WORD    Y start of zoom window
  1298.  04h    WORD    X end of zoom window
  1299.  06h    WORD    Y end of zoom window
  1300. --------V-610007-----------------------------
  1301. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - QUERY APPLICATION KEY
  1302.     AX = 0007h
  1303. Return: AX = current state (0000h/0001h)
  1304. Desc:    returns the current toggle state of the application (END) key in
  1305.       specify mode. E.g. in the OPTIMA AutoCAD driver, 0 means AutoCAD
  1306.       calls INT 61/AX=0001h every time the crosshair cursor moves.
  1307. Notes:    In specify mode, the END key has been reserved for applications.
  1308.     INT 61 is the default interrupt; the actual interrupt number can be
  1309.       obtained by calling INT 16/AH=FFh
  1310.     not all vendors include the Tseng TSR which supports these functions
  1311. SeeAlso: AX=0000h"OPTIMA",AX=0001h"OPTIMA",AX=0004h"OPTIMA"
  1312. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 7A/AX=0001h"AutoCAD"
  1313. --------N-610007BX0002-----------------------
  1314. INT 61 - Banyan VINES - GET PORTS FOR A SERVICE
  1315.     AX = 0007h
  1316.     BX = 0002h
  1317.     DS:DX -> StreetTalk service name
  1318.     DS:DI -> port record block (see #1869)
  1319. Return: AX = status (see #1868)
  1320. SeeAlso: AX=0007h/BX=0004h
  1321.  
  1322. (Table 1868)
  1323. Values for VINES function status:
  1324.  0000h    successful
  1325.  0001h    PC network software not installed or incompatible
  1326.  03E9h    incorrect name syntax
  1327.  03EAh    organization name too long
  1328.  03EBh    group name too long
  1329.  03ECh    item name too long
  1330.  03EDh    StreetTalk name too long
  1331.  03F3h    organization not found
  1332.  03F4h    group not found
  1333.  03F5h    StreetTalk name not found
  1334.  03F8h    not a StreetTalk name
  1335.  0409h    modify access denied
  1336.  040Dh    appropriate StreetTalk name unavailable
  1337.  
  1338. Format of VINES port record block:
  1339. Offset    Size    Description    (Table 1869)
  1340.  00h    WORD    number of 17-byte elements
  1341.  02h 17 BYTEs    element (byte 00h = input port type, bytes 01h-10h = port)
  1342.         (see #1792 for port format)
  1343. --------N-610007BX0004-----------------------
  1344. INT 61 - Banyan VINES - SET PORTS FOR A SERVICE
  1345.     AX = 0007h
  1346.     BX = 0004h
  1347.     DS:DX -> StreetTalk name of service
  1348.     DS:DI -> port record block (see #1870)
  1349. Return: AX = status (see #1868)
  1350. SeeAlso: AX=0007h/BX=0002h
  1351.  
  1352. Format of VINES port record block:
  1353. Offset    Size    Description    (Table 1870)
  1354.  00h    WORD    number of 17-byte elements
  1355.  02h 17 BYTEs    element: byte 00h = input port type, 01h-10h = port
  1356.         (see #1792 for port format)
  1357. --------N-610007BX0005-----------------------
  1358. INT 61 - Banyan VINES - GET USER NAME
  1359.     AX = 0007h
  1360.     BX = 0005h
  1361.     DS:DX -> 64-byte buffer for user's StreetTalk name
  1362. Return: AX = status
  1363.         0000h successful
  1364.         0001h network software not installed or incompatible
  1365. Note:    if no user logged in, first byte of returned name will be 00h
  1366. SeeAlso: AX=0007h/BX=0007h
  1367. --------N-610007BX0006-----------------------
  1368. INT 61 - Banyan VINES - TRANSLATE ERROR INTO ASCII STRING
  1369.     AX = 0007h
  1370.     BX = 0006h
  1371.     SI = error code (>100)
  1372.     DS:DX -> 80-byte buffer for error text
  1373. Return: AX = status
  1374.         0000h successful
  1375.         0001h network software not installed or incompatible
  1376. --------N-610007BX0007-----------------------
  1377. INT 61 - Banyan VINES - VERIFY EXISTENCE OF NAME AND RETURN CANONICAL FORM
  1378.     AX = 0007h
  1379.     BX = 0007h
  1380.     DS:DX -> NiceName block (see #1871)
  1381. Return: AX = status (see #1868)
  1382. SeeAlso: AX=0007h/BX=0005h,AX=0007h/BX=0008h
  1383.  
  1384. Format of VINES NiceName block:
  1385. Offset    Size    Description    (Table 1871)
  1386.  00h    WORD    type of name
  1387.         0064h (100) organization
  1388.         00C8h (200) group
  1389.         012Ch (300) item
  1390.  02h    WORD    pointer to ASCIZ input name
  1391.  04h    WORD    pointer to 64-byte buffer for output name
  1392. --------N-610007BX0008-----------------------
  1393. INT 61 - Banyan VINES - ENUMERATE StreetTalk NAMES
  1394.     AX = 0007h
  1395.     BX = 0008h
  1396.     DS:DX -> enumerate block (see #1872)
  1397. Return: AX = status
  1398.         0000h successful
  1399.         0411h all matching names have been returned
  1400.         0412h some groups unavailable, all available matches returned
  1401. Note:    each program using this call should continue until a nonzero status
  1402.       is returned; otherwise, some resources will not be freed for several
  1403.       hours
  1404. SeeAlso: AX=0007h/BX=0007h
  1405.  
  1406. Format of VINES enumerate block:
  1407. Offset    Size    Description    (Table 1872)
  1408.  00h    WORD    return code
  1409.  02h    WORD    pointer to pattern string
  1410.  04h    WORD    enumerate type
  1411.         0064h (100) organization
  1412.         00C8h (200) group
  1413.         012Ch (300) item
  1414.  06h    WORD    enumerate class
  1415.         0000h unspecified (return all matching items)
  1416.         0001h user names
  1417.         0002h service names
  1418.         0003h list names
  1419.         0004h nicknames
  1420.  08h    WORD    pointer to category criteria block (see #1873) or 0
  1421.  0Ah    WORD    pointer to array of 64-byte returned names
  1422.  0Ch    WORD    number of names returned
  1423.  0Eh  6 BYTEs    reserved for subsequent enumerated calls (set to zeros on first
  1424.           call)
  1425.  
  1426. Format of category criteria block:
  1427. Offset    Size    Description    (Table 1873)
  1428.  00h    WORD    exclude flag
  1429.         0000h return only items with the specified categories
  1430.         0001h return all items except those with the given categories
  1431.  02h    WORD    number of categories
  1432.  04h    WORD    category 1 value
  1433.  06h    WORD    category 2 value
  1434.         ...
  1435.  
  1436. (Table 1874)
  1437. Values for common VINES service categories:
  1438.  0002h    file service
  1439.  0003h    print service
  1440.  0004h    mail service
  1441.  0005h    StreetTalk
  1442.  0006h    time service
  1443.  0008h    semaphore service
  1444.  0009h    3270/SNA service
  1445.  000Ah    asynchronous terminal emulation service
  1446.  000Ch    NETBIOS service
  1447.  000Dh    PC-based service
  1448. --------V-610008-----------------------------
  1449. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - SET ZOOM OFFSET
  1450.     AX = 0008h
  1451.     BX = X start of zoom offset
  1452.     CX = Y start of zoom offset
  1453. Desc:    specifies the first byte of video memory to appear in the zoom window
  1454. Range:    unknown
  1455. Notes:    INT 61 is the default interrupt; the actual interrupt number can be
  1456.       obtained by calling INT 16/AH=FFh
  1457.     not all vendors include the Tseng TSR which supports these functions
  1458. SeeAlso: AX=0000h"OPTIMA",AX=0006h"OPTIMA",INT 16/AH=FFh"OPTIMA"
  1459. --------N-610008BX0002-----------------------
  1460. INT 61 - Banyan VINES - POST MESSAGE ON LOCAL DISPLAY
  1461.     AX = 0008h
  1462.     BX = 0002h
  1463.     CX = message display flags (see #1875)
  1464.     DS:DX -> ASCIZ string to display (only first 80 chars used)
  1465. Return: AX = status
  1466.         0000h successful
  1467.         000Bh message display function currently busy
  1468.         000Ch message queue full
  1469. Note:    queues up to three messages to be displayed on the bottom line
  1470. SeeAlso: AX=0008h/BX=0003h
  1471.  
  1472. Bitfields for VINES message display flags:
  1473. Bit(s)    Description    (Table 1875)
  1474.  0    message will remain on screen until user presses ^X
  1475.  1    ring bell after displaying message
  1476.  2    blink
  1477. --------N-610008BX0003-----------------------
  1478. INT 61 - Banyan VINES - INTERCEPT VINES 25th-LINE MESSAGES AT LOCAL PC
  1479.     AX = 0008h
  1480.     BX = 0003h
  1481.     DS:DX -> request block (see #1876)
  1482. Return: AX = status
  1483.         0000h successful
  1484.         0001h network software not installed or incompatible
  1485. Notes:    message handler should not call BIOS or DOS functions, and should
  1486.       either call next handler or simply return
  1487.     to stop intercepting messages, set prev and next request blocks to
  1488.       point at each other
  1489. SeeAlso: AX=0008h/BX=0002h
  1490.  
  1491. Format of VINES request block for 25-th line messages:
  1492. Offset    Size    Description    (Table 1876)
  1493.  00h    DWORD    pointer to user-written message handler
  1494.  04h    DWORD    pointer to next request block (filled in by VINES)
  1495.  08h    DWORD    pointer to previous request block (filled in by VINES)
  1496.  0Ch    DWORD    pointer to message storage area (filled by VINES) (see #1877)
  1497.  
  1498. Format of message storage area:
  1499. Offset    Size    Description    (Table 1877)
  1500.  00h 16 BYTEs    IPC port of message sender (see #1792)
  1501.  10h    BYTE    message flags
  1502.  11h    WORD    reserved
  1503.  13h    BYTE    length of message
  1504.  14h 80 BYTEs    message text
  1505. --------N-61000A-----------------------------
  1506. INT 61 - Banyan VINES - SECONDARY 3270 INTERFACE
  1507.     AX = 000Ah
  1508. Note:    either 3270/SNA or 3270/BSC interface will use AX=000Ah, depending on
  1509.       which is loaded second.  The first interface loaded will use AX=0002h
  1510. SeeAlso: INT 61/AX=0002h
  1511. --------N-6101-------------------------------
  1512. INT 61 - Banyan VINES - CHECK SERVICE
  1513.     AH = 01h
  1514.     AL = service ID (see #1878)
  1515. Return: AX = status
  1516.         0000h installed
  1517.         0001h not installed
  1518.         0002h invalid ID
  1519.  
  1520. (Table 1878)
  1521. Values for VINES service ID:
  1522.  01h    communications
  1523.  02h    primary 3270 emulation
  1524.  03h    async terminal emulation
  1525.  04h    file deflection
  1526.  07h    StreetTalk
  1527.  08h    environment
  1528.  0Ah    secondary 3270 emulation
  1529.  0Bh    semaphore service
  1530.  0Ch    3270 emulation active status
  1531.  0Dh    3270 keyboard interrupt simulator
  1532. --------N-6101--BX0000-----------------------
  1533. INT 61 u - PC/TCP kernel v2.1+ - "net_config" - CONFIGURE RUNNING KERNEL
  1534.     AH = 01h
  1535.     BX = 0000h
  1536.     DH = tag number
  1537.     DL = device number
  1538.     DS:SI -> buffer to send to kernel
  1539.     ES:DI -> integer containing size of buffer
  1540. Return: CF clear if successful
  1541.     CF set on error
  1542.         AX = error code (see INT 61"PC/TCP")
  1543. Range:    INT 20 to INT E0, selected by configuration
  1544. Notes:    there are a large number of tags available; the items returned
  1545.       all refer to local kernel configuration, and are not needed in
  1546.       normal use.
  1547.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1548. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=02"PC/TCP"
  1549. --------N-6102-------------------------------
  1550. INT 61 - Banyan VINES - GET REVISION NUMBER
  1551.     AH = 02h
  1552.     DS:DX -> 2-byte buffer for result
  1553. Return: AX = 0000h installed
  1554.         DS:DX buffer contains revision number as
  1555.         10000d * major_ver + 100d * minor_ver + patch_revision
  1556. --------N-6102--BX0000-----------------------
  1557. INT 61 u - PC/TCP kernel v2.1+ - "get_kernel_info" - GET MISCELLAN LOCAL INFO
  1558.     AH = 02h
  1559.     BX = 0000h
  1560.     DH = tag number
  1561.     DL = device number
  1562.     DS:SI -> buffer for result (up to 48 bytes for version <= 2.2)
  1563.     ES:DI -> integer containing size of buffer
  1564. Return: CF clear if successful
  1565.         Data loaded into specified buffer, and size value altered
  1566.     CF set on error
  1567.         AX = error code (see INT 61"PC/TCP")
  1568. Range:    INT 20 to INT E0, selected by configuration
  1569. Notes:    there are a large number of tags available; the items returned
  1570.       all refer to local kernel configuration, and are not needed in
  1571.       normal use.
  1572.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1573. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=01h"PC/TCP"
  1574. --------N-6105-------------------------------
  1575. INT 61 - PC/TCP kernel v2.05+ - "get_addr" - GET INTERNET ADDRESS OF NET DESCR
  1576.     AH = 05h
  1577.     BX = network descriptor
  1578. Return: CF clear if successful
  1579.         DX:AX = Internet address of ND
  1580.     CF set on error
  1581.         AX = error code (see INT 61"PC/TCP")
  1582. Range:    INT 20 to INT E0, selected by configuration
  1583. Notes:    the installation check consists of testing for the signature "TCPTSR"
  1584.       three bytes beyond the start of the interrupt handler
  1585. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=16h"PC/TCP"
  1586. SeeAlso: INT 63/AH=25h"BW-TCP"
  1587. --------N-6106-------------------------------
  1588. INT 61 - PC/TCP kernel v2.05 - "net_info" - GET INTERFACE STATISTICS
  1589.     AH = 06h
  1590.     BX = network descriptor (must be allocated and open)
  1591.     DS:SI -> 38-byte buffer for interface statistics (see #1879)
  1592. Return: CF clear if successful
  1593.         buffer filled
  1594.     CF set on error
  1595.         AX = error code (see INT 61"PC/TCP")
  1596. Desc:    returns the statistics relevant to the particular network interface
  1597.        used by the specified network descriptor
  1598. Range:    INT 20 to INT E0, selected by configuration
  1599. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=05h"PC/TCP"
  1600.  
  1601. Format of PC/TCP interface statistics:
  1602. Offset    Size    Description    (Table 1879)
  1603.  00h    WORD    interface class (e.g. 802.3)
  1604.  02h    WORD    type (manufacturer) of interface
  1605.  04h    WORD    interface number
  1606.  06h    DWORD    (big-endian) IP address of interface
  1607.  0Ah    DWORD    subnet mask
  1608.  0Eh    WORD    0001h if interface is up
  1609.  10h    DWORD    total packets received
  1610.  14h    DWORD    total packets sent
  1611.  18h    DWORD    receive errors
  1612.  1Ch    DWORD    send errors
  1613.  20h    WORD    length of local net address (e.g. 0006h for Ethernet)
  1614.  22h    DWORD    pointer to local net address
  1615. --------N-6107-------------------------------
  1616. INT 61 - PC/TCP kernel v2.05+ - "net_globalize" - MAKE NET DESCRIPTOR GLOBAL
  1617.     AH = 07h
  1618.     BX = local network descriptor
  1619. Return: CF clear if successful
  1620.         AX = global network descriptor
  1621.     CF set on error
  1622.         AX = error code (see INT 61"PC/TCP")
  1623. Notes:    the new network descriptor can be accessed from all processes and is
  1624.       independent of DOS
  1625.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1626. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=08h"PC/TCP"
  1627. SeeAlso: INT 61/AH=29h
  1628. --------N-6108-------------------------------
  1629. INT 61 - PC/TCP kernel v2.05+ - "net_release" - CLOSE A NETWORK DESCRIPTOR
  1630.     AH = 08h
  1631.     BX = network descriptor
  1632. Return: CF clear if successful
  1633.         AX = 0000h (BWPCTCP shim)
  1634.     CF set on error
  1635.         AX = error code (see INT 61"PC/TCP")
  1636. Range:    INT 20 to INT E0, selected by configuration
  1637. Note:    the descriptor will be closed and resources released.  If a stream
  1638.       descriptor, the protocol (FIN etc) is completed unless the
  1639.       non-blocking option has been set.
  1640. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=09h"PC/TCP"
  1641. SeeAlso: INT 63/AH=0Eh"BW-TCP"
  1642. --------N-6109-------------------------------
  1643. INT 61 - PC/TCP kernel v2.05+ - "net_releaseall" - CLOSE ALL NON-GLOBAL DESCRS
  1644.     AH = 09h
  1645. Return: CF clear
  1646. Range:    INT 20 to INT E0, selected by configuration
  1647. Notes:    this call performs function 08h on every non-global network descriptor.
  1648.       Global descriptors must be released individually.
  1649. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=08h"PC/TCP"
  1650. SeeAlso: INT 63/AH=0Eh"BW-TCP"
  1651. --------N-610A-------------------------------
  1652. INT 61 - PC/TCP kernel v2.05 - "net_send" - ???
  1653.     AH = 0Ah
  1654.     ???
  1655. Return: ???
  1656. Notes:    this function is described as "unused" in the v2.05 and v2.2
  1657.       documentation
  1658.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1659. SeeAlso: AH=0Bh
  1660. --------N-610B-------------------------------
  1661. INT 61 - PC/TCP kernel v2.05 - "net_sendto" - ???
  1662.     AH = 0Bh
  1663.     ???
  1664. Return: ???
  1665. Range:    INT 20 to INT E0, selected by configuration
  1666. Notes:    this function is described as "unused" in the v2.05 and v2.2
  1667.       documentation
  1668.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1669. SeeAlso: AH=0Ah
  1670. --------N-610C-------------------------------
  1671. INT 61 u - PC/TCP kernel v2.05+ - "net_stat" - GET CONNECTION STATISTICS
  1672.     AH = 0Ch
  1673.     BX = network descriptor or one of the following:
  1674.         FFFCh for kernel ICMP statistics
  1675.         FFFDh for kernel UDP statistics
  1676.         FFFEh for kernel IP statistics
  1677.         FFFFh for kernel TCP statistics
  1678.     DS:DX -> 64-byte buffer
  1679. Return: CF clear if successful
  1680.         buffer filled
  1681.     CF set on error
  1682.         AX = error code (see INT 61"PC/TCP")
  1683. Notes:    the fields filled in for a network descriptor depend on the protocol
  1684.       family used by that descriptor's connection
  1685.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1686. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1687.  
  1688. Format of PC/TCP kernel TCP statistics:
  1689. Offset    Size    Description    (Table 1880)
  1690.  00h 16 BYTEs    unused
  1691.  10h    DWORD    bytes sent
  1692.  14h    DWORD    bytes received
  1693.  18h  8 BYTEs    unused
  1694.  20h    DWORD    packets sent
  1695.  24h    DWORD    packets received
  1696.  28h    DWORD    bad checksums
  1697.  2Ch    DWORD    count of window ignored by remote
  1698.  30h    DWORD    timeouts
  1699.  34h    DWORD    resets
  1700.  38h    DWORD    duplicate packets
  1701.  3Ch    DWORD    retransmits
  1702.  
  1703. Format of PC/TCP kernel IP statistics:
  1704. Offset    Size    Description    (Table 1881)
  1705.  00h  8 BYTEs    unused
  1706.  08h    DWORD    invalid IP header length errors
  1707.  0Ch    DWORD    protocol errors (unwanted packets)
  1708.  10h    DWORD    duplicate fragments received
  1709.  14h    DWORD    bad fragments received
  1710.  18h    DWORD    security errors
  1711.  1Ch    DWORD    count of bad IP addresses received
  1712.  20h    DWORD    packets sent
  1713.  24h    DWORD    packets received
  1714.  28h    DWORD    bad checksums received
  1715.  2Ch    DWORD    total IP protocol errors
  1716.  30h    DWORD    fragmentation errors
  1717.  34h    DWORD    IP packets discarded + bad security + bad fragments
  1718.  38h    DWORD    fragments received
  1719.  3Ch  4 BYTEs    unused
  1720.  
  1721. Format of PC/TCP kernel UDP statistics:
  1722. Offset    Size    Description    (Table 1882)
  1723.  00h 28 BYTEs    unused
  1724.  1Ch    DWORD    packets dropped for lack of buffers
  1725.  20h    DWORD    packets sent
  1726.  24h    DWORD    packets received
  1727.  28h    DWORD    bad checksums
  1728.  2Ch    DWORD    port not listening errors
  1729.  30h  4 BYTEs    unused
  1730.  34h    DWORD    truncated receives
  1731.  38h  8 BYTEs    unused
  1732.  
  1733. Format of PC/TCP kernel ICMP statistics:
  1734. Offset    Size    Description    (Table 1883)
  1735.  00h    DWORD    "TimeEx" sent
  1736.  04h    DWORD    "TimeEx" received
  1737.  08h    DWORD    "ParamProb" sent
  1738.  0Ch    DWORD    "ParamProb" received
  1739.  10h    DWORD    redirects received
  1740.  14h    DWORD    source quenches received
  1741.  18h    DWORD    ICMP Echo Requests ("ping") sent
  1742.  1Ch    DWORD    ICMP Echo Requests received
  1743.  20h    DWORD    packets sent
  1744.  24h    DWORD    packets received
  1745.  28h    DWORD    bad packets received
  1746.  2Ch    DWORD    "DestUn" received
  1747.  30h    DWORD    packet send errors
  1748.  34h    DWORD    "DestUn" sent
  1749.  38h    DWORD    ICMP Echo replies received
  1750.  3Ch    DWORD    ICMP Echo replies sent
  1751. --------N-610D-------------------------------
  1752. INT 61 - PC/TCP kernel v2.05+ - "is_netnd" - CHECK IF NETWORK DESCRIPTOR VALID
  1753.     AH = 0Dh
  1754.     BX = possible network descriptor
  1755. Return: CF clear if valid
  1756.     CF set on error
  1757.         AX = error code (see INT 61"PC/TCP")
  1758. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=08h"PC/TCP"
  1759. SeeAlso: INT 61/AH=22h
  1760. --------N-610E-------------------------------
  1761. INT 61 - PC/TCP kernel v2.05+ - "net_select" - DETECT READINESS OF NETWORK
  1762.     AH = 0Eh
  1763.     BX = maximum value of network descriptor for which to return info
  1764.     DS:DX -> 32-bit (max) array of bit flags for read readiness
  1765.     ES:DI -> 32-bit (max) array of bit flags for write readiness
  1766. Return: CF clear
  1767. Range:    INT 20 to INT E0, selected by configuration
  1768. Notes:    bits in the DS:DX buffer are set if the corresponding network
  1769.       descriptor may be read without blocking; bits in the ES:DI buffer
  1770.       are set if the corresponding network descriptor may be written
  1771.       without blocking.  This implies that the network descriptor has
  1772.       opened correctly and the protocol initialized.
  1773.     the installation check consists of testing for the signature "TCPTSR"
  1774.       three bytes beyond the start of the interrupt handler
  1775. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1776. --------N-610F-------------------------------
  1777. INT 61 - PC/TCP kernel v2.05+ - "get_netversion" - GET SOFTWARE VERSION
  1778.     AH = 0Fh
  1779. Return: CF clear
  1780.     AX = version (AH = major, AL = minor)
  1781.     BX = patch level
  1782. Notes:    patch levels are no longer used starting with version 2.10; instead,
  1783.       the minor version level is incremented.
  1784.     Beame&Whiteside's BWPCTCP v3.0a shim reports version 2.05, but does not
  1785.       set BX
  1786. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1787. --------N-6110-------------------------------
  1788. INT 61 - PC/TCP kernel v2.05+ - "net_shutdown" - UNINSTALL
  1789.     AH = 10h
  1790. Return: CF clear if successful
  1791.     CF set on error
  1792.         AX = error code (see INT 61"PC/TCP")
  1793. Range:    INT 20 to INT E0, selected by configuration
  1794. Note:    this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1795. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1796. --------N-6111-------------------------------
  1797. INT 61 - PC/TCP kernel v2.05+ - "disable_async" - DISABLE ASYNCHRONOUS HANDLERS
  1798.     AH = 11h
  1799. Return: CF clear
  1800.     AX = previous state
  1801.         0000h async calls were already disabled
  1802.         else  async calls were enabled
  1803. SeeAlso: INT 61"PC/TCP",INT 61/AH=12h
  1804. --------N-6112-------------------------------
  1805. INT 61 - PC/TCP kernel v2.05+ - "enable_async" - ENABLE ASYNCHRONOUS HANDLERS
  1806.     AH = 12h
  1807. Return: CF clear
  1808.     AX = previous state
  1809.         0000h async calls were disabled
  1810.         else  async calls were already enabled
  1811. SeeAlso: INT 61"PC/TCP",INT 61/AH=11h
  1812. --------N-6113-------------------------------
  1813. INT 61 - PC/TCP kernel v2.05 - "net_connect" - OPEN A NETWORK CONNECTION
  1814.     AH = 13h
  1815.     BX = network descriptor (FFFFh for automatic net_getdesc)
  1816.     DX = protocol (see #1884)
  1817.     DS:SI -> buffer for "addr" structure (see #1885)
  1818. Return: CF clear if successful
  1819.         AX = network descriptor used or allocated
  1820.     CF set on error
  1821.         AX = error code (see INT 61"PC/TCP")
  1822. Notes:    resets the connection with AH=19h in various cases
  1823.     will wait for protocol on stream connections unless non-blocking was
  1824.       set with AH=20h
  1825. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=18h,INT 61/AH=23h
  1826. SeeAlso: INT 63/AH=14h"BW-TCP"
  1827.  
  1828. (Table 1884)
  1829. Values for PC/TCP protocol:
  1830.  0001h    raw net (undocumented)
  1831.  0002h    raw IP
  1832.  0003h    datagram (UDP)
  1833.  0004h    stream (TCP)
  1834.  0005h    raw ICMP
  1835.  
  1836. Format of structure "addr":
  1837. Offset    Size    Description    (Table 1885)
  1838.  00h    DWORD    Internet address (network order)
  1839.  04h    WORD    remote socket number (network order)
  1840.  06h    WORD    local socket number (network order) 0000h means "you choose"
  1841.  08h    BYTE    protocol (see #1884)
  1842. --------N-6114-------------------------------
  1843. INT 61 Ou - PC/TCP kernel v2.05 - "net_recv" - NO LONGER SUPPORTED
  1844.     AH = 14h
  1845.     BX = network descriptor
  1846. Return: CF set
  1847.         AX = 0018h (see INT 61"PC/TCP")
  1848. Notes:    displays error message "Illegal system call!  Please upgrade your
  1849.       PCserver software" to standard output
  1850.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1851. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=0Ah,INT 61/AH=15h
  1852. --------N-6115-------------------------------
  1853. INT 61 - PC/TCP kernel v2.05 - "net_recvfrom" - ???
  1854.     AH = 15h
  1855.     ???
  1856. Return: ???
  1857. Notes:    this function is described as "unused" in the v2.2 documentation
  1858.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1859. SeeAlso: INT 61/AH=0Bh,INT 61/AH=14h
  1860. --------N-6116-------------------------------
  1861. INT 61 - PC/TCP kernel v2.05+ - "net_peer" - GET DATA ON REMOTE PEER
  1862.     AH = 16h
  1863.     BX = network descriptor
  1864.     DS:DX -> 9-byte buffer for "addr" structure (see #1885)
  1865. Return: CF clear if successful
  1866.         buffer filled
  1867.     CF set on error
  1868.         AX = error code (see INT 61"PC/TCP")
  1869. Range:    INT 20 to INT E0, selected by configuration
  1870. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1871. --------N-6117-------------------------------
  1872. INT 61 - PC/TCP kernel v2.05+ - "net_reconfig" - RE-READ KERNEL CONFIGURATION
  1873.     AH = 17h
  1874. Return: CF clear if successful
  1875.     CF set on error
  1876.         AX = error code (see INT 61"PC/TCP")
  1877. Notes:    this routine is deprecated in v2.1+ and will eventually be withdrawn;
  1878.       in v2.1+, this function calls AH=01h which should be used instead
  1879.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1880. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=01h"PC/TCP"
  1881. --------N-6118-------------------------------
  1882. INT 61 - PC/TCP kernel v2.05+ - "net_eof" - CLOSE TRANSMIT SIDE OF CONNECTION
  1883.     AH = 18h
  1884.     BX = network descriptor
  1885. Return: CF clear if successful
  1886.     CF set on error
  1887.         AX = error code (see INT 61"PC/TCP")
  1888. Note:    a TCP "FIN" command is sent and no further data may be transmitted,
  1889.       although the connection remains open
  1890. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h"PC/TCP"
  1891. SeeAlso: INT 63/AH=0Eh"BW-TCP"
  1892. --------N-6119-------------------------------
  1893. INT 61 - PC/TCP kernel v2.05+ - "net_abort" - RESET A NETWORK CONNECTION
  1894.     AH = 19h
  1895.     BX = network descriptor
  1896. Return: CF clear if successful
  1897.     CF set on error
  1898.         AX = error code (see INT 61"PC/TCP")
  1899. Desc:    immediately destroys the specified connection
  1900. Note:    send a TCP "RST" command if a stream connection is open
  1901. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=24h
  1902. --------N-611A-------------------------------
  1903. INT 61 - PC/TCP kernel v2.05+ - "net_write" - WRITE TO THE NETWORK
  1904.     AH = 1Ah
  1905.     BX = network descriptor
  1906.     CX = number of bytes to transmit (0000h allowed)
  1907.     DX = send options (see #1886)
  1908.     DS:SI -> data to be written
  1909. Return: CF clear if successful
  1910.         AX = number of bytes actually written
  1911.         DX = ???
  1912.     CF set on error
  1913.         AX = error code (see INT 61"PC/TCP")
  1914. Range:    INT 20h to INT E0h, selected by configuration
  1915. Notes:    the installation check consists of testing for the signature "TCPTSR"
  1916.       three bytes beyond the start of the interrupt handler
  1917. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Bh,INT 61/AH=1Ch
  1918. SeeAlso: INT 63/AH=19h"BW-TCP",INT 63/AH=1Bh"BW-TCP"
  1919.  
  1920. Bitfields for PC/TCP send options:
  1921. Bit(s)    Description    (Table 1886)
  1922.  0    signal "URG"ent data
  1923.  3    attempt rerouting on non-stream calls if first attempt fails
  1924.  4    send data with PUSH flag (no override of Nagle) (see option 0Ch)
  1925.  5    fail rather than truncating datagram
  1926.  6    fail rather than blocking
  1927.  7    broadcast packet
  1928. --------N-611B-------------------------------
  1929. INT 61 - PC/TCP kernel v2.05+ - "net_read" - READ FROM THE NETWORK
  1930.     AH = 1Bh
  1931.     BX = network descriptor
  1932.     CX = maximum number of bytes to read
  1933.     DX = receive options (see #1887)
  1934.     DS:SI -> buffer for data
  1935.     ES:DI -> "addr" structure (see #1885) for remote from which to read
  1936.         0000h:0000h for any
  1937. Return: CF clear if successful
  1938.         AX = number of bytes actually read
  1939.         DX = ???
  1940.     CF set on error
  1941.         AX = error code (see INT 61"PC/TCP")
  1942. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Ah,INT 61/AH=1Dh
  1943.  
  1944. Bitfields for PC/TCP receive options:
  1945. Bit(s)    Description    (Table 1887)
  1946.  1    do not remove data from queue, just copy it
  1947.  2    do not copy data, just remove it from queue
  1948.  5    fail if datagram would be truncated
  1949.  6    do not block, return error if no data available
  1950. Note:    special case for UDP: if both 1 and 2 set, return number of datagrams
  1951. --------N-611C-------------------------------
  1952. INT 61 - PC/TCP kernel v2.05+ - "net_writeto" - WRITE A DATAGRAM
  1953.     AH = 1Ch
  1954.     BX = network descriptor
  1955.     CX = number of bytes to transmit (0000h allowed)
  1956.     DX = send options (see #1886)
  1957.     DS:SI -> data to be written
  1958.     ES:DI -> "addr" structure (see #1885)
  1959. Return: CF clear if successful
  1960.         AX = number of bytes actually written
  1961.         DX = ???
  1962.     CF set on error
  1963.         AX = error code (see INT 61"PC/TCP")
  1964. Note:    this function differs from AH=1Ah in that the address and socket
  1965.       numbers can be overridden
  1966. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Ah,INT 61/AH=1Dh
  1967. SeeAlso: INT 63/AH=21h"BW-TCP"
  1968. --------N-611D-------------------------------
  1969. INT 61 - PC/TCP kernel v2.05+ - "net_readfrom" - READ A DATAGRAM
  1970.     AH = 1Dh
  1971.     BX = network descriptor
  1972.     CX = maximum number of bytes to read
  1973.     DX = receive options (see #1886)
  1974.     DS:SI -> buffer for received data
  1975.     ES:DI -> 9-byte buffer containing "addr" structure (see #1885)
  1976. Return: CF clear if successful
  1977.         AX = number of bytes read
  1978.         DX = ???
  1979.     CF set on error
  1980.         AX = error code (see INT 61"PC/TCP")
  1981. Notes:    this function can read from any host or a designated host depending
  1982.       on settings in the "addr" structure
  1983.     only for use with datagram or Raw descriptors
  1984. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Bh,INT 61/AH=1Ch
  1985. --------N-611E-------------------------------
  1986. INT 61 - PC/TCP kernel v2.05+ - "net_flush" - FLUSH PENDING DATA
  1987.     AH = 1Eh
  1988.     BX = network descriptor
  1989. Return: CF clear if successful
  1990.     CF set on error
  1991.         AX = error code (see INT 61"PC/TCP")
  1992. Range:    INT 20 to INT E0, selected by configuration
  1993. Notes:    bufferred data is transmitted immediately, overriding Nagle's algorithm
  1994.       if necessary
  1995.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1996. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1997. --------N-611F-------------------------------
  1998. INT 61 - PC/TCP kernel v2.05+ - "net_asynch" - SET UP ASYNCHRONOUS CALL-BACK
  1999.     AH = 1Fh
  2000.     BX = network descriptor
  2001.     CX = event type (see #1888)
  2002.     DS:SI -> event handler routine (see #1889)
  2003.     ES:DI = 32-bit hint passed to handler
  2004. Return: CF clear if successful
  2005.         DS:DX -> previous handler
  2006.     CF set on error
  2007.         AX = error code (see INT 61"PC/TCP")
  2008. Note:    ICMP messages do not trigger events on stream connections
  2009. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2010.  
  2011. (Table 1888)
  2012. Values for PC/TCP event type:
  2013.  00h    alarm
  2014.  01h    open (successfully opened stream connection)
  2015.  02h    receive (data available)
  2016.  03h    transmit (ACK received on stream connection)
  2017.  04h    transmit flush???
  2018.  05h    foreign close (remote host closed data connection)
  2019.  06h    close (local host closed connection and protocol is complete)
  2020.  07h    error (error code passed to handler as arg)
  2021.  
  2022. (Table 1889)
  2023. Values PC/TCP user event handler is called with:
  2024.     BX = network descriptor
  2025.     CX = event type (see #1888)
  2026.     DS:DX -> arg
  2027.     ES:DI = 32-bit hint value
  2028.     STACK:    small stack, possibly the DOS stack
  2029. --------N-6120-------------------------------
  2030. INT 61 - PC/TCP kernel v2.05+ - "set_option" - SET AN OPTION ON A DESCRIPTOR
  2031.     AH = 20h
  2032.     BX = network descriptor
  2033.     CX = length of buffer (usually 04h)
  2034.     DS:DX -> buffer containing option
  2035.     SI = (ignored by v2.2-)
  2036.     DI = option to set (see #1890)
  2037. Return: CF clear if successful
  2038.     CF set on error
  2039.         AX = error code (see INT 61"PC/TCP")
  2040. Note:    Beame&Whiteside's BWPCTCP shim only supports options 01h and 0Bh; all
  2041.       others return CF clear
  2042. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=21h
  2043.  
  2044. (Table 1890)
  2045. Values for PC/TCP option to get or set:
  2046.  01h    set non-blocking mode if non-zero
  2047.  02h    timeout of call in milliseconds
  2048.  03h    user-defined 4-byte magic cookie (not used by kernel)
  2049.  04h    TCP window or UDP buffer count (WORD, unsigned)
  2050.  06h    do TCP keep-alives if non-zero
  2051.  09h    (v2.1+) set IP precedence
  2052.  0Ah    (v2.1+) set IP type of service
  2053.  0Bh    use a privileged port if port = 0
  2054.  0Ch    turn off TCP PUSH bit and don't flush buffer every write (see AH=1Ah)
  2055. Note:    use "C" true or false values for boolean options
  2056. --------N-6121-------------------------------
  2057. INT 61 - PC/TCP kernel v2.05+ - "get_option" - GET OPTIONS APPLIED TO NET DESCR
  2058.     AH = 21h
  2059.     BX = network descriptor
  2060.     CX = length of buffer
  2061.     DS:DX -> buffer for return values
  2062.     SI = 0004h (ignored by v2.2-)
  2063.     DI = option (see #1890)
  2064. Return: CF clear if successful
  2065.         DS:DX -> value (usually 32 bits) returned by selected option
  2066.     CF set on error
  2067.         AX = error code (see INT 61"PC/TCP")
  2068. Note:    this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2069. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=20h
  2070. --------N-6122-------------------------------
  2071. INT 61 u - PC/TCP kernel v2.05+ - "net_getdesc" - ALLOCATE NETWORK DESCRIPTOR
  2072.     AH = 22h
  2073. Return: CF clear if successful
  2074.         AX = network descriptor
  2075.     CF set on error
  2076.         AX = error code (see INT 61"PC/TCP")
  2077. Note:    the descriptor will be an integer in the range 00h-1Fh, and a DOS call
  2078.       is made to allocate this as a file descriptor.  Hence a number may
  2079.       not refer to a PC/TCP network descriptor and a DOS file handle
  2080.       simultaneously.
  2081. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h,INT 61/AH=29h
  2082. --------N-6123-------------------------------
  2083. INT 61 - PC/TCP kernel v2.05+ - "net_listen" - LISTEN FOR INCOMING CONNECTIONS
  2084.     AH = 23h
  2085.     BX = network descriptor or FFFFh to allocate descriptor
  2086.     DX = type of service
  2087.     DS:SI -> "addr" structure (see #1885)
  2088. Return: CF clear if successful
  2089.         AX = network descriptor
  2090.     CF set on error
  2091.         AX = error code (see INT 61"PC/TCP")
  2092. Notes:    type of service and "addr" structure are as for AH=13h
  2093.     any of the address structure can be zero; normally local socket number
  2094.       is filled in prior to call
  2095. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h
  2096. SeeAlso: INT 63/AH=12h"BW-TCP"
  2097. --------N-6124-------------------------------
  2098. INT 61 - PC/TCP kernel v2.05+ - "net_abortall" - RESET ALL NETWORK CONNECTIONS
  2099.     AH = 24h
  2100. Return: always successful
  2101. Note:    performs "net_abort" (AH=19h) on all open non-global descriptors
  2102. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=19h
  2103. --------N-6125-------------------------------
  2104. INT 61 - PC/TCP kernel v2.05+ - "ad_res_name" - GET HOST NAME GIVEN ADDRESS
  2105.     AH = 25h
  2106.     DX,BX = IP address in network order
  2107.     CX = length of buffer for name
  2108.     DS:SI -> buffer for host name
  2109. Return: CF clear if successful
  2110.        buffer filled with ASCIZ host name
  2111.     CF set on error
  2112.         AX = error code (see INT 61"PC/TCP")
  2113. Note:    this function will use the host table and or DNS to resolve the
  2114.       address, depending on kernel configuration.  Use this call for the
  2115.       normal gethostbyaddr function.
  2116. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=26h,INT 61/AH=27h
  2117. --------N-6126-------------------------------
  2118. INT 61 - PC/TCP kernel v2.05+ - "ad_htable" - GET HOST NAME FROM LOCAL TABLE
  2119.     AH = 26h
  2120.     DX,BX = IP address in network order
  2121.     CX = length of buffer
  2122.     DS:SI -> buffer for host name
  2123. Return: CF clear if successful
  2124.         buffer filled with ASCIZ host name
  2125.     CF set on error
  2126.         AX = error code (see INT 61"PC/TCP")
  2127. Notes:    normally one would use AH=25h instead of this function
  2128.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2129. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=25h,INT 61/AH=27h
  2130. --------N-6127-------------------------------
  2131. INT 61 - PC/TCP kernel v2.05+ - "ad_domain" - GET HOST NAME FROM DNS
  2132.     AH = 27h
  2133.     DX,BX = IP address in network order
  2134.     CX = length of buffer
  2135.     DS:SI -> buffer for host name
  2136. Return: CF clear if successful
  2137.         buffer filled with ASCIZ host name
  2138.     CF set on error
  2139.         AX = error code (see INT 61"PC/TCP")
  2140. Note:    normally one would use AH=25h instead of this function
  2141. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=25h,INT 61/AH=26h
  2142. --------N-6128-------------------------------
  2143. INT 61 - PC/TCP kernel v2.05+ - "net_swap" - EXCHANGE TWO NETWORK DESCRIPTORS
  2144.     AH = 28h
  2145.     BX = network descriptor 1
  2146.     CX = network descriptor 2
  2147. Return: CF clear if successful
  2148.     CF set on error
  2149.         AX = error code (see INT 61"PC/TCP")
  2150. Note:    the two descriptors will exchange places; both must be local or both
  2151.       global
  2152. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2153. --------N-6129-------------------------------
  2154. INT 61 - PC/TCP kernel v2.05+ - "net_getglobdesc" - ALLOCATE GLOBAL DESCRIPTOR
  2155.     AH = 29h
  2156. Return: CF clear if successful
  2157.         AX = network descriptor
  2158.     CF set on error
  2159.         AX = error code (see INT 61"PC/TCP")
  2160. Note:    use this function rather than AH=22h to avoid a DOS call by the PC/TCP
  2161.       kernel; the returned descriptor will be >= 40h and cannot be used
  2162.       with "net_select" (AH=0Eh)
  2163. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=07h"PC/TCP"
  2164. SeeAlso: INT 61/AH=22h
  2165. --------N-612A-------------------------------
  2166. INT 61 - PC/TCP kernel v2.05+ - GET CONFIGURATION INFORMATION
  2167.     AH = 2Ah
  2168.     DS:SI -> 26-byte buffer for configuration information (see #1891)
  2169. Return: CF clear
  2170.     AX = 0000h
  2171.     buffer filled
  2172. Notes:    size of buffer may vary with kernel version; 26 bytes is the size for
  2173.       versions 2.05 through 2.2
  2174.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2175. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2176.  
  2177. Format of PC/TCP configuration information:
  2178. Offset    Size    Description    (Table 1891)
  2179.  00h    BYTE    maximum TCP connections available
  2180.  01h    BYTE    maximum UDP connections available
  2181.  02h    BYTE    maximum IP connections available
  2182.  03h    BYTE    maximum Raw Net connections available
  2183.  04h    BYTE    number of TCP connections currently in use
  2184.  05h    BYTE    number of UDP connections currently in use
  2185.  06h    BYTE    number of IP connections currently in use
  2186.  07h    BYTE    number of Raw Net connections currently in use
  2187.  08h    WORD    number of local network descriptors active
  2188.  0Ah    WORD    number of global network descriptors active
  2189.  0Ch    BYTE    maximum header size on network
  2190.  0Dh    BYTE    maximum trailer size on network
  2191.  0Eh    WORD    size of large packet buffer
  2192.  10h    WORD    number of network interfaces attached
  2193.  12h    DWORD    milliseconds since kernel started
  2194.  16h    DWORD    IP broadcast address
  2195. --------N-612B-------------------------------
  2196. INT 61 - PC/TCP kernel v2.02+ - "net_alarm" - SET TIMED ASYNCHRONOUS EVENT
  2197.     AH = 2Bh
  2198.     BX = network descriptor
  2199.     CX,DX = time before alarm in milliseconds
  2200.     DS:SI -> handler which will receive call (see INT 61/AH=1Fh)
  2201.     ES:DI = 32-bit cookie passed to handler
  2202. Return: CF clear if successful
  2203.     CF set on error
  2204.         AX = error code (see INT 61"PC/TCP")
  2205. Notes:    this function will cause a NET_AS_ALARM to be generated; it is intended
  2206.       for TSRs, etc. to regain control periodically
  2207.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2208. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2209. --------N-6130-------------------------------
  2210. INT 61 - PC/TCP kernel v2.05+ - "icmp_ping" - SEND ICMP ECHO REQUEST (PING)
  2211.     AH = 30h
  2212.     BX,DX = IP address of host
  2213.     CX = length of data to send
  2214. Return: CF clear if successful (i.e. reply received)
  2215.     CF set on error
  2216.         AX = error code (see INT 61"PC/TCP")
  2217. Note:    this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2218. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2219. --------N-61---------------------------------
  2220. INT 61 u - PC/TCP kernel v2.05 - NOP for SLIP kernel
  2221.     AH = function
  2222.         31h "net_add_route"
  2223.         32h "net_del_route"
  2224.         33h "net_dump_routes"
  2225. Notes:    these functions are described as "unused" in the v2.2 documentation
  2226.     router configuration can be altered using INT 61/AH=01h
  2227.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2228. --------N-6134-------------------------------
  2229. INT 61 U - PC/TCP kernel v2.1+ - "icmp_destun" - ???
  2230.     AH = 34h
  2231.     ???
  2232. Return: ???
  2233. Notes:    this function is described as "reserved" in the v2.2 documentation
  2234.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2235. --------N-6150-------------------------------
  2236. INT 61 - PC/TCP kernel v2.05+ - "nm_prs_addr" - TRANSLATE NUMERICAL IP ADDRESS
  2237.     AH = 50h
  2238.     DS:DX -> ASCIZ IP address as "dotted quad" (max 127 chars)
  2239. Return: CF clear if successful
  2240.         DX:AX -> IP address
  2241.     CF set on error
  2242.         AX = error code (see INT 61"PC/TCP")
  2243. Range:    INT 20 to INT E0, selected by configuration
  2244. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=54h
  2245. --------N-6151-------------------------------
  2246. INT 61 - PC/TCP kernel v2.05+ - "nm_htable" - RESOLVE NAME USING HOST TABLE
  2247.     AH = 51h
  2248.     CX = size of destination buffer
  2249.     DS:DX -> ASCIZ host name (max 127 chars)
  2250.     ES:DI -> destination buffer or 0000h:0000h
  2251. Return: CF clear if successful
  2252.         DX:AX -> IP address of host
  2253.         destination buffer filled with canonical host name
  2254.     CF set on error
  2255.         AX = error code (see INT 61"PC/TCP")
  2256. Note:    this function calls DOS, and can fail if the DOS call fails
  2257. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=54h
  2258. --------N-6152-------------------------------
  2259. INT 61 - PC/TCP kernel v2.05+ - "nm_domain" - RESOLVE NAME USING DNS
  2260.     AH = 52h
  2261.     CX = size of destination buffer
  2262.     DS:DX -> ASCIZ host name (max 127 chars)
  2263.     ES:DI -> destination buffer or 0000h:0000h
  2264. Return: CF clear if successful
  2265.         DX:AX -> IP address of host
  2266.         destination buffer filled with canonical host name
  2267.     CF set on error
  2268.         AX = error code (see INT 61"PC/TCP")
  2269. Note:    this function will poll all configured domain name servers if necessary
  2270. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=54h
  2271. --------N-6153-------------------------------
  2272. INT 61 - PC/TCP kernel v2.05- - "nm_ien116" - RESOLVE HOST NAME USING IEN116
  2273.     AH = 53h
  2274.     DS:DX -> ASCIZ name to be resolved (max 127 chars)
  2275. Return: CF clear if successful
  2276.         DX:AX -> IP address of host
  2277.     CF set on error
  2278.         AX = error code (see INT 61"PC/TCP")
  2279. Range:    INT 20 to INT E0, selected by configuration
  2280. Note:    this function is not supported by v2.10+
  2281. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=54h
  2282. --------N-6154-------------------------------
  2283. INT 61 - PC/TCP kernel v2.05+ - "nm_res_name" - RESOLVE HOST NAME
  2284.     AH = 54h
  2285.     CX = size of destination buffer
  2286.     DS:DX -> ASCIZ host name (max 127 chars)
  2287.     ES:DI -> destination buffer or 0000h:0000h
  2288. Return: CF clear if successful
  2289.         DX:AX -> IP address of host
  2290.         destination buffer filled with canonical host name
  2291.     CF set on error
  2292.         AX = error code (see INT 61"PC/TCP")
  2293. Note:    this function uses all configured methods in turn to resolve the
  2294.       name (numerical, then host table, then DNS, then IEN116)
  2295. BUG:    the SLIP kernel for v2.05 bounds-checks the wrong register, so values
  2296.       greater than 54h in AH may crash the system.    Other kernels may have
  2297.       this bug as well; it has been fixed in the v2.2 SLIPDRV kernel.
  2298. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=50h,INT 61/AH=51h
  2299. SeeAlso: INT 61/AH=52h,INT 61/AH=53h
  2300. --------*-62---------------------------------
  2301. INT 62 - reserved for user interrupt
  2302. --------d-62---------------------------------
  2303. INT 62 - Adaptec and OMTI controllers - DRIVE 0 DATA
  2304. Notes:    this vector stores the third four bytes of the parameter table for
  2305.       hard disk 0
  2306. SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 63"Adaptec"
  2307. --------b-62---------------------------------
  2308. INT 62 - HP 95LX - USED BY CALCULATOR
  2309. SeeAlso: INT 60"HP 95LX"
  2310. ----------62---------------------------------
  2311. INT 62 - MS SQL Server/Sybase DBLIBRARY interface - ???
  2312.     AH = function (00h to 07h)
  2313.     CX = FFFEh
  2314.     DX = FFFFh
  2315.     ???
  2316. Return: ???
  2317. Note:    the installation check consists of testing for the string "DBLIBRARY"
  2318.       2 bytes past the interrupt handler
  2319. SeeAlso: AH=08h"SQL"
  2320. Index:    installation check;MS SQL Server|installation check;Sybase DBLIBRARY
  2321. ----------62---------------------------------
  2322. INT 62 - MPAUSE - ???
  2323.     details not yet avialable
  2324. Program: MPAUSE is a program by Manfred Michael which appeared in the German
  2325.      _EGA-Handbuch_ from  m&t-Verlag
  2326. --------N-6200-------------------------------
  2327. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - GET PHYSICAL HARDWARE ADDRESS
  2328.     AH = 00h
  2329.     DS:DX -> 6-byte buffer for address
  2330. Return: AX = length of hardware address???
  2331. Range:    INT 60 to INT 65 ???
  2332. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  2333.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  2334.       consecutive interrupt (64h by default) if it is loaded
  2335. SeeAlso: AH=01h"ETHDEV",AH=04h"ETHDEV",AH=09h"ETHDEV",AH=0Eh"ETHDEV"
  2336. SeeAlso: AH=14h"ETHDEV",AH=18h"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP"
  2337. SeeAlso: INT 63"BW-TCP",INT 64"BW-NFS"
  2338. --------V-620000-----------------------------
  2339. INT 62 u - FGDRIVER v3.03 - "FG_ALLOCATE" - CREATE VIRTUAL VIDEO PAGE
  2340.     AX = 0000h
  2341.     BX = page number (0000h-003Fh)
  2342. Return: AX = status (0000h,0001h,0007h,0008h) (see #1892)
  2343. Program: FGDRIVER is the external video driver for the shareware
  2344.       Fastgraph/Light by Ted Gruber Software
  2345. Notes:    For FGDRIVER v1.10, this function was "FG_GETMODE" (see AX=003Fh);
  2346.       "FG_ALLOCATE" was AX=0042h
  2347.     The amount of memory required by the virtual video page depends on the
  2348.       current video mode
  2349.     The installation check consists of testing for the signature "FG" ten
  2350.       bytes beyond the start of the interrupt handler
  2351. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=002Eh
  2352. Index:    installation check;Fastgraph/Light
  2353.  
  2354. (Table 1892)
  2355. Values for FGDRIVER status:
  2356.  0000h    successful
  2357.  0001h    specified page is a physical or logical page
  2358.  0007h    virtual page created/released, but memory control blocks corrupted
  2359.  0008h    not enough memory
  2360.  0009h    attempt to free a page which was never created
  2361.  FFFCh    insufficient memory
  2362.  FFFDh    page already created, or exists as physical or virtual page
  2363.  FFFEh    invalid page number
  2364.  FFFFh    memory manager not initialized
  2365. --------V-620001-----------------------------
  2366. INT 62 u - FGDRIVER v3.03 - "FG_ALLOCCMS" - CREATE LOGICAL VIDEO PAGE (CONVMEM)
  2367.     AX = 0001h
  2368.     BX = page number (0001h-003Fh)
  2369. Return: AX = status (0000h,FFFCh,FFFDh,FFFEh) (see #1892)
  2370. Notes:    For FGDRIVER v1.10, this function was "FG_SETMODE" (see AX=0093h);
  2371.       "FG_ALLOCCMS" was AX=009Dh
  2372.     The only operation which is allowed on logical pages is "FG_COPYPAGE"
  2373.       (see AX=0012h)
  2374. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0012h,AX=002Eh
  2375. --------V-620002-----------------------------
  2376. INT 62 u - FGDRIVER v3.03 - "FG_ALLOCEMS" - CREATE LOGICAL VIDEO PAGE (EMS)
  2377.     AX = 0002h
  2378.     BX = page number (0001h-003Fh)
  2379. Return: AX = status (0000h,FFFCh,FFFDh,FFFEh) (see #1892)
  2380. Notes:    For FGDRIVER v1.10, this function was "FG_TESTMODE" (see AX=00A7h);
  2381.       "FG_ALLOCEMS" was AX=009Eh
  2382.     You must first call "FG_INITEMS" (see AX=004Ch) before using this
  2383.       function
  2384.     The only operation which is allowed on logical pages is "FG_COPYPAGE"
  2385.       (see AX=0012h)
  2386. SeeAlso: AX=0000h,AX=0001h,AX=0003h,AX=0012h,AX=002Eh,AX=004Ch
  2387. --------V-620003-----------------------------
  2388. INT 62 u - FGDRIVER v3.03 - "FG_ALLOCXMS" - CREATE LOGICAL VIDEO PAGE (XMS)
  2389.     AX = 0003h
  2390.     BX = page number (0001h-003Fh)
  2391. Return: AX = status (0000h,FFFCh,FFFDh,FFFEh) (see #1892)
  2392. Notes:    For FGDRIVER v1.10, this function was "FG_BESTMODE" (see AX=0005h),
  2393.       and "FG_ALLOCXMS" was AX=009Fh
  2394.     You must first call "FG_INITXMS" (see AX=004Eh) before using this
  2395.       function
  2396.     The only operation which is allowed on logical pages is "FG_COPYPAGE"
  2397.       (see AX=0012h)
  2398. SeeAlso: AX=0000h,AX=0001h,AX=0002h,AX=0012h,AX=002Eh,AX=004Eh
  2399. --------V-620004-----------------------------
  2400. INT 62 u - FGDRIVER v1.10,3.03 - "FG_AUTOMODE" - GET VIDEO MODE W/MOST FEATURES
  2401.     AX = 0004h
  2402. Return: AX = proposed video mode number (see #1906 at AX=0093h)
  2403. Program: FGDRIVER is the external video driver for the shareware
  2404.       Fastgraph/Light by Ted Gruber Software
  2405. SeeAlso: AX=0005h,AX=003Fh,AX=0093h,AX=00A1h,AX=00A7h
  2406. --------V-620005-----------------------------
  2407. INT 62 u - FGDRIVER v3.03 - "FG_BESTMODE" - GET BEST VIDEO MODE GIVEN RESOLUTN
  2408.     AX = 0005h
  2409.     BX = horizontal resolution
  2410.     CX = vertical resolution
  2411.     DX = number of video pages required (both physical and virtual)
  2412. Return: AX = proposed video mode number or FFFFh if no matching video mode
  2413. Notes:    For FGDRIVER v1.10, this function was "FG_EGACHECK" (see AX=0023h);
  2414.        "FG_BESTMODE" was AX=0003h
  2415.     You must first call "FG_SVGAINIT" (see AX=00A1h) to get SVGA video
  2416.       modes
  2417. SeeAlso: AX=0004h,AX=003Fh,AX=0093h,AX=00A1h,AX=00A7h
  2418. --------V-620006-----------------------------
  2419. INT 62 u - FGDRIVER v3.03 - "FG_BOX" - DRAW UNFILLED RECTANGLE
  2420.     AX = 0006h
  2421.     BX = left column
  2422.     CX = right column
  2423.     DX = top row
  2424.     SI = bottom row
  2425. Notes:    For FGDRIVER v1.10, this function was "FG_RESET" (see AX=0081h);
  2426.       "FG_BOX" was AX=00A2h
  2427.     The rectangle is drawn in screen space, respecting the clipping region,
  2428.       with edges of the width specified with "FG_BOXDEPTH" (see AX=0007h)
  2429.       (default = 1 is set by "FG_SETMODE")
  2430.     This function has no effect in text modes
  2431. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,AX=0014h,AX=001Bh,AX=0024h,AX=0076h
  2432. --------V-620007-----------------------------
  2433. INT 62 u - FGDRIVER v3.03 - "FG_BOXDEPTH" - SET RECTANGLE BORDER WIDTH
  2434.     AX = 0007h
  2435.     BX = width of left and right edges in pixels (> 0)
  2436.     CX = width of top and bottom edges in pixels (> 0)
  2437. Note:    For FGDRIVER v1.10, this function was "FG_CURSOR" (see AX=0013h);
  2438.       "FG_BOXDEPTH" was AX=00A3h
  2439. SeeAlso: AX=0006h,AX=0008h
  2440. --------V-620008-----------------------------
  2441. INT 62 u - FGDRIVER v3.03 - "FG_BOXX" - XOR HOLLOW RECTANGLE
  2442.     AX = 0008h
  2443.     BX = left column
  2444.     CX = right column
  2445.     DX = top row
  2446.     SI = bottom row
  2447. Notes:    For FGDRIVER v1.10, this function was unused and "FG_BOXX" did not
  2448.       exist yet
  2449.     The rectangle is XORed into screen space, respecting the clipping
  2450.       region, with edges of the width specified with "FG_BOXDEPTH"
  2451.       (see AX=0007h) (default = 1 is set by "FG_SETMODE")
  2452.     This function has no effect in text modes
  2453. SeeAlso: AX=0006h,AX=0007h,AX=001Fh,AX=0020h,AX=0077h
  2454. --------V-620009-----------------------------
  2455. INT 62 u - FGDRIVER v3.03 - "FG_BUTTON" - GET JOYSTICK BUTTON STATE
  2456.     AX = 0009h
  2457.     BX = joystick number (0001h or 0002h)
  2458. Return: AX = button states
  2459.         bit 0: top button pressed
  2460.         bit 1: bottom button pressed
  2461. Note:    For FGDRIVER v1.10, this function was unused; "FG_BUTTON" was AX=0078h
  2462. SeeAlso: AX=0044h,AX=0046h,AX=004Dh,AX=0050h,AX=0061h
  2463. --------V-62000A-----------------------------
  2464. INT 62 u - FGDRIVER v3.03 - "FG_CAPSLOCK" - GET STATE OF CAPSLOCK KEY
  2465.     AX = 000Ah
  2466. Return: AX = CapsLock state (0000h off, 0001h on)
  2467. Note:    For FGDRIVER v1.10, this function was "FG_GETMAXX" (see AX=003Dh);
  2468.       "FG_CAPSLOCK" was AX=0070h
  2469. SeeAlso: AX=006Ch,AX=0088h,AX=008Bh,AX=0094h
  2470. --------V-62000B-----------------------------
  2471. INT 62 u - FGDRIVER v3.03 - "FG_CHGATTR" - APPLY CURRENT TEXT ATTRIB TO CHARS
  2472.     AX = 000Bh
  2473.     BX = number of characters to recolor
  2474. Notes:    For FGDRIVER v1.10, this function was "FG_GETMAXY" (see AX=003Eh);
  2475.       "FG_CHGATTR" was AX=0035h
  2476.     This call is ignored in graphics modes
  2477.     Starting at the current text cursor position, the specified number of
  2478.       characters have their attributes to the current text attribute
  2479. SeeAlso: AX=000Ch,AX=0030h,AX=008Ah
  2480. --------V-62000C-----------------------------
  2481. INT 62 u - FGDRIVER v3.03 - "FG_CHGTEXT" - DISPLAY STRING AT CURSOR POSITION
  2482.     AX = 000Ch
  2483.     CX = length of string
  2484.     ES:BX -> string to be displayed
  2485. Return: text cursor updated
  2486. Notes:    For FGDRIVER v1.10, this function was "FG_XALPHA" (see AX=00B0h);
  2487.       "FG_CHGTEXT" was AX=0036h
  2488.     This call is ignored in graphics modes
  2489. SeeAlso: AX=000Bh,AX=007Ch
  2490. --------V-62000D-----------------------------
  2491. INT 62 u - FGDRIVER v3.03 - "FG_CIRCLE" - DRAW UNFILLED CIRCLE
  2492.     AX = 000Dh
  2493.     BX = radius in horizontal screen space units (> 0)
  2494. Notes:    For FGDRIVER v1.10, this function was "FG_YALPHA" (see AX=00B2h);
  2495.       "FG_CIRCLE" was AX=0030h
  2496.     The circle is drawn in screen space, centered at the current graphics
  2497.       cursor position
  2498.     This call is ignored in text modes
  2499. SeeAlso: AX=0006h,AX=0008h,AX=000Eh,AX=0024h,AX=0079h
  2500. --------V-62000E-----------------------------
  2501. INT 62 u - FGDRIVER v3.03 - "FG_CIRCLEF" - DRAW FILLED CIRCLE
  2502.     AX = 000Eh
  2503.     BX = radius in horizontal screen space units (> 0)
  2504. Notes:    For FGDRIVER v1.10, this function was "FG_XCONVERT" (see AX=00B1h);
  2505.       "FG_CIRCLEF" did not exist yet
  2506. SeeAlso: AX=0008h,AX=000Dh,AX=0025h,AX=0078h
  2507. --------V-62000F-----------------------------
  2508. INT 62 u - FGDRIVER v3.03 - "FG_CLIPMASK" - DISPLAY CLIPPED IMAGE (MASKING MAP)
  2509.     AX = 000Fh
  2510.     ES:BX -> array containing image stored as a masking map (see #1893)
  2511.     CX = number of pixel runs in masking map
  2512.     DX = width of masking map in pixels
  2513. Notes:    For FGDRIVER v1.10, this function was "FG_YCONVERT" (see AX=00B3h);
  2514.        "FG_CLIPMASK" was AX=0052h
  2515.     This call is ignored in text modes and in native EGA and VGA graphics
  2516.       modes
  2517.     The image is drawn with its lower left corner at the current graphics
  2518.       cursor position
  2519. SeeAlso: AX=0010h,AX=001Dh,AX=002Ah,AX=0086h,AX=008Ch,AX=00A5h
  2520. --------V-620010-----------------------------
  2521. INT 62 u - FGDRIVER v3.03 - "FG_CLPIMAGE" - DISPLAY CLIPPED IMAGE (BITMAP)
  2522.     AX = 0010h
  2523.     ES:BX -> mode-specific bitmap
  2524.     CX = width of bit map in bytes
  2525.     DX = height of bit map in pixel rows
  2526. Notes:    For FGDRIVER v1.10, this function was "FG_GETLINES" (see AX=003Bh);
  2527.       "FG_CLPIMAGE" was AX=004Ah
  2528.     This call is ignored in text modes
  2529.     The image is drawn with its lower left corner at the current graphics
  2530.       cursor position
  2531.     The current clipping region is used, extended to a byte boundary
  2532. SeeAlso: AX=000Fh,AX=0022h,AX=002Ch,AX=0038h,AX=0085h,AX=008Ch,AX=009Ah
  2533. --------V-620011-----------------------------
  2534. INT 62 u - FGDRIVER v3.03 - "FG_CLPRECT" - DRAW FILLED RECTANGLE IN SCREEN SPCE
  2535.     AX = 0011h
  2536.     BX = screen space column of left edge
  2537.     CX = screen space column of right edge
  2538.     DX = screen space row of top edge
  2539.     SI = screen space row of bottom edge
  2540. Notes:    For FGDRIVER v1.10, this function was "FG_SETLINES" (see AX=0092h);
  2541.       "FG_CLPRECT" was AX=002Bh
  2542.     This call is ignored in text modes
  2543. SeeAlso: AX=0006h,AX=000Fh,AX=0010h,AX=0021h,AX=0080h,AX=008Ch
  2544. --------V-620012-----------------------------
  2545. INT 62 u - FGDRIVER v3.03 - "FG_COPYPAGE" - TRANSFER VIDEO PAGE CONTENTS
  2546.     AX = 0012h
  2547.     BX = source page number (0000h-003Fh)
  2548.     CX = destination page number (0000h-003Fh)
  2549. Notes:    For FGDRIVER v1.10, this function was unused;"FG_COPYPAGE" was AX=005Fh
  2550.     If both source and destination pages are logical pages, they must both
  2551.       be located in the same type (conventional, EMS, XMS) of memory
  2552. SeeAlso: AX=0083h,AX=0087h,AX=00A6h,AX=00A9h
  2553. --------V-620013-----------------------------
  2554. INT 62 u - FGDRIVER v3.03 - "FG_CURSOR" - SPECIFY WHETHER TEXT CURSR IS VISIBLE
  2555.     AX = 0013h
  2556.     BX = new state (0000h invisible, 0001h visible)
  2557. Notes:    For FGDRIVER v1.10, this function was unused; "FG_CURSOR" was AX=0007h
  2558.     This call is ignored in text modes
  2559. SeeAlso: AX=000Ch,AX=0045h,AX=0047h,AX=0055h,AX=005Fh,AX=0063h,AX=0068h
  2560. SeeAlso: AX=00AFh
  2561. --------V-620014-----------------------------
  2562. INT 62 u - FGDRIVER v3.03 - "FG_DASH" - DRAW DASHED LINE TO ABSOLUTE POSITION
  2563.     AX = 0014h
  2564.     BX = endpoint column
  2565.     CX = endpoint row
  2566.     DX = dash pattern (set bits cause drawn pixels)
  2567. Notes:    For FGDRIVER v1.10, this function was "FG_DEFCOLOR" (see AX=0016h);
  2568.       "FG_DASH" was AX=0027h
  2569.     This call is ignored in text modes
  2570.     The starting point is the current graphics cursor position; the cursor
  2571.       position is updated
  2572. SeeAlso: AX=0015h,AX=001Bh,AX=0076h
  2573. --------V-620015-----------------------------
  2574. INT 62 u - FGDRIVER v3.03 - "FG_DASHREL" - DRAW DASHED LINE TO RELATVE POSITION
  2575.     AX = 0015h
  2576.     BX = endpoint column offset
  2577.     CX = endpoint row offset
  2578.     DX = dash pattern (set bits cause drawn pixels)
  2579. Notes:    For FGDRIVER v1.10, this function was "FG_GETCOLOR" (see AX=0034h);
  2580.       "FG_DASHREL" was AX=0028h
  2581.     This call is ignored in text modes
  2582.     The starting point is the current graphics cursor position; the cursor
  2583.       position is updated
  2584. SeeAlso: AX=0014h,AX=001Ch,AX=0076h
  2585. --------V-620016-----------------------------
  2586. INT 62 u - FGDRIVER v3.03 - "FG_DEFCOLOR" - ASSIGN COLOR VALUE TO COLOR INDEX
  2587.     AX = 0016h
  2588.     BX = color index (0000h-00FFh)
  2589.     CX = new color value (0 to maximum color value for current video mode)
  2590. Notes:    For FGDRIVER v1.10, this function was "FG_GETINDEX" (see AX=0039h);
  2591.       "FG_DEFCOLOR" was AX=0014h
  2592.     This call is ignored in text modes and 256-color graphics modes
  2593. SeeAlso: AX=0034h,AX=0039h,AX=008Dh
  2594. --------V-620017-----------------------------
  2595. INT 62 u - FGDRIVER v3.03 - "FG_DEFPAGES" - DEF SRC/DEST PAGES FOR BLOCK XFERS
  2596.     AX = 0017h
  2597.     BX = source page
  2598.     CX = destination page
  2599. Desc:    specify the source and destination SVGA banks for block transfers on
  2600.       extended video pages
  2601. Notes:    For FGDRIVER v1.10, this function was "FG_PALETTE" (see AX=006Fh);
  2602.       "FG_DEFPAGES" did not exist yet
  2603.     This function is ignored if the video controller does not support
  2604.       extended pages or the current video mode does not allow them
  2605. SeeAlso: AX=0012h,AX=00A9h
  2606. --------V-620018-----------------------------
  2607. INT 62 u - FGDRIVER v3.03 - "FG_DISPFILE" - DISPLAY STORED IMAGE
  2608.     AX = 0018h
  2609.     ES:BX -> ASCIZ filename
  2610.     CX = image width in pixels (> 0)
  2611.     DX = image format
  2612.         0000h Fastgraph standard pixel run format
  2613.         0001h packed pixel run format
  2614. Notes:    For FGDRIVER v1.10, this function was "FG_PALETTES" (see AX=0070h);
  2615.       "FG_DISPFILE" was AX=004Fh
  2616.     This call is ignored in text modes
  2617.     The image is displayed with its lower left corner at the current
  2618.       graphics cursor position
  2619. SeeAlso: AX=0019h,AX=001Ah,AX=009Ah,AX=009Bh,AX=009Ch
  2620. --------V-620019-----------------------------
  2621. INT 62 u - FGDRIVER v3.03 - "FG_DISPLAY" - DISPLAY IMAGE (STD PIXEL RUN FORMAT)
  2622.     AX = 0019h
  2623.     ES:BX -> pixel run map (pairs of bytes: color index, count)
  2624.     CX = number of pixel runs to display
  2625.     DX = width of image in pixels (> 0)
  2626. Notes:    For FGDRIVER v1.10, this function was "FG_SETATTR" (see AX=008Ah);
  2627.       "FG_DISPLAY" was AX=004Dh
  2628.     This call is ignored in text modes
  2629.     The image is displayed with its lower left corner at the current
  2630.       graphics cursor position
  2631. SeeAlso: AX=0018h,AX=001Ah,AX=009Ah,AX=009Bh,AX=009Ch
  2632. --------V-62001A-----------------------------
  2633. INT 62 u - FGDRIVER v3.03 - "FG_DISPLAYP" - DISPLAY IMAGE (PACKED PIXEL RUNS)
  2634.     AX = 001Ah
  2635.     ES:BX -> pixel run map (trios of bytes: colors, count1, count2; colors
  2636.           contains the color for the first run in its high nybble and
  2637.           the color for the second run in its low nybble)
  2638.     CX = number of pixel runs to display
  2639.     DX = width of image in pixels (> 0)
  2640. Notes:    For FGDRIVER v1.10, this function was "FG_SETCOLOR" (see AX=008Dh);
  2641.       "FG_DISPLAYP" was AX=004Eh
  2642.     This call is ignored in text modes
  2643.     The image is displayed with its lower left corner at the current
  2644.       graphics cursor position
  2645. SeeAlso: AX=0018h,AX=0019h,AX=009Ah,AX=009Bh,AX=009Ch
  2646. --------V-62001B-----------------------------
  2647. INT 62 u - FGDRIVER v3.03 - "FG_DRAW" - DRAW SOLID LINE TO ABSOLUTE POSITION
  2648.     AX = 001Bh
  2649.     BX = endpoint column
  2650.     CX = endpoint row
  2651. Notes:    For FGDRIVER v1.10, this function was "FG_SETRGB" (see AX=0096h);
  2652.       "FG_DRAW" was AX=0025h
  2653.     This call is ignored in text modes
  2654.     The starting point is the current graphics cursor position; the cursor
  2655.       position is updated
  2656. SeeAlso: AX=0014h,AX=001Eh,AX=001Fh,AX=0024h,AX=0076h,AX=0077h
  2657. --------V-62001C-----------------------------
  2658. INT 62 u - FGDRIVER v3.03 - "FG_DRAWMAP" - DISPLAY MODE-INDEPENDENT BIT MAP
  2659.     AX = 001Ch
  2660.     ES:BX -> bitmap (each set bit is pixel drawn in current color)
  2661.     CX = width of bitmap in bytes
  2662.     DX = height of bitmap in pixel rows
  2663. Note:    For FGDRIVER v1.10, this function was "FG_GETRGB" (see AX=0042h);
  2664.       "FG_DRAWMAP" was AX=0047h
  2665. SeeAlso: AX=0010h,AX=0022h,AX=002Ch,AX=0038h,AX=007Eh,AX=0085h
  2666. --------V-62001D-----------------------------
  2667. INT 62 u - FGDRIVER v3.03 - "FG_DRAWMASK" - DISPLAY IMAGE (MASKING MAP)
  2668.     AX = 001Dh
  2669.     ES:BX -> array containing image stored as a masking map (see #1893)
  2670.     CX = number of pixel runs in masking map
  2671.     DX = width of masking map in pixels
  2672. Notes:    For FGDRIVER v1.10, this function was "FG_MAPRGB" (see AX=005Ah);
  2673.       "FG_DRAWMASK" was AX=0051h
  2674.     This call is ignored in text modes and in native EGA and VGA graphics
  2675.       modes
  2676.     The image is drawn with its lower left corner at the current graphics
  2677.       cursor position
  2678. SeeAlso: AX=000Fh,AX=001Dh,AX=0086h,AX=008Ch
  2679.  
  2680. Format of FGDRIVER masking map:
  2681. Offset    Size    Description    (Table 1893)
  2682.  00h    BYTE    length of first "protect" run (pixels remain unchanged)
  2683.  01h    BYTE    length of first "zero" run (pixels set to background color)
  2684.  02h    BYTE    length of second "protect" run
  2685.  03h    BYTE    length of second "zero" run
  2686.     ...
  2687. --------V-62001E-----------------------------
  2688. INT 62 u - FGDRIVER v3.03 - "FG_DRAWREL" - DRAW SOLID LINE TO RELATIVE POSITION
  2689.     AX = 001Eh
  2690.     BX = endpoint column offset
  2691.     CX = endpoint row offset
  2692. Notes:    For FGDRIVER v1.10, this function was "FG_ERASE" (see AX=0026h);
  2693.       "FG_DRAWREL" was AX=0026h
  2694.     This call is ignored in text modes
  2695.     The starting point is the current graphics cursor position; the cursor
  2696.       position is updated
  2697. SeeAlso: AX=0006h,AX=000Dh,AX=001Bh,AX=001Fh,AX=0024h,AX=0076h
  2698. --------V-62001F-----------------------------
  2699. INT 62 u - FGDRIVER v3.03 - "FG_DRAWRELX" - XOR SOLID LINE TO RELATIVE POSITION
  2700.     AX = 001Fh
  2701.     BX = endpoint column offset
  2702.     CX = endpoint row offset
  2703. Desc:    draw a solid line, XORing each pixel onto the screen
  2704. Notes:    For FGDRIVER v1.10, this function was "FG_POINT" (see AX=0076h);
  2705.       "FG_DRAWRELX" did not exist yet
  2706.     This call is ignored in text modes
  2707.     The starting point is the current graphics cursor position; the cursor
  2708.       position is updated
  2709. SeeAlso: AX=0006h,AX=000Dh,AX=001Bh,AX=001Eh,AX=0024h,AX=0077h
  2710. --------V-620020-----------------------------
  2711. INT 62 u - FGDRIVER v3.03 - "FG_DRAWX" - XOR SOLID LINE TO ABSOLUTE POSITION
  2712.     AX = 0020h
  2713.     BX = endpoint column
  2714.     CX = endpoint row
  2715. Desc:    draw a solid line, XORing each pixel onto the screen
  2716. Notes:    For FGDRIVER v1.10, this function was "FG_GETPIXEL" (see AX=0041h);
  2717.       "FG_DRAWX" did not exist yet
  2718.     This call is ignored in text modes
  2719.     The starting point is the current graphics cursor position; the cursor
  2720.       position is updated
  2721. SeeAlso: AX=001Bh,AX=001Fh,AX=0076h
  2722. --------V-620021-----------------------------
  2723. INT 62 u - FGDRIVER v3.03 - "FG_DRECT" - DRAW DITHERED RECTANGLE IN SCRN SPACE
  2724.     AX = 0021h
  2725.     BX = screen space column of left edge
  2726.     CX = screen space column of right edge
  2727.     DX = screen space row of top edge
  2728.     SI = screen space row of bottom edge
  2729.     ES:DI -> dithering matrix (video-mode dependent)
  2730. Notes:    For FGDRIVER v1.10, this function was "FG_GETXPOS" (see AX=0045h);
  2731.       "FG_DRECT" was AX=002Ch
  2732.     This call is ignored in text modes
  2733. SeeAlso: AX=0006h,AX=0008h,AX=0011h,AX=0031h,AX=0072h,AX=0080h
  2734. --------V-620022-----------------------------
  2735. INT 62 u - FGDRIVER v3.03 - "FG_DRWIMAGE" - DISPLAY BITMAPPED IMAGE
  2736.     AX = 0022h
  2737.     ES:BX -> video mode-specific bitmap
  2738.     CX = width of bitmap in bytes
  2739.     DX = height of bitmap in pixel rows
  2740. Notes:    For FGDRIVER v1.10, this function was "FG_GETYPOS" (see AX=0047h);
  2741.       "FG_DRWIMAGE" was AX=0049h
  2742.     The image will be drawn with its lower left corner at the current
  2743.       cursor position (either text or graphics)
  2744. SeeAlso: AX=0010h,AX=002Ch,AX=0038h,AX=007Eh,AX=0085h
  2745. --------V-620023-----------------------------
  2746. INT 62 u - FGDRIVER v3.03 - "FG_EGACHECK" - GET INFO ABOUT ACTIVE EGA DISPLAY
  2747.     AX = 0023h
  2748. Return: AX = number of 64K banks of video memory, or 0000h if no EGA or EGA
  2749.           without an Enhanced Color Display
  2750. Note:    For FGDRIVER v1.10, this function was "FG_MOVE" (see AX=0068h);
  2751.       "FG_EGACHECK" was AX=0005h
  2752. SeeAlso: AX=00A2h
  2753. --------V-620024-----------------------------
  2754. INT 62 u - FGDRIVER v3.03 - "FG_ELLIPSE" - DRAW UNFILLED ELLIPSE IN SCRN SPACE
  2755.     AX = 0024h
  2756.     BX = horizontal semi-axis length in screen space units
  2757.     CX = vertical semi-axis length in screen space units
  2758. Notes:    For FGDRIVER v1.10, this function was "FG_MOVEREL" (see AX=0069h);
  2759.       "FG_ELLIPSE" was AX=002Dh
  2760.     This call is ignored in text modes
  2761.     The ellipse is centered at the current graphics cursor position
  2762. SeeAlso: AX=0006h,AX=000Dh,AX=0025h,AX=0076h,AX=0079h
  2763. --------V-620025-----------------------------
  2764. INT 62 u - FGDRIVER v3.03 - "FG_ELLIPSEF" - DRAW FILLED ELLIPSE IN SCREEN SPACE
  2765.     AX = 0025h
  2766.     BX = horizontal semi-axis length in screen space units
  2767.     CX = vertical semi-axis length in screen space units
  2768. Notes:    For FGDRIVER v1.10, this function was "FG_DRAW" (see AX=001Bh);
  2769.       "FG_ELLIPSEF" did not exist yet
  2770.     This call is ignored in text modes
  2771.     The ellipse is centered at the current graphics cursor position
  2772. SeeAlso: AX=0006h,AX=000Eh,AX=0024h,AX=0076h,AX=0078h
  2773. --------V-620026-----------------------------
  2774. INT 62 u - FGDRIVER v3.03 - "FG_ERASE" - CLEAR THE ACTIVE VIDEO PAGE
  2775.     AX = 0026h
  2776. Note:    For FGDRIVER v1.10, this function was "FG_DRAWREL" (see AX=001Eh);
  2777.       "FG_ERASE" was AX=001Eh
  2778.     This function sets each pixel to 0 in graphics modes, each character
  2779.       cell to a blank with a gray foreground attribute in text modes
  2780. SeeAlso: AX=0027h,AX=0029h,AX=002Bh
  2781. --------V-620027-----------------------------
  2782. INT 62 u - FGDRIVER v3.03 - "FG_FADEIN" - FADE IN HIDDEN PAGE
  2783.     AX = 0027h
  2784.     BX = delay (0000h = fastest possible fade-in)
  2785. Notes:    For FGDRIVER v1.10, this function was "FG_DASH" (see AX=0014h);
  2786.       "FG_FADEIN" was AX=0064h
  2787.     The current hidden page is copied to the current visible page in small
  2788.       random sections to produce a fade-in effect
  2789.     This call is ignored in text modes
  2790. SeeAlso: AX=0026h,AX=0028h,AX=0029h
  2791. --------V-620028-----------------------------
  2792. INT 62 u - FGDRIVER v3.03 - "FG_FADEOUT" - FADE OUT TO CURRENT COLOR
  2793.     AX = 0028h
  2794.     BX = delay (0000h = fastest possible fade-out)
  2795. Notes:    For FGDRIVER v1.10, this function was "FG_DASHREL" (see AX=0015h);
  2796.       "FG_FADEOUT" was AX=0065h
  2797.     The current visible page is filled with pixels of the current color in
  2798.       small random sections to give a fade-out effect
  2799.     This call is ignored in text modes
  2800. SeeAlso: AX=0026h,AX=0027h,AX=0029h
  2801. --------V-620029-----------------------------
  2802. INT 62 u - FGDRIVER v3.03 - "FG_FILLPAGE" - FILL THE ACTIVE VIDEO PAGE
  2803.     AX = 0029h
  2804. Desc:    fill the active video page with pixels of the current color (graphics
  2805.       modes) or the block character DBh with the current character
  2806.       attributes (text modes)
  2807. Note:    For FGDRIVER v1.10, this function was "FG_SETCLIP" (see AX=008Ch);
  2808.       "FG_FILLPAGE" did not exist yet
  2809. SeeAlso: AX=0026h,AX=0027h,AX=0028h
  2810. --------V-62002A-----------------------------
  2811. INT 62 u - FGDRIVER v3.03 - "FG_FLIPMASK" - DISPLAY INV CLIPPED IMAGE (MASKMAP)
  2812.     AX = 002Ah
  2813.     ES:BX -> array containing image stored as a masking map (see #1893)
  2814.     CX = number of pixel runs in masking map
  2815.     DX = width of masking map in pixels
  2816. Notes:    For FGDRIVER v1.10, this function was "FG_RECT" (see AX=0080h);
  2817.       "FG_FLIPMASK" was AX=0054h
  2818.     This call is ignored in text modes and in native EGA and VGA graphics
  2819.       modes
  2820.     The image is drawn with its lower left corner at the current graphics
  2821.       cursor position
  2822. SeeAlso: AX=000Fh,AX=001Dh,AX=002Ch,AX=0086h,AX=008Ch,AX=00A5h
  2823. --------V-62002B-----------------------------
  2824. INT 62 u - FGDRIVER v3.03 - "FG_FLOOD" - FLOOD FILL ARBITRARY CLOSED REGION
  2825.     AX = 002Bh
  2826.     BX = starting column
  2827.     CX = starting row
  2828. Desc:    fill the bounded region around the specified point (respecting clipping
  2829.       region) with the currrent color
  2830. Notes:    For FGDRIVER v1.10, this function was "FG_CLPRECT" (see AX=0011h);
  2831.       "FG_FLOOD" did not exist yet
  2832.     This function is ignored in text modes
  2833. SeeAlso: AX=0026h,AX=006Eh
  2834. --------V-62002C-----------------------------
  2835. INT 62 u - FGDRIVER v3.03 - "FG_FLPIMAGE" - DISPLAY INV CLIPPED IMAGE (BITMAP)
  2836.     AX = 002Ch
  2837.     ES:BX -> mode-specific bitmap
  2838.     CX = width of bit map in bytes
  2839.     DX = height of bit map in pixel rows
  2840. Notes:    For FGDRIVER v1.10, this function was "FG_DRECT" (see AX=0021h);
  2841.       "FG_FLPIMAGE" was AX=004Ch
  2842.     This call is ignored in text modes
  2843.     The image is drawn with its lower left corner at the current graphics
  2844.       cursor position
  2845.     The current clipping region is used, extended to a byte boundary
  2846. SeeAlso: AX=0010h,AX=0022h,AX=002Ah,AX=0038h,AX=0085h,AX=008Ch,AX=009Ah
  2847. --------V-62002D-----------------------------
  2848. INT 62 u - FGDRIVER v3.03 - "FG_FONTSIZE" - SPECIFY FONT SIZE FOR TEXT OUTPUT
  2849.     AX = 002Dh
  2850.     BX = desired character height in scan lines (8, 14, 16)
  2851. Notes:    For FGDRIVER v1.10, this function was "FG_ELLIPSE" (see AX=0024h);
  2852.       "FG_FONTSIZE" did not exist yet
  2853.     This call is ignored if the current mode is not a VGA or SVGA graphics
  2854.       mode, or the specified character height is not 8, 14, or 16
  2855. SeeAlso: AX=007Ch
  2856. --------V-62002E-----------------------------
  2857. INT 62 u - FGDRIVER v3.03 - "FG_FREEPAGE" - FREE VIRTUAL OR LOGICAL VIDEO PAGE
  2858.     AX = 002Eh
  2859.     BX = page number (0000h-003Fh)
  2860. Return: AX = status (0000h,0001h,0007h,0009h) (see #1892)
  2861. Note:    For FGDRIVER v1.10, this function was "FG_POLYGON" (see AX=0079h);
  2862.       "FG_FREEPAGE" was AX=0043h
  2863. SeeAlso: AX=0000h,AX=0001h,AX=0002h,AX=0003h
  2864. --------V-62002F-----------------------------
  2865. INT 62 u - FGDRIVER v3.03 - "FG_GETADDR" - GET SEGMENT OF ACTIVE VIDEO PAGE
  2866.     AX = 002Fh
  2867. Return: AX = segment of active video page
  2868. Note:    For FGDRIVER v1.10, this function was "FG_PAINT" (see AX=006Eh);
  2869.       "FG_GETADDR" was AX=0044h
  2870. SeeAlso: AX=0036h,AX=008Fh
  2871. --------V-620030-----------------------------
  2872. INT 62 u - FGDRIVER v3.03 - "FG_GETATTR" - GET CHARACTER ATTRIB FOR POSITION
  2873.     AX = 0030h
  2874.     BX = row
  2875.     CX = column
  2876. Return: AX = character attribute at specified location on active video page
  2877. Notes:    For FGDRIVER v1.10, this function was "FG_CIRCLE" (see AX=000Dh);
  2878.       "FG_GETATTR" was AX=0037h
  2879.     This call is ignored in graphics modes
  2880. SeeAlso: AX=000Bh,AX=0032h,AX=0034h,AX=008Ah
  2881. --------V-620031-----------------------------
  2882. INT 62 u - FGDRIVER v3.03 - "FG_GETBLOCK" - GRAB RECTANGLE OF DISPLAY
  2883.     AX = 0031h
  2884.     ES:BX -> buffer for screen contents
  2885.     CX = leftmost column
  2886.     DX = rightmost column
  2887.     SI = top row
  2888.     DI = bottom row
  2889. Notes:    For FGDRIVER v1.10, this function was unused, and "FG_GETBLOCK" did not
  2890.       exist yet
  2891.     In text modes, coordinates are character positions; in graphics modes,
  2892.       they are defined in screen space, and the left and right edges are
  2893.       adjusted to a byte boundary if necessary
  2894.     Use "FG_IMAGESIZ" (see AX=004Bh) to determine the required buffer size
  2895. SeeAlso: AX=0038h,AX=004Bh,AX=007Dh
  2896. --------V-620032-----------------------------
  2897. INT 62 u - FGDRIVER v3.03 - "FG_GETCHAR" - GET CHARACTER FOR SCREEN POSITION
  2898.     AX = 0032h
  2899.     BX = row
  2900.     CX = column
  2901. Return: AX = character at specified location on active video page
  2902. Notes:    For FGDRIVER v1.10, this function was "FG_TEXT" (see AX=00A8h);
  2903.       "FG_GETCHAR" was AX=0038h
  2904.     This call is ignored in graphics modes
  2905. SeeAlso: AX=000Bh,AX=0030h,AX=007Ch,AX=008Ah,AX=00A8h
  2906. --------V-620033-----------------------------
  2907. INT 62 u - FGDRIVER v3.03 - "FG_GETCLOCK" - GET CLOCK TICKS SINCE MIDNIGHT
  2908.     AX = 0033h
  2909. Return: DX:AX = number of clock ticks since midnight
  2910. Note:    For FGDRIVER v1.10, this function was "FG_LOCATE" (see AX=0055h);
  2911.       "FG_GETCLOCK" was AX=0099h
  2912. SeeAlso: INT 1A/AH=00h
  2913. --------V-620034-----------------------------
  2914. INT 62 u - FGDRIVER v3.03 - "FG_GETCOLOR" - GET CURRENT TEXT ATTRIBUTE
  2915.     AX = 0034h
  2916. Return: AX = current text attribute or color index (graphics modes)
  2917. Note:    For FGDRIVER v1.10, this function was "FG_WHERE" (see AX=00AFh);
  2918.       "FG_GETCOLOR" was AX=0015h
  2919. SeeAlso: AX=000Bh,AX=0030h,AX=008Ah
  2920. --------V-620035-----------------------------
  2921. INT 62 u - FGDRIVER v3.03 - "FG_GETDACS" - GET VIDEO DAC CONTENTS
  2922.     AX = 0035h
  2923.     CX = number of DAC registers to return (0001h to 0100h)
  2924.     DX = starting DAC register number (0000h to 00FFh)
  2925.     ES:BX -> buffer for DAC red/green/blue triples
  2926. Notes:    For FGDRIVER v1.10, this function was "FG_CHGATTR" (see AX=000Bh);
  2927.       "FG_GETDACS" was AX=00A4h
  2928.     The register number wraps back to zero after FFh
  2929. SeeAlso: AX=0042h,AX=006Fh,AX=008Eh
  2930. --------V-620036-----------------------------
  2931. INT 62 u - FGDRIVER v3.03 - "FG_GETENTRY" - GET PAGE TYPE AND ADDRESS
  2932.     AX = 0036h
  2933.     ES:BX -> variable pointer record (see #1894)
  2934.     CX = page number (00h-3Fh)
  2935. Notes:    For FGDRIVER v1.10, this function was "FG_CHGTEXT" (see AX=000Ch);
  2936.       "FG_GETENTRY" did not exist yet
  2937.     Page addresses are segments for pages stored in conventional memory
  2938.       (including physical and virtual pages), and EMS or XMS handles for
  2939.       pages stored in EMS or XMS
  2940. SeeAlso: AX=0000h,AX=008Fh
  2941.  
  2942. Format of FGDRIVER variable pointer record:
  2943. Offset    Size    Description    (Table 1894)
  2944.  00h    WORD    segment of WORD buffer for page address
  2945.  02h    WORD    offset of WORD buffer for page address
  2946.  04h    WORD    segment of WORD buffer for page type (se #1895)
  2947.  06h    WORD    offset of WORD buffer for page type
  2948.  
  2949. (Table 1895)
  2950. Values for FGDRIVER page type:
  2951.  0000h    unallocated
  2952.  0001h    physical
  2953.  0002h    virtual
  2954.  0003h    logical page, stored in expanded memory (EMS)
  2955.  0004h    logical page, stored in extended memory (XMS)
  2956.  0005h    logical page, stored in conventional memory
  2957. --------V-620037-----------------------------
  2958. INT 62 u - FGDRIVER v3.03 - "FG_GETHPAGE" - GET CURRENT HIDDEN VIDEO PAGE NUM
  2959.     AX = 0037h
  2960. Return: AX = current hidden video page number (0000h-003Fh)
  2961. Note:    For FGDRIVER v1.10, this function was "FG_GETATTR" (see AX=0030h);
  2962.       "FG_GETHPAGE" was AX=0040h
  2963. SeeAlso: AX=0040h,AX=0043h,AX=0091h
  2964. --------V-620038-----------------------------
  2965. INT 62 u - FGDRIVER v3.03 - "FG_GETIMAGE" - STORE IMAGE AS BITMAP
  2966.     AX = 0038h
  2967.     ES:BX -> buffer for video mode-specific bitmap
  2968.     CX = width of bitmap in bytes
  2969.     DX = height of bitmap in pixel rows
  2970. Note:    For FGDRIVER v1.10, this function was "FG_GETCHAR" (see AX=0032h);
  2971.       "FG_GETIMAGE" was AX=0048h
  2972. SeeAlso: AX=0010h,AX=0022h,AX=002Ch,AX=007Eh,AX=0085h
  2973. --------V-620039-----------------------------
  2974. INT 62 u - FGDRIVER v3.03 - "FG_GETINDEX" - GET COLOR VALUE FOR COLOR INDEX
  2975.     AX = 0039h
  2976.     BX = color index (0000h to 00FFh)
  2977. Return: AX = color value for specified color index
  2978. Notes:    For FGDRIVER v1.10, this function was unused;"FG_GETINDEX" was AX=0016h
  2979.     This call returns the value passed to it in text and 256-color
  2980.       graphics modes
  2981. SeeAlso: AX=0016h,AX=0034h
  2982. --------V-62003A-----------------------------
  2983. INT 62 u - FGDRIVER v3.03 - "FG_GETKEY" - GET NEXT KEYSTROKE
  2984.     AX = 003Ah
  2985.     ES:BX -> variable pointer record (see #1896)
  2986. Return: (after next keystroke if no typeahead) variables updated
  2987. Note:    For FGDRIVER v1.10, this function was unused; "FG_GETKEY" was AX=006Eh
  2988. SeeAlso: AX=000Ah,AX=0051h,AX=0054h,AX=00ADh,INT 16/AH=00h
  2989.  
  2990. Format of FGDRIVER variable pointer record:
  2991. Offset    Size    Description    (Table 1896)
  2992.  00h    WORD    segment of BYTE buffer for ASCII keycode
  2993.  02h    WORD    offset of BYTE buffer for ASCII keycode
  2994.  04h    WORD    segment of BYTE buffer for extended keycode
  2995.  06h    WORD    offset of BYTE buffer for extended keycode
  2996. --------V-62003B-----------------------------
  2997. INT 62 u - FGDRIVER v3.03 - "FG_GETLINES" - GET TEXT ROWS FOR CURR VIDEO MODE
  2998.     AX = 003Bh
  2999. Return: AX = number of text rows on screen in current video mode
  3000. Note:    For FGDRIVER v1.10, this function was unused;"FG_GETLINES" was AX=0010h
  3001. SeeAlso: AX=0092h,AX=00A2h
  3002. --------V-62003C-----------------------------
  3003. INT 62 u - FGDRIVER v3.03 - "FG_GETMAP" - STORE IMAGE AS MODE-INDEPENDNT BITMAP
  3004.     AX = 003Ch
  3005.     ES:BX -> buffer for video mode-independent bitmap
  3006.     CX = width of bitmap in bytes
  3007.     DX = height of bitmap in pixel rows
  3008. Return: each bit in bitmap is set if corresponding pixel is of the current
  3009.       color, cleared otherwise
  3010. Notes:    For FGDRIVER v1.10, this function was "FG_GETPAGE" (see AX=0040h);
  3011.       "FG_GETMAP" was AX=0046h
  3012.     This call is ignored in text modes
  3013. SeeAlso: AX=0010h,AX=001Ch,AX=0022h
  3014. --------V-62003D-----------------------------
  3015. INT 62 u - FGDRIVER v3.03 - "FG_GETMAXX" - GET MAXIMUM COLUMN IN SCREEN SPACE
  3016.     AX = 003Dh
  3017. Return: AX = maximum X coordinate in screen space
  3018.         (or character space if in text mode)
  3019. Note:    For FGDRIVER v1.10, this function was "FG_SETPAGE" (see AX=0095h);
  3020.       "FG_GETMAXX" was AX=000Ah
  3021. SeeAlso: AX=003Eh,AX=00A1h
  3022. --------V-62003E-----------------------------
  3023. INT 62 u - FGDRIVER v3.03 - "FG_GETMAXY" - GET MAXIMUM ROW IN SCREEN SPACE
  3024.     AX = 003Eh
  3025. Return: AX = maximum Y coordinate in screen space
  3026.         (or character space if in text mode)
  3027. Note:    For FGDRIVER v1.10, this function was "FG_GETVPAGE" (see AX=0043h);
  3028.       "FG_GETMAXY" was AX=000Bh
  3029. SeeAlso: AX=003Dh,AX=00A1h
  3030. --------V-62003F-----------------------------
  3031. INT 62 u - FGDRIVER v3.03 - "FG_GETMODE" - GET CURRENT VIDEO MODE NUMBER
  3032.     AX = 003Fh
  3033.     ES:BX -> WORD ???
  3034. Return: AX = current video mode number
  3035. Note:    For FGDRIVER v1.10, this function was "FG_SETVPAGE" (see AX=0098h);
  3036.       "FG_GETMODE" was AX=0000h
  3037. SeeAlso: AX=0093h
  3038. --------V-620040-----------------------------
  3039. INT 62 u - FGDRIVER v3.03 - "FG_GETPAGE" - GET ACTIVE VIDEO PAGE NUMBER
  3040.     AX = 0040h
  3041. Return: AX = active video page (0000h-003Fh)
  3042. Note:    For FGDRIVER v1.10, this function was "FG_GETHPAGE" (see AX=0037h);
  3043.       "FG_GETPAGE" was AX=003Ch
  3044. SeeAlso: AX=002Fh,AX=0036h,AX=0037h,AX=0043h,AX=0095h
  3045. --------V-620041-----------------------------
  3046. INT 62 u - FGDRIVER v3.03 - "FG_GETPIXEL" - GET COLOR OF SPECIFIED PIXEL
  3047.     AX = 0041h
  3048.     BX = column in screen space
  3049.     CX = row in screen space
  3050. Return: AX = color value of pixel (0 to num_colors-1)
  3051.         0000h in text modes
  3052. Note:    For FGDRIVER v1.10, this function was "FG_SETHPAGE" (see AX=0091h);
  3053.       "FG_GETPIXEL" was AX=0020h
  3054. SeeAlso: AX=0030h,AX=0032h,AX=0076h,AX=0077h
  3055. --------V-620042-----------------------------
  3056. INT 62 u - FGDRIVER v3.03 - "FG_GETRGB" - GET VIDEO DAC REGISTER CONTENTS
  3057.     AX = 0042h
  3058.     ES:BX -> variable pointer record (see #1897)
  3059.     CX = DAC register number
  3060. Return: variables updated
  3061. Notes:    For FGDRIVER v1.10, this function was "FG_ALLOCATE" (see AX=0000h);
  3062.       "FG_GETRGB" was AX=001Ch
  3063.     This call is ignored in text modes and CGA/EGA video modes (since
  3064.       they do not use DAC registers)
  3065. SeeAlso: AX=0035h,AX=006Fh,AX=008Eh
  3066.  
  3067. Format of FGDRIVER variable pointer record:
  3068. Offset    Size    Description    (Table 1897)
  3069.  00h    WORD    segment of WORD buffer for red component of DAC register
  3070.  02h    WORD    offset of WORD buffer for red component
  3071.  04h    WORD    segment of WORD buffer for green component of DAC register
  3072.  06h    WORD    offset of WORD buffer for green component
  3073.  08h    WORD    segment of WORD buffer for blue component of DAC register
  3074.  0Ah    WORD    offset of WORD buffer for blue component
  3075. --------V-620043-----------------------------
  3076. INT 62 u - FGDRIVER v3.03 - "FG_GETVPAGE" - GET VISIBLE VIDEO PAGE NUMBER
  3077.     AX = 0043h
  3078. Return: AX = visible video page (0000h-003Fh)
  3079. Note:    For FGDRIVER v1.10, this function was "FG_FREEPAGE" (see AX=002Eh);
  3080.       "FG_GETVPAGE" was AX=003Eh
  3081. SeeAlso: AX=0037h,AX=0040h,AX=0098h
  3082. --------V-620044-----------------------------
  3083. INT 62 u - FGDRIVER v3.03 - "FG_GETXJOY" - GET HORIZONTAL POSITION OF JOYSTICK
  3084.     AX = 0044h
  3085.     BX = joystick number (0001h or 0002h)
  3086. Return: AX = horizontal position of joystick
  3087.         FFFFh if joystick uninitialized or not present
  3088. Notes:    For FGDRIVER v1.10, this function was "FG_GETADDR" (see AX=002Fh);
  3089.       "FG_GETXJOY" was AX=0076h
  3090.     The actual coordinates are processor- and joystick-dependent
  3091.     You must call "FG_INITJOY" (AX=004Dh) before using this function
  3092. SeeAlso: AX=0009h,AX=0046h,AX=004Dh,AX=0050h,AX=0061h
  3093. --------V-620045-----------------------------
  3094. INT 62 u - FGDRIVER v3.03 - "FG_GETXPOS" - GET GRAPHICS CURSOR COLUMN
  3095.     AX = 0045h
  3096. Return: AX = screen space X coordinate of graphics cursor position
  3097. Note:    For FGDRIVER v1.10, this function was "FG_RESIZE" (see AX=0082h);
  3098.       "FG_GETXPOS" was AX=0021h
  3099. SeeAlso: AX=0047h,AX=0068h,AX=0069h
  3100. --------V-620046-----------------------------
  3101. INT 62 u - FGDRIVER v3.03 - "FG_GETYJOY" - GET VERTICAL POSITION OF JOYSTICK
  3102.     AX = 0046h
  3103.     BX = joystick number (0001h or 0002h)
  3104. Return: AX = vertical position of joystick
  3105.         FFFFh if joystick uninitialized or not present
  3106. Notes:    For FGDRIVER v1.10, this function was "FG_GETMAP" (see AX=003Ch);
  3107.       "FG_GETYJOY" was AX=0077h
  3108.     The actual coordinates are processor- and joystick-dependent
  3109.     You must call "FG_INITJOY" (AX=004Dh) before using this function
  3110. SeeAlso: AX=0009h,AX=0044h,AX=004Dh,AX=0050h,AX=0061h
  3111. --------V-620047-----------------------------
  3112. INT 62 u - FGDRIVER v3.03 - "FG_GETYPOS" - GET GRAPHICS CURSOR ROW
  3113.     AX = 0047h
  3114. Return: AX = screen space Y coordinate of graphics cursor position
  3115. Note:    For FGDRIVER v1.10, this function was "FG_DRAWMAP" (see AX=001Ch);
  3116.       "FG_GETYPOS" was AX=0022h
  3117. SeeAlso: AX=0045h,AX=0068h,AX=0069h
  3118. --------V-620048-----------------------------
  3119. INT 62 u - FGDRIVER v3.03 - "FG_HUSH" - STOP ASYNCHRONOUS SOUND IMMEDIATELY
  3120.     AX = 0048h
  3121. Notes:    For FGDRIVER v1.10, this function was "FG_GETIMAGE" (see AX=0038h);
  3122.       "FG_HUSH" was AX=008Eh
  3123.     This function immediately stops any sounds started with "FG_MUSICB",
  3124.       "FG_SOUNDS", or "FG_VOICES"; it is ignored if no asynchronous sound
  3125.       is playing
  3126. SeeAlso: AX=0049h,AX=006Bh,AX=009Eh,AX=00ABh
  3127. --------V-620049-----------------------------
  3128. INT 62 u - FGDRIVER v3.03 - "FG_HUSHNEXT" - STOP ASYNCHRONOUS SOUND
  3129.     AX = 0049h
  3130. Program: FGDRIVER is the external video driver for the shareware
  3131.       Fastgraph/Light by Ted Gruber Software
  3132. Notes:    For FGDRIVER v1.10, this function was "FG_DRWIMAGE" (see AX=0022h);
  3133.       "FG_HUSHNEXT" was AX=008Fh
  3134.     This function stops any sounds started with "FG_MUSICB", "FG_SOUNDS",
  3135.       or "FG_VOICES" after the current repetition completes; it is ignored
  3136.       unless asynchronous sound is continuous
  3137. SeeAlso: AX=0048h,AX=006Bh,AX=009Eh,AX=00ABh
  3138. --------V-62004A-----------------------------
  3139. INT 62 u - FGDRIVER v3.03 - "FG_IMAGEBUF" - SPECIFY TEMPORARY IMAGE BUFFER
  3140.     AX = 004Ah
  3141.     ES:BX -> buffer to be used when creating or displaying GIF/PCX/PPR/SPR
  3142.           images
  3143.     CX = size of buffer in bytes or 0000h to use internal buffer
  3144. Notes:    For FGDRIVER v1.10, this function was "FG_CLPIMAGE" (see AX=0010h);
  3145.       "FG_IMAGEBUF" did not exist yet
  3146.     Fastgraph's internal buffer is 4096 bytes; this function allows the
  3147.       application to define a larger buffer which will typically speed
  3148.       processing
  3149. SeeAlso: AX=0057h,AX=0058h,AX=0059h,AX=009Ah,AX=009Bh,AX=009Ch
  3150. --------V-62004B-----------------------------
  3151. INT 62 u - FGDRIVER v3.03 - "FG_IMAGESIZ" - DETERMINE IMAGE STORAGE REQUIREMENT
  3152.     AX = 004Bh
  3153.     BX = image width in pixels
  3154.     CX = image height in pixels
  3155. Note:    For FGDRIVER v1.10, this function was "FG_REVIMAGE" (see AX=0085h);
  3156.       "FG_IMAGESIZ" was AX=0062h
  3157. Return: DX:AX = size in bytes of mode-specific bitmap for current video mode
  3158. SeeAlso: AX=0031h,AX=007Dh
  3159. --------V-62004C-----------------------------
  3160. INT 62 u - FGDRIVER v3.03 - "FG_INITEMS" - INITIALIZE EXPANDED MEMORY USE
  3161.     AX = 004Ch
  3162. Return: AX = status
  3163.         0000h successful
  3164.         FFFFh expanded memory manager inaccessible or not installed
  3165. Notes:    For FGDRIVER v1.10, this function was "FG_FLPIMAGE" (see AX=002Ch);
  3166.       "FG_INITEMS" was AX=00A0h
  3167. SeeAlso: AX=0002h,AX=004Eh
  3168. --------V-62004D-----------------------------
  3169. INT 62 u - FGDRIVER v3.03 - "FG_INITJOY" - INITIALIZE JOYSTICK USE
  3170.     AX = 004Dh
  3171.     BX = joystick number (0001h or 0002h)
  3172. Return: AX = status
  3173.         0000h successful
  3174.         FFFFh joystick not connected or no game port
  3175. Notes:    For FGDRIVER v1.10, this function was "FG_DISPLAY" (see AX=0019h);
  3176.       "FG_INITJOY" was AX=0075h
  3177.     Fastgraph assumes that the requested joystick is centered at the time
  3178.       this function is called
  3179. SeeAlso: AX=0009h,AX=0044h,AX=0046h,AX=0050h,AX=0061h
  3180. --------V-62004E-----------------------------
  3181. INT 62 u - FGDRIVER v3.03 - "FG_INITXMS" - INITIALIZE EXTENDED MEMORY USE
  3182.     AX = 004Eh
  3183. Return: AX = status
  3184.         0000h successful
  3185.         FFFFh extended memory manager inaccessible or not installed
  3186. Note:    For FGDRIVER v1.10, this function was "FG_DISPLAYP" (see AX=001Ah);
  3187.       "FG_INITXMS" was AX=00A1h
  3188. SeeAlso: AX=0003h,AX=004Ch
  3189. --------V-62004F-----------------------------
  3190. INT 62 u - FDGRIVER v3.03 - "FG_INSIDE" - CHECK IF POINT INSIDE CONVEX POLYGON
  3191.     AX = 004Fh
  3192.     ES:BX -> vertex array
  3193.     CX = number of vertices
  3194.     DX = screen space column of point to test
  3195.     SI = screen space row of point to test
  3196. Return: AX = result
  3197.         0000h point is outside polygon
  3198.         0001h point is inside polygon
  3199.         undefined if not a convex polygon
  3200. Note:    For FGDRIVER v1.10, this function was "FG_DISPFILE" (see AX=0018h);
  3201.       "FG_INSIDE" did not exist yet
  3202. SeeAlso: AX=0078h,AX=0079h,AX=007Ah
  3203. --------V-620050-----------------------------
  3204. INT 62 u - FGDRIVER v3.03 - "FG_INTJOY" - GET KEYCODES CORRESP TO JOYSTICK POS
  3205.     AX = 0050h
  3206.     CX = joystick number (0001h or 0002h)
  3207.     ES:BX -> variable pointer record (see #1898)
  3208. Notes:    For FGDRIVER v1.10, this function was "FG_PATTERN" (see AX=0072h);
  3209.       "FG_INTJOY" was AX=0079h
  3210.     If the indicated joystick has not been initialized with AX=0075h, both
  3211.       the button code and joystick position will be set to 00h
  3212.     If either button is pressed, a button code of 0Dh is returned;
  3213.       otherwise, a button code of 00h is returned
  3214. SeeAlso: AX=0009h,AX=0044h,AX=0046h,AX=004Dh,AX=0061h
  3215.  
  3216. Format of FGDRIVER variable pointer record:
  3217. Offset    Size    Description    (Table 1898)
  3218.  00h    WORD    segment of BYTE buffer for button code
  3219.  02h    WORD    offset of BYTE buffer for button code
  3220.  04h    WORD    segment of BYTE buffer for joystick position
  3221.  06h    WORD    offset of BYTE buffer for joystick position
  3222. --------V-620051-----------------------------
  3223. INT 62 u - FGDRIVER v3.03 - "FG_INTKEY" - GET KEYSTROKE, NO WAIT
  3224.     AX = 0051h
  3225.     ES:BX -> variable pointer record (see #1899)
  3226. Return: variables updated
  3227. Notes:    For FGDRIVER v1.10, this function was "FG_DRAWMASK" (see AX=001Dh);
  3228.       "FG_INTKEY" was AX=006Fh
  3229.     If the keyboard buffer is empty, both the ASCII and extended keycodes
  3230.       are set to 00h
  3231. SeeAlso: AX=000Ah,AX=003Ah,AX=0054h,AX=00ADh,INT 16/AH=01h
  3232.  
  3233. Format of FGDRIVER variable pointer record:
  3234. Offset    Size    Description    (Table 1899)
  3235.  00h    WORD    segment of BYTE buffer for ASCII keycode
  3236.  02h    WORD    offset of BYTE buffer for ASCII keycode
  3237.  04h    WORD    segment of BYTE buffer for extended keycode
  3238.  06h    WORD    offset of BYTE buffer for extended keycode
  3239. --------V-620052-----------------------------
  3240. INT 62 u - FGDRIVER v3.03 - "FG_JUSTIFY" - SET TEXT OUTPUT JUSTIFICATION
  3241.     AX = 0052h
  3242.     BX = horizontal justification
  3243.           (00h centered, 01h right-justified, FFh left-justified)
  3244.     CX = vertical justification
  3245.           (00h centered, 01h top of characters, FFh bottom of chars)
  3246. Note:    For FGDRIVER v1.10, this function was "FG_CLIPMASK" (see AX=000Fh);
  3247.       "FG_JUSTIFY" did not exist yet
  3248. SeeAlso: AX=000Ch,AX=002Dh,AX=007Ch
  3249. --------V-620053-----------------------------
  3250. INT 62 u - FGDRIVER v3.03 - "FG_KBINIT" - ENABLE/DISABLE LOW-LEVEL KBD HANDLER
  3251.     AX = 0053h
  3252.     BX = new state (0000h disabled, 0001h enabled)
  3253. Notes:    For FGDRIVER v1.10, this function was "FG_REVMASK" (see AX=0086h);
  3254.       "FG_KBINIT" did not exist yet
  3255.     When the low-level handler is enabled, "FG_GETKEY", "FG_INTKEY",
  3256.       "FG_WAITKEY", and all other functions calling DOS or BIOS keyboard
  3257.       services become unavailable
  3258. SeeAlso: AX=0054h
  3259. --------V-620054-----------------------------
  3260. INT 62 u - FGDRIVER v3.03 - "FG_KBTEST" - CHECK WHETHER SPECIFIED KEY PRESSED
  3261.     AX = 0054h
  3262.     BX = scan code of desired key
  3263. Return: AX = state
  3264.         0000h key is not pressed
  3265.         0001h key is currently pressed
  3266. Notes:    For FGDRIVER v1.10, this function was "FG_FLIPMASK" (see AX=002Ah);
  3267.       "FG_KBTEST" did not exist yet
  3268.     The low-level keyboard handler must have been enabled with AX=0053h
  3269. SeeAlso: AX=0053h,INT 16/AH=01h
  3270. --------V-620055-----------------------------
  3271. INT 62 u - FGDRIVER v3.03 - "FG_LOCATE" - SET TEXT-MODE CURSOR POSITION
  3272.     AX = 0055h
  3273.     BX = row
  3274.     CX = column
  3275. Notes:    For FGDRIVER v1.10, this function was unused; "FG_LOCATE" was AX=0033h
  3276.     There are only eight text cursors shared by successive groups of
  3277.       eight video pages (pages 0, 8, 16, ... share one cursor, 1, 9, ...
  3278.       share the second, etc)
  3279. SeeAlso: AX=0045h,AX=0047h,AX=0068h,AX=00AFh
  3280. --------V-620056-----------------------------
  3281. INT 62 u - FGDRIVER v3.03 - UNUSED
  3282.     AX = 0056h
  3283. Return: AX destroyed
  3284. --------V-620057-----------------------------
  3285. INT 62 u - FGDRIVER v3.03 - "FG_MAKEPCX" - CREATE PCX FILE FROM SCREEN WINDOW
  3286.     AX = 0057h
  3287.     BX = left edge in screen space units
  3288.     CX = right edge in screen space units
  3289.     DX = top edge in screen space units
  3290.     SI = bottom edge in screen space units
  3291.     ES:DI -> ASCIZ filename of PCX file to create
  3292. Return: AX = status
  3293.         0000h successful
  3294.         0001h file not created
  3295. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MAKEPCX" was AX=0061h
  3296.     The PCX file is created from the specified region of the active video
  3297.       page; the left and right edges are adjusted to a byte boundary if
  3298.       necessary
  3299.     If the specified file already exists, it is overwritten
  3300.     This call is ignored in text and Hercules low-resolution graphics modes
  3301. SeeAlso: AX=004Ah,AX=0058h,AX=0059h,AX=009Ah,AX=009Bh,AX=009Ch
  3302. --------V-620058-----------------------------
  3303. INT 62 u - FGDRIVER v3.03 - "FG_MAKEPPR" - CREATE PACKED PIXEL RUN FILE
  3304.     AX = 0058h
  3305.     BX = left edge in screen space units
  3306.     CX = right edge in screen space units
  3307.     DX = top edge in screen space units
  3308.     SI = bottom edge in screen space units
  3309.     ES:DI -> ASCIZ filename of PPR file to create
  3310. Return: AX = status
  3311.         0000h successful
  3312.         0001h file not created
  3313. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MAKEPPR" did not
  3314.       exist yet
  3315.     The PPR file is created from the specified region of the active video
  3316.       page; the left and right edges are adjusted to byte boundaries if
  3317.       necessary
  3318.     If the specified file already exists, it is overwritten
  3319.     This call is ignored in text modes
  3320. SeeAlso: AX=004Ah,AX=0057h,AX=0059h,AX=009Ah,AX=009Bh,AX=009Ch
  3321. --------V-620059-----------------------------
  3322. INT 62 u - FGDRIVER v3.03 - "FG_MAKESPR" - CREATE STANDARD PIXEL RUN FILE
  3323.     AX = 0059h
  3324.     BX = left edge in screen space units
  3325.     CX = right edge in screen space units
  3326.     DX = top edge in screen space units
  3327.     SI = bottom edge in screen space units
  3328.     ES:DI -> ASCIZ filename of SPR file to create
  3329. Return: AX = status
  3330.         0000h successful
  3331.         0001h file not created
  3332. Note:    For FGDRIVER v1.10, this function was unused; "FG_MAKESPR" did not
  3333.       exist yet
  3334.     The SPR file is created from the specified region of the active video
  3335.       page; the left and right edges are adjusted to byte boundaries if
  3336.       necessary
  3337.     If the specified file already exists, it is overwritten
  3338.     This call is ignored in text modes
  3339. SeeAlso: AX=004Ah,AX=0057h,AX=0058h,AX=009Ah,AX=009Bh,AX=009Ch
  3340. --------V-62005A-----------------------------
  3341. INT 62 u - FGDRIVER v3.03 - "FG_MAPRGB" - MAP COLOR COMPONENTS INTO PALETTE VAL
  3342.     AX = 005Ah
  3343.     BX = red component
  3344.     CX = green component
  3345.     DX = blue component
  3346. Return: AX = mode-specific palette value corresponding to specified components
  3347. Notes:    For FGDRIVER v1.10, this function was "FG_SAVE" (see AX=0087h);
  3348.       "FG_MAPRGB" was AX=001Dh
  3349.     This function is only meaningful in 16-color graphics modes
  3350. SeeAlso: AX=0042h,AX=0096h
  3351. --------V-62005B-----------------------------
  3352. INT 62 u - FGDRIVER v3.03 - "FG_MEASURE" - GET DELAY UNITS PER CLOCK TICK
  3353.     AX = 005Bh
  3354. Return: AX = delay units per clock tick (processor-dependent)
  3355. Notes:    For FGDRIVER v1.10, this function was "FG_RESTORE" (see AX=0083h);
  3356.       "FG_MEASURE" was AX=0098h
  3357.     These delay units are used by "FG_STALL" (see AX=009Fh)
  3358. SeeAlso: AX=009Fh
  3359. --------V-62005C-----------------------------
  3360. INT 62 u - FGDRIVER v3.03 - "FG_MEMAVAIL" - QUERY AMOUNT OF FREE MEMORY
  3361.     AX = 005Ch
  3362. Return: DX:AX = number of bytes of conventional memory available
  3363. Note:    For FGDRIVER v1.10, this function was "FG_TRANSFER" (see AX=00A9h);
  3364.       "FG_MEMAVAIL" was AX=009Bh
  3365. SeeAlso: AX=004Ch,AX=005Dh
  3366. --------V-62005D-----------------------------
  3367. INT 62 u - FGDRIVER v3.03 - "FG_MEMORY" - GET SIZE OF VIDEO MEMORY
  3368.     AX = 005Dh
  3369. Return: AX = size of video memory in KB
  3370. Notes:    For FGDRIVER v1.10, this function was "FG_TCXFER" (see AX=00A6h);
  3371.       "FG_MEMORY" did not exist yet
  3372.     You must first call "FG_SVGAINIT" (see AX=00A1h) before using this
  3373.       function
  3374. SeeAlso: AX=005Ch
  3375. --------V-62005E-----------------------------
  3376. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEBUT" - GET MOUSE BUTTON PRESS/RELEASE CNTS
  3377.     AX = 005Eh
  3378.     CX = mouse button (1 = left press, 2 = right press, 3 = middle press,
  3379.           -1=left release, -2=right release, -3=middle release)
  3380.     ES:BX -> variable pointer record (see #1900)
  3381. Return: variables updated
  3382. Notes:    For FGDRIVER v1.10, this function was "FG_TCMASK" (see AX=00A5h);
  3383.       "FG_MOUSEBUT" was AX=007Ch
  3384.     This function returns the count of presses or releases since the last
  3385.       call to this function; if the count is zero, row and column will
  3386.       also be zero
  3387. SeeAlso: AX=005Fh,AX=0061h,AX=0064h
  3388.  
  3389. Format of FGDRIVER variable pointer record:
  3390. Offset    Size    Description    (Table 1900)
  3391.  00h    WORD    segment of WORD buffer for press/release count
  3392.  02h    WORD    offset of WORD buffer for press/release count
  3393.  04h    WORD    segment of WORD buffer for screen space col of last press/rls
  3394.  06h    WORD    offset of WORD buffer for screen space col of last press/rels
  3395.  08h    WORD    segment of WORD buffer for screen space row of last press/rls
  3396.  0Ah    WORD    offset of WORD buffer for screen space row of last press/rls
  3397. --------V-62005F-----------------------------
  3398. INT 62 u - FGDRIVER v3.03 - "FG_MOUSECUR" - SPECIFY TEXT-MODE MOUSE CURSOR
  3399.     AX = 005Fh
  3400.     BX = screen mask
  3401.     CX = cursor mask
  3402. Notes:    For FGDRIVER v1.10, this function was "FG_COPYPAGE" (see AX=0012h);
  3403.       "FG_MOUSECUR" was AX=007Eh
  3404.     This call is ignored in graphics modes
  3405. SeeAlso: AX=0065h,AX=0067h
  3406. --------V-620060-----------------------------
  3407. INT 62 u - FGDRIVER v1.10 only - "FG_DISPPCX" - DISPLAY PCX FILE
  3408.     AX = 0060h
  3409.     ES:BX -> ASCIZ filename
  3410.     CX = flags
  3411.         bit 0: use current palette rather than PCX file's palette
  3412.         bits 1-15 reserved (0)
  3413. Return: AX = status
  3414.         0000h success
  3415.         0001h file not found
  3416.         0002h file is not a valid PCX file
  3417. Notes:    This call is ignored in text modes and Hercules low-resolution graphics
  3418.     The image is displayed with its upper left corner at the current
  3419.       graphics cursor position
  3420. SeeAlso: AX=009Ah
  3421. --------V-620060-----------------------------
  3422. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEFIN" - UNHOOK FASTGRAPH MOUSE HANDLER
  3423.     AX = 0060h
  3424. Notes:    For FGDRIVER v1.10, this function was "FG_DISPPCX", which no longer
  3425.       exists; "FG_MOUSEFIN" did not exist yet
  3426.     This function should be called before switching back to text mode if
  3427.       "FG_MOUSEINI" was called while in an SVGA graphics mode
  3428. SeeAlso: AX=0061h
  3429. --------V-620061-----------------------------
  3430. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEINI" - INITIALIZE MOUSE SUPPORT
  3431.     AX = 0061h
  3432. Return: AX = status
  3433.         0002h two-button mouse
  3434.         0003h three-button mouse
  3435.         FFFFh initialization failed
  3436. Notes:    For FGDRIVER v1.10, this function was "FG_MAKEPCX" (see AX=0057h);
  3437.       "FG_MOUSEINI" was AX=007Ah
  3438.     After this call, the mouse cursor is invisible
  3439. SeeAlso: AX=0060h"3.03",AX=0062h,AX=0066h
  3440. --------V-620062-----------------------------
  3441. INT 62 u - FGDRIVER v3.03 - "FG_MOUSELIM" - SPECIFY MOUSE CURSOR LIMITS
  3442.     AX = 0062h
  3443.     BX = left-most position allowed for mouse cursor
  3444.     CX = right-most position allowed
  3445.     DX = top-most position allowed
  3446.     SI = bottom-most position allowed
  3447. Note:    For FGDRIVER v1.10, this function was "FG_IMAGESIZ" (see AX=004Bh);
  3448.       "FG_MOUSELIM" was AX=0080h
  3449. SeeAlso: AX=0061h,AX=0063h,INT 33/AX=0007h,INT 33/AX=0008h
  3450. --------V-620063-----------------------------
  3451. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEMOV" - SET MOUSE CURSOR POSITION
  3452.     AX = 0063h
  3453.     BX = new column
  3454.     CX = new row
  3455. Notes:    For FGDRIVER v1.10, this function was unused;"FG_MOUSEMOV" was AX=0081h
  3456.     This function will not move the mouse cursor outside the bounding box
  3457.       specified with AX=0080h
  3458. SeeAlso: AX=0062h,AX=0064h,INT 33/AX=0004h
  3459. --------V-620064-----------------------------
  3460. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEPOS" - GET CURRENT MOUSE POSITION
  3461.     AX = 0064h
  3462.     ES:BX -> variable pointer record (see #1901)
  3463. Notes:    For FGDRIVER v1.10, this function was "FG_FADEIN" (see AX=0027h);
  3464.       "FG_MOUSEPOS" was AX=007Dh
  3465. SeeAlso: AX=0063h
  3466.  
  3467. Format of FGDRIVER variable pointer record:
  3468. Offset    Size    Description    (Table 1901)
  3469.  00h    WORD    segment of WORD buffer for mouse column
  3470.  02h    WORD    offset of WORD buffer for mouse column
  3471.  04h    WORD    segment of WORD buffer for mouse row
  3472.  06h    WORD    offset of WORD buffer for mouse row
  3473.  08h    WORD    segment of WORD buffer for button status
  3474.  0Ah    WORD    offset of WORD buffer for button status
  3475. Note:    button status: bit 0 = left button, bit 1 = right, bit 2 = middle
  3476. --------V-620065-----------------------------
  3477. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEPTR" - SPECIFY GRAPH-MODE MOUSE CURSOR
  3478.     AX = 0065h
  3479.     ES:BX -> masks (16-byte screen mask followed by 16-byte cursor mask)
  3480.     CX = X offset of hot spot from upper left corner
  3481.     DX = Y offset of hot spot from upper left corner
  3482. Notes:    For FGDRIVER v1.10, this function was "FG_FADEOUT" (see AX=0028h);
  3483.       "FG_MOUSEPTR" was AX=007Fh
  3484.     This call is ignored in text modes
  3485. SeeAlso: AX=005Fh,INT 33/AX=0009h
  3486. --------V-620066-----------------------------
  3487. INT 62 u - FGDRIVER v3.03 - "FG_MOUSESPD" - SET MOUSE CURSOR SPEED
  3488.     AX = 0066h
  3489.     BX = horizontal mickeys per eight pixels of movement (default 16)
  3490.     CX = vertical mickeys per eight pixels of movement (default 16)
  3491. Note:    For FGDRIVER v1.10, this function was "FG_PAN" (see AX=0071h);
  3492.       "FG_MOUSESPD" was AX=0082h
  3493. SeeAlso: INT 33/AX=000Fh,INT 33/AX=001Ah
  3494. --------V-620067-----------------------------
  3495. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEVIS" - SET MOUSE CURSOR VISIBILITY
  3496.     AX = 0067h
  3497.     BX = new state (0000h invisible, 0001h visible)
  3498. Note:    For FGDRIVER v1.10, this function was "FG_SCROLL" (see AX=0089h);
  3499.       "FG_MOUSEVIS" was AX=007Bh
  3500. SeeAlso: AX=0061h,INT 33/AX=0001h,INT 33/AX=0002h
  3501. --------V-620068-----------------------------
  3502. INT 62 u - FGDRIVER v3.03 - "FG_MOVE" - SET GRAPHICS CURSOR POSITION
  3503.     AX = 0068h
  3504.     BX = new column
  3505.     CX = new row
  3506. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MOVE" was AX=0023h
  3507.     This call is ignored in text modes
  3508. SeeAlso: AX=0045h,AX=0047h,AX=0055h,AX=0063h,AX=0069h,AX=00AFh
  3509. --------V-620069-----------------------------
  3510. INT 62 u - FGDRIVER v3.03 - "FG_MOVEREL" - ADJUST GRAPHICS CURSOR POSITION
  3511.     AX = 0069h
  3512.     BX = column offset
  3513.     CX = row offset
  3514. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MOVEREL" was AX=0024h
  3515.     This call is ignored in text modes
  3516. SeeAlso: AX=0045h,AX=0047h,AX=0068h
  3517. --------V-62006A-----------------------------
  3518. INT 62 u - FGDRIVER v3.03 - "FG_MUSIC" - PLAY SERIES OF NOTES
  3519.     AX = 006Ah
  3520.     ES:BX -> '$'-terminated music string in BASIC PLAY format
  3521. Return: after music completed
  3522. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MUSIC" was AX=008Ch
  3523.     This call is ignored if asynchronous sound (AX=0089h,AX=008Bh,
  3524.       AX=008Dh) is already in progress
  3525. SeeAlso: AX=006Bh,AX=009Dh,AX=00AAh
  3526. --------V-62006B-----------------------------
  3527. INT 62 u - FGDRIVER v3.03 - "FG_MUSICB" - PLAY SERIES OF NOTES IN BACKGROUND
  3528.     AX = 006Bh
  3529.     CX = number of repetitions (negative = continuous play)
  3530.     ES:BX -> '$'-terminated music string in BASIC PLAY format
  3531. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MUSICB" was AX=008Dh
  3532.     This call is ignored if asynchronous sound (AX=0089h,AX=008Bh,
  3533.       AX=008Dh) is already in progress
  3534. SeeAlso: AX=0048h,AX=006Bh,AX=009Eh,AX=00ABh
  3535. --------V-62006C-----------------------------
  3536. INT 62 u - FGDRIVER v3.03 - "FG_NUMLOCK" - GET STATE OF NUMLOCK KEY
  3537.     AX = 006Ch
  3538. Return: AX = NumLock state (0000h off, 0001h on)
  3539. Note:    For FGDRIVER v1.10, this function was unused; "FG_NUMLOCK" was AX=0072h
  3540. SeeAlso: AX=000Ah,AX=0088h,AX=008Bh,AX=0094h
  3541. --------V-62006D-----------------------------
  3542. INT 62 u - FGDRIVER v3.03 - "FG_PAGESIZE" - GET VIDEO PAGE SIZE FOR CURR MODE
  3543.     AX = 006Dh
  3544. Return: DX:AX = page size in bytes
  3545. Note:    For FGDRIVER v1.10, this function was "FG_WAITKEY" (see AX=00ADh);
  3546.       "FG_PAGESIZE" did not exist yet
  3547. SeeAlso: AX=005Dh
  3548. --------V-62006E-----------------------------
  3549. INT 62 u - FGDRIVER v3.03 - "FG_PAINT" - FLOOD CLOSED REGION WITH COLOR
  3550.     AX = 006Eh
  3551.     BX = column
  3552.     CX = row
  3553. Notes:    For FGDRIVER v1.10, this function was "FG_GETKEY" (see AX=003Ah);
  3554.       "FG_PAINT" was AX=002Fh
  3555.     This function fills an arbitrary closed region around the specified
  3556.       point with the current color; the screen edges are not considered
  3557.       region boundaries
  3558.     This call is ignored in text modes
  3559. SeeAlso: AX=002Bh
  3560. --------V-62006F-----------------------------
  3561. INT 62 u - FGDRIVER v3.03 - "FG_PALETTE" - SET PALETTE / SET VIDEO DAC REGISTER
  3562.     AX = 006Fh
  3563. ---CGA 4-color graphics---
  3564.     BX = CGA paletee number
  3565.     CX = background color
  3566. ---CGA 2-color graphics---
  3567.     BX ignored
  3568.     CX = foreground color
  3569. ---16-color graphics---
  3570.     BX = palette register number
  3571.     CX = palette value
  3572. ---256-color graphics---
  3573.     BX = DAC register number
  3574.     CX =  DAC value
  3575. Notes:    For FGDRIVER v1.10, this function was "FG_INTKEY" (see AX=0051h);
  3576.       "FG_PALETTE" was AX=0017h
  3577.     This function is ignored in text modes and Hercules graphics modes
  3578.     Few EGA/VGA adapters correctly set the foreground color in CGA mode 6
  3579. SeeAlso: AX=0035h,AX=0042h,AX=0070h,AX=008Eh
  3580. --------V-620070-----------------------------
  3581. INT 62 u - FGDRIVER v3.03 - "FG_PALETTES" - SET ALL PALETTE REGISTERS
  3582.     AX = 0070h
  3583.     ES:BX -> array of 16 WORDs containing values for palette registers
  3584.           (or first 16 DAC registers in 256-color modes)
  3585. Notes:    For FGDRIVER v1.10, this function was "FG_CAPSLOCK" (see AX=000Ah);
  3586.       "FG_PALETTES" was AX=0018h
  3587.     This function is ignored in text modes, CGA and Hercules graphics modes
  3588. SeeAlso: AX=0035h,AX=0042h,AX=006Fh,AX=008Eh
  3589. --------V-620071-----------------------------
  3590. INT 62 u - FGDRIVER v3.03 - "FG_PAN" - SET SCREEN ORIGIN
  3591.     AX = 0071h
  3592.     BX = new column for screen origin
  3593.     CX = new row for screen origin
  3594. Note:    For FGDRIVER v1.10, this function was "FG_SETCAPS" (see AX=008Bh);
  3595.       "FG_PAN" was AX=0066h
  3596. SeeAlso: AX=0095h
  3597. --------V-620072-----------------------------
  3598. INT 62 u - FGDRIVER v3.03 - "FG_PATTERN" - SPECIFY DISPLAY PATTERN FOR COLOR
  3599.     AX = 0072h
  3600.     BX = index of pattern to define
  3601.     CX = number of predefined display pattern
  3602. Notes:    For FGDRIVER v1.10, this function was "FG_NUMLOCK" (see AX=006Ch);
  3603.       "FG_PATTERN" was AX=0050h
  3604.     When displaying a pixel run map, Fastgraph uses the pattern associated
  3605.       with each color index rather than displaying the actual color
  3606.     This call has no effect in text and 256-color graphics modes
  3607. SeeAlso: AX=0021h,AX=0039h
  3608. --------V-620073-----------------------------
  3609. INT 62 u - FGDRIVER v3.03 - "FG_PCXHEAD" - GET PCX FILE HEADER
  3610.     AX = 0073h
  3611.     ES:BX -> variable pointer record (see #1902)
  3612. Return: AX = status
  3613.         0000h successful
  3614.         FFFEh not a PCX file
  3615.         FFFFh file does not exist
  3616. Note:    For FGDRIVER v1.10, this function was "FG_SETNUM" (see AX=0094h);
  3617.       "FG_PCXHEAD" did not exist yet
  3618. SeeAlso: AX=0074h,AX=009Ah
  3619.  
  3620. Format of FGDRIVER variable pointer record:
  3621. Offset    Size    Description    (Table 1902)
  3622.  00h    WORD    segment of ASCIZ filename
  3623.  02h    WORD    offset of ASCIZ filename
  3624.  04h    WORD    segment of 128-byte buffer for PCX header
  3625.  06h    WORD    offset of 128-byte buffer for PCX header
  3626. --------V-620074-----------------------------
  3627. INT 62 u - FGDRIVER v3.03 - "FG_PCXMODE" - GET OPTIMAL VIDEO MODE FOR DISPLAY
  3628.     AX = 0074h
  3629.     ES:BX -> PCX header (see AX=0073h)
  3630. Return: AX = optimal video mode for PCX file
  3631.         FFFEh not a valid PCX header
  3632.         FFFFh unable to determine compatible video mode
  3633. Note:    For FGDRIVER v1.10, this function was "FG_SCRLOCK" (see AX=0088h);
  3634.       "FG_PCXMODE" did not exist yet
  3635. SeeAlso: AX=0073h,AX=009Ah
  3636. --------V-620075-----------------------------
  3637. INT 62 u - FGDRIVER v3.03 - "FG_PLAYING" - DETERMINE WHETHER ASYNC SOUND ACTIVE
  3638.     AX = 0075h
  3639. Return: AX = sound state (0 = no asynchronous sound, 1 = async sound playing)
  3640. Note:    For FGDRIVER v1.10, this function was "FG_INITJOY" (see AX=004Dh);
  3641.       "FG_PLAYING" was AX=0091h
  3642. SeeAlso: AX=0048h,AX=006Bh,AX=009Eh,AX=00ABh
  3643. --------V-620076-----------------------------
  3644. INT 62 u - FGDRIVER v3.03 - "FG_POINT" - DISPLAY A PIXEL
  3645.     AX = 0076h
  3646.     BX = column
  3647.     CX = row
  3648. Notes:    For FGDRIVER v1.10, this function was "FG_GETXJOY" (see AX=0044h);
  3649.       "FG_POINT" was AX=001Fh
  3650.     This call is ignored in text modes
  3651. SeeAlso: AX=0006h,AX=001Bh,AX=0041h,AX=0077h
  3652. --------V-620077-----------------------------
  3653. INT 62 u - FGDRIVER v3.03 - "FG_POINTX" - DISPLAY A PIXEL IN XOR MODE
  3654.     AX = 0077h
  3655.     BX = column
  3656.     CX = row
  3657. Notes:    For FGDRIVER v1.10, this function was "FG_GETYJOY" (see AX=0046h);
  3658.       "FG_POINTX" did not exist yet
  3659.     This call is ignored in text modes
  3660. SeeAlso: AX=0041h,AX=0076h
  3661. --------V-620078-----------------------------
  3662. INT 62 u - FGDRIVER v3.03 - "FG_POLYFILL" - DRAW A FILLED CONVEX POLYGON
  3663.     AX = 0078h
  3664.     CX = number of vertices
  3665.     ES:BX -> variable pointer record (see #1903)
  3666. Notes:    For FGDRIVER v1.10, this function was "FG_BUTTON" (see AX=0009h);
  3667.       "FG_POLYFILL" did not exist yet
  3668.     The vertex array consists of pairs of words specifying the X and Y
  3669.       coordinates of each vertex; the work array is used internally and
  3670.       must contain at least four times as many bytes as the polygon is
  3671.       high in pixels
  3672.     This function is ignored in text modes
  3673.     If the polygon is non-convex, only a portion of it may be filled
  3674. SeeAlso: AX=000Eh,AX=0025h,AX=0079h,AX=007Ah,AX=007Bh
  3675.  
  3676. Format of FGDRIVER variable pointer record:
  3677. Offset    Size    Description    (Table 1903)
  3678.  00h    WORD    segment of vertex array
  3679.  02h    WORD    offset of vertex array
  3680.  04h    WORD    segment of work array
  3681.  06h    WORD    offset of work array
  3682. --------V-620079-----------------------------
  3683. INT 62 u - FGDRIVER v3.03 - "FG_POLYGON" - DRAW AN UNFILLED POLYGON
  3684.     AX = 0079h
  3685.     CX = number of vertices in polygon
  3686.     ES:BX -> variable pointer record (see #1904)
  3687. Notes:    For FGDRIVER v1.10, this function was "FG_INTJOY" (see AX=0050h);
  3688.       "FG_POLYGON" was AX=002Eh
  3689.     This call is ignored in text modes
  3690. SeeAlso: AX=0078h,AX=007Ah,AX=007Bh
  3691.  
  3692. Format of FGDRIVER variable pointer record:
  3693. Offset    Size    Description    (Table 1904)
  3694.  00h    WORD    segment of WORD array containing vertex columns
  3695.  02h    WORD    offset of WORD array containing vertex columns
  3696.  04h    WORD    segment of WORD array containing vertex rows
  3697.  06h    WORD    offset of WORD array containing vertex rows
  3698. --------V-62007A-----------------------------
  3699. INT 62 u - FGDRIVER v3.03 - "FG_POLYLINE" - DRAW AN UNFILLED POLYGON
  3700.     AX = 007Ah
  3701.     CX = number of vertices in polygon
  3702.     ES:BX -> vertex array (see #1905)
  3703. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEINI" (see AX=0061h);
  3704.       "FG_POLYLINE" did not exist yet
  3705.     This function is equivalent to "FG_POLYGON", but uses only a single
  3706.       array to define the vertices
  3707.     This call is ignored in text modes
  3708. SeeAlso: AX=0076h,AX=0078h,AX=0079h,AX=007Bh
  3709.  
  3710. Format of FGDRIVER vertex array element:
  3711. Offset    Size    Description    (Table 1905)
  3712.  00h    WORD    column
  3713.  02h    WORD    row
  3714. --------V-62007B-----------------------------
  3715. INT 62 u - FGDRIVER v3.03 - "FG_POLYOFF" - DEFINE POLYGON DRAWING OFFSET
  3716.     AX = 007Bh
  3717.     BX = horizontal offset (default 0)
  3718.     CX = vertical offset (default 0)
  3719. Desc:    define the offsets applied to all vertices of polygons drawn with
  3720.       "FG_POLYFILL" or "FG_POLYLINE"
  3721. Note:    For FGDRIVER v1.10, this function was "FG_MOUSEVIS" (see AX=0067h);
  3722.       "FG_POLYOFF" did not exist yet
  3723. SeeAlso: AX=0078h,AX=007Ah
  3724. --------V-62007C-----------------------------
  3725. INT 62 u - FGDRIVER v3.03 - "FG_PRINT" - DISPLAY STRING OF HARDWARE CHARACTERS
  3726.     AX = 007Ch
  3727.     CX = length of string
  3728.     ES:BX -> string to display
  3729. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEBUT" (see AX=005Eh);
  3730.       "FG_PRINT" did not exist yet
  3731.     The string is displayed in the current color, and the graphics cursor
  3732.       is updated to be just to the right of the last displayed character
  3733.     This function is ignored in text modes
  3734. SeeAlso: AX=000Ch,AX=002Dh,AX=0052h
  3735. --------V-62007D-----------------------------
  3736. INT 62 u - FGDRIVER v3.03 - "FG_PUTBLOCK" - RESTORE RECTANGLE OF DISPLAY
  3737.     AX = 007Dh
  3738.     ES:BX -> buffer containing previously-saved image
  3739.     CX = left edge
  3740.     DX = right edge
  3741.     SI = top edge
  3742.     DI = bottom edge
  3743. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEPOS" (see AX=0064h);
  3744.       "FG_PUTBLOCK" did not exist yet
  3745.     In text modes, coordinates are character positions; in graphics modes,
  3746.       they are defined in screen space, and the left and right edges are
  3747.       adjusted to a byte boundary if necessary
  3748. SeeAlso: AX=0031h,AX=007Eh
  3749. --------V-62007E-----------------------------
  3750. INT 62 u - FGDRIVER v3.03 - "FG_PUTIMAGE" - DISPLAY MODE-SPECIFIC BITMAP IMAGE
  3751.     AX = 007Eh
  3752.     ES:BX -> buffer containing mode-specific bitmap
  3753.     CX = width in bytes
  3754.     DX = height in pixel rows
  3755. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSECUR" (see AX=005Fh);
  3756.       "FG_PUTIMAGE" did not exist yet
  3757.     The bitmap is displayed with its lower left corner at the graphics
  3758.       cursor position; color 0 is NOT treated as transparent
  3759. SeeAlso: AX=0010h,AX=0022h,AX=002Ch,AX=0038h,AX=007Dh
  3760. --------V-62007F-----------------------------
  3761. INT 62 u - FGDRIVER v3.03 - "FG_QUIET" - STOP CONTINUOUS SYNCHRONOUS SOUND
  3762.     AX = 007Fh
  3763. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEPTR" (see AX=0065h);
  3764.       "FG_QUIET" was AX=0090h
  3765.     This call has no effect if there is no continuous sound playing
  3766. SeeAlso: AX=0048h,AX=006Ah,AX=009Eh,AX=00ABh
  3767. --------V-620080-----------------------------
  3768. INT 62 u - FGDRIVER v3.03 - "FG_RECT" - DRAW UNFILLED RECTANGLE IN SCREEN SPACE
  3769.     AX = 0080h
  3770.     BX = left edge column
  3771.     CX = right edge column
  3772.     DX = top edge row
  3773.     SI = bottom edge row
  3774. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSELIM" (see AX=0062h);
  3775.       "FG_RECT" was AX=002Ah
  3776. SeeAlso: AX=0006h,AX=0011h,AX=0021h,AX=0031h
  3777. --------V-620081-----------------------------
  3778. INT 62 u - FGDRIVER v3.03 - "FG_RESET" - ERASE SCREEN AND RESTORE SCREEN ATTR
  3779.     AX = 0081h
  3780. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEMOV" (see AX=0063h);
  3781.       "FG_RESET" was AX=0006h
  3782.     This call is ignored in graphics modes
  3783.     The screen attributes are only restored if ANSI.SYS is loaded
  3784. SeeAlso: AX=0026h,AX=0093h
  3785. --------V-620082-----------------------------
  3786. INT 62 u - FGDRIVER v3.03 - "FG_RESIZE" - SET GRAPHICS MODE VIDEO PAGE SIZE
  3787.     AX = 0082h
  3788.     BX = new page width in pixels
  3789.     CX = new page height in pixels
  3790. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSESPD" (see AX=0066h);
  3791.       "FG_RESIZE" was AX=0045h
  3792.     The visible page must be set to 0000h before making this call
  3793.     The mouse, joysticks, expanded memory, and extended memory must be
  3794.       reinitialized after this call
  3795. SeeAlso: AX=006Dh,AX=008Fh
  3796. --------V-620083-----------------------------
  3797. INT 62 u - FGDRIVER v3.03 - "FG_RESTORE" - COPY REGION FROM HIDDEN TO VIS PAGE
  3798.     AX = 0083h
  3799.     BX = left edge column
  3800.     CX = right edge column
  3801.     DX = top edge row
  3802.     SI = bottom edge row
  3803. Notes:    For FGDRIVER v1.10, this function was unused; "FG_RESTORE" was AX=005Bh
  3804.     The left and right edges are adjusted to byte boundaries if necessary
  3805. SeeAlso: AX=0087h,AX=00A6h
  3806. --------V-620084-----------------------------
  3807. INT 62 u - FGDRIVER v3.03 - "FG_RESUME" - RESTART ASYNCHRONOUS SOUND
  3808.     AX = 0084h
  3809. Notes:    For FGDRIVER v1.10, this function was unused; "FG_RESUME" was AX=0092h
  3810. SeeAlso: AX=009Eh,AX=00A0h
  3811. --------V-620085-----------------------------
  3812. INT 62 u - FGDRIVER v3.03 - "FG_REVIMAGE" - DISPLAY REVERSED IMAGE (BITMAP)
  3813.     AX = 0085h
  3814.     ES:BX -> mode-specific bitmap
  3815.     CX = width of bitmap in bytes
  3816.     DX = height of bitmap in pixel rows
  3817. Notes:    For FGDRIVER v1.10, this function was unused;"FG_REVIMAGE" was AX=004Bh
  3818.     This call is ignored in text modes
  3819.     The image is drawn with its lower left corner at the current graphics
  3820.       cursor position
  3821. SeeAlso: AX=0010h,AX=0022h,AX=002Ch,AX=0038h,AX=0086h,AX=008Ch,AX=009Ah
  3822. --------V-620086-----------------------------
  3823. INT 62 u - FGDRIVER v3.03 - "FG_REVMASK" - DISPLAY REVERSED IMAGE (MASKING MAP)
  3824.     AX = 0086h
  3825.     ES:BX -> array containing image stored as a masking map (see #1893)
  3826.     CX = number of pixel runs in masking map
  3827.     DX = width of masking map in pixels
  3828. Notes:    For FGDRIVER v1.10, this function was unused; "FG_REVMASK" was AX=0053h
  3829.     This call is ignored in text modes and in native EGA and VGA graphics
  3830.       modes
  3831.     The image is drawn with its lower left corner at the current graphics
  3832.       cursor position
  3833. SeeAlso: AX=000Fh,AX=001Dh,AX=002Ah,AX=0085h,AX=008Ch,AX=00A5h
  3834. --------V-620087-----------------------------
  3835. INT 62 u - FGDRIVER v3.03 - "FG_SAVE" - COPY REGION FROM VISIBLE TO HIDDEN PAGE
  3836.     AX = 0087h
  3837.     BX = left edge column
  3838.     CX = right edge column
  3839.     DX = top edge row
  3840.     SI = bottom edge row
  3841. Notes:    For FGDRIVER v1.10, this function was unused; "FG_SAVE" was AX=005Ah
  3842.     The left and right edges are adjusted to byte boundaries if necessary
  3843. SeeAlso: AX=0083h,AX=00A6h
  3844. --------V-620088-----------------------------
  3845. INT 62 u - FGDRIVER v3.03 - "FG_SCRLOCK" - GET STATE OF SCROLL LOCK KEY
  3846.     AX = 0088h
  3847. Return: AX = ScrollLock state (0000h off, 0001h on)
  3848. Program: FGDRIVER is the external video driver for the shareware
  3849.       Fastgraph/Light by Ted Gruber Software
  3850. Note:    For FGDRIVER v1.10, this function was "FG_SOUND" (see AX=009Dh);
  3851.       "FG_SCRLOCK" was AX=0074h
  3852. SeeAlso: AX=000Ah,AX=006Ch,AX=008Bh,AX=0094h
  3853. --------V-620089-----------------------------
  3854. INT 62 u - FGDRIVER v3.03 - "FG_SCROLL" - VERTICALLY SCROLL SCREEN REGION
  3855.     AX = 0089h
  3856.     BX = left edge column
  3857.     CX = right edge column
  3858.     DX = top edge row
  3859.     SI = bottom edge row
  3860.     DI = number of pixels by which to scroll (positive scrolls up,
  3861.           negative scrolls down)
  3862.     ES = type of scroll
  3863.         0000h circular (rows scrolled off are copied to vacated rows)
  3864.         else vacated rows are filled with the current color
  3865. Notes:    For FGDRIVER v1.10, this function was "FG_SOUNDS" (see AX=009Eh);
  3866.       "FG_SCROLL" was AX=0067h
  3867.     In graphics modes, the left and right edges are adjusted to byte
  3868.       boundaries if necessary
  3869.     Circular scrolling uses part of the hidden page as a workspace
  3870. SeeAlso: AX=0071h,AX=0095h
  3871. --------V-62008A-----------------------------
  3872. INT 62 u - FGDRIVER v3.03 - "FG_SETATTR" - SET TEXT-MODE CHARACTER ATTRIBUTE
  3873.     AX = 008Ah
  3874.     BX = foreground
  3875.     CX = background
  3876.     DX = blink (0000h nonblinking, 0001h blink)
  3877. Notes:    For FGDRIVER v1.10, this function was "FG_VOICE" (see AX=00AAh);
  3878.       "FG_SETATTR" was AX=0019h
  3879.     This call is ignored in graphics modes
  3880. SeeAlso: AX=000Bh,,AX=0030h,AX=0034h
  3881. --------V-62008B-----------------------------
  3882. INT 62 u - FGDRIVER v3.03 - "FG_SETCAPS" - SET STATE OF CAPSLOCK KEY
  3883.     AX = 008Bh
  3884.     BX = new state (0000h off, 0001h on)
  3885. Note:    For FGDRIVER v1.10, this function was "FG_VOICES" (see AX=00ABh);
  3886.       "FG_SETCAPS" was AX=0071h
  3887. SeeAlso: AX=000Ah,AX=006Ch,AX=0088h,AX=0094h
  3888. --------V-62008C-----------------------------
  3889. INT 62 u - FGDRIVER v3.03 - "FG_SETCLIP" - SET CLIPPING REGION
  3890.     AX = 008Ch
  3891.     BX = left edge of clipping region
  3892.     CX = right edge of clipping region
  3893.     DX = top edge of clipping region
  3894.     SI = bottom edge of clipping region
  3895. Note:    For FGDRIVER v1.10, this function was "FG_MUSIC" (see AX=006Ah);
  3896.       "FG_SETCLIP" was AX=0029h
  3897. SeeAlso: AX=000Fh,AX=001Dh,AX=002Ah,AX=0086h,AX=00A5h
  3898. --------V-62008D-----------------------------
  3899. INT 62 u - FGDRIVER v3.03 - "FG_SETCOLOR" - SET CURRENT COLOR
  3900.     AX = 008Dh
  3901.     BX = new color index (or text attribute in text modes)
  3902. Note:    For FGDRIVER v1.10, this function was "FG_MUSICB" (see AX=006Bh);
  3903.       "FG_SETCOLOR" was AX=001Ah
  3904. SeeAlso: AX=0016h,AX=0034h,AX=0039h
  3905. --------V-62008E-----------------------------
  3906. INT 62 u - FGDRIVER v3.03 - "FG_SETDACS" - SET VIDEO DAC CONTENTS
  3907.     AX = 008Eh
  3908.     CX = number of DAC registers to set (0001h to 0100h)
  3909.     DX = starting DAC register number (0000h to 00FFh)
  3910.     ES:BX -> buffer containing DAC red/green/blue triples
  3911. Notes:    For FGDRIVER v1.10, this function was "FG_HUSH" (see AX=0048h);
  3912.       "FG_SETDACS" was AX=00A5h
  3913.     The register number wraps back to zero after reaching FFh
  3914.     This call has no effect in text modes or graphics modes below 11h
  3915. SeeAlso: AX=0035h,AX=0042h,AX=006Fh,INT 10/AX=1012h
  3916. --------V-62008F-----------------------------
  3917. INT 62 u - FGDRIVER v3.03 - "FG_SETENTRY" - SET TYPE AND ADDRESS OF VIDEO PAGE
  3918.     AX = 008Fh
  3919.     BX = page number (00h-3Fh)
  3920.     CX = page address
  3921.     DX = page type (see #1895 at AX=0036h)
  3922. Notes:    For FGDRIVER v1.10, this function was "FG_HUSHNEXT" (see AX=0049h);
  3923.       "FG_SETENTRY" did not exist yet
  3924. SeeAlso: AX=002Eh,AX=0036h,AX=0093h
  3925. --------V-620090-----------------------------
  3926. INT 62 u - FGDRIVER v3.03 - "FG_SETFUNC" - SET LOGICAL OPERATION FOR VIDEO OPS
  3927.     AX = 0090h
  3928.     BX = operation
  3929.         0000h replacement
  3930.         0001h AND
  3931.         0002h OR
  3932.         0003h XOR
  3933. Notes:    For FGDRIVER v1.10, this function was "FG_QUIET" (see AX=007Fh);
  3934.       "FG_SETFUNC" was AX=009Ch
  3935.     This function is only available in native EGA/VGA graphics modes
  3936.       (0Dh to 12h)
  3937. SeeAlso: AX=001Ch,AX=0076h
  3938. --------V-620091-----------------------------
  3939. INT 62 u - FGDRIVER v3.03 - "FG_SETHPAGE" - SET HIDDEN VIDEO PAGE
  3940.     AX = 0091h
  3941.     BX = new hidden page (0000h to 003Fh)
  3942. Notes:    For FGDRIVER v1.10, this function was "FG_PLAYING" (see AX=0075h);
  3943.       "FG_SETHPAGE" was AX=0041h
  3944.     The specified page must be a physical page or a virtual page
  3945. SeeAlso: AX=0037h,AX=0095h,AX=0098h
  3946. --------V-620092-----------------------------
  3947. INT 62 u - FGDRIVER v3.03 - "FG_SETLINES" - SET TEXT ROWS ON SCREEN
  3948.     AX = 0092h
  3949.     BX = new screen size (25, 43, 50)
  3950. Note:    For FGDRIVER v1.10, this function was "FG_RESUME" (see AX=0084h);
  3951.       "FG_SETLINES" was AX=0011h
  3952. SeeAlso: AX=003Bh
  3953. --------V-620093-----------------------------
  3954. INT 62 u - FGDRIVER v3.03 - "FG_SETMODE" - SELECT VIDEO MODE AND INITIALIZE
  3955.     AX = 0093h
  3956.     BX = new video mode or FFFFh for current mode
  3957.     ES:DX -> WORD ???
  3958. Notes:    For FGDRIVER v1.10, this function was "FG_SUSPEND" (see AX=00A0h);
  3959.       "FG_SETMODE" was AX=0001h
  3960.     This call resets the active video page to page 0000h, the clipping
  3961.       region to the entire screen, text rows to 25, etc.
  3962. SeeAlso: AX=003Fh,INT 10/AH=00h
  3963.  
  3964. (Table 1906)
  3965. Values for FGDRIVER video mode:
  3966.  00h-07h standard BIOS modes
  3967.  09h    PCjr/Tandy1000 320x200x16
  3968.  0Bh    Hercules graphics 720x348
  3969.  0Ch    Hercules graphics 320x200
  3970.  0Dh-13h standard BIOS modes
  3971.  14h    VGA graphics 320x200x256
  3972.  15h    VGA graphics 320x400x256
  3973.  16h    VGA graphics 320x240x256
  3974.  17h    VGA graphics 320x480x256
  3975.  18h    SVGA graphics 640x400x256
  3976.  19h    SVGA graphics 640x480x256
  3977.  1Ah    SVGA graphics 800x600x256
  3978.  1Bh    SVGA graphics 1024x768x256
  3979.  1Ch    SVGA graphics 800x600x16
  3980.  1Dh    SVGA graphics 1024x768x16
  3981. --------V-620094-----------------------------
  3982. INT 62 u - FGDRIVER v3.03 - "FG_SETNUM" - SET STATE OF NUMLOCK KEY
  3983.     AX = 0094h
  3984.     BX = new state (0000h off, 0001h on)
  3985. Note:    For FGDRIVER v1.10, this function was unused; "FG_SETNUM" was AX=0073h
  3986. SeeAlso: AX=000Ah,AX=006Ch,AX=0088h,AX=008Bh
  3987. --------V-620095-----------------------------
  3988. INT 62 u - FGDRIVER v3.03 - "FG_SETPAGE" - SET ACTIVE VIDEO PAGE
  3989.     AX = 0095h
  3990.     BX = new video page (0000h to 003Fh)
  3991. Notes:    For FGDRIVER v1.10, this function was unused; "FG_SETPAGE" was AX=003Dh
  3992.     The specified page must be a physical or virtual page
  3993. SeeAlso: AX=002Fh,AX=0036h,AX=0037h,AX=0043h,AX=0071h
  3994. --------V-620096-----------------------------
  3995. INT 62 u - FGDRIVER v3.03 - "FG_SETRGB" - SET VIDEO DAC REGISTER CONTENTS
  3996.     AX = 0096h
  3997.     BX = palette or DAC register number
  3998.     CX = red color component
  3999.     DX = green component
  4000.     SI = blue component
  4001. Notes:    For FGDRIVER v1.10, this function was "FG_WAITFOR" (see AX=00ACh);
  4002.       "FG_SETRGB" was AX=001Bh
  4003.     The register number may be negative for Tandy, PCjr, and 200-line
  4004.       EGA graphics modes to specify an intense color
  4005.     This call has no effect in text, CGA graphics, and Hercules graphics
  4006.       modes
  4007. SeeAlso: AX=0042h
  4008. --------V-620097-----------------------------
  4009. INT 62 u - FGDRIVER v3.03 - UNUSED
  4010.     AX = 0097h
  4011. Return: AX = 0000h
  4012. Note:    For FGDRIVER v1.10, this function was "FG_STALL" (see AX=009Fh)
  4013. --------V-620098-----------------------------
  4014. INT 62 u - FGDRIVER v3.03 - "FG_SETVPAGE" - SET VISIBLE VIDEO PAGE
  4015.     AX = 0098h
  4016.     BX = new video page (0000h to 003Fh)
  4017. Notes:    For FGDRIVER v1.10, this function was "FG_MEASURE" (see AX=005Bh);
  4018.       "FG_SETVPAGE" was AX=003Fh
  4019.     The specified page must be a physical or virtual page
  4020. SeeAlso: AX=0037h,AX=0091h,AX=0095h
  4021. --------V-620099-----------------------------
  4022. INT 62 u - FGDRIVER v3.03 - UNUSED
  4023.     AX = 0099h
  4024. Return: AX destroyed
  4025. Note:    For FGDRIVER v1.10, this function was "FG_GETCLOCK" (see AX=0033h)
  4026. --------V-62009A-----------------------------
  4027. INT 62 u - FGDRIVER v3.03 - "FG_SHOWPCX" - DISPLAY IMAGE FROM PCX FILE
  4028.     AX = 009Ah
  4029.     ES:BX -> ASCIZ filename of PCX image
  4030.     CX = flags (see #1907)
  4031. Return: AX = status
  4032.         0000h success
  4033.         0001h file not found
  4034.         0002h not a PCX file
  4035. Notes:    For FGDRIVER v1.10, this function was unused; "FG_SHOWPCX" did not
  4036.       exist yet
  4037.     This function is ignored in text modes and Hercules low-res graphics
  4038. SeeAlso: AX=004Ah,AX=0057h,AX=0058h,AX=0059h,AX=0060h"1.10",AX=009Bh,AX=009Ch
  4039.  
  4040. Bitfields for FGDRIVER flags:
  4041. Bit(s)    Description    (Table 1907)
  4042.  0    use current palette rather than PCX file's palette
  4043.  1    display image at cursor position instead of position in PCX header
  4044.  2-15    reserved
  4045. --------V-62009B-----------------------------
  4046. INT 62 u - FGDRIVER v3.03 - "FG_SHOWPPR" - DISPLAY IMAGE FROM PPR FILE
  4047.     AX = 009Bh
  4048.     ES:BX -> ASCIZ filename of packed pixel run image
  4049.     CX = width in pixels (nonzero)
  4050. Return: AX = status
  4051.         0000h successful
  4052.         0001h file not found
  4053. Notes:    For FGDRIVER v1.10, this function was "FG_MEMAVAIL" (see AX=005Ch);
  4054.       "FG_SHOWPPR" did not exist yet
  4055.     The image is displayed with its lower left corner at the current
  4056.       graphics cursor position
  4057.     This function is ignored in text modes and 256-color graphics modes
  4058. SeeAlso: AX=004Ah,AX=0057h,AX=0058h,AX=0059h,AX=009Ah,AX=009Ch
  4059. --------V-62009C-----------------------------
  4060. INT 62 u - FGDRIVER v3.03 - "FG_SHOWSPR" - DISPLAY IMAGE FROM SPR FILE
  4061.     AX = 009Ch
  4062.     ES:BX -> ASCIZ filename of standard pixel run image
  4063.     CX = width in pixels (nonzero)
  4064. Return: AX = status
  4065.         0000h successful
  4066.         0001h file not found
  4067. Notes:    For FGDRIVER v1.10, this function was "FG_SETFUNC" (see AX=0090h);
  4068.       "FG_SHOWSPR" did not exist yet
  4069.     The image is displayed with its lower left corner at the current
  4070.       graphics cursor position
  4071.     This function is ignored in text modes
  4072. SeeAlso: AX=004Ah,AX=0057h,AX=0058h,AX=0059h,AX=009Ah,AX=009Bh
  4073. --------V-62009D-----------------------------
  4074. INT 62 u - FGDRIVER v3.03 - "FG_SOUND" - MAKE SOUND FOR SPECIFIED DURATION
  4075.     AX = 009Dh
  4076.     BX = frequency in Hertz (18-32767)
  4077.     CX = duration in clock ticks (0000h or negative for continuous sound)
  4078. Notes:    For FGDRIVER v1.10, this function was "FG_ALLOCCMS" (see AX=0001h);
  4079.       "FG_SOUND" was AX=0088h
  4080.     This call is ignored if asynchronous sound (AX=0089h,AX=008Bh,
  4081.       AX=008Dh) is already in progress
  4082. SeeAlso: AX=0048h,AX=006Ah,AX=009Eh,AX=00A0h,AX=00AAh
  4083. --------V-62009E-----------------------------
  4084. INT 62 u - FGDRIVER v3.03 - "FG_SOUNDS" - PLAY SOUNDS IN BACKGROUND
  4085.     AX = 009Eh
  4086.     CX = number of times to cycle through sound list
  4087.     ES:BX -> sounds array (see #1908)
  4088. Notes:    For FGDRIVER v1.10, this function was "FG_ALLOCEMS" (see AX=0002h);
  4089.       "FG_SOUNDS" was AX=0089h
  4090.     This call is ignored if asynchronous sound (AX=0089h,AX=008Bh,
  4091.       AX=008Dh) is already in progress
  4092. SeeAlso: AX=0048h,AX=006Bh,AX=009Dh,AX=00A0h,AX=00ABh
  4093.  
  4094. Format of FGDRIVER sounds array element:
  4095. Offset    Size    Description    (Table 1908)
  4096.  00h    WORD    frequency of sound in Hertz (0000h ends array)
  4097.  02h    WORD    duration of sound in clock ticks
  4098. --------V-62009F-----------------------------
  4099. INT 62 u - FGDRIVER v3.03 - "FG_STALL" - PAUSE FOR SPECIFIED DURATION
  4100.     AX = 009Fh
  4101.     BX = duration in processor-dependent delay units (see AX=005Bh)
  4102. Return: after delay elapses
  4103. Note:    For FGDRIVER v1.10, this function was "FG_ALLOCXMS" (see AX=0003h);
  4104.       "FG_STALL" was AX=0097h
  4105. SeeAlso: AX=005Bh,INT 2F/AX=1224h
  4106. --------V-6200A0-----------------------------
  4107. INT 62 u - FGDRIVER v3.03 - "FG_SUSPEND" - TEMPORARILY STOP ASYNCHRONOUS SOUND
  4108.     AX = 00A0h
  4109. Notes:    For FGDRIVER v1.10, this function was "FG_INITEMS" (see AX=004Ch);
  4110.       "FG_SUSPEND" was AX=0093h
  4111.     This call has no effect if there is no asynchronous sound in progress
  4112.     The program must not exit while sound is suspended
  4113. SeeAlso: AX=0048h,AX=006Ah,AX=009Eh,AX=00A0h,AX=00AAh
  4114. --------V-6200A1-----------------------------
  4115. INT 62 u - FGDRIVER v3.03 - "FG_SVGAINIT" - INITIALIZE FASTGRAPH SVGA KERNEL
  4116.     AX = 00A1h
  4117.     BX = method (see #1909)
  4118. Return: AX = status
  4119.         0000h no VESA BIOS or supported SVGA chipset
  4120.         0001h using VESA BIOS
  4121.         0002h-0016h specific chipset being used (same as "method" below)
  4122. Notes:    For FGDRIVER v1.10, this function was "FG_INITXMS" (see AX=004Eh);
  4123.       "FG_SVGAINIT" did not exist yet
  4124.     This function must be called before attempting to set SVGA graphics
  4125.       modes (18h to 1Dh) or using "FG_BESTMODE", "FG_TESTMODE", or
  4126.       "FG_MEMORY"
  4127. SeeAlso: AX=0023h,AX=00A2h,AX=00A3h
  4128.  
  4129. (Table 1909)
  4130. Values for FGDRIVER SVGA method:
  4131.  0000h    autodetect, give chipset-specific code priority over VESA
  4132.  0001h    autodetect, give VESA priority over chipset-specific code
  4133.  0002h    Ahead type "A"
  4134.  0003h    Ahead type "B"
  4135.  0004h    ATI 18800
  4136.  0005h    ATI 18800-1
  4137.  0006h    ATI 28800
  4138.  0007h    Chips & Technologies 82c451/455/456
  4139.  0008h    C&T 82c452
  4140.  0009h    C&T 82c453
  4141.  000Ah    Genoa 6000 series
  4142.  000Bh    Oak OTI-067
  4143.  000Ch    Paradise PVGA1a
  4144.  000Dh    Paradise WD90C00/WD90C10
  4145.  000Eh    Paradise WD90C11/WD90C30/WD90C31
  4146.  000Fh    Trident 8800
  4147.  0010h    Trident 8900
  4148.  0011h    Tseng ET3000
  4149.  0012h    Tseng ET4000
  4150.  0013h    Video7
  4151.  0014h    Cirrus Logic 5400 series
  4152.  0015h    S3
  4153.  0016h    Trident 8900B/8900C/9000
  4154. --------V-6200A2-----------------------------
  4155. INT 62 u - FGDRIVER v3.03 - "FG_SVGASTAT" - GET SVGA CHIPSET INFORMATION
  4156.     AX = 00A2h
  4157. Return: AX = chipset information (see #1910)
  4158. Note:    For FGDRIVER v1.10, this function was "FG_BOX" (see AX=0006h);
  4159.       "FG_SVGASTAT" did not exist yet
  4160. SeeAlso: AX=0023h,AX=00A1h,AX=00A3h
  4161.  
  4162. Bitfields for FGDRIVER chipset information:
  4163. Bit(s)    Description    (Table 1910)
  4164.  0    SVGA kernel initialized
  4165.  1    VESA support enabled
  4166.  2    extended video pages available in modes 13-23
  4167.  3    SVGA chipset has separate read and write banks
  4168.  4-15    reserved (0)
  4169. --------V-6200A3-----------------------------
  4170. INT 62 u - FGDRIVER v3.03 - "FG_SVGAVER" - GET FASTGRAPH SVGA KERNEL VERSION
  4171.     AX = 00A3h
  4172.     ES:BX -> variable pointer record (see #1911)
  4173. Note:    For FGDRIVER v1.10, this function was "FG_BOXDEPTH" (see AX=0007h);
  4174.       "FG_SVGAVER" did not exist yet
  4175. SeeAlso: AX=00A1h,AX=00A2h
  4176.  
  4177. Format of FGDRIVER variable pointer record:
  4178. Offset    Size    Description    (Table 1911)
  4179.  00h    WORD    segment of WORD buffer for major version
  4180.  02h    WORD    offset of WORD buffer for major version
  4181.  04h    WORD    segment of WORD buffer for minor version (hundredths)
  4182.  06h    WORD    offset of WORD buffer for minor version
  4183. --------V-6200A4-----------------------------
  4184. INT 62 u - FGDRIVER v3.03 - "FG_TCDEFINE" - DEFINE TRANSPARENCY OF COLOR INDEX
  4185.     AX = 00A4h
  4186.     BX = color index
  4187.     CX = transparency (00h opaque, other transparent)
  4188. Notes:    For FGDRIVER v1.10, this function was "FG_GETDACS" (see AX=0035h);
  4189.       "FG_TCDEFINE" did not exist yet
  4190.     This function is ignored in text modes
  4191. SeeAlso: AX=00A5h,AX=00A6h
  4192. --------V-6200A5-----------------------------
  4193. INT 62 u - FGDRIVER v3.03 - "FG_TCMASK" - SET TRANSPARENT COLORS
  4194.     AX = 00A5h
  4195.     BX = colors to consider transparent (bit 0 = color 0, etc)
  4196. Notes:    For FGDRIVER v1.10, this function was "FG_SETDACS" (see AX=008Eh);
  4197.       "FG_TCMASK" was AX=005Eh
  4198.     This call is ignored in text modes
  4199.     The specified colors are considered transparent by "FG_TCXFER"
  4200. SeeAlso: AX=00A4h,AX=00A6h
  4201. --------V-6200A6-----------------------------
  4202. INT 62 u - FGDRIVER v3.03 - "FG_TCXFER" - COPY REGION EXCLUDING TRANSPARENT
  4203.     AX = 00A6h
  4204.     CX = source video page
  4205.     DX = destination video page
  4206.     ES:BX -> copy record (see #1912)
  4207. Notes:    For FGDRIVER v1.10, this function was unused; "FG_TCXFER" was AX=005Dh
  4208.     Pixels which are in any of the colors defined as transparent with
  4209.       "FG_TCMASK" (see AX=00A5h) are left unchanged in the destination
  4210.       region
  4211.     The source and destination regions must not overlap if they are located
  4212.       on the same page
  4213.     This call is ignored in text modes
  4214. SeeAlso: AX=00A4h,AX=00A5h,AX=00A9h
  4215. --------V-6200A7-----------------------------
  4216. INT 62 u - FGDRIVER v3.03 - "FG_TESTMODE" - CHECK IF VIDEO MODE AVAILABLE
  4217.     AX = 00A7h
  4218.     BX = desired video mode (00h-17h, also 18h-1Dh after "FG_SVGAINIT")
  4219.     CX = required number of video pages (ignore memory size if <= 0)
  4220. Return: AX = status
  4221.         0000h mode not available with requested number of pages
  4222.         0001h mode is available
  4223. Note:    For FGDRIVER v1.10, this function was unused;"FG_TESTMODE" was AX=0002h
  4224. SeeAlso: AX=0005h,AX=0093h
  4225. --------V-6200A8-----------------------------
  4226. INT 62 u - FGDRIVER v3.03 - "FG_TEXT" - DISPLAY STRING OF CHARACTERS
  4227.     AX = 00A8h
  4228.     CX = length of string
  4229.     ES:BX -> string
  4230. Notes:    For FGDRIVER v1.10, this function was unused; "FG_TEXT" was AX=0032h
  4231.     The string is displayed starting at the text cursor position using the
  4232.       current text attribute (text modes) or color index (graphics modes)
  4233.     The text cursor position is updated after this call
  4234. SeeAlso: AX=000Ch,AX=007Ch
  4235. --------V-6200A9-----------------------------
  4236. INT 62 u - FGDRIVER v3.03 - "FG_TRANSFER" - COPY REGION
  4237.     AX = 00A9h
  4238.     CX = source video page
  4239.     DX = destination video page
  4240.     ES:BX -> copy record (see #1912)
  4241. Notes:    For FGDRIVER v1.10, this function was unused;"FG_TRANSFER" was AX=005Ch
  4242.     The source and destination regions must not overlap if they are located
  4243.       on the same page
  4244. SeeAlso: AX=0083h,AX=0087h,AX=0089h,AX=00A6h
  4245.  
  4246. Format of FGDRIVER copy record:
  4247. Offset    Size    Description    (Table 1912)
  4248.  00h    WORD    left edge column of source region
  4249.  02h    WORD    right edge column of source region
  4250.  04h    WORD    top edge row of source region
  4251.  06h    WORD    bottom edge row of source region
  4252.  08h    WORD    left edge of destination
  4253.  0Ah    WORD    bottom edge of destination
  4254. --------V-6200AA-----------------------------
  4255. INT 62 u - FGDRIVER v3.03 - "FG_VOICE" - START SOUND
  4256.     AX = 00AAh
  4257.     BX = channel on TI sound chip
  4258.         1-3 = channels 1-3, 4 = channel 4 with periodic noise,
  4259.         5 = channel 4 with white noise
  4260.     CX = frequency in Hz (18-32767 for channels 1-3; 0=512 Hz, 1=1024 Hz,
  4261.           2=2048 Hz for channels 4 and 5)
  4262.     DX = volume
  4263.     SI = duration in clock ticks (continuous if <= 0)
  4264. Program: FGDRIVER is the external video driver for the shareware
  4265.       Fastgraph/Light by Ted Gruber Software
  4266. Notes:    For FGDRIVER v1.10, this function was unused; "FG_VOICE" was AX=008Ah
  4267.     This function is only available on the PCjr and Tandy 1000 machines
  4268. SeeAlso: AX=006Ah,AX=009Dh,AX=00ABh
  4269. --------V-6200AB-----------------------------
  4270. INT 62 u - FGDRIVER v3.03 - "FG_VOICES" - PLAY SOUNDS IN BACKGROUND
  4271.     AX = 00ABh
  4272.     ES:BX -> tone array (see #1913)
  4273.     CX = number of times to repeat tone array
  4274. Notes:    For FGDRIVER v1.10, this function was unused; "FG_VOICES" was AX=008Bh
  4275.     This function is only available on the PCjr and Tandy 1000 machines
  4276. SeeAlso: AX=0048h,AX=006Bh,AX=009Eh,AX=00AAh
  4277.  
  4278. Format of FGDRIVER tone array element:
  4279. Offset    Size    Description    (Table 1913)
  4280.  00h    WORD    channel number (0000h terminates array)
  4281.  02h    WORD    frequency
  4282.  04h    WORD    volume
  4283.  06h    WORD    duration in 1/72.8 seconds
  4284. --------V-6200AC-----------------------------
  4285. INT 62 u - FGDRIVER v3.03 - "FG_WAITFOR" - DELAY FOR SPECIFIED DURATION
  4286.     AX = 00ACh
  4287.     BX = duration in clock ticks
  4288. Return: after delay elapses
  4289. Note:    For FGDRIVER v1.10, this function was unused; "FG_WAITFOR" was AX=0096h
  4290. SeeAlso: AX=009Fh,INT 1A/AX=FF01h
  4291. --------V-6200AD-----------------------------
  4292. INT 62 u - FGDRIVER v3.03 - "FG_WAITKEY" - FLUSH KEYBOARD BUFFER AND AWAIT KEY
  4293.     AX = 00ADh
  4294. Return: after next key pressed
  4295. Note:    For FGDRIVER v1.10, this function was unused; "FG_WAITKEY" was AX=006Dh
  4296. SeeAlso: AX=000Ah,AX=003Ah,AX=0051h,AX=0054h,INT 16/AH=00h
  4297. --------V-6200AE-----------------------------
  4298. INT 62 u - FGDRIVER v3.03 - "FG_WAITVR" - ENABLE/DISABLE VERTICAL RETRACE WAIT
  4299.     AX = 00AEh
  4300.     BX = new state (0000h disabled, 0001h enabled)
  4301. Note:    For FGDRIVER v1.10, this function was unused; "FG_WAITVR" did not
  4302.       exist yet
  4303. --------V-6200AF-----------------------------
  4304. INT 62 u - FGDRIVER v3.03 - "FG_WHERE" - GET CURRENT CURSOR POSITION
  4305.     AX = 00AFh
  4306.     ES:BX -> variable pointers (see #1914)
  4307. Return: indicated variables filled with cursor row and column for active
  4308.       display
  4309. Note:    For FGDRIVER v1.10, this function was unused; "FG_WHERE" was AX=0034h
  4310. SeeAlso: AX=0045h,AX=0047h,AX=0055h,AX=0068h
  4311.  
  4312. Format of FGDRIVER variable pointers:
  4313. Offset    Size    Description    (Table 1914)
  4314.  00h    WORD    segment of WORD buffer for cursor row
  4315.  02h    WORD    offset of WORD buffer for cursor row
  4316.  04h    WORD    segment WORD buffer for cursor column
  4317.  06h    WORD    offset WORD buffer for cursor column
  4318. --------V-6200B0-----------------------------
  4319. INT 62 u - FGDRIVER v3.03 - "FG_XALPHA" - CONVERT SCREEN COLUMN TO CHAR COLUMN
  4320.     AX = 00B0h
  4321.     BX = screen space column
  4322. Return: AX = character space column containing specified coordinate
  4323. Note:    For FGDRIVER v1.10, this function was unused; "FG_XALPHA" was AX=000Ch
  4324. SeeAlso: AX=00B1h,AX=00B2h
  4325. --------V-6200B1-----------------------------
  4326. INT 62 u - FGDRIVER v3.03 - "FG_XCONVERT" - CONVERT CHAR COLUMN TO SCREEN COL
  4327.     AX = 00B1h
  4328.     BX = character space column
  4329. Return: AX = screen space column of leftmost pixel in specified character col
  4330. Note:    For FGDRIVER v1.10, this function was unused;"FG_XCONVERT" was AX=000Eh
  4331. SeeAlso: AX=00B0h,AX=00B3h
  4332. --------V-6200B2-----------------------------
  4333. INT 62 u - FGDRIVER v3.03 - "FG_YALPHA" - CONVERT SCREEN ROW TO CHARACTER ROW
  4334.     AX = 00B2h
  4335.     BX = screen space row
  4336. Return: AX = character space row containing specified coordinate
  4337. Note:    For FGDRIVER v1.10, this function was unused; "FG_YALPHA" was AX=000Dh
  4338. SeeAlso: AX=00B0h,AX=00B3h
  4339. --------V-6200B3-----------------------------
  4340. INT 62 u - FGDRIVER v3.03 - "FG_YCONVERT" - CONVERT CHARACTER ROW TO SCREEN ROW
  4341.     AX = 00B3h
  4342.     BX = character space row
  4343. Return: AX = screen space row of topmost pixel in specified character row
  4344. Program: FGDRIVER is the external video driver for the shareware
  4345.       Fastgraph/Light by Ted Gruber Software
  4346. Note:    For FGDRIVER v1.10, this function was unused;"FG_YCONVERT" was AX=000Fh
  4347. SeeAlso: AX=00B1h,AX=00B2h
  4348. --------T-6201-------------------------------
  4349. INT 62 - Cswitch - GIVE UP REST OF TIME-SLICE
  4350.     AH = 01h
  4351. Program: Cswitch is a set of multitasking functions by Herb Rose
  4352. SeeAlso: AH=05h"Cswitch",AH=06h"Cswitch",INT 15/AX=1000h,INT 2F/AX=1680h
  4353. --------N-6201-------------------------------
  4354. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - NOP for ETHDEV.ODI
  4355.     AH = 01h
  4356. Return: CF clear if successful
  4357.     CF set on error
  4358.         AL = error code
  4359. Range:    INT 60 to INT 65 ???
  4360. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4361. --------T-6202-------------------------------
  4362. INT 62 - Cswitch - WAIT FOR SEMAPHORE
  4363.     AH = 02h
  4364.     DX = semaphore number (0-63)
  4365. Return: AX = FFFFh bad semaphore number
  4366.          else  success
  4367. SeeAlso: AH=03h"Cswitch",AH=04h"Cswitch"
  4368. --------N-6202-------------------------------
  4369. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - INITIALIZE
  4370.     AH = 02h
  4371. Return: CF clear if successful
  4372.     CF set on error
  4373.         AL = error code
  4374. SeeAlso: AH=00h"ETHDEV",AH=03h"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP"
  4375. SeeAlso: INT 63"BW-TCP",INT 64"BW-NFS"
  4376. --------T-6203-------------------------------
  4377. INT 62 - Cswitch - CHECK SEMAPHORE
  4378.     AH = 03h
  4379.     DX = semaphore number (0-63)
  4380. Return: AX = status
  4381.         FFFFh not owned
  4382.         else  owned
  4383. SeeAlso: AH=02h,AH=04h
  4384. --------N-6203-------------------------------
  4385. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - GET REAL IP ADDRESS
  4386.     AH = 03h
  4387.     DS:SI -> DWORD buffer for IP address
  4388. Return: CF clear if successful
  4389.     CF set on error
  4390.         AL = error code
  4391. Range:    INT 60 to INT 65 ???
  4392. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4393.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4394.       consecutive interrupt (64h by default) if it is loaded
  4395. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4396. --------T-6204-------------------------------
  4397. INT 62 - Cswitch - TRIGGER SEMAPHORE
  4398.     AH = 04h
  4399.     DX = semaphore number (0-63)
  4400. Return: AX = status
  4401.         FFFFh bad semaphore number
  4402.         else  success
  4403. SeeAlso: AH=02h"Cswitch",AH=03h"Cswitch"
  4404. --------N-6204-------------------------------
  4405. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - SET ???
  4406.     AH = 04h
  4407.     BX = ???
  4408.     ES:SI -> FAR routine for ???
  4409. Return: CF clear if successful
  4410.     CF set on error
  4411.         AL = error code
  4412. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4413. --------T-6205-------------------------------
  4414. INT 62 - Cswitch - SLEEP
  4415.     AH = 05h
  4416.     BX = seconds to sleep
  4417. SeeAlso: AH=01h"Cswitch",AH=06h"Cswitch",AH=08h"Cswitch"
  4418. --------N-6205-------------------------------
  4419. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ???
  4420.     AH = 05h
  4421.     ???
  4422. Return: CF clear if successful
  4423.     CF set on error
  4424.         AL = error code
  4425. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4426. --------T-6206-------------------------------
  4427. INT 62 - Cswitch - SUSPEND
  4428.     AH = 06h
  4429. SeeAlso: AH=05h"Cswitch",AH=08h"Cswitch"
  4430. --------N-6206-------------------------------
  4431. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ???
  4432.     AH = 06h
  4433.     ???
  4434. Return: CF clear if successful
  4435.     CF set on error
  4436.         AL = error code
  4437. Range:    INT 60 to INT 65 ???
  4438. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4439.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4440.       consecutive interrupt (64h by default) if it is loaded
  4441. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4442. --------T-6207-------------------------------
  4443. INT 62 - Cswitch - SPAWN
  4444.     AH = 07h
  4445.     ES:BX -> function address to start executing at
  4446.     CX = priority (1-10)
  4447. Return: AX = result/status
  4448.         FFFDh  no free memory control blocks
  4449.         FFFEh  no free task control blocks
  4450.         FFFFh  not enough memory to create new task stack
  4451.         >0       the tcb number of the new task, indicating no error
  4452. SeeAlso: AH=0Fh"Cswitch",AH=10h"Cswitch"
  4453. --------N-6207-------------------------------
  4454. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ???
  4455.     AH = 07h
  4456.     DS:SI -> ???
  4457. Return: CF clear if successful
  4458.     CF set on error
  4459.         AL = error code
  4460. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4461. --------T-6208-------------------------------
  4462. INT 62 - Cswitch - WAKE UP TASK
  4463.     AH = 08h
  4464.     BX = tcb identifier
  4465. SeeAlso: AH=05h,AH=06h
  4466. --------N-6208-------------------------------
  4467. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ???
  4468.     AH = 08h
  4469.     CX = ???
  4470.     ES:SI -> ??? buffer (see #1915)
  4471. Return: CF clear if successful
  4472.     CF set on error
  4473.         AL = error code
  4474. Range:    INT 60 to INT 65 ???
  4475. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4476.  
  4477. Format of BW-TCP ??? buffer:
  4478. Offset    Size    Description    (Table 1915)
  4479.  00h  6 BYTEs    hardware address???
  4480.  06h  6 BYTEs    ???
  4481.  0Ch    WORD    ???
  4482.  0Eh    WORD    ???
  4483. ----------6208--CXFFFE-----------------------
  4484. INT 62 - MS SQL Server/Sybase DBLIBRARY interface - UNINSTALL/GET PSP ADDR
  4485.     AH = 08h
  4486.     CX = FFFEh
  4487.     DX = FFFFh
  4488. Return: AX = PSP address of resident DBLIBRARY
  4489. Note:    this call does not free the memory allocated to the TSR; the calling
  4490.       code must do the deallocation.
  4491. SeeAlso: INT 62"DBLIBRARY"
  4492. --------T-6209-------------------------------
  4493. INT 62 - Cswitch - SET PRIORITY
  4494.     AH = 09h
  4495.     BX = new base priority (1-10)
  4496. Note:    the lower the priority is numerically, the more often the task will run
  4497. --------N-6209-------------------------------
  4498. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - HOOK TIMER INTERRUPT
  4499.     AH = 09h
  4500. Return: CF clear if successful
  4501.         AX = handler ID
  4502.     CF set on error
  4503.         AL = error code
  4504. Range:    INT 60 to INT 65 ???
  4505. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4506.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4507.       consecutive interrupt (64h by default) if it is loaded
  4508. SeeAlso: AH=0Ah"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP"
  4509. SeeAlso: INT 64"BW-NFS"
  4510. --------T-620A-------------------------------
  4511. INT 62 - Cswitch - TEST MESSAGE QUEUE
  4512.     AH = 0Ah
  4513.     DX = queue number (0-63)
  4514. Return: AX = result/message size
  4515.         0000h nothing on queue
  4516.         FFFFh bad queue number
  4517.         else  number of bytes in first message in queue
  4518. SeeAlso: AH=0Bh"Cswitch",AH=0Ch"Cswitch"
  4519. --------N-620A-------------------------------
  4520. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - UNHOOK TIMER INTERRUPT
  4521.     AH = 0Ah
  4522.     DX = handler ID
  4523. Return: CF clear if successful
  4524.     CF set on error
  4525.         AL = error code
  4526. SeeAlso: AH=09h"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP"
  4527. SeeAlso: INT 64"BW-NFS"
  4528. --------T-620B-------------------------------
  4529. INT 62 - Cswitch - SEND MESSAGE
  4530.     AH = 0Bh
  4531.     CX = number of bytes to write
  4532.     DS:SI -> buffer
  4533.     DX = queue number (0-63)
  4534. Return: AX = result/message size
  4535.         0000h no message was on queue
  4536.         FFFEh triggered by something arriving, redo the call
  4537.         FFFFh bad queue number
  4538.         else  number of bytes in message
  4539. SeeAlso: AH=0Ah"Cswitch",AH=0Ch"Cswitch"
  4540. --------N-620B-------------------------------
  4541. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ADD ???
  4542.     AH = 0Bh
  4543.     AL = ???
  4544.     DX = ???
  4545.     BP = ???
  4546.     ES:SI -> ???
  4547. Return: CF clear if successful
  4548.     CF set on error
  4549.         AL = error code
  4550. SeeAlso: AH=0Ch"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP"
  4551. SeeAlso: INT 64"BW-NFS"
  4552. --------T-620C-------------------------------
  4553. INT 62 - Cswitch - READ MESSAGE
  4554.     AH = 0Ch
  4555.     CX = number of bytes to read
  4556.     DS:SI -> buffer
  4557.     DX = queue number (0-63)
  4558. Return: AX = status
  4559.         FFFFh bad queue number
  4560.         else  number of bytes transferred
  4561. SeeAlso: AH=0Ah,AH=0Bh
  4562. --------N-620C-------------------------------
  4563. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - REMOVE ???
  4564.     AH = 0Ch
  4565.     DX = ???
  4566.     BP = ???
  4567. Return: CF clear if successful
  4568.     CF set on error
  4569.         AL = error code
  4570. Range:    INT 60 to INT 65 ???
  4571. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4572.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4573.       consecutive interrupt (64h by default) if it is loaded
  4574. SeeAlso: AH=0Bh"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP"
  4575. SeeAlso: INT 64"BW-NFS"
  4576. --------T-620D-------------------------------
  4577. INT 62 - Cswitch - DON'T ALLOW TASK TO BE SWAPPED OUT
  4578.     AH = 0Dh
  4579. SeeAlso: AH=0Eh"Cswitch"
  4580. --------N-620D-------------------------------
  4581. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - NOP for ETHDEV.ODI
  4582.     AH = 0Dh
  4583. Return: CF clear if successful
  4584.     CF set on error
  4585.         AL = error code
  4586. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4587. --------T-620E-------------------------------
  4588. INT 62 - Cswitch - ALLOW TASK TO BE SWAPPED OUT
  4589.     AH = 0Eh
  4590. SeeAlso: AH=0Dh"Cswitch"
  4591. --------N-620E-------------------------------
  4592. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - BEGIN CRITICAL SECTION
  4593.     AH = 0Eh
  4594. Return: CF clear if successful
  4595.     CF set on error
  4596.         AL = error code
  4597. SeeAlso: AH=0Fh"ETHDEV",AH=10h"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP"
  4598. SeeAlso: INT 63"BW-TCP",INT 64"BW-NFS"
  4599. --------T-620F-------------------------------
  4600. INT 62 - Cswitch - LOAD AND RUN PROGRAM FROM DISK
  4601.     AH = 0Fh
  4602.     ES:BX -> command line
  4603.     CX = priority (1-10)
  4604.     DX = background flag (nonzero allows loading to EMS)
  4605. Return: AX = status
  4606.         0000h task loader queue is full
  4607.         0001h  no error
  4608. SeeAlso: AH=07h"Cswitch",AH=10h"Cswitch",AH=13h"Cswitch"
  4609. --------N-620F-------------------------------
  4610. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - END CRITICAL SECTION
  4611.     AH = 0Fh
  4612. Return: CF clear if successful
  4613.     CF set on error
  4614.         AL = error code
  4615. Range:    INT 60 to INT 65 ???
  4616. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4617.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4618.       consecutive interrupt (64h by default) if it is loaded
  4619. SeeAlso: AH=0Eh"ETHDEV",AH=10h"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP"
  4620. SeeAlso: INT 63"BW-TCP",INT 64"BW-NFS"
  4621. --------T-6210-------------------------------
  4622. INT 62 - Cswitch - TERMINATE SPAWNED PROGRAM
  4623.     AH = 10h
  4624. SeeAlso: AH=07h"Cswitch",AH=0Fh"Cswitch"
  4625. --------N-6210-------------------------------
  4626. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - QUERY CRITICAL SECTION
  4627.     AH = 10h
  4628. Return: CF clear if no critical section active
  4629.     CF set if in critical section
  4630. SeeAlso: AH=0Eh"ETHDEV",AH=0Fh"ETHDEV",AH=FEh,INT 21/AH=3Fh"BW-TCP"
  4631. SeeAlso: INT 63"BW-TCP",INT 64"BW-NFS"
  4632. --------T-6211-------------------------------
  4633. INT 62 - Cswitch - GET TCB INFORMATION
  4634.     AH = 11h
  4635.     ES:BX -> a pointer which will be set to the tcb address
  4636. Return: AX = tcb indentifier
  4637. SeeAlso: AH=12h
  4638. --------N-6211-------------------------------
  4639. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - SET ???
  4640.     AH = 11h
  4641.     ES:SI -> ???
  4642. Return: CF clear
  4643. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4644. --------T-6212-------------------------------
  4645. INT 62 - Cswitch - GET TCB ADDRESS
  4646.     AH = 12h
  4647.     ES:BX -> a pointer which will be set to the tcb table address
  4648. Return: AX = tcb indentifier
  4649. SeeAlso: AH=11h"Cswitch"
  4650. --------N-6212-------------------------------
  4651. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - GET SOCKET NUMBER???
  4652.     AH = 12h
  4653. Return: CF clear if successful
  4654.         AX = socket number??? (memory variable incremented after reading)
  4655.     CF set on error
  4656.         AL = error code
  4657. Range:    INT 60 to INT 65 ???
  4658. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4659.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4660.       consecutive interrupt (64h by default) if it is loaded
  4661. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4662. --------T-6213-------------------------------
  4663. INT 62 - Cswitch - CHECK STATUS OF PREVIOUS LOAD_TASK
  4664.     AH = 13h
  4665. Return: AX = result
  4666.         FFFCh no Memory Control Blocks available
  4667.         FFFDh no TCBs available
  4668.         FFFEh insufficient memory
  4669.         FFFFh cannot open file
  4670.         0000h load in progress (not done yet)
  4671.         else  tcb indentifier
  4672. SeeAlso: AH=0Fh
  4673. --------N-6213-------------------------------
  4674. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ???
  4675.     AH = 13h
  4676.     CX = ???
  4677. Return: CF clear if successful
  4678.         AL = 00h
  4679.     CF set on error
  4680.         AL = error code
  4681. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4682. --------N-6214-------------------------------
  4683. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ???
  4684.     AH = 14h
  4685.     ES:SI -> ???
  4686. Return: CF clear if successful
  4687.         AL = 00h
  4688.     CF set on error
  4689.         AL = error code
  4690. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4691. --------N-6215-------------------------------
  4692. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - GET ???
  4693.     AH = 15h
  4694. Return: CF clear if successful
  4695.         AX = ??? (destroyed???)
  4696.     CF set on error
  4697.         AL = error code
  4698. Range:    INT 60 to INT 65 ???
  4699. Notes:    call this function after reading the "ETHDEV27" device
  4700.     the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4701.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4702.       consecutive interrupt (64h by default) if it is loaded
  4703. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4704. --------N-6216-------------------------------
  4705. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ???
  4706.     AH = 16h
  4707.     ???
  4708. Return: CF clear if successful
  4709.     CF set on error
  4710.         AL = error code
  4711. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4712. --------N-6217-------------------------------
  4713. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ???
  4714.     AH = 17h
  4715.     DX = segment of ???
  4716. Return: CF clear
  4717. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4718. --------N-6218-------------------------------
  4719. INT 62 - BW-TCP - HW DRIVER (ETHDEV.SYS) - ALLOCATE AND MAP EMS FOR DRIVER
  4720.     AH = 18h
  4721. Return: CF clear if successful
  4722.     CF set on error
  4723.         AL = error code
  4724. Range:    INT 60 to INT 65 ???
  4725. Notes:    calls function 17h after EMS allocated and mapped
  4726.     the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4727.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4728.       consecutive interrupt (64h by default) if it is loaded
  4729. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  4730. --------R-6247-------------------------------
  4731. INT 62 - PC Tools v7 COMMUTE - ???
  4732.     AH = 47h
  4733.     AL = subfunction (00h-31h)
  4734.     ???
  4735.     CF set
  4736. Return: ???
  4737. Program: COMMUTE is a remote-control program bundled with Central Point
  4738.       Software's PC Tools
  4739. --------R-6248-------------------------------
  4740. INT 62 - PC Tools v7 COMMUTE - ???
  4741.     AH = 48h
  4742.     AL = ???
  4743.     ???
  4744.     CF set
  4745. Return: ???
  4746. --------R-6249-------------------------------
  4747. INT 62 - PC Tools v7 COMMUTE - ???
  4748.     AH = 49h
  4749.     ???
  4750.     CF set
  4751. Return: ???
  4752. Note:    may be the same as AH=4Ch
  4753. --------R-624A-------------------------------
  4754. INT 62 - PC Tools v7 COMMUTE - ???
  4755.     AH = 4Ah
  4756.     AL = subfunction (00h-46h)
  4757.     ???
  4758.     CF set
  4759. Return: ???
  4760. --------R-624B--BX1234-----------------------
  4761. INT 62 - PC Tools v7 COMMUTE - ???
  4762.     AH = 4Bh
  4763.     BX = 1234h
  4764.     CX = 1234h
  4765.     ES = ???
  4766.     CF set
  4767. Return: ???
  4768. Program: COMMUTE is a remote-control program bundled with Central Point
  4769.       Software's PC Tools
  4770. --------R-624C-------------------------------
  4771. INT 62 - PC Tools v7 COMMUTE - ???
  4772.     AH = 4Ch
  4773.     BL = subfunction
  4774.         00h ???
  4775.         02h ???
  4776. Return: CF clear if successful
  4777.     CF set on error
  4778. --------R-626262-----------------------------
  4779. INT 62 - PC Tools v7 COMMUTE - INSTALLATION CHECK
  4780.     AX = 6262h
  4781.     CF set
  4782. Return: AX = 0000h
  4783.     BX = segment of resident code's PSP
  4784. Program: COMMUTE is a remote-control program bundled with Central Point
  4785.       Software's PC Tools
  4786. --------s-62C0-------------------------------
  4787. INT 62 U - GWBTSR - API
  4788.     AH = C0h
  4789.     AL = function
  4790.         00h installation check
  4791.         Return: AX = 00FFh if installed
  4792.         01h ???
  4793. Program: GWBTSR is a huge (48K) resident mixer controller for the Gateway 2000
  4794.       sound card (OEM version of Aztech Sound Galaxy)
  4795. Index:    installation check;GWBTSR
  4796. --------N-62FE-------------------------------
  4797. INT 62 - BW-TCP - ETHDRV.SYS - MAP EMS PAGE FRAME
  4798.     AH = FEh
  4799.     AL = direction
  4800.         00h map in driver's memory block
  4801.         01h map out driver's memory block
  4802. Return: CF clear if successful
  4803.     CF set on error
  4804.         AL = error code
  4805. Range:    INT 60 to INT 65 ???
  4806. Notes:    this function is supported by at least the SLIP and ODI versions of
  4807.       ETHDEV.SYS
  4808.     the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4809.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4810.       consecutive interrupt (64h by default) if it is loaded
  4811. SeeAlso: INT 21/AH=3Fh"BW-TCP",INT 62/AH=00h"ETHDEV",INT 62/AH=18h"ETHDEV"
  4812. SeeAlso: INT 63"BW-TCP",INT 64/AH=FEh
  4813. --------*-63---------------------------------
  4814. INT 63 - reserved for user interrupt
  4815. --------d-63---------------------------------
  4816. INT 63 - Adaptec and OMTI controllers - DRIVE 0 DATA
  4817. Desc:    this vector stores the last four bytes of the parameter table for
  4818.       hard disk 0
  4819. SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 62"Adaptec",INT 64"Adaptec"
  4820. ----------63---------------------------------
  4821. INT 63 - Oracle SQL Protected Mode Executive - ???
  4822. --------d-63---------------------------------
  4823. INT 63 - 4+Power FLOPPY CONTROLLER - ORIGINAL INT 13/40
  4824. Desc:    the "4+Power" quad floppy controller BIOS hooks INT 13 (or INT 40 if
  4825.       INT 13 has been moved there) and places the old value here
  4826. ----------63---------------------------------
  4827. INT 63 - Kofax KF9X00 image manipulation card interface
  4828. --------Q-63---------------------------------
  4829. INT 63 - DESQview/X - SOCKET API
  4830. Notes:    parameters are passed by patching!! data field immediately following
  4831.       the entry point, as detailed below; the preferred method for calling
  4832.       the socket API is via INT 15/AX=DE2Eh
  4833.     the installation check consists of testing for the string "dvxunix"
  4834.       (yes, lowercase) at offset 9 from the interrupt handler start
  4835. SeeAlso: INT 15/AX=DE2Eh,INT BE"DESQview"
  4836. Index:    installation check;DESQview/X socket interface
  4837.  
  4838. Format of DESQview/X socket interrupt handler entry:
  4839. Offset    Size    Description    (Table 1916)
  4840.  00h  3 BYTEs    near jump or short jump + NOP to actual interrupt handler
  4841.  03h    WORD    offset from following pointer for initial top of local stack
  4842.  05h    DWORD    pointer to argument/stack block (see INT 15/AX=DE2Eh)
  4843.  09h  7 BYTEs    signature "dvxunix"
  4844. --------b-6300-------------------------------
  4845. INT 63 - HP 100LX - MAP HIGH MEMORY
  4846.     AH = 00h
  4847.     AL = physical page (00h seg C000, 01h seg C400h, ...)
  4848.     BX = zero-based logical page
  4849.     CX = page number
  4850.     DX = device ID (00h system ROM, 05h plugin, etc.)
  4851. Return: ???
  4852. SeeAlso: AH=01h
  4853. --------N-6300-------------------------------
  4854. INT 63 - BW-TCP - TCPIP.SYS - SET IP ADDRESS???
  4855.     AH = 00h
  4856.     DS:BX -> DWORD containing IP address (big-endian)
  4857. Return: CF clear if successful
  4858.     CF set on error
  4859.     AX destroyed
  4860. Range:    INT 61 to INT 66 ???
  4861. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4862.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4863.       consecutive interrupt (64h by default) if it is loaded
  4864. SeeAlso: AH=01h"BW-TCP",AH=02h"BW-TCP"
  4865. --------b-6301-------------------------------
  4866. INT 63 - HP 100LX - SAVE/RESTORE MEMORY MAP
  4867.     AH = 01h
  4868.     AL = function (00h save, 01h restore)
  4869.     ???
  4870. Return: ???
  4871. --------N-6301-------------------------------
  4872. INT 63 - BW-TCP - TCPIP.SYS - ???
  4873.     AH = 01h
  4874.     ES:BX -> ???
  4875.     ???
  4876. Return: ???
  4877. Range:    INT 61 to INT 66 ???
  4878. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4879.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4880.       consecutive interrupt (64h by default) if it is loaded
  4881. SeeAlso: AH=00h"BW-TCP",AH=02h"BW-TCP"
  4882. --------N-6302-------------------------------
  4883. INT 63 - BW-TCP - TCPIP.SYS - ???
  4884.     AH = 02h
  4885.     ???
  4886. Return: ???
  4887. SeeAlso: AH=00h"BW-TCP",AH=01h"BW-TCP"
  4888. --------N-6303-------------------------------
  4889. INT 63 - BW-TCP - TCPIP.SYS - GET IP ADDRESS
  4890.     AH = 03h
  4891.     DS:SI -> buffer for DWORD IP address (big-endian)
  4892. Return: AX destroyed
  4893.     CF clear if successful
  4894.     CF set on error
  4895. Note:    this call may use ARP or RARP to determine the address
  4896. --------N-6304-------------------------------
  4897. INT 63 - BW-TCP - TCPIP.SYS - ???
  4898.     AH = 04h
  4899.     ???
  4900. Return: ???
  4901. --------N-6305-------------------------------
  4902. INT 63 - BW-TCP - TCPIP.SYS - ???
  4903.     AH = 05h
  4904.     DS:BX -> ???
  4905.     ES:SI -> ???
  4906. Return: ???
  4907. Range:    INT 61 to INT 66 ???
  4908. --------N-6306-------------------------------
  4909. INT 63 - BW-TCP - TCPIP.SYS - ???
  4910.     AH = 06h
  4911.     ???
  4912. Return: ???
  4913. --------N-6307-------------------------------
  4914. INT 63 - BW-TCP - TCPIP.SYS - ???
  4915.     AH = 07h
  4916.     ???
  4917. Return: ???
  4918. --------N-6308-------------------------------
  4919. INT 63 - BW-TCP - TCPIP.SYS - SET DEFAULT ??? HANDLER
  4920.     AH = 08h
  4921.     DS:BX -> DWORD containing IP address
  4922. Return: CF clear if successful
  4923.     CF set on error
  4924.     ???
  4925. --------N-6309-------------------------------
  4926. INT 63 - BW-TCP - TCPIP.SYS - INSTALL ??? HANDLERS
  4927.     AH = 09h
  4928.     BL = handler type
  4929.     ES:SI -> FAR handler of specified type
  4930. Return: ???
  4931. SeeAlso: AH=0Ah,AH=0Dh
  4932. --------N-630A-------------------------------
  4933. INT 63 - BW-TCP - TCPIP.SYS - DELETE ??? HANDLERS
  4934.     AH = 0Ah
  4935.     BL = handler type
  4936. Return: CF clear if successful
  4937.     CF set on error (no handler of specified type installed)
  4938. SeeAlso: AH=09h
  4939. --------N-630B-------------------------------
  4940. INT 63 - BW-TCP - TCPIP.SYS - ???
  4941.     AH = 0Bh
  4942.     AL = ???
  4943.     DL = ???
  4944.     DS:BX -> ???
  4945.     ES:SI -> ???
  4946. Return: ???
  4947. --------N-630C-------------------------------
  4948. INT 63 - BW-TCP - TCPIP.SYS - ???
  4949.     AH = 0Ch
  4950.     ???
  4951. Return: ???
  4952. Range:    INT 61 to INT 66 ???
  4953. --------N-630D-------------------------------
  4954. INT 63 - BW-TCP - TCPIP.SYS - INSTALL DEFAULT ??? HANDLER
  4955.     AH = 0Dh
  4956.     ???
  4957. Return: ???
  4958. Note:    if not already installed, installs a type 06h handler with AH=09h
  4959. SeeAlso: AH=09h
  4960. --------N-630E-------------------------------
  4961. INT 63 - BW-TCP - TCPIP.SYS - CLOSE NETWORK DESCRIPTOR
  4962.     AH = 0Eh
  4963.     ???
  4964. Return: ???
  4965. SeeAlso: INT 61/AH=08h"PC/TCP",INT 61/AH=09h"PC/TCP",INT 61/AH=18h
  4966. --------N-630F-------------------------------
  4967. INT 63 - BW-TCP - TCPIP.SYS - ???
  4968.     AH = 0Fh
  4969.     AL = ???
  4970.     SI = ???
  4971.     DS:DI -> ???
  4972.     ???
  4973. Return: ???
  4974. Range:    INT 61 to INT 66 ???
  4975. --------N-6310-------------------------------
  4976. INT 63 - BW-TCP - TCPIP.SYS - ???
  4977.     AH = 10h
  4978.     DS:DI -> ???
  4979.     ???
  4980. Return: ???
  4981. --------N-6311-------------------------------
  4982. INT 63 - BW-TCP - TCPIP.SYS - ???
  4983.     AH = 11h
  4984.     ???
  4985. Return: ???
  4986. --------N-6312-------------------------------
  4987. INT 63 - BW-TCP - TCPIP.SYS - LISTEN FOR INCOMING CONNECTIONS
  4988.     AH = 12h
  4989.     DS:SI -> ???
  4990.     ES:BP -> ???
  4991. Return: ???
  4992. SeeAlso: INT 61/AH=23h
  4993. --------N-6313-------------------------------
  4994. INT 63 - BW-TCP - TCPIP.SYS - NOP
  4995.     AH = 13h
  4996. Return: nothing
  4997. Range:    INT 61 to INT 66 ???
  4998. --------N-6314-------------------------------
  4999. INT 63 - BW-TCP - TCPIP.SYS - OPEN NETWORK CONNECTION
  5000.     AH = 14h
  5001.     BX = network descriptor???
  5002.     DS:SI -> ???
  5003.     ES:BP -> ???
  5004. Return: ???
  5005. SeeAlso: INT 61/AH=13h"PC/TCP",INT 62/AH=13h"ETHDEV"
  5006. --------N-6315-------------------------------
  5007. INT 63 - BW-TCP - TCPIP.SYS - ???
  5008.     AH = 15h
  5009.     DS:DI -> ???
  5010.     ???
  5011. Return: ???
  5012. --------N-6316-------------------------------
  5013. INT 63 - BW-TCP - TCPIP.SYS - RESET NETWORK CONNECTION
  5014.     AH = 16h
  5015.     DS:DI -> ???
  5016. Return: ???
  5017. Note:    calls AH=17h after preprocessing
  5018. SeeAlso: AH=17h,INT 61/AH=19h"PC/TCP"
  5019. --------N-6317-------------------------------
  5020. INT 63 - BW-TCP - TCPIP.SYS - ???
  5021.     AH = 17h
  5022.     DS:DI -> ???
  5023.     ???
  5024. Return: ???
  5025. Range:    INT 61 to INT 66 ???
  5026. SeeAlso: AH=18h
  5027. --------N-6318-------------------------------
  5028. INT 63 - BW-TCP - TCPIP.SYS - ???
  5029.     AH = 18h
  5030.     DS:DI -> ???
  5031.     ???
  5032. Return: ???
  5033. Note:    same as AH=17h, except performed with interrupts disabled
  5034. SeeAlso: AH=17h
  5035. --------N-6319-------------------------------
  5036. INT 63 - BW-TCP - TCPIP.SYS - WRITE TO THE NETWORK
  5037.     AH = 19h
  5038.     DS:DI -> ???
  5039.     ???
  5040. Return: BX = number of bytes NOT written
  5041.     ???
  5042. Note:    calls AH=17h with interrupts disabled and ??? set to 01h
  5043. SeeAlso: AH=1Ah,AH=1Bh,INT 61/AH=1Ah"PC/TCP"
  5044. --------N-631A-------------------------------
  5045. INT 63 - BW-TCP - TCPIP.SYS - READ FROM THE NETWORK
  5046.     AH = 1Ah
  5047.     CX = maximum number of bytes to read
  5048.     ES:BP -> ???
  5049.     ???
  5050. Return: CX = number of bytes actually read
  5051.     ???
  5052. SeeAlso: AH=19h,INT 61/AH=1Bh"PC/TCP"
  5053. --------N-631B-------------------------------
  5054. INT 63 - BW-TCP - TCPIP.SYS - ???
  5055.     AH = 1Bh
  5056.     CX = ???
  5057.     ES:BP -> ???
  5058. Return: DX = ???
  5059.     ???
  5060. Range:    INT 61 to INT 66 ???
  5061. --------N-631C-------------------------------
  5062. INT 63 - BW-TCP - TCPIP.SYS - ???
  5063.     AH = 1Ch
  5064.     DS:DI -> ???
  5065.     ???
  5066. Return: ???
  5067. Note:    calls AH=17h with ???
  5068. SeeAlso: AH=17h
  5069. --------N-631D-------------------------------
  5070. INT 63 - BW-TCP - TCPIP.SYS - ???
  5071.     AH = 1Dh
  5072.     ???
  5073. Return: ???
  5074. --------N-631E-------------------------------
  5075. INT 63 - BW-TCP - TCPIP.SYS - ???
  5076.     AH = 1Eh
  5077.     DS:BX -> DWORD containing IP address (big-endian)
  5078.     ???
  5079. Return: CF clear if successful
  5080.     CF set on error
  5081.     ???
  5082. --------N-631F-------------------------------
  5083. INT 63 - BW-TCP - TCPIP.SYS - SET SOCKET ??? HANDLER
  5084.     AH = 1Fh
  5085.     BX = socket number
  5086.     ES:SI -> FAR function for ???
  5087. Return: CF clear if successful
  5088.     CF set on error (out of slots)
  5089. SeeAlso: AH=20h
  5090. --------N-6320-------------------------------
  5091. INT 63 - BW-TCP - TCPIP.SYS - REMOVE SOCKET ??? HANDLER
  5092.     AH = 20h
  5093.     BX = socket number
  5094. Return: CF clear if successful
  5095.     CF set on error (not set)
  5096. Range:    INT 61 to INT 66 ???
  5097. SeeAlso: AH=1Fh
  5098. --------N-6321-------------------------------
  5099. INT 63 - BW-TCP - TCPIP.SYS - ???
  5100.     AH = 21h
  5101.     ES:SI -> ???
  5102. Return: ???
  5103. SeeAlso: INT 61/AH=1Ch"PC/TCP"
  5104. --------N-6322-------------------------------
  5105. INT 63 - BW-TCP - TCPIP.SYS - REMOVE ??? HANDLER
  5106.     AH = 22h
  5107. Return: CF clear
  5108. Note:    decrements a counter if not already zero, and calls AH=0Ah with BL=11h
  5109.       if the counter reaches zero
  5110. --------N-6323-------------------------------
  5111. INT 63 - BW-TCP - TCPIP.SYS - ???
  5112.     AH = 23h
  5113.     DS:BX -> ???
  5114.     ES:SI -> 6-byte buffer for ???
  5115. Return: CF clear if successful
  5116.     CF set on error
  5117. --------N-6324-------------------------------
  5118. INT 63 - BW-TCP - TCPIP.SYS - GET SOCKET
  5119.     AH = 24h
  5120. Return: AX = socket number (0400h-FFFFh)
  5121. Range:    INT 61 to INT 66 ???
  5122. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  5123.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  5124.       consecutive interrupt (64h by default) if it is loaded
  5125. SeeAlso: INT 62/AH=12h"ETHDEV",INT 64"BW-NFS"
  5126. --------N-6325-------------------------------
  5127. INT 63 - BW-TCP - TCPIP.SYS - GET INTERNET ADDRESS
  5128.     AH = 25h
  5129. Return: CL:CH:DL:DH = caller's Internet address
  5130. SeeAlso: AH=26h,INT 61/AH=05h"PC/TCP"
  5131. --------N-6326-------------------------------
  5132. INT 63 - BW-TCP - TCPIP.SYS - SET INTERNET ADDRESS???
  5133.     AH = 26h
  5134.     CL:CH:DL:DH = Internet address
  5135. Return: nothing
  5136. Note:    this function sets a different variable than AH=25h returns
  5137. SeeAlso: AH=25h
  5138. --------N-6327-------------------------------
  5139. INT 63 - BW-TCP - TCPIP.SYS - SET ???
  5140.     AH = 27h
  5141.     BX = ???
  5142.     ES:SI -> ???
  5143. Return: ???
  5144. --------N-6328-------------------------------
  5145. INT 63 - BW-TCP - TCPIP.SYS - ???
  5146.     AH = 28h
  5147.     ???
  5148. Return: ???
  5149. --------N-6329-------------------------------
  5150. INT 63 - BW-TCP - TCPIP.SYS - ???
  5151.     AH = 29h
  5152.     ???
  5153. Return: ???
  5154. Range:    INT 61 to INT 66 ???
  5155. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  5156.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  5157.       consecutive interrupt (64h by default) if it is loaded
  5158. --------*-64---------------------------------
  5159. INT 64 - reserved for user interrupt
  5160. --------d-64---------------------------------
  5161. INT 64 - Adaptec controllers - DRIVE 1 DATA
  5162. Desc:    this vector stores the first four bytes of the parameter table for
  5163.       hard disk 1
  5164. Notes:    these vectors are used by the following Adaptec controllers:
  5165.         ACB 2370 A/B/C, ACB 2372 A/B/C, ACB 2333 A/B, 2322B-8, 2322B-16
  5166.     these vectors are NOT used by the following Adaptec controllers:
  5167.         ACB 2310, ACB 2312, ACB 2320D, ACB 2322D
  5168. SeeAlso: INT 60"Adaptec",INT 65"Adaptec",INT 66"Adaptec",INT 67"Adaptec"
  5169. ----------64---------------------------------
  5170. INT 64 - Oracle SQL Protected Mode Executive - ???
  5171. --------N-64---------------------------------
  5172. INT 64 - Novell NetWare to v2.0a - LOW-LEVEL API
  5173. Note:    equivalent to INT 7A for NetWare versions through 2.0a only; later
  5174.       versions do not use this interrupt for IPX/SPX access, instead
  5175.       getting an entry point from INT 2F/AX=7A00h
  5176. SeeAlso: INT 2F/AX=7A00h,INT 7A"Novell"
  5177. --------h-64---------------------------------
  5178. INT 64 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  5179. SeeAlso: INT 65"DG10",INT 66"DG10"
  5180. --------r-64---------------------------------
  5181. INT 64 - Extended Batch Language v3.14+
  5182.     AH = function
  5183.         00h to 5Fh chained to previous handler
  5184.         60h to 6Ch reserved, return immediately
  5185.         80h to FFh chained to previous handler
  5186.         6Dh (v4.01+) insert tone in queue
  5187.         AL = ???
  5188.         CX = frequency in Hertz
  5189.         DL = duration in clock ticks
  5190.         Return: AL = 00h if note stored
  5191.                = 01h if no room to store
  5192.         6Eh clear ??? counter/flag
  5193.         6Fh return counter/flag that AH=6Eh clears
  5194.         70h ???
  5195.         AL = ???
  5196.         71h ???
  5197.         AL = ???
  5198.         72h ???
  5199.         73h insert byte at end of keyboard buffer
  5200.         AL = byte to insert
  5201.         Return: AL = 00h if byte inserted
  5202.                = 01h if no room to store
  5203.         74h insert byte at front of keyboard buffer
  5204.         AL = byte to insert
  5205.         Return: AL = 00h if byte inserted
  5206.                = 01h if no room to store
  5207.         75h ???
  5208.         76h get keyboard "stack" status
  5209.         AL = 'K' if kbd read will read physical keyboard
  5210.              'S' if it will read EBL internal keyboard buffer
  5211.         AH = ???
  5212.         77h clear internal keyboard buffer
  5213.         78h ???
  5214.         AL = ???
  5215.         79h ???
  5216.         7Ah ???
  5217.         AL = ???
  5218.         7Bh ???
  5219.         AL = ???
  5220.         7Ch ???
  5221.         AL = ???
  5222.         7Dh ???
  5223.         AL = ???
  5224.         7Eh clear buffer for ???
  5225.         7Fh installation check
  5226.         Return: CX = version in BCD
  5227.             DI = segment of ???
  5228.             BX = segment of next program's PSP???
  5229. Program: Extended Batch Language is a batch-file enhancer by Seaware
  5230. Notes:    the chaining does not check whether the interrupt had been hooked
  5231.       before, so if you try to chain when the previous vector was
  5232.       0000h:0000h, you'll be in trouble
  5233.     functions 72h and 7Ah-7Dh appear to be interfaces to the optional
  5234.       floating-point and extended function packages
  5235. Index:    installation check;EBL|installation check;Extended Batch Language
  5236. --------d-64---------------------------------
  5237. INT 64 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  5238. Note:    This vector is overwritten by Pdisk to install custom harddrive types.
  5239.       It can either destroy 4 vectors and take no memory or TSR and take
  5240.       up some memory.
  5241. SeeAlso: INT 65"Pdisk"
  5242. --------N-6401-------------------------------
  5243. INT 64 U - BW-NFS - BWRPC - ???
  5244.     AH = 01h
  5245.     ES:BX -> ??? (at least 8 bytes)
  5246.     ES:BP -> DWORD ???
  5247.     ???
  5248. Return: CF clear if successful
  5249.         ???
  5250.     CF set on error
  5251.         CX = 0000h
  5252. Range:    INT 62 to INT 67 ???
  5253. Notes:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  5254.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  5255.       consecutive interrupt (64h by default) if it is loaded
  5256.     the BWRPC installation check consists of determining the interrupt
  5257.       vector assigned to it (two more than the value returned by reading
  5258.       the ETHDEV27 device), and testing whether the word immediately
  5259.       preceding the interrupt handler is 4257h ('BW')
  5260. SeeAlso: INT 62/AH=00h"ETHDEV",INT 63"BW-TCP"
  5261. Index:    installation checks;BWRPC
  5262. --------N-6402-------------------------------
  5263. INT 64 U - BW-NFS - BWRPC - ???
  5264.     AH = 02h
  5265.     DS:DI -> ???
  5266. Return: ???
  5267. Note:    this call is passed directly through to INT 62/AH=07h
  5268. SeeAlso: INT 62/AH=07h"ETHDEV"
  5269. --------N-6403-------------------------------
  5270. INT 64 U - BW-NFS - BWRPC - ADD ???
  5271.     AH = 03h
  5272.     AL = ???
  5273.     BP = ???
  5274.     ES:SI -> ???
  5275. Return: ???
  5276. Note:    this call is passed directly through to INT 62/AH=0Bh
  5277. SeeAlso: AH=04h,INT 62/AH=0Bh"ETHDEV"
  5278. --------N-6404-------------------------------
  5279. INT 64 U - BW-NFS - BWRPC - REMOVE ???
  5280.     AH = 04h
  5281.     BP = ???
  5282. Return: ???
  5283. Range:    INT 62 to INT 67 ???
  5284. Note:    this call is passed directly through to INT 62/AH=0Ch
  5285. SeeAlso: AH=03h,INT 62/AH=0Ch"ETHDEV"
  5286. --------N-6405-------------------------------
  5287. INT 64 U - BW-NFS - BWRPC - ???
  5288.     AH = 05h
  5289.     CX = ???
  5290. Return: ???
  5291. Note:    this call is passed directly through to INT 62/AH=13h
  5292. SeeAlso: INT 62/AH=13h"ETHDEV"
  5293. --------N-6406-------------------------------
  5294. INT 64 U - BW-NFS - BWRPC - ???
  5295.     AH = 06h
  5296.     ES:SI -> ???
  5297. Return: AL = 00h if CF clear
  5298. Note:    this call is passed directly through to INT 62/AH=14h
  5299. SeeAlso: INT 62/AH=14h"ETHDEV"
  5300. --------N-6407-------------------------------
  5301. INT 64 U - BW-NFS - BWRPC - GET IP ADDRESS
  5302.     AH = 07h
  5303. Return: CX:DX = IP address
  5304. --------N-6410-------------------------------
  5305. INT 64 U - BW-NFS - BWRPC - CALL ETHDEV.SYS
  5306.     AH = 10h
  5307.     AL = ETHDEV function number
  5308.     other registers as appropriate for ETHDEV call
  5309. Return: as returned by ETHDEV
  5310. Note:    this call is passed directly through to INT 62
  5311. SeeAlso: INT 62/AH=00h"ETHDEV"
  5312. --------N-6411-------------------------------
  5313. INT 64 U - BW-NFS - BWRPC - NOP???
  5314.     AH = 11h
  5315. Return: CF clear
  5316. Range:    INT 62 to INT 67 ???
  5317. --------N-64FE-------------------------------
  5318. INT 64 - BW-NFS - BWRPC - MAP EMS PAGE FRAME
  5319.     AH = FEh
  5320.     AL = direction
  5321.         00h map in driver's memory block
  5322.         01h map out driver's memory block
  5323. Return: CF clear if successful
  5324.     CF set on error
  5325.         AL = error code
  5326. Note:    this call is passed through directly to ETHDEV.SYS (see INT 62/AH=FEh)
  5327. SeeAlso: INT 21/AH=3Fh"BW-TCP",INT 62/AH=FEh,INT 63"BW-TCP"
  5328. --------*-65---------------------------------
  5329. INT 65 - reserved for user interrupt
  5330. --------d-65---------------------------------
  5331. INT 65 - Adaptec controllers - DRIVE 1 DATA
  5332. Desc:    this vector stores the second four bytes of the parameter table for
  5333.       hard disk 1
  5334. SeeAlso: INT 64"Adaptec",INT 66"Adaptec",INT 67"Adaptec"
  5335. --------h-65---------------------------------
  5336. INT 65 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  5337. SeeAlso: INT 64"DG10",INT 66"DG10"
  5338. --------N-65---------------------------------
  5339. INT 65 - FTP Software NDIS-Packet Driver adapter - POST PROCESSING INTERRUPT
  5340. --------U-65---------------------------------
  5341. INT 65 - SD.COM v6.2
  5342. Desc:    The unregistered version of SD62.COM uses the low byte of this vector
  5343.       to count the number of invocations, displaying a registration
  5344.       reminder each time after the 20th use.
  5345. --------d-65---------------------------------
  5346. INT 65 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  5347. SeeAlso: INT 64"Pdisk",INT 66"Pdisk"
  5348. --------s-65---------------------------------
  5349. INT 65 - Ad Lib SOUND.COM - INTERFACE
  5350.     SI = function number (see also entries below)
  5351.         0000h Init
  5352.         0002h RelTimeStart
  5353.         0003h SetState
  5354.         0004h GetState
  5355.         0005h Flush
  5356.         0006h SetMode
  5357.         0007h GetMode
  5358.         0008h SetRelVolume
  5359.         0009h SetTempo
  5360.         000Ah SetTranspose
  5361.         000Bh GetTranspose
  5362.         000Ch SetActVoice
  5363.         000Dh GetActVoice
  5364.         000Eh PlayNoteDel
  5365.         000Fh PlayNote
  5366.         0010h SetTimbre
  5367.         0011h SetPitch
  5368.         0012h SetTickBeat
  5369.         0013h NoteOn
  5370.         0014h NoteOff
  5371.         0015h Timbre
  5372.         0016h SetPitchBend
  5373.         0017h WaveForm
  5374.     ES:BX -> arguments
  5375. Note:    the installation check consists of checking for the signature block
  5376.       immediately preceding the interrupt handler (see #1917)
  5377. SeeAlso: SI=8000h
  5378. Index:    installation check;Ad Lib SOUND.COM
  5379.  
  5380. Format of AdLib signature block:
  5381. Offset    Size    Description    (Table 1917)
  5382.  00h    WORD    version number
  5383.  02h 19 BYTEs    "SOUND-DRIVER-AD-LIB"
  5384.  15h    BYTE    01h
  5385.  16h    BYTE    01h
  5386.  17h    BYTE    00h
  5387. --------s-65----SI0000-----------------------
  5388. INT 65 - Ad Lib SOUND.COM - INITIALIZE (RESET)
  5389.     SI = 0000h
  5390. --------s-65----SI0003-----------------------
  5391. INT 65 - Ad Lib SOUND.COM - SET STATE
  5392.     SI = 0003h
  5393.     ES:BX -> WORD new state (0000h disabled, 0001h enabled)
  5394. SeeAlso: SI=0004h
  5395. --------s-65----SI0004-----------------------
  5396. INT 65 - Ad Lib SOUND.COM - GET STATE
  5397.     SI = 0004h
  5398. Return: AX = status
  5399.         0000h all done playing sounds
  5400.         else  still playing sounds
  5401. SeeAlso: SI=0003h
  5402. --------s-65----SI0006-----------------------
  5403. INT 65 - Ad Lib SOUND.COM - SET MODE
  5404.     SI = 0006h
  5405.     ES:BX -> WORD new mode (0000h melodic, 0001h percussive)
  5406. SeeAlso: SI=0007h
  5407. --------s-65----SI0007-----------------------
  5408. INT 65 - Ad Lib SOUND.COM - GET MODE
  5409.     SI = 0007h
  5410. Return: AX = mode
  5411.         0000h melodic
  5412.         0001h percussive
  5413. SeeAlso: SI=0006h
  5414. --------s-65----SI000C-----------------------
  5415. INT 65 - Ad Lib SOUND.COM - SET ACTIVE VOICE
  5416.     SI = 000Ch
  5417.     ES:BX -> WORD voice = 0000h to 0008h
  5418. SeeAlso: SI=000Dh
  5419. --------s-65----SI000D-----------------------
  5420. INT 65 - Ad Lib SOUND.COM - GET ACTIVE VOICE
  5421.     SI = 000Dh
  5422. Return: AX = voice (0000h to 0008h)
  5423. SeeAlso: SI=000Ch
  5424. --------s-65----SI8000-----------------------
  5425. INT 65 u - Media Vision FM.COM v4.1a+ - GET INTERNAL DATA STRUCTURES
  5426.     SI = 8000h
  5427. Return: DX:AX -> internal data structures
  5428. Program: FM.COM is an Ad Lib SOUND.COM-compatible driver for Media Vision's
  5429.       Pro Audio Spectrum sound boards
  5430. SeeAlso: SI=8001h
  5431. --------s-65----SI8001-----------------------
  5432. INT 65 u - Media Vision FM.COM v4.1a+ - GET VOICE COUNT
  5433.     SI = 8001h
  5434. Return: AX = ???
  5435.     DX = number of voices??? (09h or 0Bh)
  5436. SeeAlso: SI=8000h
  5437. --------s-65----SI8002-----------------------
  5438. INT 65 - Media Vision FM.COM v4.1a+ - START BACKGROUND FM SOUNDS
  5439.     SI = 8002h
  5440. SeeAlso: SI=8003h
  5441. --------s-65----SI8003-----------------------
  5442. INT 65 - Media Vision FM.COM v4.1a+ - STOP BACKGROUND FM SOUNDS
  5443.     SI = 8003h
  5444. SeeAlso: SI=8002h
  5445. --------s-65----SI8004-----------------------
  5446. INT 65 U - Media Vision FM.COM v4.1a+ - GET ???
  5447.     SI = 8004h
  5448. Return: AX = ??? (0280h)
  5449.     DX = ??? (01A0h)
  5450. --------s-65----SI8005-----------------------
  5451. INT 65 U - Media Vision FM.COM v4.1a+ - ???
  5452.     SI = 8005h
  5453.     ???
  5454. Return: ???
  5455. SeeAlso: SI=8000h
  5456. --------S-65---------------------------------
  5457. INT 65 U - EZRECV v1.0 - API
  5458.     AX = function
  5459.         0000h ???
  5460.         Return: AX = ??? or FFFFh
  5461.         0001h ???
  5462.         Return: AX = status (0000h or 0001h)
  5463.         0002h ???
  5464.         Return: AX = status (0000h or 0001h)
  5465.         0003h set ??? to 0001h
  5466.         Return: AX = 0000h
  5467.         0004h ???
  5468.         Return: AX = ???
  5469. Return: BH = COM port being used
  5470.     BL = speed???
  5471.     CH = ???
  5472.     CL = ???
  5473.     DX = ???
  5474.     DS = ???
  5475.     ES = EZRECV data segment
  5476. Program: EZRECV is a background Zmodem file receiver by Express Consulting
  5477. --------*-66---------------------------------
  5478. INT 66 - reserved for user interrupt
  5479. --------d-66---------------------------------
  5480. INT 66 - Adaptec controllers - DRIVE 1 DATA
  5481. Desc:    this vector stores the third four bytes of the parameter table for
  5482.       hard disk 1
  5483. SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 67"Adaptec"
  5484. --------h-66---------------------------------
  5485. INT 66 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  5486. SeeAlso: INT 64"DG10"
  5487. --------N-66---------------------------------
  5488. INT 66 C - Nanosoft, Inc. TurboNET - NETWORK PROCESSING ???
  5489. Program: TurboNET is a NetBIOS-based file redirector and server
  5490. Note:    hooked but not used (IRET) by both redirector and server; called from
  5491.       server's INT 28 handler
  5492. SeeAlso: INT 2F/AX=8100h
  5493. --------d-66---------------------------------
  5494. INT 66 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  5495. SeeAlso: INT 64"Pdisk",INT 67"Pdisk"
  5496. --------W-66---------------------------------
  5497. INT 66 - Microsoft Windows VITD.386 Virtual Interval Timer
  5498. Note:    This Windows 3.x Virtual Device Driver implements a virtual timer
  5499.       which will expire and call INT 66.  This timer can be used to
  5500.       calculate elapsed execution time etc.
  5501. --------K-66---------------------------------
  5502. INT 66 - Newkey v5.4 - INSTALLATION VECTOR
  5503. Return: immediately (IRET)
  5504. Program: Newkey is a shareware keyboard macro program by Frank A. Bell
  5505. Range:    INT 60h to INT 67h, selected by scanning for highest unused vector
  5506. Note:    the installation check consists of testing for the signature bytes
  5507.       FDh FCh FFh FEh at offset 03h in the interrupt handlers segment
  5508. BUG:    the code obviously intends to use INT F0-FE, INT 70-77, and INT 68-6F
  5509.       before falling back to INT 60-67, but only uses the last of these
  5510.       ranges in v5.4
  5511. SeeAlso: INT 2F/AX=E300h
  5512. Index: installation checks;Newkey|Newkey;installation check
  5513. --------U-66---------------------------------
  5514. INT 66 - PC-Magazin - INCA
  5515.     details not yet availble
  5516. Program: INCA is a utility from PC-Magazin (the German edition of PC Magazine)
  5517.       issue 51-52/85.
  5518. SeeAlso: INT 61"SWAPx"
  5519. --------F-6601-------------------------------
  5520. INT 66 - BitFax Scheduler - SET MODE???
  5521.     AH = 01h
  5522. SeeAlso: AH=02h
  5523. --------F-6602-------------------------------
  5524. INT 66 - BitFax Scheduler - SET MODE???
  5525.     AH = 02h
  5526. SeeAlso: AH=01h
  5527. --------F-6603-------------------------------
  5528. INT 66 - BitFax Scheduler - SCHEDULE FAX TRANSMISSIONS
  5529.     AH = 03h
  5530.     ???
  5531. Return: ???
  5532. SeeAlso: AH=05h
  5533. --------F-6604-------------------------------
  5534. INT 66 - BitFax Scheduler - GET STATUS???
  5535.     AH = 04h
  5536. Return: AX = ??? (0000h or 0001h)
  5537.     DX = BitSched version???  (for versions >= 3.00)
  5538.         9796h (ver. 3.00)
  5539.         97E6h (ver. 3.02)
  5540.         92D0h (ver. 3.04.06)
  5541.         9510h (ver. 3.06.02)
  5542. SeeAlso: AH=06h,AX=3345h,INT 2F/AX=8000h"FaxBIOS"
  5543. --------F-6605-------------------------------
  5544. INT 66 - BitFax Scheduler - CONVERT FILE AND SEND FAX
  5545.     AH = 05h
  5546.     BX:CX -> command block (see #1918)
  5547.     ???
  5548. Return: ???
  5549. SeeAlso: AH=03h
  5550.  
  5551. Format of BitFax command block:
  5552. Offset    Size    Description    (Table 1918)
  5553.  00h 18 BYTEs    configuration bytes???
  5554.  12h    BYTEs    ASCIZ temporary file name to place converted fax
  5555.  52h    BYTEs    ASCIZ directory containing BitFax executables
  5556.  92h    BYTEs    ASCIZ telephone number
  5557.  C2h    BYTE    cover page control (00h don't send, 01h do send cover page)
  5558.  C3h 15 BYTEs    configuration bytes???
  5559.  E2h    BYTEs    ASCIZ path of BITFAX.TRA file (containing additional
  5560.           configuration information???)
  5561. 122h    BYTEs    configuration bytes???
  5562. 12Ch    BYTE    00h don't send cover page
  5563.         01h send cover page
  5564. 12Dh  7 BYTEs    configuration bytes???
  5565. 134h    BYTEs    ASCIZ path of file to send
  5566. 174h    BYTEs    more configuration bytes???
  5567.     ???
  5568. --------F-6606-------------------------------
  5569. INT 66 - BitFax Scheduler - SET MODE???
  5570.     AH = 06h
  5571. Return: DX = BitSched version??? (same as AH=04h)
  5572. SeeAlso: AH=04h
  5573. --------s-660688-----------------------------
  5574. INT 66 - IBMSND driver - PLAY 8-BIT DIGITIZED SOUND
  5575.     AX = 0688h
  5576.     DS:SI -> SNDSTRUC (see #1919)
  5577. Return: ???
  5578. Program: The IBMSND driver is part of John W. Ratcliff's
  5579.        The IBM Digitized Sound Package
  5580. Note:    the installation check consists of looking for a valid signature
  5581.       string six bytes prior to the interrupt handler; this string may
  5582.       be either "KERN" or "MIDI" (in the latter case, call AX=0701h to
  5583.       determine whether IBMSND is installed)
  5584. SeeAlso: AX=068Bh,AX=068Fh,AX=0701h
  5585.  
  5586. Format of IBMSND driver SNDSTRUC:
  5587. Offset    Size    Description    (Table 1919)
  5588.  00h    DWORD    -> audio data
  5589.  04h    WORD    length of audio data in bytes
  5590.  06h    DWORD    -> playback status flag
  5591.  0Ah    WORD    playback frequency
  5592. --------s-660689-----------------------------
  5593. INT 66 - IBMSND driver - REPORT SOUND DRIVER STATUS
  5594.     AX = 0689h
  5595. Return: AX = status
  5596.         0000h no sound playing
  5597.         0001h sound effect is currently playing
  5598. SeeAlso: AX=0688h,AX=068Bh,AX=068Ch
  5599. --------s-66068A-----------------------------
  5600. INT 66 - IBMSND driver - PREFORMAT SOUND
  5601.     AX = 068Ah
  5602.     DS:SI -> SNDSTRUC (see #1919)
  5603. Desc:    convert audio data into output hardware format
  5604. SeeAlso: AX=068Bh
  5605. --------s-66068B-----------------------------
  5606. INT 66 - IBMSND driver - PLAY PREFORMATTED SOUND
  5607.     AX = 068Bh
  5608.     DS:SI -> SNDSTRUC (see #1919)
  5609. Return: AX = ???
  5610. SeeAlso: AX=0688h,AX=068Ah,AX=068Fh
  5611. --------s-66068C-----------------------------
  5612. INT 66 - IBMSND driver - REPORT AUDIO DRIVER CAPABILITIES
  5613.     AX = 068Ch
  5614. Return: AX = capabilities (see #1920)
  5615.     DX = playback rate if fixed-frequency playback
  5616. SeeAlso: AX=0689h,AX=068Dh
  5617.  
  5618. Bitfields for IBMSND driver capabilities:
  5619. Bit(s)    Description    (Table 1920)
  5620.  0    can play audio in background
  5621.  1    data is massaged
  5622.  2    driver plays at fixed frequency, resampling input data to fit
  5623.  3    driver uses timer interrupt
  5624. --------s-66068D-----------------------------
  5625. INT 66 - IBMSND driver - REPORT CURRENT SAMPLE ADDRESS
  5626.     AX = 068Dh
  5627. Return: AX = current playback address
  5628. Desc:    determine what point in the audio data the playback has reached, for
  5629.       synchronization with video or animation effects
  5630. Notes:    this function applies to background playback only
  5631.     the reported address may be an approximation rather than the exact
  5632.       address
  5633. SeeAlso: AX=068Ch,AX=0691h
  5634. --------s-66068E-----------------------------
  5635. INT 66 - IBMSND driver - SET CALLBACK ADDRESS
  5636.     AX = 068Eh
  5637.     BX:DX -> callback function
  5638.         0000h:0000h to disable callback
  5639.     DS = value to load into DS when calling the callback function
  5640. Desc:    specify the function to be called when playback of a sound effect is
  5641.       completed
  5642. Note:    the callback function will typically be called during a hardware
  5643.       interrupt, so all the usual precautions should be taken except for
  5644.       preserving registers
  5645. SeeAlso: AX=0691h
  5646. --------s-66068F-----------------------------
  5647. INT 66 - IBMSND driver - STOP CURRENT SOUND
  5648.     AX = 068Fh
  5649. Desc:    cause any currently-playing sound effect to be terminated
  5650. SeeAlso: AX=0688h,AX=068Bh
  5651. --------s-660690-----------------------------
  5652. INT 66 - IBMSND driver - "SetAudioHardware" SET UP HARDWARE INFO [obsolete]
  5653.     AX = 0690h
  5654. Note:    this function is no longer implemented
  5655. --------s-660691-----------------------------
  5656. INT 66 - IBMSND driver - REPORT CALLBACK ADDRESS
  5657.     AX = 0691h
  5658. Return: AX:DX -> current callback function
  5659.     BX = original caller's DS register
  5660. Program: The IBMSND driver is part of John W. Ratcliff's
  5661.        The IBM Digitized Sound Package
  5662. SeeAlso: AX=068Eh
  5663. --------s-660701-----------------------------
  5664. INT 66 - IBM Digitized Sound Package MIDI driver - GET DIGITIZED SOUND CAPABIL
  5665.     AX = 0701h
  5666. Return: AX = digitized sound capabilities
  5667.         0000h if digitized sound driver (functions 06xxh) not available
  5668. Note:    the installation check for the MIDI driver is to test for the signature
  5669.       "MIDI" six bytes before the interrupt handler
  5670. SeeAlso: AX=0688h
  5671. --------n-6610-------------------------------
  5672. INT 66 - PenDOS - TDMOUSE.EXE - GET ???
  5673.     AH = 10h
  5674. Return: CF clear
  5675.     AX = 0000h
  5676.     BX = ??? (0012h)
  5677.     DX:CX -> TDMOUSE INT 33 handler (IRET to hide mouse from other apps)
  5678. Program: TDMOUSE is a PenDOS hardware driver which allows a mouse to emulate
  5679.       a touchpad; PenDOS is a set of programs by Communication Intelligence
  5680.       Corporation which makes applications pen-aware
  5681. --------n-6611-------------------------------
  5682. INT 66 - PenDOS - TDMOUSE.EXE - SET ??? HANDLER
  5683.     AH = 11h
  5684.     DX:BX -> new handler for ???
  5685. Return: CF clear
  5686.     AX = 0000h
  5687.     DX:BX -> old handler for ??? (points at RETF by default)
  5688. --------n-6612-------------------------------
  5689. INT 66 - PenDOS - TDMOUSE.EXE - INITIALIZE
  5690.     AH = 12h
  5691. Return:    CF clear
  5692.     AX = 0000h
  5693. Note:    this function calls the old mouse handler with functions 0000h, 0002h,
  5694.       0007h, 0008h, 000Fh, 0004h, and 000Ch (in that order)
  5695. SeeAlso: AH=13h
  5696. --------n-6613-------------------------------
  5697. INT 66 - PenDOS - TDMOUSE.EXE - SHUTDOWN???
  5698.     AH = 13h
  5699. Return: CF clear
  5700.     other register as returned by INT 33/AX=0000h
  5701. SeeAlso: AH=12h
  5702. --------n-6614-------------------------------
  5703. INT 66 - PenDOS - TDMOUSE.EXE - ???
  5704.     AH = 14h
  5705.     BX = ???
  5706.     CX = ???
  5707. Return: CF clear
  5708.     AX = 0000h
  5709. --------n-6615-------------------------------
  5710. INT 66 - PenDOS - TDMOUSE.EXE - SET ??? HANDLER
  5711.     AH = 15h
  5712.     DX:BX -> new handler for ???
  5713. Return: CF clear
  5714.     AX = 0000h
  5715.     DX:BX -> old handler (points at RETF by default)
  5716. --------n-6616-------------------------------
  5717. INT 66 - PenDOS - TDMOUSE.EXE - UNUSED FUNCTIONS
  5718.     AH = 16h to 1Fh
  5719. Return: CF set
  5720. Program: TDMOUSE is a PenDOS hardware driver which allows a mouse to emulate
  5721.       a touchpad; PenDOS is a set of programs by Communication Intelligence
  5722.       Corporation which makes applications pen-aware
  5723. --------n-6621-------------------------------
  5724. INT 66 - PenDOS - PINK - ???
  5725.     AH = 21h
  5726. Return: CF clear if successful
  5727.     CF set on error
  5728. Note:    this function sets ??? flag or counter (also set by AH=2Fh) to FFFFh
  5729. --------n-6622-------------------------------
  5730. INT 66 - PenDOS - PINK - ???
  5731.     AH = 22h
  5732.     DX:BX -> ???
  5733.     CL = ???
  5734. Return: CF clear if successful
  5735.     CF set on error
  5736.     ???
  5737. SeeAlso: AH=24h
  5738. --------n-6623-------------------------------
  5739. INT 66 - PenDOS - PINK - ???
  5740.     AH = 23h
  5741.     ???
  5742. Return: CF clear if successful
  5743.     CF set on error
  5744.     ???
  5745. --------n-6624-------------------------------
  5746. INT 66 - PenDOS - PINK - ???
  5747.     AH = 24h
  5748.     DX:BX -> ???
  5749.     CL = ???
  5750. Return: CF clear if successful
  5751.     CF set on error
  5752.     ???
  5753. SeeAlso: AH=22h
  5754. --------n-6625-------------------------------
  5755. INT 66 - PenDOS - PINK - ???
  5756.     AH = 25h
  5757.     CL = ??? (NOP if 00h)
  5758.     ???
  5759. Return: CF clear if successful
  5760.     CF set on error
  5761.     ???
  5762. --------n-6627-------------------------------
  5763. INT 66 - PenDOS - PINK - ???
  5764.     AH = 27h
  5765.     BL = ???
  5766.     BH = ???
  5767.     CL = ??? (0-3)
  5768.     DL = ??? (> BL)
  5769.     DH = ??? (> BH)
  5770. Return: ???
  5771. --------n-6628-------------------------------
  5772. INT 66 - PenDOS - PINK - ???
  5773.     AH = 28h
  5774.     ???
  5775. Return: CF clear if successful
  5776.     CF set on error
  5777.     ???
  5778. Note:    this function sets ??? flag or counter (also set by AH=2Fh) to FFFFh
  5779. --------n-6629-------------------------------
  5780. INT 66 - PenDOS - PINK - ???
  5781.     AH = 29h
  5782.     ???
  5783. Return: ???
  5784. Note:    this function sets ??? flag or counter (also set by AH=2Fh) to FFFFh
  5785. --------n-662A-------------------------------
  5786. INT 66 - PenDOS - PINK - ???
  5787.     AH = 2Ah
  5788.     DL = ??? (nonzero)
  5789.     DH = ??? (nonzero)
  5790. Return: CF clear if successful
  5791.     CF set on error
  5792.     ???
  5793. --------n-662B-------------------------------
  5794. INT 66 - PenDOS - PINK - ???
  5795.     AH = 2Bh
  5796.     ???
  5797. Return: CF clear if successful
  5798.     CF set on error
  5799.     ???
  5800. --------n-662F-------------------------------
  5801. INT 66 - PenDOS - PINK - INITIALIZE
  5802.     AH = 2Fh
  5803.     ???
  5804. Return: AX = status
  5805.         0000h failed
  5806.         FFFFh successful
  5807.     ???
  5808. Note:    this function sets ??? flag or counter to FFFFh and hooks INT 1Ch
  5809. --------F-663345-----------------------------
  5810. INT 66 - BitFax Scheduler - REMOVE TSR FROM MEMORY
  5811.     AX = 3345h
  5812. Return: AX = FFFFh error removing TSR
  5813. Note:    the installation check consists of checking for the signature
  5814.       "BitFax Scheduler" beginning two bytes past the interrupt handler
  5815. SeeAlso: AH=04h,INT 2F/AH=2Ah,INT 2F/AX=CB00h
  5816. Index:    installation check;BitFax Scheduler
  5817. --------n-6640-------------------------------
  5818. INT 66 - PenDOS - PKEYUS - GET VERSION
  5819.     AH = 40h
  5820. Return: CF clear
  5821.     AX = 0000h
  5822.     BH = major version (02h for version bundled with IBM DOS 6.1)
  5823.     BL = minor version (00h for version bundled with IBM DOS 6.1)
  5824.     DL = ??? (4Eh)
  5825.     DH = ??? (0Eh)
  5826. --------n-6641-------------------------------
  5827. INT 66 - PenDOS - PKEYUS - SET ???
  5828.     AH = 41h
  5829.     BX = ???
  5830.     CL = ??? (08h-20h)
  5831.     DL = screen column??? (<= 50h)
  5832.     DH = screen row???  (<= 3Ch)
  5833. Return: AX = status (0000h successful, 0001h error)
  5834. Note:    this function also sets an internal flag
  5835. SeeAlso: AH=42h,AH=43h
  5836. --------n-6642-------------------------------
  5837. INT 66 - PenDOS - PKEYUS - ???
  5838.     AH = 42h
  5839. Return: CF clear
  5840.     AX = 0000h
  5841. Note:    this function also clears the flag set by AH=41h
  5842. SeeAlso: AH=41h
  5843. --------n-6643-------------------------------
  5844. INT 66 - PenDOS - PKEYUS - ???
  5845.     AH = 43h
  5846.     BX = ???
  5847.     DX = ???
  5848. Return: AX = status
  5849.         0000h if AH=41h flag set
  5850.         else
  5851.         AH = ???
  5852.         AL = ???
  5853.         BX = ???
  5854.         DX = ???
  5855. SeeAlso: AH=41h    
  5856. --------n-6644-------------------------------
  5857. INT 66 - PenDOS - PKEYUS - UNUSED FUNCTIONS
  5858.     AH = 44h to 4Fh
  5859. Return: CF set
  5860. --------n-6650-------------------------------
  5861. INT 66 - PenDOS - PMOUSE - SET ???
  5862.     AH = 50h
  5863.     BX = ???
  5864.     CH = ???
  5865.     DX = ???
  5866. Return: CF clear
  5867.     AX = 0000h
  5868. --------n-6651-------------------------------
  5869. INT 66 - PenDOS - PMOUSE - NOP
  5870.     AH = 51h
  5871. Return: CF set
  5872. --------n-6652-------------------------------
  5873. INT 66 - PenDOS - PMOUSE - ???
  5874.     AH = 52h
  5875.     BX = ???
  5876.     CL = ???
  5877.     DX = ???
  5878. Return: ???
  5879. --------n-6653-------------------------------
  5880. INT 66 - PenDOS - PMOUSE - UNUSED FUNCTIONS
  5881.     AH = 53h to 57h
  5882. Return: CF set
  5883. --------n-66---------------------------------
  5884. INT 66 - PenDOS - PMOUSE - ALTERNATE API
  5885.     AH = function (58h-5Fh)
  5886. Note:    these functions exactly duplicate AH=50h-57h
  5887. ----------66AA02-----------------------------
  5888. INT 66 - HelpTSR v2.10 - INSTALLATION CHECK
  5889.     AX = AA02h
  5890. Return: ES:DI -> 7 byte signature "HelpTSR" if resident
  5891. Program: HelpTSR is a resident viewer by David Jurgens for HelpPC
  5892. --------n-66C5-------------------------------
  5893. INT 66 - PenDOS - VLOAD - API
  5894.     AH = C5h
  5895.     ???
  5896. Return: ???
  5897. --------t-66FFFBBXFFFB-----------------------
  5898. INT 66 - MicroHelp Stay-Res Plus - ???
  5899.     AX = FFFBh
  5900.     BX = FFFBh
  5901.     ???
  5902. Return: ???
  5903. SeeAlso: AX=FFFEh,INT 2D"AMIS"
  5904. --------t-66FFFEBXFFFE-----------------------
  5905. INT 66 - MicroHelp Stay-Res/Stay-Res Plus - UNINSTALL
  5906.     AX = FFFEh
  5907.     BX = FFFEh
  5908. Return: only if unsuccessful
  5909. Notes:    installation check is for the interrupt handler to begin with the bytes
  5910.       FBh 9Ch or 9Ch FAh, and the program name (not case-sensitive) to
  5911.       appear at offset 0005h (older versions) or the offset returned by
  5912.       AX=FFFFh/BX=FFF0h in the interrupt handler segment.
  5913.     Programs which use Stay-Res include ThesPlus (program name "THESPLUS")
  5914.       and Personal Calendar (program name "CAL") by Paul Mun~oz-Colman.
  5915. SeeAlso: AX=FFFBh,AX=FFFFh,INT 2D"AMIS"
  5916. Index:    installation check;MicroHelp Stay-Res|installation check;ThesPlus
  5917. Index:    installation check;Personal Calendar|installation check;CAL
  5918. --------t-66FFFFBXFFF0-----------------------
  5919. INT 66 - MicroHelp Stay-Res Plus - FIND PROGRAM NAME
  5920.     AX = FFFFh
  5921.     BX = FFF0h
  5922. Return: DI = offset of program name in interrupt handler segment
  5923. SeeAlso: AX=FFFBh,AX=FFFEh,INT 2D"AMIS"
  5924. --------d-67---------------------------------
  5925. INT 67 - Adaptec controllers - DRIVE 1 DATA
  5926. Desc:    this vector stores the last four bytes of the parameter table for
  5927.       hard disk 1
  5928. SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 66"Adaptec"
  5929. --------d-67---------------------------------
  5930. INT 67 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  5931. SeeAlso: INT 64"Pdisk",INT 66"Pdisk"
  5932. --------I-67---------------------------------
  5933. INT 67 - Sangoma CCPOP 3270 resident module
  5934. SeeAlso: INT 61"Sangoma",INT 68"Sangoma"
  5935. --------U-67---------------------------------
  5936. INT 67 - CUCKOO.COM - INSTALLATION CHECK
  5937. Program: CUCKOO is a resident on-screen clock with optional hourly chime or
  5938.       cuckoo by an unknown author with revisions by Thomas A. Lundin
  5939. Note:    this is not a vector; when loaded for the first time, CUCKOO.COM uses
  5940.       the last unused (0000h:0000h) vector in the range 60h-67h to store
  5941.       the signature value 434Ch:4F4Bh ('CLOK')
  5942. --------N-6700-------------------------------
  5943. INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE AND WAIT
  5944.     AH = 00h
  5945.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  5946. Return: AL = status (see #1921)
  5947.     AH = semaphore owner if status=02h
  5948. SeeAlso: AH=01h,AH=02h"PC-NET",INT 7F/AH=00h
  5949.  
  5950. (Table 1921)
  5951. Values for PC-NET semaphore function status:
  5952.  00h    successful
  5953.  01h    invalid function
  5954.  02h    semaphore already locked
  5955.  03h    unable to lock semaphore
  5956.  04h    semaphore space exhausted
  5957. --------N-6701-------------------------------
  5958. INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE
  5959.     AH = 01h
  5960.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  5961. Return: AL = status (see #1921)
  5962.     AH = semaphore owner if status=02h
  5963. SeeAlso: AH=00h,AH=02h"PC-NET",INT 7F/AH=01h"Alloy"
  5964. --------N-6702-------------------------------
  5965. INT 67 - PC-NET, Alloy NTNX - UNLOCK SEMAPHORE
  5966.     AH = 02h
  5967.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  5968. Return: AL = status (see #1921)
  5969.     AH = semaphore owner if status=02h
  5970. SeeAlso: AH=00h,AH=01h"PC-NET",INT 7F/AH=02h
  5971. --------m-671E-------------------------------
  5972. INT 67 U - Qualitas 386MAX v7.00 - MEMLIMIT - INSTALLATION CHECK
  5973.     AH = 1Eh
  5974. Return: AH = 00h if installed
  5975.         AL destroyed
  5976.         ES:DI -> ASCII signature "MemLimit"
  5977. SeeAlso: AH=1Fh,INT 21/AX=4402h"386MAX"
  5978. --------m-671F-------------------------------
  5979. INT 67 U - Qualitas 386MAX v7.00 - MEMLIMIT - API
  5980.     AH = 1Fh
  5981.     DS:SI -> request packet (see #1922)
  5982. Return: AH = status (00h successful, 84h invalid function code, etc.)
  5983. SeeAlso: AH=1Eh
  5984.  
  5985. Format of 386MAX MEMLIMIT request packet:
  5986. Offset    Size    Description    (Table 1922)
  5987.  00h    WORD    function code (00h-0Fh)
  5988.  02h    WORD    return code (see #1923)
  5989.  04h  4 BYTEs    ???
  5990.  08h    WORD    ???
  5991.     ???
  5992.  
  5993. (Table 1923)
  5994. Values for 386MAX MEMLIMIT return code:
  5995.  00h    unknown request
  5996.  01h    invalid parameter for VCPI limit
  5997.  02h    VCPI limit set
  5998.  03h    invalid parameter for EMS limit
  5999.  04h    EMS limit set
  6000.  05h    DPMI disabled
  6001.  06h    XMS disabled
  6002.  07h    XMS limit set
  6003.  08h    unable to uninstall
  6004.  09h    unloaded
  6005. --------m-673F--CX5145-----------------------
  6006. INT 67 U - QEMM-386 v4.23+ - INSTALLATION CHECK
  6007.     AH = 3Fh
  6008.     CX = 5145h ("QE")
  6009.     DX = 4D4Dh ("MM")
  6010. Return: AH = 00h if installed
  6011.         ES:DI -> QEMM API entry point
  6012. Notes:    if no other program has hooked INT 67, an alternate installation
  6013.       check is to test for the string
  6014.       "QUARTERDECK EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  6015.       handler's segment; the word at offset 12h contains the offset in
  6016.       the handler's segment of the API entry point
  6017.     although this function is still undocumented, Quarterdeck has recently
  6018.       documented two alternate methods for determining the QEMM API entry
  6019.       point, as well as several of the API functions
  6020.     MICEMM (Micronics Expanded Memory Manager) versions 2.0C and 4D support
  6021.       the alternate QEMM installation check and entry point functions 00h,
  6022.       02h, and 03h; version 4D only provides the signature string if the
  6023.       commandline argument "DV" is provided
  6024.     386MAX v6.01 responds to this call, but DESQview 2.42 does not
  6025.       recognize the returned entry point as providing QEMM's capabilities
  6026.       because a) only functions 0Ch (different from QEMM 0Ch) and
  6027.             1000h-1009h are supported,
  6028.           b) status is returned as for EMS functions, not QEMM funcs
  6029.           c) the protected-mode entry point returned by function 1000h
  6030.             only supports functions 0Ch, 1004h, 1005h, and 100Ah
  6031.     the string check mentioned above is not supported by 386MAX
  6032. SeeAlso: AX=5BF0h,AH=DDh,AX=FFA5h,INT 15/AX=11DEh,INT 21/AX=4402h/SF=01h
  6033. SeeAlso: INT 21/AX=4402h"QEMM",INT 21/AX=4402h"386MAX",INT 2F/AX=D201h/BX=5145h
  6034.  
  6035. (Table 1924)
  6036. Call QEMM entry point with:
  6037.     AH = 00h get QEMM state (documented)
  6038.         Return: CF clear
  6039.             AL = QEMM state
  6040.                 bit 0 set if QEMM turned OFF
  6041.                 bit 1 set if in "Auto" mode
  6042.     AH = 01h set QEMM state (documented)
  6043.         AL = new state
  6044.             bit 0 set: place QEMM in OFF state
  6045.         Return: CF clear if successful
  6046.             CF set on error
  6047.     AH = 02h get ???
  6048.         Return: CF clear
  6049.             AX = segment of ??? data structure
  6050.             Data Structure
  6051.             Offset    Size    Description
  6052.              00h    DWORD    page table entry for ???
  6053.                 ???
  6054.     AH = 03h get QEMM version (documented)
  6055.         Return: CF clear
  6056.             AX = BX = version in BCD
  6057.         Notes:    the most recent official docs state that the version is
  6058.               returned in both AX and BX; older documentation only
  6059.               mentions BX
  6060.             MICEMM returns AX=0001h, BX unchanged
  6061.     AH = 04h allocate 4K page and set AUTO/ON mode
  6062.         Return: CF clear if successful
  6063.                 DX = page number of a 4K page
  6064.             CF set if unable to allocate page
  6065.         Note:    QEMM mode unchanged if not AUTO/OFF
  6066.     AH = 05h free 4K page and turn QEMM off
  6067.         DX = page number returned by function 04h
  6068.         Return: CF clear
  6069.         Note:    QEMM mode unchanged if not AUTO/ON
  6070.     AH = 06h make new mapping context???
  6071.         DX = page number of 4K page to hold page table
  6072.         Return: CF clear
  6073.         Note:    copies page table into given page and then sets ???
  6074.               page table entry to point at copy
  6075.     AH = 07h get mapping context
  6076.         Return: CF clear
  6077.             DX = page number of page table for current mapping
  6078.                   context
  6079.     AH = 08h set mapping context???
  6080.         DX = linear page number of page table
  6081.         Return: CF clear
  6082.     AH = 09h get linear page number for page table entry
  6083.         CX = page table index
  6084.         Return: CF clear
  6085.             DX = linear page number
  6086.     AH = 0Ah set linear page number for page table entry
  6087.         CX = page table index
  6088.         DX = linear page number
  6089.         Return: CF clear
  6090.     AH = 0Bh map 4K pages
  6091.         BX = number of pages
  6092.         CX = first page number (must be 0100h to allocate HMA)
  6093.         DX = EMS handle (memory belonging to EMS handle will be mapped
  6094.               into the address space beginning with the first page
  6095.               allocated to the handle)
  6096.         Return: AH = 00h
  6097.     AH = 0Ch get available memory
  6098.         Return: CF clear
  6099.             BX = 0001h
  6100.             CX = total 4K pages???
  6101.             DX = number of 4K pages free
  6102.     AH = 0Dh CRT controller I/O port trapping
  6103.         AL = mode
  6104.             00h only trap on I/O ports 03C0h-03C5h, 03C7h, 03CAh-03CFh
  6105.             01h trap on ports 03B4h, 03B5h, 03B8h, 03C6h, 03C8h, 03C9h,
  6106.               03D4h, and 03D5h
  6107.             02h only trap on I/O ports 03C6h, 03C8h, and 03C9h
  6108.         Return: CF clear
  6109.     AH = 0Eh set cursor virtualization callbacks
  6110.         DS:BX -> FAR routine for getting hardware cursor address
  6111.         ES:DX -> FAR routine for setting hardware cursor address
  6112.         Return: CF clear
  6113.         Note:    both callbacks are invoked with CL indicating which
  6114.               CRT controller register to access (0Eh for high
  6115.               byte of cursor address, 0Fh for low byte)
  6116.             the DS:BX callback should return BX=cursor address;
  6117.               ES:DX is called with BL or BH (depending on CL)
  6118.               set to the appropriate half of the cursor's address
  6119.     AH = 0Fh unmap 4K pages
  6120.         CX = first page number
  6121.         DX = number of pages
  6122.         Return: CF clear
  6123.             AL = 00h/01h if ???
  6124.         Note:    if CX=0100h and DX=0010h, the HMA is remapped to
  6125.               simulate a disabled A20
  6126.     AX = 1000h get protected-mode interface
  6127.         DS:SI -> 16-byte buffer for two GDT entries
  6128.         ES:DI -> buffer for 4K page table
  6129.         Return: CF clear
  6130.             EAX = offset of protected-mode API entry point
  6131.             DS:SI buffer filled with two GDT descriptors
  6132.                 first is QEMM code segment, second is data???
  6133.             ES:DI buffer filled with 4K page table
  6134.             DI points to first unused page table entry
  6135.         SeeAlso: INT 67/AX=DE01h
  6136.     AX = 1001h get CPU debug registers
  6137.         ES:DI -> buffer for debug registers (8 DWORDs)
  6138.         Return: CF clear
  6139.             BL = INT01 handling (see function 1002h)
  6140.             ES:DI buffer filled
  6141.     AX = 1002h set CPU debug registers
  6142.         BL = INT01 handling
  6143.             00h     reflect all debugging exceptions as V86-mode INT 01's
  6144.             else convert debugging exceptions other than single-step
  6145.               into V86-mode INT 03's, single-step to INT 01's
  6146.         ES:DI -> buffer containing debug registers (8 DWORDs)
  6147.         Return: CF clear
  6148.         Notes:    identical to INT 67/AX=DE09h if BL=01h
  6149.             the INT01 handling flag is set to 01h by the general-
  6150.               protection violation handler for certain privileged
  6151.               instructions
  6152.     AX = 1003h get machine status word CR0
  6153.         Return: CF clear
  6154.             EAX = contents of CR0
  6155.         SeeAlso: INT 67/AX=DE07h
  6156.     AX = 1004h allocate a 4K page
  6157.         Return: CF clear if successful
  6158.                 EDX = linear address of allocated page
  6159.             CF set on error
  6160.         SeeAlso: INT 67/AX=DE04h
  6161.     AX = 1005h free 4K page
  6162.         EDX = linear address of page to free
  6163.         Return: CF clear
  6164.         SeeAlso: INT 67/AX=DE05h
  6165.     AX = 1006h NOP
  6166.         Return: CF set
  6167.     AX = 1007h get maximum physical memory address
  6168.         Return: CF clear
  6169.             EDX = physical address of highest 4K memory page
  6170.         SeeAlso: INT 67/AX=DE02h
  6171.     AX = 1008h get physical address of page in first megabyte
  6172.         CX = page number (linear address shifted right 12 bits)
  6173.         Return: CF clear
  6174.             EDX = linear address of page
  6175.         SeeAlso: function 1F00h
  6176.     AX = 1009h switch to protected mode
  6177.         ESI = linear address in first megabyte of system reg values
  6178.             (see INT 67/AX=DE0Ch)
  6179.         interrupts disabled
  6180.         Return: interrupts disabled
  6181.             GDTR, IDTR, LDTR, TR loaded
  6182.             SS:ESP must have at least 16 bytes space, and the
  6183.                   entry point is required to set up a new stack
  6184.                   before enabling interrupts
  6185.             EAX, ESI, DS, ES, FS, GS destroyed
  6186.     AX = 100Ah switch back to virtual-86 mode
  6187.         DS = selector for data segment from function 1000h
  6188.         SS:ESP in first megabyte of linear memory
  6189.         interrupts disabled
  6190.         STACK:    QWORD  return address from FAR call to 32-bit segment
  6191.             DWORD  EIP
  6192.             DWORD  CS
  6193.             DWORD  reserved for EFLAGS
  6194.             DWORD  ESP
  6195.             DWORD  SS
  6196.             DWORD  ES
  6197.             DWORD  DS
  6198.             DWORD  FS
  6199.             DWORD  GS
  6200.         will switch to virtual86 mode with interrupts disabled, all
  6201.           segment registers loaded, and EAX destroyed.
  6202.     AH = 11h get memory type map
  6203.         AL = zero/nonzero ??? (set by QEMM.COM but apparently ignored
  6204.               by QEMM 6.00)
  6205.         ES:DI -> 256-byte buffer for memory types
  6206.         Return: CF clear
  6207.             BL = ???
  6208.             ES:DI buffer filled
  6209.         Note:    each byte of the buffer corresponds to a 4K page, and
  6210.               contains the type of that page: 00h = mappable,
  6211.               02h = mapped ROM, 03h = high RAM, 04h = excluded,
  6212.               05h = video, 06h = ROM, 07h = adapter ROM,
  6213.               08h = split ROM, 09h = page frame, 0Ah = RAMmable,
  6214.               0Bh = conventional, 83h = high RAM under MS Windows
  6215.     AH = 12h get HIRAM chain
  6216.         Return: CF clear
  6217.             BX = segment of first MCB in high memory
  6218.                 0000h if no high memory
  6219.     AX = 1300h VIDRAMEGA???
  6220.         BL = 00h copy ???
  6221.              nonzero copy ??? (reverse)
  6222.         Return: CF clear
  6223.             AL = status
  6224.                 00h if all pages clean
  6225.                 01h if any page dirty
  6226.     AX = 1301h check if pages modified
  6227.         DX:DI = start address of range to check
  6228.         CX = length of range in paragraphs
  6229.         Return: CF clear
  6230.             CX = status
  6231.                 0000h none of the indicated pages is dirty
  6232.                 DI destroyed
  6233.                 1000h one or more pages is dirty
  6234.                 DI = low word of first dirty page's linear addr
  6235.     AX = 1302h ???
  6236.         BL = ???
  6237.         BH = ???
  6238.         CX = ???
  6239.         SI = offset of ???
  6240.         DI = offset of ???
  6241.         ???
  6242.         Return: CF clear
  6243.             ???
  6244.         Note:    disables certain interrupts at the two 8259 PICs during
  6245.               execution; also modifies CRT controller during
  6246.               execution under certain circumstances
  6247.     AX = 1303h initialize EGA graphics virtualization
  6248.         BX = number of pages (less 1) of EMS to allocate
  6249.         Return: CF clear if successful
  6250.                 DX = EMS handle
  6251.             CF set on error
  6252.     AX = 1304h shutdown EGA graphics virtualization
  6253.         DX = EMS handle being used for virtualization
  6254.         Return: CF clear
  6255.     AX = 1305h select portion of EGA graphics to virtualize???
  6256.         (related to graphics virtualization, changes memory mappings)
  6257.         CX = start offset within A000h segment of virtualized mem???
  6258.         Return: CF clear
  6259.         Note:    disables certain interrupts at the two 8259 PICs during
  6260.               execution (see func 130Ch) and runs inside a QEMM
  6261.               critical section
  6262.     AX = 1306h set DESQview critical section counter address
  6263.         ES:BX -> WORD DESQview critical section counter or 0000h:0000h
  6264.         Return: CF clear
  6265.         Note:    also sets a pointer in the low-memory part of QEMM to
  6266.               the current value of INT 15 if ES:BX not 0000h:0000h
  6267.     AX = 1307h ??? (changes memory mappings for entire A000h segment)
  6268.         Return: CF clear
  6269.         Note:    disables certain interrupts at the two 8259 PICs during
  6270.               execution (see func 130Ch) and runs inside a QEMM
  6271.               critical section
  6272.     AX = 1308h start/reset CRT controller I/O trapping
  6273.         BL = subfunction
  6274.             00h restore CRTC I/O port trapping to previous state
  6275.             else start trapping all accesses to I/O ports 03B0-03DF
  6276.         Return: CF clear
  6277.         Note: if called more than once in a row with BL nonzero, the
  6278.             original state of the I/O port trapping will be lost
  6279.     AX = 1309h Hercules mode-change support
  6280.         ES:BX -> new address for Hercules mode-change callback
  6281.         Return: CF clear
  6282.         Note:    the callback function is called whenever the CRTC mode
  6283.               register is written, with AL set to the value written
  6284.     AX = 130Ah virtualize EGA/VGA DAC registers (I/O ports 03C8h/03C9h)
  6285.         CX:DX -> DAC register virtualization buffer (see #1931)
  6286.             or 0000h:0000h to disable
  6287.         Return: CF clear
  6288.     AX = 130Bh ???
  6289.         BL = ??? (??? or 00h)
  6290.         Return: CF clear
  6291.             ???
  6292.         Note:    calls AX=130Eh in some cases
  6293.     AX = 130Ch set interrupts to mask
  6294.         BX = interrupts to mask out during AX=1302h,AX=1307h,AX=1308h,
  6295.             AX=130Dh,AX=1310h (BL = master PIC, BH = slave PIC)
  6296.         Return: CF clear
  6297.     AX = 130Dh map EGA memory at A0000h
  6298.         ???
  6299.         Return: CF clear
  6300.         Note:    disables certain interrupts at the two 8259 PICs during
  6301.               execution (see func 130Ch) and runs inside a QEMM
  6302.               critical section
  6303.             calls AX=1307h
  6304.     AX = 130Eh ??? (modifies CRT controller setup)
  6305.         ???
  6306.         Return: CF clear
  6307.     AX = 130Fh reset ???
  6308.         Return: CF clear
  6309.     AX = 1310h copy modified pages to physical video RAM???
  6310.         ???
  6311.         Return: CF clear
  6312.         Note:    disables certain interrupts at the two 8259 PICs during
  6313.               execution (see func 130Ch) and runs inside a QEMM
  6314.               critical section
  6315.             also calls AX=130Dh
  6316.     AX = 1311h set ???
  6317.         BL = zero/nonzero???
  6318.         Return: CF clear
  6319.         Note:    certain operations will be performed with interrupts
  6320.               (as set by AX=130Ch) enabled rather than disabled if
  6321.               called with BL nonzero
  6322.     AX = 1312h (v6.02) NOP???
  6323.         Note:    called by DV 2.42, but appears to be a NOP in QEMM 6.02
  6324.     AX = 1400h initialize DESQview "protection level" support
  6325.         ES:DI -> protection level configuration (at least 24 bytes)
  6326.             (see #1925)
  6327.         BL = highest ??? to return (one less than number of words)
  6328.         Return: CF clear
  6329.             AX = ??? (4204h for v6.00)
  6330.         Note:    QEMM also sets the protected mode INT 02 and INT 06
  6331.               vectors to alternate handlers in certain cases
  6332.     AX = 1401h turn off DESQview protection level support
  6333.         Return: CF clear
  6334.             ???
  6335.         Notes:    clears the DV critical-section flag address set with
  6336.               function 1306h
  6337.             QEMM also sets the protected mode INT 02 and INT 06
  6338.               vectors to the default handlers if they had been
  6339.               revectored by function 1400h
  6340.     AX = 1402h set protection level???
  6341.         BL = protection level???
  6342.             00h NOP
  6343.             01h ???
  6344.             02h ???
  6345.             other (03h) ???
  6346.         ES:DI -> ???
  6347.         Return: CF clear
  6348.             ???
  6349.         Format of Data structure:
  6350.         Offset    Size    Description
  6351.          00h    WORD    segment of ??? (X, word at X:0136h set to X)
  6352.          02h    WORD    segment of ??? (word at X:0124h set to this)
  6353.          04h    WORD    number of paragraphs of ???
  6354.          06h  3 WORDs    ??? (copied to X:0000h)
  6355.          0Ch    WORD    ???
  6356.     AX = 1403h add ??? to end of list and ??? (execute func 1406h)
  6357.         ES:DI -> ??? structure added to end of ??? list
  6358.             (at least 31 bytes, DWORD at offset 06h used for
  6359.              storing pointer to next struc, WORD at offset 00h
  6360.              seems to be a key or index)
  6361.         Return: CF clear
  6362.     AX = 1404h NOP
  6363.         Return: CF clear
  6364.     AX = 1405h remove ??? from ??? list
  6365.         BX = key???
  6366.         Return: CF clear
  6367.     AX = 1406h ???
  6368.         ???
  6369.         Return: CF clear
  6370.             ???
  6371.         Notes:    this function is a NOP unless protection level 2 or 3
  6372.               is active
  6373.             when not a NOP, one of the actions is to write-protect
  6374.               certain memory pages
  6375.     AX = 1407h ???
  6376.         ???
  6377.         Return: CF clear
  6378.             ???
  6379.         Note:    same as function 1406h, but only does anything if
  6380.               protection level 2 is active
  6381.     AX = 1408h unprotect???
  6382.         ???
  6383.         Return: CF clear
  6384.             ???
  6385.     AX = 1409h abort program causing protection violation???
  6386.         ???
  6387.         Return: CF clear
  6388.             ???
  6389.     AX = 140Ah set ???
  6390.         BX = index of ???
  6391.         Return: CF clear
  6392.             ???
  6393.         Notes:    no range checking is performed on BX
  6394.             this function is a NOP unless protection level 3 active
  6395.     AX = 140Bh get ???
  6396.         BX = index of ???
  6397.         SI = 0000h
  6398.         Return: CF clear
  6399.             SI = segment of 256-byte buffer??? or 0000h
  6400.         Notes:    no range checking is performed on BX
  6401.             this function is a NOP unless protection level 3 active
  6402.     AH = 15h set timer channel 0 virtualization buffer
  6403.         ES:BX -> WORD buffer for timer channel 0 divisor
  6404.             0000h:0000h to disable virtualization
  6405.         Return: CF clear
  6406.      ---QEMM v5.00+ ---
  6407.     AX = 1600h get memory access status
  6408.         ES:DI -> 256-byte buffer
  6409.         Return: ES:DI buffer filled
  6410.         Note:    each byte of the buffer indicates the status of a 4K
  6411.               page (bit 0 set if read, bit 1 set if written)
  6412.     AX = 1601h set memory access status
  6413.         ES:DI -> 256-byte buffer containing access statuses (see above)
  6414.     AH = 17h get memory usage statistics
  6415.         ES:DI -> 81-byte buffer for memory statistics (see #1929)
  6416.         Return: CF clear
  6417.      ---QEMM v5.11+ ---
  6418.     AH = 18h check whether conventional memory mapped into address range
  6419.         ES:BX = starting address
  6420.         CX = number of 4K pages
  6421.         Return: CF clear
  6422.             AL = 00h one or more pages is remapped
  6423.                  01h all pages in range are conventional memory
  6424.                 (physical address == virtual address)
  6425.     AH = 19h NOP
  6426.         Return: CF set
  6427.     AH = 1Ah I/O port access
  6428.         AL = subfunction
  6429.             00h get byte from I/O port
  6430.             Return: BL = port value
  6431.             01h send byte to I/O port
  6432.             BL = value to send
  6433.             02h send byte to I/O port, get byte from following port
  6434.             BH = value to send
  6435.             Return: BL = value read
  6436.             03h send bytes to two consecutive I/O ports
  6437.             BH = value for first I/O port (DX)
  6438.             BL = value for second I/O port (DX+1)
  6439.         DX = port number
  6440.         Return: CF clear
  6441.     AH = 1Bh MS Windows 3.x support
  6442.         AL = subfunction
  6443.             00h get EMM Import Structure address
  6444.             ES:DI -> buffer for EMM import data structure
  6445.                   (see #1927)
  6446.             Return: CF set on error
  6447.                 CF clear if successful
  6448.             SeeAlso: INT 21/AX=4402h/SF=01h
  6449.             01h disable V86 mode
  6450.             Return: CF set on error
  6451.                     (i.e. no Global EMM Import rec. allocated)
  6452.                 CF clear if successful
  6453.             Note:    shuts down EMS and initializes Global EMM
  6454.                   Import record; this function is invoked from
  6455.                   the callback supplied by INT 2F/AX=1605h
  6456.             02h enable V86 mode
  6457.             Return: CF set on error
  6458.                 CF clear if successful
  6459.             Note:    restarts EMS and frees Global EMM Import
  6460.                   record; this function is invoked from the
  6461.                   callback supplied by INT 2F/AX=1605h
  6462.             03h MS Windows initializing
  6463.             CX = segment from which Windows init broadcast made???
  6464.             DX = Windows startup flags
  6465.             DI = Windows version number (major in upper byte)
  6466.             Return: CF clear if successful
  6467.                     DS:SI -> V86 mode enable/disable callback
  6468.                       (see INT 2F/AX=1605h)
  6469.                     ES:BX -> startup info structure
  6470.                       (see INT 2F/AX=1605h)
  6471.                 CF set on error (unable to start Windows)
  6472.             SeeAlso: INT 2F/AX=1605h
  6473.             04h MS Windows terminating
  6474.             Return: CF clear
  6475.             05h determine whether program is driver
  6476.             DS:DX -> ASCIZ filename
  6477.             Return: CF clear
  6478.                 AL = status
  6479.                     01h if string ends in ".DRV"
  6480.                     FFh if string ends in "GDI.EXE"
  6481.                     00h otherwise
  6482.             Note:    when MS Windows 3.0 standard mode starts,
  6483.                   QEMM patches all drivers until GDI.EXE is
  6484.                   loaded
  6485.             06h patch protected-mode check in Windows driver
  6486.             CX = length of data pointed at by DS:DX
  6487.             DS:DX -> buffer containing Windows driver code
  6488.             Return: CF clear
  6489.             Note:    patches all SMSW x/TEST x,1 instruction
  6490.                   sequences into MOV x,CS/VERW x sequences,
  6491.                   which has the effect that the protected-mode
  6492.                   check will only indicate protected mode in
  6493.                   native protected mode and not in V86 mode
  6494.             07h BUG: QEMM 6.00-7.01 accept this and branch randomly
  6495.             else Return: CF set
  6496.     AH = 1Ch hardware interrupt V86-mode calldowns
  6497.         AL = subfunction
  6498.             00h disable IRQ0-7 calldowns
  6499.             01h set V86-mode IRQ0-7 handlers
  6500.             ES:DI -> 8 DWORDs containing V86-mode handler addresses
  6501.             02h disable IRQ8-15 handlers
  6502.             03h set V86-mode IRQ8-15 handlers
  6503.             ES:DI -> 8 DWORDs containing V86-mode handler addresses
  6504.         BUG:    although the jump table only contains four entries,
  6505.               QEMM 6.00 will attempt to use it for any value of
  6506.               AL between 00h and 2Ah, thus branching unpredictably
  6507.               for AL=04h-2Ah; QEMM v7.01 behaves similarly for
  6508.               AL=04h-1Bh
  6509.         Note:    when enabled, the appropriate IRQs are reflected back
  6510.               to the specified handlers in virtual-86 mode after
  6511.               the CPU automatically invokes the protected-mode
  6512.               handler inside QEMM
  6513.      ---QEMM v6.00+ ---
  6514.     AH = 1Dh Stealth interrupts
  6515.         AL = subfunction
  6516.             00h switch to pre-Stealth interrupt vector table
  6517.             Note:    also switches VGA Save table pointer
  6518.                   (0040h:00A8h) and overwrites the vectors
  6519.                   currently assigned for use by the two
  6520.                   interrupt controllers (see INT 67/AX=DE0Ah)
  6521.                   with the vectors for INT 08-0F and 70-77 (to
  6522.                   avoid crashing the system).
  6523.             01h restore user interrupt vector table
  6524.             Notes:    interrupts should be disabled around the
  6525.                   AX=1D00h and AX=1D01h calls because QEMM does
  6526.                   not modify the memory maps to map in ROM, so
  6527.                   an interrupt could be disastrous
  6528.                 clears any pending IRQ7 at end of function
  6529.             else
  6530.             Return: CF set
  6531.         Note:    functions 1Dxxh are not supported by QEMM v7.01, and
  6532.               always return CF set
  6533.     AH = 1Eh Stealth information (partially documented)
  6534.         AL = subfunction
  6535.             00h "QEMM_GET_INFO" get Stealth configuration
  6536.             Return: BL = memory configuration flags
  6537.                       (documented as "reserved") (see #1928)
  6538.                 BH = reserved (always 00h for v6.00)
  6539.                 CL = stealth type
  6540.                     (00h none,46h Frame,4Dh Map, 50h Protect)
  6541.                 CH = suspend/resume interrupt (00h none)
  6542.                 DX = reserved (always 0000h for v6.00)
  6543.                 SI = reserved (always 0000h for v6.00)
  6544.                 DI = reserved (always 0000h for v6.00)
  6545.             01h "QEMM_GET_STEALTH_COUNT" get number of Stealth'ed ROMs
  6546.             Return: CF clear
  6547.                 BX = number of Stealth'ed ROMs
  6548.             02h "QEMM_GET_STEALTH_LIST" get Stealth'ed ROM info
  6549.             ES:DI -> buffer for Stealth ROM info (see #1930)
  6550.             Return: CF clear
  6551.                 BX = number of Stealth'ed ROMs
  6552.                 ES:DI buffer filled
  6553.             else
  6554.             Return: CF set
  6555.     AH = 1Fh page table manipulation (documented)
  6556.         AL = subfunction
  6557.             00h "QEMM_GET_PTE" get page table entry
  6558.             CX = page number
  6559.             Return: EDX = page table entry
  6560.                 CF clear
  6561.             01h "QEMM_SET_PTE" set page table entry
  6562.             CX = page number
  6563.             EDX = new page table entry
  6564.             Return: CF clear
  6565.             SeeAlso: function 1008h
  6566.             else
  6567.             Return: CF set
  6568.     AH = 20h asynchronous disk access support (documented)
  6569.         AL = subfunction
  6570.             00h "QEMM_GET_VHI_INFO" get VirtualHDIRQ information
  6571.             Return: CF clear
  6572.                 BL = flags
  6573.                     bit 7: VirtualHDIRQ setting respected
  6574.                       (set if Stealth active)
  6575.                     bits 6-1 reserved
  6576.                     bit 0: VirtualHDIRQ currently enabled
  6577.                     (INT 15/AH=90h suppressed when enabled)
  6578.             01h "QEMM_SET_VHI_FINO" set VirtualHDIRQ state
  6579.             BL bit 0 = new VirtualHDIRQ state
  6580.             Return: CF clear
  6581.                 BL = old VHI setting (bits 0 and 7, see above)
  6582.             else
  6583.             Return: CF set
  6584.     AH = 21h Stealth support (documented)
  6585.         AL = subfunction
  6586.             00h "QEMM_COPY_STEALTH_ROMS" copy data from Stealthed addr
  6587.             DS:SI -> start address of hidden memory to copy
  6588.             ES:DI -> buffer for copied data
  6589.             ECX = number of bytes to copy
  6590.             Return: CF clear if successful
  6591.                 CF set on error (DS:SI < C000h:0000h or
  6592.                           DS:SI + ECX > 1M)
  6593.             else
  6594.             Return: CF set
  6595.     ---QEMM v6.03+ ---
  6596.     AH = 22h DESQview/X support
  6597.         AL = subfunction
  6598.             00h get ???
  6599.             Return: CF clear
  6600.                 ES:DI -> ???
  6601.             01h set ???
  6602.             ES:DI -> ??? or 0000h:0000h
  6603.             Return: CF clear if successful
  6604.                 CF set on error
  6605.     ---QEMM v6.04+ ---
  6606.     AH = 23h ???
  6607.         AL = subfunction
  6608.             00h get ???
  6609.             BX = which ??? to get (must be 0000h for v6.04)
  6610.             Return: CF clear if successful
  6611.                     ES:DI -> ???
  6612.                 CF set on error
  6613.             01h set ???
  6614.             BX = which ??? to set (must be 0000h for v6.04)
  6615.             ES:DI -> ???
  6616.             Return: CF clear if successful
  6617.                 CF set on error
  6618.             02h clear specified ???
  6619.             BX = which ??? to clear (must be 0000h for v6.04)
  6620.             Return: CF clear if successful
  6621.                 CF set on error
  6622.             FFh clear all ???
  6623.             else
  6624.             Return: CF set
  6625.     ---QEMM v7.01 only---
  6626.     AH = 24h ST-DBL support
  6627.         AL = subfunction
  6628.             00h set ???
  6629.             EDX -> information table
  6630.                 (EDX = segment SHL 16 + offset)
  6631.             01h ???
  6632.     other
  6633.         Return: CF set
  6634.  
  6635. Format of QEMM protection level configuration:
  6636. Offset    Size    Description    (Table 1925)
  6637.  00h    WORD    segment of 128 breakpoint (INT 3) instructions for use in
  6638.           DESQview protection level 3 interrupt vector checking, or
  6639.           0000h to disable; in pl3, INTs 00-7F are pointed at these
  6640.           breakpoints
  6641.  02h    DWORD    -> array of actual interrupt handler addresses for INT 00-7F
  6642.           when interrupt vectors are pointed at protection level 3
  6643.           breakpoints
  6644.  06h    DWORD    far pointer to ??? region list (see #1926)
  6645.  0Ah    DWORD    far pointer to buffer for returned ???
  6646.  0Eh    DWORD    seg:ofs of function to call on protection violation???
  6647.  12h    WORD    segment of ???
  6648.  14h    DWORD    far pointer to DWORD containing number of paragraphs of
  6649.           ??? for segment at offset 12h
  6650.     ???
  6651.  
  6652. Format of protection level Region List:
  6653. Offset    Size    Description    (Table 1926)
  6654.  00h    WORD    number of PAIRS of pointers to follow
  6655.  02h 2N DWORDs    start/end seg:ofs addresses of ??? regions
  6656. Note:    QEMM converts the segmented addresses into linear addresses in place
  6657.  
  6658. Format of EMM Import structure:
  6659. Offset    Size    Description    (Table 1927)
  6660.  00h    DWORD    physical address of EMM import struct
  6661.  04h    BYTE    major version (v6.00 sets to 01h)
  6662.  05h    BYTE    minor version (v6.00 sets to 00h/0Bh)
  6663. SeeAlso: INT 21/AX=4402h/SF=01h
  6664.  
  6665. Bitfields for memory configuration flags:
  6666. Bit(s)    Description    (Table 1928)
  6667.  0    conventional memory sorted
  6668.  1    conventional memory filled
  6669.  2    ???
  6670.  3    ???
  6671.  4    expanded memory is in use
  6672.  5    ???
  6673.  
  6674. Format of QEMM 6.0 memory statistics:
  6675. Offset    Size    Description    (Table 1929)
  6676.  00h    BYTE    01h if Shadow RAM found, 00h otherwise
  6677.  01h    DWORD    initial conventional memory in bytes
  6678.  05h    DWORD    initial extended memory in bytes
  6679.  09h    DWORD    initial expanded memory in bytes
  6680.  0Dh    DWORD    initial "top" or "shadow" memory in bytes
  6681.  11h    DWORD    Unavailable conventional memory in bytes
  6682.  15h    DWORD    Unavailable extended memory in bytes
  6683.  19h    DWORD    Unavailable expanded memory in bytes
  6684.  1Dh    DWORD    Unavailable "top" or "shadow" memory in bytes
  6685.         Add to offset 49h for Total unavailable top/shadow.
  6686.  21h    DWORD    QEMM code size in bytes
  6687.  25h    DWORD    QEMM data size in bytes
  6688.  29h    DWORD    bytes used for TASKS=
  6689.  2Dh    DWORD    DMA buffer size
  6690.  31h    DWORD    bytes used for MAPS=
  6691.  35h    DWORD    bytes of high RAM
  6692.  39h    DWORD    bytes used by mapped ROMs
  6693.  3Dh    DWORD    bytes of conventional memory provided by QEMM
  6694.  41h    DWORD    bytes of extended memory NOT converted by QEMM (EXT=xxx)
  6695.  45h    DWORD    bytes of EMS/XMS pool memory provided by QEMM
  6696.  49h    DWORD    Unavailable "top" or "shadow" memory in bytes
  6697.         Add to offset 1Dh for Total unavailable top/shadow.
  6698.  4Dh    DWORD    conventional memory overhead in bytes
  6699.         (set to 0 by QEMM.COM prior to call)
  6700.  
  6701. Format of Stealth ROM info [array]:
  6702. Offset    Size    Description    (Table 1930)
  6703.  00h    WORD    starting segment of ROM
  6704.  02h    WORD    length of ROM in paragraphs
  6705.  
  6706. Format of QEMM EGA/VGA DAC register virtualization buffer:
  6707. Offset    Size    Description    (Table 1931)
  6708.  00h    BYTE    (temp) current color register number
  6709.  01h    BYTE    (temp) number of bytes written so far for current color reg
  6710.  02h 768 BYTEs    three bytes per color register
  6711. --------m-6740-------------------------------
  6712. INT 67 - LIM EMS - GET MANAGER STATUS
  6713.     AH = 40h
  6714. Return: AH = status (00h,80h,81h,84h) (see #1932)
  6715. Note:    this call can be used only after establishing that the EMS driver is in
  6716.       fact present
  6717. SeeAlso: AH=3Fh,AX=FFA5h
  6718.  
  6719. (Table 1932)
  6720. Values for EMS function status:
  6721.  00h    successful
  6722.  80h    internal error
  6723.  81h    hardware malfunction
  6724.  83h    invalid handle
  6725.  84h    undefined function requested by application
  6726.  85h    no more handles available
  6727.  86h    error in save or restore of mapping context
  6728.  87h    insufficient memory pages in system
  6729.  88h    insufficient memory pages available
  6730.  89h    zero pages requested
  6731.  8Ah    invalid logical page number encountered
  6732.  8Bh    invalid physical page number encountered
  6733.  8Ch    page-mapping hardware state save area is full
  6734.  8Dh    save of mapping context failed
  6735.  8Eh    restore of mapping context failed
  6736.  8Fh    undefined subfunction
  6737.  90h    undefined attribute type
  6738.  91h    feature not supported
  6739.  92h    successful, but a portion of the source region has been overwritten
  6740.  93h    length of source or destination region exceeds length of region
  6741.       allocated to either source or destination handle
  6742.  94h    conventional and expanded memory regions overlap
  6743.  95h    offset within logical page exceeds size of logical page
  6744.  96h    region length exceeds 1M
  6745.  97h    source and destination EMS regions have same handle and overlap
  6746.  98h    memory source or destination type undefined
  6747.  9Ah    specified alternate map register or DMA register set not supported
  6748.  9Bh    all alternate map register or DMA register sets currently allocated
  6749.  9Ch    alternate map register or DMA register sets not supported
  6750.  9Dh    undefined or unallocated alternate map register or DMA register set
  6751.  9Eh    dedicated DMA channels not supported
  6752.  9Fh    specified dedicated DMA channel not supported
  6753.  A0h    no such handle name
  6754.  A1h    a handle found had no name, or duplicate handle name
  6755.  A2h    attempted to wrap around 1M conventional address space
  6756.  A3h    source array corrupted
  6757.  A4h    operating system denied access
  6758. --------m-6741-------------------------------
  6759. INT 67 - LIM EMS - GET PAGE FRAME SEGMENT
  6760.     AH = 41h
  6761. Return: AH = status (see also AH=40h)
  6762.         00h function successful
  6763.         BX = segment of page frame
  6764. SeeAlso: AH=58h,AH=68h
  6765. --------m-6742-------------------------------
  6766. INT 67 - LIM EMS - GET NUMBER OF PAGES
  6767.     AH = 42h
  6768. Return: AH = status (see also AH=40h)
  6769.         00h function successful
  6770.         BX = number of unallocated pages
  6771.         DX = total number of pages
  6772. BUG:    DOS 6.0 EMM386.EXE causes a system lock-up or reboot if in AUTO mode
  6773.       when this call is made; use AH=46h to ensure that EMM386 is ON
  6774.       before making this call
  6775. SeeAlso: INT 2F/AX=2702h
  6776. --------m-6743-------------------------------
  6777. INT 67 - LIM EMS - GET HANDLE AND ALLOCATE MEMORY
  6778.     AH = 43h
  6779.     BX = number of logical pages to allocate
  6780. Return: AH = status (00h,80h,81h,84h,85h,87h,88h,89h) (see #1932)
  6781.     DX = handle if AH=00h
  6782. SeeAlso: AH=45h
  6783. --------m-6744-------------------------------
  6784. INT 67 - LIM EMS - MAP MEMORY
  6785.     AH = 44h
  6786.     AL = physical page number (0-3)
  6787.     BX = logical page number
  6788.         or FFFFh to unmap (QEMM)
  6789.     DX = handle
  6790. Return: AH = status (00h,80h,81h,83h,84h,8Ah,8Bh) (see #1932)
  6791. SeeAlso: AH=69h
  6792. --------m-6745-------------------------------
  6793. INT 67 - LIM EMS - RELEASE HANDLE AND MEMORY
  6794.     AH = 45h
  6795.     DX = EMM handle
  6796. Return: AH = status (00h,80h,81h,83h,84h,86h) (see #1932)
  6797. SeeAlso: AH=43h
  6798. --------m-6746-------------------------------
  6799. INT 67 - LIM EMS - GET EMM VERSION
  6800.     AH = 46h
  6801. Return: AH = status (00h,80h,81h,84h) (see #1932)
  6802.     AL = EMM version number if AH=00h
  6803. --------m-6747-------------------------------
  6804. INT 67 - LIM EMS - SAVE MAPPING CONTEXT
  6805.     AH = 47h
  6806.     DX = handle
  6807. Return: AH = status (00h,80h,81h,83h,84h,8Ch-8Eh) (see #1932)
  6808. SeeAlso: AH=48h
  6809. --------m-6748-------------------------------
  6810. INT 67 - LIM EMS - RESTORE MAPPING CONTEXT
  6811.     AH = 48h
  6812.     DX = handle
  6813. Return: AH = status (00h,80h,81h,83h,84h,8Eh) (see #1932)
  6814. SeeAlso: AH=47h
  6815. --------m-6749-------------------------------
  6816. INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES
  6817.     AH = 49h
  6818. Note:    defined in EMS 3.0, but undocumented in EMS 3.2
  6819. --------m-674A-------------------------------
  6820. INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY
  6821.     AH = 4Ah
  6822. Note:    defined in EMS 3.0, but undocumented in EMS 3.2
  6823. --------m-674B-------------------------------
  6824. INT 67 - LIM EMS - GET NUMBER OF EMM HANDLES
  6825.     AH = 4Bh
  6826. Return: AH = status (00h,80h,81h,83h,84h) (see #1932)
  6827.     BX = number of EMM handles if AH=00h
  6828. --------m-674C-------------------------------
  6829. INT 67 - LIM EMS - GET PAGES OWNED BY HANDLE
  6830.     AH = 4Ch
  6831.     DX = EMM handle
  6832. Return: AH = status (see #1356)
  6833.     BX = number of logical pages if AH=00h
  6834. SeeAlso: AH=4Dh
  6835. --------m-674D-------------------------------
  6836. INT 67 - LIM EMS - GET PAGES FOR ALL HANDLES
  6837.     AH = 4Dh
  6838.     ES:DI -> array to receive information
  6839. Return: AH = status (00h,80h,81h,84h) (see #1932)
  6840.     ---if AH=00h---
  6841.     BX = number of active EMM handles
  6842.     array filled with 2-word entries, consisting of a handle and the
  6843.       number of pages allocated to that handle
  6844. SeeAlso: AH=4Ch
  6845. --------m-674E-------------------------------
  6846. INT 67 - LIM EMS - GET OR SET PAGE MAP
  6847.     AH = 4Eh
  6848.     AL = subfunction
  6849.         00h get mapping registers
  6850.         01h set mapping registers
  6851.         02h get and set mapping registers at once
  6852.         03h get size of page-mapping array
  6853.     DS:SI -> array holding information (AL=01h/02h)
  6854.     ES:DI -> array to receive information (AL=00h/02h)
  6855. Return: AH = status (00h,80h,81h,84h,8Fh,A3h) (see also AH=40h)
  6856.         00h successful
  6857.         AL = bytes in page-mapping array (AL=03h only)
  6858.         array pointed to by ES:DI receives mapping info (AL=00h/02h)
  6859. Notes:    this function was designed to be used by multitasking operating systems
  6860.       and should not ordinarily be used by appplication software.
  6861.     MD386 returns the size of the page-mapping array in AX instead of AL
  6862. SeeAlso: AH=4Fh
  6863. --------m-674F-------------------------------
  6864. INT 67 - LIM EMS 4.0 - GET/SET PARTIAL PAGE MAP
  6865.     AH = 4Fh
  6866.     AL = subfunction
  6867.         00h get partial page map
  6868.            DS:SI -> structure containing list of segments whose mapping
  6869.             contexts are to be saved
  6870.            ES:DI -> array to receive page map
  6871.         01h set partial page map
  6872.            DS:SI -> structure containing saved partial page map
  6873.         02h get size of partial page map
  6874.            BX = number of mappable segments in the partial map to be saved
  6875. Return: AH = status (00h,80h,81h,84h,8Bh,8Fh,A3h) (see also AH=40h)
  6876.         8Bh one of the specified segments is not mappable
  6877.         A3h contents of partial page map corrupted or count of mappable
  6878.         segments exceeds total number of mappable segments in system
  6879.     AL = size of partial page map for subfunction 02h
  6880. SeeAlso: AH=4Eh
  6881. --------m-6750-------------------------------
  6882. INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES
  6883.     AH = 50h
  6884.     AL = subfunction
  6885.         00h use physical page numbers
  6886.         01h use segment addresses
  6887.     DX = handle
  6888.     CX = number of entries in array
  6889.     DS:SI -> mapping array (see #1933)
  6890. Return: AH = status (00h,80h,81h,83h,84h,8Ah,8Bh,8Fh) (see #1932)
  6891. SeeAlso: AH=40h
  6892.  
  6893. Format of EMS mapping array entry:
  6894. Offset    Size    Description    (Table 1933)
  6895.  00h    WORD    logical page number or FFFFh to unmap physical page
  6896.  02h    WORD    physical page number or segment address
  6897. --------m-6751-------------------------------
  6898. INT 67 - LIM EMS 4.0 - REALLOCATE PAGES
  6899.     AH = 51h
  6900.     DX = handle
  6901.     BX = number of pages to be allocated to handle
  6902. Return:    AH = status (00h,80h,81h,83h,84h,87h,88h) (see #1934)
  6903.     BX = actual number of pages allocated to handle
  6904.  
  6905. (Table 1934)
  6906. Values for EMS function status:
  6907.  00h    successful
  6908.  80h    internal error
  6909.  81h    hardware malfunction
  6910.  83h    invalid handle
  6911.  84h    undefined function requested
  6912.  87h    more pages requested than present in system
  6913.  88h    more pages requested than currently available
  6914.  8Ah    invalid logical page number encountered
  6915.  8Bh    invalid physical page number encountered
  6916.  8Fh    undefined subfunction
  6917.  90h    undefined attribute type
  6918.  91h    feature not supported
  6919.  A0h    no such handle name
  6920.  A1h    duplicate handle name
  6921. --------m-6752-------------------------------
  6922. INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES
  6923.     AH = 52h
  6924.     AL = subfunction
  6925.         00h get handle attributes
  6926.         Return: AL = attribute
  6927.                 00h handle is volatile
  6928.                 01h handle is nonvolatile
  6929.         01h set handle attributes
  6930.         BL = new attribute (see returned AL)
  6931.         02h get attribute capability
  6932.         Return: AL = attribute capability
  6933.                 00h only volatile handles supported
  6934.                 01h both volatile and non-volatile supported
  6935.     DX = handle
  6936. Return: AH = status (00h,80h,81h,83h,84h,8Fh-91h) (see #1932)
  6937. SeeAlso: AH=53h
  6938. --------m-6753-------------------------------
  6939. INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME
  6940.     AH = 53h
  6941.     AL = subfunction
  6942.         00h get handle name
  6943.            ES:DI -> 8-byte buffer for handle name
  6944.         01h set handle name
  6945.            DS:SI -> 8-byte handle name
  6946.     DX = handle
  6947. Return: AH = status (00h,80h,81h,83h,84h,8Fh,A1h) (see #1932)
  6948. SeeAlso: AH=52h
  6949. --------m-6754-------------------------------
  6950. INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY
  6951.     AH = 54h
  6952.     AL = subfunction
  6953.         00h get handle directory
  6954.            ES:DI -> buffer for handle directory (see #1935)
  6955.         01h search for named handle
  6956.            DS:SI -> 8-byte name
  6957.         02h get total number of handles
  6958. Return: AL = number of entries in handle directory (subfunction 00h)
  6959.     DX = value of named handle (subfunction 01h)
  6960.     BX = total number of handles (subfunction 02h)
  6961.     AH = status (00h,80h,81h,84h,8Fh,A0h,A1h) (see also #1934)
  6962.         A1h a handle found had no name
  6963.  
  6964. Format of EMS handle directory entry:
  6965. Offset    Size    Description    (Table 1935)
  6966.  00h    WORD    handle
  6967.  02h  8 BYTEs    handle's name
  6968. --------m-6755-------------------------------
  6969. INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND JUMP
  6970.     AH = 55h
  6971.     AL = subfunction
  6972.         00h physical page numbers provided by caller
  6973.         01h segment addresses provided by caller
  6974.     DX = handle
  6975.     DS:SI -> structure containing map and jump address
  6976. Return: (at target address unless error)
  6977.     AH = status (00h,80h,81h,83h,84h,8Ah,8Bh,8Fh) (see #1932)
  6978. SeeAlso: AH=56h
  6979. --------m-6756-------------------------------
  6980. INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND CALL
  6981.     AH = 56h
  6982.     AL = subfunction
  6983.         00h physical page numbers provided by caller
  6984.         DX = handle
  6985.         DS:SI -> structure containing page map and call address
  6986.         01h segment addresses provided by caller
  6987.         DX = handle
  6988.         DS:SI -> structure containing page map and call address
  6989.         02h get page map stack space required
  6990.         Return: BX = stack space required
  6991. Return: (if successful, the target address is called.  Use a RETF to return and
  6992.      restore mapping context)
  6993.     AH = status (00h,80h,81h,83h,84h,8Ah,8Bh,8Fh) (see #1932)
  6994. SeeAlso: AH=55h
  6995. --------m-6756FF-----------------------------
  6996. INT 67 - RM386 v6.00 - ???
  6997.     AX = 56FFh
  6998.     DS:SI -> ???
  6999.     ???
  7000. Return: ???
  7001. --------m-6757-------------------------------
  7002. INT 67 - LIM EMS 4.0 - MOVE/EXCHANGE MEMORY REGION
  7003.     AH = 57h
  7004.     AL = subfunction
  7005.         00h move memory region
  7006.         01h exchange memory region
  7007.     DS:SI -> structure describing source and destination (see #1937)
  7008. Return: AH = status (see #1936)
  7009. Note:    source and destination may overlap for a move, in which case the copy
  7010.       direction is chosen such that the destination receives an intact copy
  7011.       of the source region
  7012.  
  7013. (Table 1936)
  7014. Values for EMS function status:
  7015.  00h    successful
  7016.  80h    internal error
  7017.  81h    hardware failure
  7018.  83h    invalid handle
  7019.  84h    undefined function requested
  7020.  8Ah    invalid logical page number encountered
  7021.  8Fh    undefined subfunction
  7022.  92h    successful, but a portion of the source region has been overwritten
  7023.  93h    length of source or destination region exceeds length of region
  7024.       allocated to either source or destination handle
  7025.  94h    conventional and expanded memory regions overlap
  7026.  95h    offset within logical page exceeds size of logical page
  7027.  96h    region length exceeds 1M
  7028.  97h    source and destination EMS regions have same handle and overlap
  7029.  98h    memory source or destination type undefined
  7030.  A2h    attempted to wrap around 1M conventional address space
  7031.  
  7032. Format of EMS copy data:
  7033. Offset    Size    Description    (Table 1937)
  7034.  00h    DWORD    region length in bytes
  7035.  04h    BYTE    source memory type
  7036.         00h conventional
  7037.         01h expanded
  7038.  05h    WORD    source handle (0000h if conventional memory)
  7039.  07h    WORD    source initial offset (within page if EMS, segment if convent)
  7040.  09h    WORD    source initial segment (conv mem) or logical page (EMS)
  7041.  0Bh    BYTE    destination memory type
  7042.         00h conventional
  7043.         01h expanded
  7044.  0Ch    WORD    destination handle
  7045.  0Eh    WORD    destination initial offset
  7046.  10h    WORD    destination initial segment or page
  7047. --------m-6758-------------------------------
  7048. INT 67 - LIM EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY
  7049.     AH = 58h
  7050.     AL = subfunction
  7051.         00h get mappable physical address array
  7052.         ES:DI -> buffer to be filled with array
  7053.         01h get number of entries in m.p.a. array
  7054. Return: CX = number of entries in array
  7055.     AH = status (00h,80h,81h,84h,8Fh) (see #1936)
  7056. Note:    the returned array for subfunction 00h is filled in physical segment
  7057.       address order
  7058.  
  7059. Format of EMS mappable physical address entry:
  7060. Offset    Size    Description    (Table 1938)
  7061.  00h    WORD    physical page segment
  7062.  02h    WORD    physical page number
  7063. --------m-675857-----------------------------
  7064. INT 67 U - NETROOM??? - ???
  7065.     AX = 5857h
  7066.     BX = function??? (0057h,0059h,0159h seen)
  7067.     ???
  7068. Return: ???
  7069. Note:    BX=0059h appears to be analogous to AX=5800h and BX=0159h appears to
  7070.       be analogous to AX=5801h; BX=0057h appears to indicate whether
  7071.       AX=580xh or AX=5857h/BX=0x59h should be used
  7072. SeeAlso: AX=5BF0h
  7073. --------m-6759-------------------------------
  7074. INT 67 - LIM EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION
  7075.     AH = 59h
  7076.     AL = subfunction
  7077.         00h get hardware configuration array
  7078.         ES:DI -> buffer to be filled with array (see #1939)
  7079.         01h get unallocated raw page count
  7080.         Return: BX = unallocated raw pages
  7081.             DX = total raw pages
  7082. Return: AH = status (see also AH=58h"EMS 4.0")
  7083.         A4h access denied by operating system
  7084. Note:    subfunction 00h is for use by operating systems only, and can be
  7085.       enabled or disabled at any time by the operating system
  7086.  
  7087. Format of EMS hardware configuration array:
  7088. Offset    Size    Description    (Table 1939)
  7089.  00h    WORD    size of raw EMM pages in paragraphs
  7090.  02h    WORD    number of alternate register sets
  7091.  04h    WORD    size of mapping-context save area in bytes
  7092.  06h    WORD    number of register sets assignable to DMA
  7093.  08h    WORD    DMA operation type
  7094.         0000h DMA with alternate register sets
  7095.         0001h only one DMA register set
  7096. --------m-675A-------------------------------
  7097. INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES
  7098.     AH = 5Ah
  7099.     AL = subfunction
  7100.         00h allocate standard pages
  7101.         01h allocate raw pages
  7102.     BX = number of pages to allocate
  7103. Return: DX = handle
  7104.     AH = status (00h,80h,81h,84h,85h,87h,88h,8Fh) (see #1932)
  7105. --------m-675B-------------------------------
  7106. INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET
  7107.     AH = 5Bh
  7108.     AL = subfunction
  7109.         00h get alternate map register set
  7110.         Return: BL = current active alternate map register set number
  7111.             ES:DI -> map register context save area if BL=00h
  7112.         01h set alternate map register set
  7113.         BL = new alternate map register set number
  7114.         ES:DI -> map register context save area if BL=0
  7115.         02h get alternate map save array size
  7116.         Return: DX = array size in bytes
  7117.         03h allocate alternate map register set
  7118.         Return: BL = number of map register set; 00h = not supported
  7119.         04h deallocate alternate map register set
  7120.         BL = number of alternate map register set
  7121. Return: AH = status (00h,80h,81h,84h,8Fh,9Ah-9Dh,A3h,A4h) (see #1940)
  7122. Note:    this function is for use by operating systems only, and can be
  7123.       enabled or disabled at any time by the operating system
  7124.  
  7125. (Table 1940)
  7126. Values for EMS function status:
  7127.  00h    successful
  7128.  80h    internal error
  7129.  81h    hardware malfunction
  7130.  84h    undefined function requested
  7131.  8Fh    undefined subfunction
  7132.  9Ah    specified alternate map register or DMA register set not supported
  7133.  9Bh    all alternate map register or DMA register sets currently allocated
  7134.  9Ch    alternate map register or DMA register sets not supported
  7135.  9Dh    undefined or unallocated alternate map register/DMA register set
  7136.  9Eh    dedicated DMA channels not supported
  7137.  9Fh    specified dedicated DMA channel not supported
  7138.  A3h    source array corrupted
  7139.  A4h    operating system denied access
  7140. --------m-675B-------------------------------
  7141. INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET - DMA REGISTERS
  7142.     AH = 5Bh
  7143.     AL = subfunction
  7144.         05h allocate DMA register set
  7145.         Return: BL = DMA register set number, 00h if not supported
  7146.         06h enable DMA on alternate map register set
  7147.            BL = DMA register set number
  7148.            DL = DMA channel number
  7149.         07h disable DMA on alternate map register set
  7150.            BL = DMA register set number
  7151.         08h deallocate DMA register set
  7152.            BL = DMA register set number
  7153. Return: AH = status (00h,80h,81h,84h,8Fh,9Ah-9Fh,A3h,A4h) (see #1940)
  7154. Note:    this function is for use by operating systems only, and can be
  7155.       enabled or disabled at any time by the operating system
  7156. --------m-675BE0-----------------------------
  7157. INT 67 - MICEMM v4D, RM386 - GET LINEAR ADDRESS OF MEMORY
  7158.     AX = 5BE0h
  7159.     ES:BX -> memory for which to get linear address
  7160. Return: AH = 00h
  7161.     CX:DX = linear address of physical memory corresponding to ES:BX
  7162. Program: RAM-MAN/386 is the memory manager included with Helix's Netroom;
  7163.       MICEMM is a memory manager for some Micronics motherboards
  7164. Note:    this has been superceded by AX=DE06h, which should be used instead
  7165. SeeAlso: AX=5BF0h,AX=5BF1h,AX=DE06h
  7166. --------m-675BE1-----------------------------
  7167. INT 67 - RM386 v6.00+ - GET MEMORY MANAGER SIZE
  7168.     AX = 5BE1h
  7169. Return: AH = 00h
  7170.     CX = code and data size in bytes
  7171.     DX:BX = physical address of RM386 code
  7172.     DI:SI = total size of RM386 area including handle tables
  7173.     BP = number of additional pages (high DOS, etc.)
  7174. SeeAlso: AX=5BE0h,AX=5BE2h
  7175. --------m-675BE2-----------------------------
  7176. INT 67 - RM386 v6.00+ - GET INTERRUPT VECTORS
  7177.     AX = 5BE2h
  7178. Return: DS:SI -> V86-mode table (see #1941)
  7179.     ES:BX -> ??? (undoc, middle of device driver interrupt routine!)
  7180. SeeAlso: AX=5BE0h,AX=5BE1h
  7181.  
  7182. Format of RM386 V86-mode table:
  7183. Offset    Size    Description    (Table 1941)
  7184.  00h    DWORD    original INT 13 vector
  7185.  04h    DWORD    original INT 15 vector
  7186.  08h    DWORD    original INT 19 vector
  7187.  0Ch    DWORD    original INT 21 vector
  7188.  10h    DWORD    original INT 4B vector
  7189.  14h    DWORD    original INT 67 vector
  7190. --------m-675BF0-----------------------------
  7191. INT 67 - MICEMM v4D, RM386 - INSTALLATION CHECK
  7192.     AX = 5BF0h
  7193. Return: AH = 00h if MICEMM or RM386 present
  7194.         BX = code segment of driver
  7195. Program: MICEMM is the Micronics Expanded Memory Manager; RM386 is the memory
  7196.       manager included in Helix Software's Netroom
  7197. SeeAlso: AH=3Fh,AX=5BE0h,AX=5BF1h
  7198. --------m-675BF1-----------------------------
  7199. INT 67 - MICEMM v4D, RM386 - GET ADDRESS MAP
  7200.     AX = 5BF1h
  7201.     ES:BX -> 256-byte (MICEMM) or 512-byte (RM386) buffer for memory types
  7202. Return: AH = 00h
  7203.     ES:BX buffer filled (see #1942)
  7204. Note:    each byte in the buffer specifies the type of a 4K page of memory
  7205. SeeAlso: AX=5BE0h,AX=5BF0h
  7206.  
  7207. (Table 1942)
  7208. Values for MICEMM/RM386 memory type:
  7209.  00h    unused (MICEMM), RAM/available (RM386)
  7210.  02h    DOS extension (XMS UMB)
  7211.  04h    shadowed ROM
  7212.  08h    mappable EMS
  7213.  10h    page frame
  7214.  20h    ROM
  7215.  40h    reserved (video memory, etc)
  7216.  80h    RAM (MICEMM), Windows UMB (RM386)
  7217. --------m-675BF2-----------------------------
  7218. INT 67 - RM386 - GET RM386 INTERNAL DATA
  7219.     AX = 5BF2h
  7220.     CX = size of buffer
  7221.     DS:SI -> buffer for internal data
  7222.     (documentation says ES:BX -> buffer, SI = offset within RM386)
  7223. Return: buffer filled
  7224. Note:    the data returned by this function is release-specific
  7225. SeeAlso: AX=5BF0h
  7226. --------m-675BF3-----------------------------
  7227. INT 67 - RM386 - RETURN TO REAL MODE
  7228.     AX = 5BF3h
  7229. Return: nothing
  7230. Note:    use AX=5DE0h instead of this functin
  7231. SeeAlso: AX=5BF0h,AX=5DE0h
  7232. --------m-675BF4-----------------------------
  7233. INT 67 - RM386 v6.00 - GET RM386 GLOBAL FLAGS
  7234.     AX = 5BF4h
  7235. Return: AH = 00h
  7236.     BX = global flags 1 (see #1943)
  7237.     CX = global flags 2 (see #1944)
  7238.     DX = global flags 3 (see #1945)
  7239.     SI = global flags 4 (see #1946)
  7240. SeeAlso: AX=5BF0h
  7241.  
  7242. Bitfields for RM386 global flags 1:
  7243. Bit(s)    Description    (Table 1943)
  7244.  0-3    reserved
  7245.  4    V86 mode
  7246.  5    reserved
  7247.  6    80386 or higher CPU
  7248.  7,8    reserved
  7249.  9    A20 enabled at startup
  7250.  10    "HIGH_IO"
  7251.  11    ROM
  7252.  12    large frame
  7253.  13,14    reserved
  7254.  15    PS/2-style A20 control
  7255.  
  7256. Bitfields for RM386 global flags 2:
  7257. Bit(s)    Description    (Table 1944)
  7258.  0    HMA in use
  7259.  1    XMS present
  7260.  2    using XMS driver memory
  7261.  3    HIGH (NEAT only)
  7262.  4-7    reserved
  7263.  8    NOBKTRAP
  7264.  9    NORESET
  7265.  10    ALTMAP
  7266.  11    NOFRAME
  7267.  12-15    reserved
  7268.  
  7269. Bitfields for RM386 global flags 3:
  7270. Bit(s)    Description    (Table 1945)
  7271.  0    NOTEST
  7272.  1    NOEBDA
  7273.  2    Windows3 support
  7274.  3    system board mouse
  7275.  4    DISKBUF
  7276.  5    EBDALOW
  7277.  6    A20 global enable flag
  7278.  7    A20 flag
  7279.  8    EBDA moved to stub
  7280.  9    VXD file was found
  7281.  10    reserved
  7282.  11    NOBOOTMAP
  7283.  12    AUTO
  7284.  13    PS/2 machine
  7285.  14    Compaq ROM merge active
  7286.  15    NOHMA set
  7287.  
  7288. Bitfields for RM386 global flags 4:
  7289. Bit(s)    Description    (Table 1946)
  7290.  0    "NOV8259" don't virtualize interrupt controller
  7291.  1    NOSCSI
  7292.  2    NOSCAN
  7293.  3    NOTR
  7294.  4    ALTBOOT
  7295.  5    NOCOMPQ
  7296.  6    KB2TRAP
  7297.  7    DESHADOW
  7298.  8    Video 7 VGA detected
  7299.  9    reserved
  7300.  10    NOVGA
  7301.  11    NOPS2
  7302.  12    DEBUG
  7303.  13    NOVKB
  7304.  14,15    reserved
  7305. --------m-675BF5-----------------------------
  7306. INT 67 - RM386 v6.00 - GET RM386 EMS HANDLE COUNT
  7307.     AX = 5BF5h
  7308. Return: AH = status
  7309.         00h successful
  7310.         BX = current number of allocated EMS handles
  7311.         84h function not available
  7312. SeeAlso: AX=5BF0h
  7313. --------m-675C-------------------------------
  7314. INT 67 - LIM EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT
  7315.     AH = 5Ch
  7316. Return: AH = status (see #1947)
  7317.  
  7318. (Table 1947)
  7319. Values for EMS function status:
  7320.  00h    successful
  7321.  80h    internal error
  7322.  81h    hardware malfunction
  7323.  84h    undefined function requested
  7324. --------m-675D-------------------------------
  7325. INT 67 - LIM EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS
  7326.     AH = 5Dh
  7327.     AL = subfunction
  7328.         00h enable OS Function Set
  7329.         01h disable OS Function Set
  7330.         02h return access key (resets memory manager, returns access key at
  7331.         next invocation)
  7332.     BX,CX = access key returned by first invocation
  7333. Return: BX,CX = access key, returned only on first invocation of function
  7334.     AH = status (see also AH=5Ch)
  7335.         8Fh undefined subfunction
  7336.         A4h operating system denied access
  7337. --------m-675D03-----------------------------
  7338. INT 67 u - Nanosoft MD386 - INTERNAL INITIALIZATION
  7339.     AX = 5D03h
  7340.     ???
  7341. Return: ???
  7342. Program: MD386 is a subset EMS memory manager by Nanosoft specifically designed
  7343.       for use with the MultiDOS Plus multitasker
  7344. SeeAlso: AX=5D04h,AX=5E00h
  7345. --------m-675D04-----------------------------
  7346. INT 67 - Nanosoft MD386 - GET ALTERNATE MAP STRUCTURE
  7347.     AX = 5D04h
  7348.     BX = alternate register set number
  7349.     ES:DI -> 1024-byte buffer for map structure
  7350. Return: AH = status (see #1932)
  7351.     buffer filled if AH=00h
  7352. Note:    used for debugging purposes
  7353. SeeAlso: AX=5D05h
  7354. --------m-675D05-----------------------------
  7355. INT 67 - Nanosoft MD386 - GET INTERNAL HANDLE TABLE
  7356.     AX = 5D05h
  7357.     BX = handle number
  7358.     ES:DI -> 1024-byte buffer for handle table
  7359. Return: AH = status (see #1932)
  7360.     buffer filled if AH=00h
  7361. Note:    used for debugging purposes
  7362. SeeAlso: AX=5D04h
  7363. --------m-675DE0-----------------------------
  7364. INT 67 - RM386 - DISABLE RM386
  7365.     AX = 5DE0h
  7366. Note:    RM386 traps this function on the initial transition to protected
  7367.       mode caused by the INT instruction, which means it can not be
  7368.       overridden simply by hooking the interrupt
  7369. SeeAlso: AX=5DE1h
  7370. --------m-675DE1-----------------------------
  7371. INT 67 - RM386 - ENABLE RM386
  7372.     AX = 5DE1h
  7373. Note:    RM386 traps this function on the initial transition to protected
  7374.       mode caused by the INT instruction, which means it can not be
  7375.       overridden simply by hooking the interrupt
  7376. SeeAlso: AX=5DE0h
  7377. --------m-675DE2-----------------------------
  7378. INT 67 - RM386 - GET PAGE TABLE
  7379.     AX = 5DE2h
  7380.     ES:DI -> 1088-byte buffer for page table
  7381. Return: ES:DI buffer filled
  7382. Note:    RM386 traps this function on the initial transition to protected
  7383.       mode caused by the INT instruction, which means it can not be
  7384.       overridden simply by hooking the interrupt
  7385. SeeAlso: AX=5DE3h
  7386. --------m-675DE3-----------------------------
  7387. INT 67 - RM386 - SET PAGE TABLE
  7388.     AX = 5DE3h
  7389.     ES:DI -> 1088-byte buffer containing page table
  7390. Notes:    only the access bits of the page table are used, the remainder is
  7391.       ignored
  7392.     RM386 traps this function on the initial transition to protected
  7393.       mode caused by the INT instruction, which means it can not be
  7394.       overridden simply by hooking the interrupt
  7395. SeeAlso: AX=5DE2h
  7396. --------m-675DE4-----------------------------
  7397. INT 67 - RM386 - SET WRITE-PROTECTION FOR PAGE IN FIRST MEGABYTE
  7398.     AX = 5DE4h
  7399.     BL = page number
  7400.     BH = access (00h read-only, 01h read-write)
  7401. Note:    RM386 traps this function on the initial transition to protected
  7402.       mode caused by the INT instruction, which means it can not be
  7403.       overridden simply by hooking the interrupt
  7404. --------m-675DE5-----------------------------
  7405. INT 67 - RM386 - MAP PHYSICAL PAGE TO PHYSICAL SEGMENT
  7406.     AX = 5DE5h
  7407.     EBX = physical page number
  7408.     DX = page number in first megabyte to be remapped (linear-addr SHR 12)
  7409. Return: AH = status
  7410.         00h successful
  7411.         8Bh invalid destination page (not in first megabyte)
  7412. Note:    RM386 traps this function on the initial transition to protected
  7413.       mode caused by the INT instruction, which means it can not be
  7414.       overridden simply by hooking the interrupt
  7415. SeeAlso: AX=5DE6h
  7416. --------m-675DE6-----------------------------
  7417. INT 67 - RM386 - MAP LOGICAL 4K PAGE TO PHYSICAL SEGMENT
  7418.     AX = 5DE6h
  7419.     BX = logical page number in 4K pages from beginning of memory for EMS
  7420.           handle
  7421.     CX = segment in first megabyte to be remapped
  7422.     DX = previously-allocated EMS handle
  7423. Return: AH = status
  7424.         00h successful
  7425.         83h invalid handle
  7426.         8Ah invalid logical page (out of handle's range)
  7427.         8Bh invalid destination page (not in first megabyte)
  7428. Note:    RM386 traps this function on the initial transition to protected
  7429.       mode caused by the INT instruction, which means it can not be
  7430.       overridden simply by hooking the interrupt
  7431. SeeAlso: AX=5DE5h
  7432. --------m-675DE7-----------------------------
  7433. INT 67 - RM386 - SET PAGE TABLE BITS FOR RANGE OF PAGES
  7434.     AX = 5DE7h
  7435.     BL = page table bits to be set (bits 2-0 = U/S, R/W, P)
  7436.     CX = number of pages to set
  7437.     DX = first page number to set (in first megabyte)
  7438. Return: AH = status
  7439.         00h successful
  7440.         8Bh invalid destination page (not in first megabyte)
  7441.         A5h invalid page bits
  7442.         A6h invalid page count (overflows first megabyte)
  7443. Note:    RM386 traps this function on the initial transition to protected
  7444.       mode caused by the INT instruction, which means it can not be
  7445.       overridden simply by hooking the interrupt
  7446. --------m-675DE8-----------------------------
  7447. INT 67 - RM386 - GET PARTIAL PAGE TABLE
  7448.     AX = 5DE8h
  7449.     BX = starting page number in first megabyte+HMA (0000h-010Fh)
  7450.     CX = number of page table entries to get
  7451.     ES:DI -> buffer for DWORD page table entries
  7452. Return: AH = status (00h successful, 8Bh invalid page)
  7453. Note:    RM386 traps this function on the initial transition to protected
  7454.       mode caused by the INT instruction, which means it can not be
  7455.       overridden simply by hooking the interrupt
  7456. SeeAlso: AX=5DE9h
  7457. --------m-675DE9-----------------------------
  7458. INT 67 - RM386 - SET PARTIAL PAGE TABLE
  7459.     AX = 5DE9h
  7460.     BX = starting page number in first megabyte+HMA (0000h-010Fh)
  7461.     CX = number of page table entries to get
  7462.     DS:SI -> buffer of DWORD page table entries
  7463. Return: AH = status (00h successful, 8Bh invalid destination page)
  7464. Note:    RM386 traps this function on the initial transition to protected
  7465.       mode caused by the INT instruction, which means it can not be
  7466.       overridden simply by hooking the interrupt
  7467. SeeAlso: AX=5DE8h
  7468. --------m-675DEA-----------------------------
  7469. INT 67 - RM386 - V86-MODE I/O PORT TRAPPING CONTROL
  7470.     AX = 5DEAh
  7471.     BX = function
  7472.         00h globally disable V86-mode trapping
  7473.         01h globally enable V86-mode trapping
  7474.         CL = interrupt to use for trapping
  7475.         02h get I/O trapping state
  7476. Return: AH = status
  7477.         00h successful
  7478.         BX = current trapping state (function 02h)
  7479.             0000h disabled, 0001h enabled
  7480.         CX = interrupt used as trap interrupt (functions 00h and 02h)
  7481. Notes:    RM386 traps this function on the initial transition to protected
  7482.       mode caused by the INT instruction, which means it can not be
  7483.       overridden simply by hooking the interrupt
  7484.     when I/O trapping is enabled and I/O port access occurs, RM386
  7485.       simulates an INT instruction for the specified interrupt; the
  7486.       interrupt handler is responsible for decoding the trapped instruction
  7487.       and performing the appropriate action.  INT 2C/AX=002Dh provides a
  7488.       similar but more-easily used interface.
  7489. SeeAlso: AX=5DEBh,AH=EFh"RM386",INT 2C/AX=002Dh
  7490. --------m-675DEB-----------------------------
  7491. INT 67 - RM386 - V86-MODE I/O TRAPPING PORT CONTROL
  7492.     AX = 5DEBh
  7493.     BX = function
  7494.         00h disable V86-mode trapping for specified port
  7495.         01h enable V86-mode trapping for specified port
  7496.         02h get V86-mode trapping state for specified port
  7497.     DX = port for which to enable/disable/query trapping
  7498. Return: AH = status
  7499.         00h successful
  7500.         BX = current trapping state (00h off, 01h on) (function 02)
  7501.         A7h invalid port ID
  7502.         A8h reserved port--cannot trap/untrap (DMA/INT/KBD controllers)
  7503. Notes:    RM386 traps this function on the initial transition to protected
  7504.       mode caused by the INT instruction, which means it can not be
  7505.       overridden simply by hooking the interrupt
  7506. SeeAlso: AX=5DEAh
  7507. --------m-675DFD-----------------------------
  7508. INT 67 U - RM386 v6.00 - ???
  7509.     AX = 5DFDh
  7510.     ???
  7511. Return: ???
  7512. Note:    RM386 traps this function on the initial transition to protected
  7513.       mode caused by the INT instruction, which means it can not be
  7514.       overridden simply by hooking the interrupt
  7515. SeeAlso: AX=5DFEh
  7516. --------m-675DFE-----------------------------
  7517. INT 67 U - RM386 v6.00 - ???
  7518.     AX = 5DFEh
  7519.     ???
  7520. Return: ???
  7521. Note:    RM386 traps this function on the initial transition to protected
  7522.       mode caused by the INT instruction, which means it can not be
  7523.       overridden simply by hooking the interrupt
  7524. SeeAlso: AX=5DFDh
  7525. --------m-675DFF-----------------------------
  7526. INT 67 U - RM386 v6.00 - ???
  7527.     AX = 5DFFh
  7528.     ???
  7529. Return: ???
  7530. Note:    RM386 traps this function on the initial transition to protected
  7531.       mode caused by the INT instruction, which means it can not be
  7532.       overridden simply by hooking the interrupt
  7533. SeeAlso: AX=5DFDh,AX=5DFEh
  7534. --------m-675E00-----------------------------
  7535. INT 67 - Nanosoft MD386 - SET HARDWARE BREAKPOINT
  7536.     AX = 5E00h
  7537.     DH = breakpoint number (0-3)
  7538.     DL = breakpoint attributes (used to set DR7)
  7539.     CX:BX = linear address of breakpoint
  7540. SeeAlso: AX=5D03h,AX=5E01h
  7541. --------m-675E01-----------------------------
  7542. INT 67 - Nanosoft MD386 - GET HARDWARE DEBUG REGISTER
  7543.     AX = 5E01h
  7544.     BL = register number (0-3,7)
  7545. Return: CX:BX = value of specified DRx register
  7546. SeeAlso: AX=5E00h
  7547. --------m-675E02-----------------------------
  7548. INT 67 - Nanosoft MD386 - SET DEBUG EXCEPTION HANDLER
  7549.     AX = 5E02h
  7550.     CX:BX -> exception handler
  7551. Note:    the specified exception handler is called with a simulated interrupt
  7552.       whenever a debug exception occurs which was caused by a hardware
  7553.       breakpoint set with the debug registers
  7554. SeeAlso: AX=5E04h,AX=5E05h
  7555. --------m-675E03-----------------------------
  7556. INT 67 - Nanosoft MD386 - ENABLE/DISABLE MEMORY WRITE PROTECTION
  7557.     AX = 5E03h
  7558.     BL = register map set number
  7559.     BH = new state (00h read-only, else read-write)
  7560.     CX = linear page number (linear address SHR 12)
  7561. Note:    setting write protection in map set 0 will cause the setting to become
  7562.       the default for newly-allocated map sets
  7563. --------m-675E04-----------------------------
  7564. INT 67 - Nanosoft MD386 - GET DEBUG EXCEPTION
  7565.     AX = 5E04h
  7566. Return: BL = debug exception (low byte of DR6 register)
  7567. SeeAlso: AX=5E02h,AX=5E05h
  7568. --------m-675E05-----------------------------
  7569. INT 67 - Nanosoft MD386 - IGNORE NEXT DEBUG EXCEPTION
  7570.     AX = 5E05h
  7571. Note:    may be required when using AX=5E02h for handling instruction
  7572.       breakpoints
  7573. SeeAlso: AX=5E02h,AX=5E04h
  7574. --------m-6760-------------------------------
  7575. INT 67 - EEMS - GET PHYSICAL WINDOW ARRAY
  7576.     AH = 60h
  7577.     ES:DI -> buffer
  7578. Return: AH = status (see also AH=40h)
  7579.     AL = number of entries
  7580.     buffer at ES:DI filled
  7581. --------m-6761-------------------------------
  7582. INT 67 - EEMS - GENERIC ACCELERATOR CARD SUPPORT
  7583.     AH = 61h
  7584.     ???
  7585. Return: ???
  7586. Note:    can be used by accelerator card manufacturer to flush RAM cache,
  7587.       ensuring that the cache accurately reflects what the processor would
  7588.       see without the cache.
  7589. --------m-6768-------------------------------
  7590. INT 67 - EEMS - GET ADDRESSES OF ALL PAGE FRAMES IN SYSTEM
  7591.     AH = 68h
  7592.     ES:DI -> buffer
  7593. Return: AH = status (see also AH=40h)
  7594.     AL = number of entries
  7595.     buffer at ES:DI filled
  7596. Note:    equivalent to LIM 4.0 function 58h
  7597. --------m-6769-------------------------------
  7598. INT 67 - EEMS - MAP PAGE INTO FRAME
  7599.     AH = 69h
  7600.     AL = frame number
  7601.     BX = page number
  7602.     DX = handle
  7603. Return: AH = status (see also AH=40h)
  7604. Note:    similar to EMS function 44h
  7605. SeeAlso: AH=44h,AH=50h,AH=6Ah
  7606. --------m-676A-------------------------------
  7607. INT 67 - EEMS - PAGE MAPPING
  7608.     AH = 6Ah
  7609.     AL = subfunction
  7610.         00h save partial page map
  7611.         CH = first page frame
  7612.         CL = number of frames
  7613.         ES:DI -> buffer which is to be filled
  7614.         01h restore partial page map
  7615.         CH = first page frame
  7616.         CL = number of frames
  7617.         DI:SI -> previously saved page map
  7618.         02h save and restore partial page map
  7619.         CH = first page frame
  7620.         CL = number of frames
  7621.         ES:DI = buffer for current page map
  7622.         DI:SI = new page map
  7623.         03h get size of save array
  7624.         CH = first page frame
  7625.         CL = number of frames
  7626.         Return: AL = size of array in bytes
  7627.         04h switch to standard map register setting
  7628.         05h switch to alternate map register setting
  7629.         06h deallocate pages mapped to frames in conventional memory
  7630.         CH = first page frame
  7631.         CL = number of frames
  7632. Return: AH = status (see #1932)
  7633. Note:    similar to EMS function 4Eh, except that a subrange of pages can be
  7634.       specified
  7635. SeeAlso: AH=69h
  7636. --------m-676B-------------------------------
  7637. INT 67 - DESQview 2.42-2.53 - BUG
  7638.     AH = 6Bh
  7639. Note:    the EMM.DVR portion of DESQview branches to a random location on this
  7640.       function due to a fencepost error
  7641. --------m-67DD-------------------------------
  7642. INT 67 - Quadtel QMAPS - API
  7643.     AH = DDh
  7644.     AL = function
  7645.     ???
  7646. Return: ???
  7647. Notes:    details are not yet available
  7648.     Hewlett-Packard's HPMM.SYS is a licensed version of QMAPS, and thus
  7649.       supports this API
  7650. SeeAlso: AH=3Fh,AX=FFA5h
  7651. --------E-67DE00-----------------------------
  7652. INT 67 - Virtual Control Program Interface - INSTALLATION CHECK
  7653.     AX = DE00h
  7654. Return: AH = status
  7655.         00h VCPI is present
  7656.         BH = major version number
  7657.         BL = minor version number
  7658.         nonzero  VCPI not present
  7659. BUG:    MS Windows 3.00 is reported to "object violently" to this call.
  7660. SeeAlso: INT 2F/AX=1687h
  7661. --------E-67DE01-----------------------------
  7662. INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
  7663.     AX = DE01h
  7664.     ES:DI -> 4K page table buffer
  7665.     DS:SI -> three descriptor table entries in GDT
  7666.         first becomes code segment descriptor, other two for use by
  7667.           main control program
  7668. Return: AH = 00h successful
  7669.         DI -> first unused page table entry in buffer
  7670.         EBX -> protected mode entry point in code segment
  7671.     AH = nonzero  failed
  7672. Note:    protected mode entry point may be called with AX=DE00h-DE05h and
  7673.       AX=DE0Ch (in each case, all other registers as appropriate for
  7674.       the function)
  7675. SeeAlso: INT 2F/AX=1687h,INT 67/AH=3Fh
  7676.  
  7677. (Table 1948)
  7678. Call QEMM v6.03 protected mode entry point additionally with:
  7679.     AX = DF00h ???
  7680.         ???
  7681.         Return: ???
  7682.     AX = DF01h ???
  7683.         ???
  7684.         Return: ???
  7685. --------E-67DE02-----------------------------
  7686. INT 67 - Virtual Control Program Interface - GET MAX PHYSICAL MEMORY ADDRESS
  7687.     AX = DE02h
  7688. Return: AH = 00h  successful
  7689.         EDX = physical address of highest 4K memory page
  7690.     AH nonzero: failed
  7691. SeeAlso: AH=3Fh
  7692. --------E-67DE03-----------------------------
  7693. INT 67 - Virtual Control Program Interface - GET NUMBER OF FREE 4K PAGES
  7694.     AX = DE03h
  7695. Return: AH = 00h  successful
  7696.         EDX = number of free 4K pages
  7697.     AH nonzero: failed
  7698. Notes:    returns total number of pages available to ALL tasks in system
  7699.     also available in protected mode by calling the protected-mode VCPI
  7700.       entry point (see AX=DE01h,#1948)
  7701. SeeAlso: AX=DE04h
  7702. --------E-67DE04-----------------------------
  7703. INT 67 - Virtual Control Program Interface - ALLOCATE A 4K PAGE
  7704.     AX = DE04h
  7705. Return: AH = 00h successful
  7706.         EDX = physical address of allocated page
  7707.     AH nonzero: failed
  7708. Notes:    the client program is responsible for freeing all memory allocated
  7709.       with this call before terminating
  7710.     also available in protected mode by calling the protected-mode VCPI
  7711.       entry point (see AX=DE01h,#1948)
  7712. SeeAlso: AH=3Fh,AX=DE03h,AX=DE05h
  7713. --------E-67DE05-----------------------------
  7714. INT 67 - Virtual Control Program Interface - FREE 4K PAGE
  7715.     AX = DE05h
  7716.     EDX = physical address of 4K page
  7717. Return: AH = status
  7718.         00h successful
  7719.         nonzero failed
  7720. Note:    also available in protected mode by calling the protected-mode VCPI
  7721.       entry point (see AX=DE01h,#1948)
  7722. SeeAlso: AH=3Fh,AX=DE04h
  7723. --------E-67DE06-----------------------------
  7724. INT 67 - Virtual Control Program Interface - GET PHYS ADDR OF PAGE IN FIRST MB
  7725.     AX = DE06h
  7726.     CX = page number (linear address shifted right 12 bits)
  7727. Return: AH = status
  7728.         00h successful
  7729.         EDX = physical address of page
  7730.         nonzero invalid page number (AH = 8Bh recommended)
  7731. SeeAlso: AX=5BE0h
  7732. --------E-67DE07-----------------------------
  7733. INT 67 - Virtual Control Program Interface - READ CR0
  7734.     AX = DE07h
  7735. Return: AH = 00h
  7736.     EBX = value of Control Register 0
  7737. SeeAlso: AH=3Fh,AX=DE07h
  7738. --------E-67DE08-----------------------------
  7739. INT 67 - Virtual Control Program Interface - READ DEBUG REGISTERS
  7740.     AX = DE08h
  7741.     ES:DI -> array of 8 DWORDs
  7742. Return: AH = 00h
  7743.     buffer filled with DR0 first, DR7 last, DR4 and DR5 unused
  7744. SeeAlso: AH=3Fh,AX=DE09h
  7745. --------E-67DE09-----------------------------
  7746. INT 67 - Virtual Control Program Interface - SET DEBUG REGISTERS
  7747.     AX = DE09h
  7748.     ES:DI -> array of 8 DWORDs holding new values of debug registers
  7749. Return: AH = 00h
  7750. Note:    values for DR4 and DR5 ignored
  7751. SeeAlso: AH=3Fh,AX=DE08h
  7752. --------E-67DE0A-----------------------------
  7753. INT 67 - Virtual Control Program Interface - GET 8259 INTERRUPT VECTOR MAPPINGS
  7754.     AX = DE0Ah
  7755. Return: AH = 00h successful
  7756.         BX = first vector used by master 8259 (IRQ0)
  7757.         CX = first vector used by slave 8259 (IRQ8)
  7758.     AH nonzero: failed
  7759. Note:    CX is undefined in systems without a slave 8259
  7760. SeeAlso: AX=DE0Bh,INT 21/AX=250Ch,INT 31/AX=0400h
  7761. --------E-67DE0B-----------------------------
  7762. INT 67 - Virtual Control Program Interface - SET 8259 INTERRUPT VECTOR MAPPINGS
  7763.     AX = DE0Bh
  7764.     BX = first vector used by master 8259
  7765.     CX = first vector used by slave 8259
  7766.     interrupts disabled
  7767. Return: AH = 00h successful
  7768.     AH nonzero: failed
  7769. Notes:    This call merely informs the server that the client has changed the
  7770.       interrupt mappings.  The client may not change the mappings if they
  7771.       have already been changed by the server or another client, and is
  7772.       responsible for restoring the original mappings before terminating.
  7773. SeeAlso: AX=DE0Ah,INT 2C/AX=002Ah
  7774. --------E-67DE0C-----------------------------
  7775. INT 67 - Virtual Control Program Interface - SWITCH TO PROTECTED MODE
  7776.     AX = DE0Ch
  7777.     ESI = linear address in first megabyte of values for system registers
  7778.     interrupts disabled
  7779. Return: interrupts disabled
  7780.     GDTR, IDTR, LDTR, TR loaded
  7781.     SS:ESP must have at least 16 bytes space, and the entry point is
  7782.           required to set up a new stack before enabling interrupts
  7783.     EAX, ESI, DS, ES, FS, GS destroyed
  7784. Note:    in protected mode, calling the protected-mode VCPI entry point with
  7785.       AX = DE0Ch
  7786.       DS = segment selector mapping entire linear address space obtained
  7787.           via AX=DE01h
  7788.       SS:ESP in first megabyte of linear memory
  7789.       STACK:QWORD  return address from FAR call to 32-bit segment
  7790.         DWORD  EIP
  7791.         DWORD  CS
  7792.         DWORD  reserved for EFLAGS
  7793.         DWORD  ESP
  7794.         DWORD  SS
  7795.         DWORD  ES
  7796.         DWORD  DS
  7797.         DWORD  FS
  7798.         DWORD  GS
  7799.       and interrupts disabled, will switch to virtual86 mode with
  7800.         interrupts disabled, all segment registers loaded, and EAX
  7801.         destroyed.
  7802. SeeAlso: AH=3Fh,INT 15/AH=89h,INT 38/AH=10h
  7803.  
  7804. Format of system register values for switch to protected mode:
  7805. Offset    Size    Description    (Table 1949)
  7806.  00h    DWORD    value for CR3
  7807.  04h    DWORD    linear address in first megabyte of value for GDTR
  7808.  08h    DWORD    linear address in first megabyte of value for IDTR
  7809.  0Ch    WORD    value for LDTR
  7810.  0Eh    WORD    value for TR
  7811.  10h    PWORD    CS:EIP of protected mode entry-point
  7812. --------m-67DE0F-----------------------------
  7813. INT 67 - Netroom3 - ???
  7814.     AX = DE0Fh
  7815.     ???
  7816. Return: ???
  7817. Note:    called by Netroom's DPMI.EXE
  7818. --------m-67EF-------------------------------
  7819. INT 67 - RM386 v6.00+ - EXECUTE XMS FUNCTION
  7820.     AH = EFh
  7821.     AL = function (00h-12h,80h-8Fh)
  7822.     other register as appropriate for XMS function
  7823. Return: varies by function (see INT 2F/AX=4310h)
  7824. Note:    these functions appear to be equivalent to the XMS functions with the
  7825.       same numbers
  7826. SeeAlso: AX=5DFFh"RM386",INT 2F/AX=4310h
  7827. --------m-67FFA5-----------------------------
  7828. INT 67 - Microsoft EMM386.EXE v4.20+ - INSTALLATION CHECK
  7829.     AX = FFA5h
  7830. Return: AX = 845Ah/84A5h if loaded
  7831.         BX:CX -> API entry point
  7832. Notes:    this call is available even if EMM386 is not providing EMS
  7833.     the returned AX is 845Ah inside of MSWindows, 84A5h under bare DOS
  7834.     if no other program has hooked INT 67, an alternate installation
  7835.       check is to test for the string
  7836.       "MICROSOFT EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  7837.       handler's segment; the word immediately preceding this string
  7838.       contains the offset of the API entry point
  7839. SeeAlso: AH=3Fh,AX=FFA5h/BX=4345h,INT 21/AX=4402h"EMM386.EXE"
  7840.  
  7841. (Table 1950)
  7842. Call EMM386.EXE API entry point with:
  7843.     AH = 00h get memory manager's status
  7844.         Return: AH = status
  7845.             bit 0: not active (OFF)
  7846.             bit 1: in "Auto" mode
  7847.     AH = 01h set memory manager's state
  7848.         AL = new state (00h ON, 01h OFF, 02h AUTO)
  7849.     AH = 02h Weitek coprocessor support
  7850.         AL = subfunction
  7851.         00h get Weitek support state
  7852.             Return: AL = status
  7853.                 bit 0: Weitek coprocessor is present
  7854.                 bit 1: Weitek support is enabled
  7855.         01h turn on Weitek support
  7856.         02h turn off Weitek support
  7857.      --- v4.20-4.41 only ---
  7858.     AH = 03h Windows support???
  7859.         AL = subfunction (00h, 01h)
  7860.     AH = 04h print copyright notice to standard output
  7861.          (using INT 21/AH=09h)
  7862.     AH = 05h print available report
  7863.          (the one shown when running EMM386 from the DOS prompt)
  7864. SeeAlso: #0640 at INT 21/AX=4402h/SF=02h,#1285 at INT 2F/AX=12FFh/BX=0106h
  7865. --------m-67FFA5BX4345-----------------------
  7866. INT 67 U - Compaq CEMM v5.10+ - PRIVATE API
  7867.     AX = FFA5h
  7868.     BX = 4345h ("CE")
  7869.     DX = subfunction
  7870.         0000h unshadow video ROM???
  7871.         0001h shadow video ROM???
  7872.         0002h map pages
  7873.         CX = number of pages (00h=one)
  7874.         ESI = linear address of first page to map into address space
  7875.         EDI = linear starting address at which pages are to be visible
  7876.         0003h get ???
  7877.         Return: DX = ??? (0-2)
  7878.         0004h BUG: crashes system due to fencepost error
  7879. Return: AH = 84h
  7880.     AL = status (84h = error, FFh = success)
  7881. Note:    if BX <> 4345h or DX > 0004h on entry, CEMM behaves identically to
  7882.       Microsoft's EMM386 (see AX=FFA5h"EMM386")
  7883. SeeAlso: AX=FFA5h"EMM386",#0640 at INT 21/AX=4402h/SF=02h,#1950
  7884. --------!---Section--------------------------
  7885.