Outils pour utilisateurs

Outils du site


back2root:ibm-pc-ms-dos:interrupts:old:ms_interrupt_list-61-fd

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
back2root:ibm-pc-ms-dos:interrupts:old:ms_interrupt_list-61-fd [2023/01/05 04:01] – supprimée - modification externe (Unknown date) 127.0.0.1back2root:ibm-pc-ms-dos:interrupts:old:ms_interrupt_list-61-fd [2023/01/05 04:01] (Version actuelle) – créée - modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +====== MSDOS - Interrupt List 61h-FDh ======
 +
 +===== INT 61 - reserved for user interrupt =====
 +
 +==== INT 61 - Atari Portfolio - EXTENDED BIOS ====
 +
 +provides subfunctions such as turning off the machine, accessing internal variables, and mapping memory cards
 +
 +SeeAlso: INT 60"Atari"
 +
 +==== INT 61 - HP 95LX System Manager - LOAD DS ====
 +
 +SeeAlso: INT 0F"HP 95LX",INT 60"HP 95LX"
 +
 +==== INT 61 - JPI TopSPEED Modula-2 v1 - PROCEDURE EXIT TRAP ====
 +
 +SeeAlso: INT 61"JPI"
 +
 +==== INT 61 - Adaptec and OMTI controllers - DRIVE 0 DATA ====
 +
 +Note: this vector stores the second four bytes of the parameter table for
 +   hard disk 0
 +SeeAlso: INT 60"Adaptec",INT 62"Adaptec",INT 63"Adaptec"
 +----------61---------------------------------
 +INT 61 - Sangoma CCIP (CCPOP 3270 resident module) INTERFACE
 + BX:DX -> control block
 +SeeAlso: INT 67"Sangoma"
 +----------61---------------------------------
 +INT 61 - VIRUS - "SEMTEX"/"Screen Trasher" - INT 21h SUBSTITUTE
 +Note: the virus copies the original INT 21h vector into INT 61h
 +SeeAlso: INT 21h,INT 60"VIRUS",INT 6B"VIRUS"
 +----------61---------------------------------
 +INT 61 - FTP Software PC/TCP - TCP/IP TSR System Call interface
 + AH = system call number (see separate entries below)
 +Return: CF clear if successful
 + CF set on error
 +     AL = basic error
 +         04h invalid handle???
 + 12h invalid subfunction
 + 18h invalid system call
 + 1Bh kernel busy, try again later
 +     AH = suberror number
 +Notes: the installation check consists of testing for the signature "TCPTSR"
 +   three bytes beyond the start of the interrupt handler
 + INT 61 is the default; PC/TCP v2.05 may be configured to use any
 +   interrupt from 20h through E0h
 +BUG: the SLIP kernel for v2.05 bounds-checks the wrong register, so values
 +   greater than 54h in AH may crash the system.  Other kernels may have
 +   this bug as well.
 +SeeAlso: INT 61/AH=00h"PC/TCP",INT 61/AH=2Ah,INT 61/AH=54h
 +----------6100-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - GET DEBUG INFORMATION
 + AH = 00h
 + DS:SI -> 216-byte buffer for network debugging information (see below)
 +Return: CF clear
 + AX = 0000h
 + buffer filled
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=2Ah"PC/TCP"
 +
 +Format of network debugging information:
 +Offset Size Description
 + 00h DWORD number of interrupts
 + 04h DWORD receive buffer low-water mark
 + 08h DWORD transmit buffer low-water mark
 + 0Ch DWORD number of packets received
 + 10h DWORD number of packets transmitted
 + 14h DWORD total receive errors
 + 18h DWORD total transmit errors
 + 1Ch  4 BYTEs ???
 + 20h DWORD receive resets
 + 24h DWORD transmit resets
 + 28h DWORD number of "runts" received
 + 2Ch DWORD number of alignment errors on received packets
 + 30h DWORD number of CRC errors on received packets
 + 34h DWORD number of parity errors on received packets
 + 38h DWORD number of receive overflow errors
 + 3Ch DWORD number of oversized packets received
 + 40h DWORD number of packets lost due to lack of buffers
 + 44h DWORD receive timeouts
 + 48h 32 BYTEs ???
 + 68h DWORD number of transmit collisions
 + 6Ch DWORD number of transmit timeouts
 + 70h DWORD number of transmit underflows
 + 74h DWORD number of lost "crs" on transmit
 + 78h DWORD number of times heartbeat failed on transmit
 + 7Ch 24 BYTEs ???
 + 94h WORD free packet buffers
 + 96h WORD total packet buffers
 + 98h WORD minimum number of packet buffers free since kernel started
 + 9Ah 24 BYTEs ???
 + B2h DWORD pointer to TCP connection list???
 + B6h DWORD pointer to IP routing table???
 + BAh 30 BYTEs ???
 +----------610000-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - ZOOM DISPLAY
 + AX = 0000h
 + BX = zoom factor (0-7)
 +Notes: zooms the display based on the given zoom factor
 + INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0001h"OPTIMA",INT 61/AX=0002h"OPTIMA"
 +SeeAlso: INT 61/AX=0005h"OPTIMA"
 +----------610001-----------------------------
 +INT 61 - Banyan VINES - "Sosock" - OPEN COMMUNICATIONS SOCKET
 + AX = 0001h
 + DS:DX -> communications control block (function 0001h)
 +Return: AX = status
 +     0000h  successful
 +     0001h  service not installed
 +     0002h  invalid service ID
 +     0098h  resource already in use
 +     009Eh  address family does not exist
 +     009Fh  socket type does not exist
 +     00A0h  protocol does not exist
 +     00A1h  no more sockets available
 +     00A2h  no more buffer space available
 +Note: BANYAN can use any interrupt from 60h through 66h.  The Banyan
 +   interrupt handler is identified by the string "BANV" in the four
 +   bytes immediately preceding the interrupt handler
 +
 +Format of control block:
 +Offset Size Description
 + 00h WORD 0001h
 + 02h WORD pointer to argument block
 + 04h WORD error return code
 + 06h  4 BYTEs reserved
 +
 +Format of argument block:
 +Offset Size Description
 + 00h WORD pointer to 2-byte buffer for socket identifier
 + 02h WORD address family
 + 0003h Banyan
 + 04h WORD socket type
 + in address family 0003h
 +     0001h IPC socket
 +     0002h SPP socket
 + 06h WORD protocol number
 + FFFFh default
 + 08h WORD pointer to 16-byte buffer for socket address
 + 0Ah WORD local port number
 + 0000h if service should assign transient port number
 + 0001h to 01FFh well-known port number (assigned by Banyan)
 +
 +Format of IPC port:
 +Offset Size Description
 + 00h WORD address family (always 0003h for Banyan ports)
 + 04h  4 BYTEs network number (server's serial number)
 + 06h WORD subnet number  (0001h = server, 8000h-FFFEh = PC)
 + 08h WORD port ID (0001h-01FFh for "well-known" ports)
 + 0Ah BYTE hop count
 + 0Bh  5 BYTEs filler
 +----------610001-----------------------------
 +INT 61 - Banyan VINES - "Sosend" - INITIATE OUTPUT EVENT
 + AX = 0001h
 + DS:DX -> communications control block (function 0002h)
 +Return: AX = status
 +     0000h  successful
 +     0001h  service not installed
 +     0002h  invalid service ID
 +     0003h-000Ah reserved for BANV interface errors
 +     0097h  invalid socket identifier
 +     009Bh  destination node unreachable
 +     009Ch  message overflow
 +     009Dh  destination socket nonexistent
 +     00A2h  no more buffer space
 +     00A3h  timeout
 +     00B1h  resource disconnect
 +Note: BANYAN can use any interrupt from 60h through 66h.  The Banyan
 +   interrupt handler is identified by the string "BANV" in the four
 +   bytes immediately preceding the interrupt handler
 +
 +Format of control block:
 +Offset Size Description
 + 00h WORD 0002h
 + 02h WORD pointer to argument block (see below)
 + 04h WORD error return code
 + 0000h successful
 + 0097h invalid socket ID
 + 00A2h no more buffer space
 + 00A3h timeout event
 + 00A5h resource not available
 + 00A6h internal communication failure
 + 00B1h resource disconnect
 + 06h  4 BYTEs reserved
 +
 +Format of argument block:
 +Offset Size Description
 + 00h WORD routine metric
 + 02h WORD error return code
 + 04h WORD socket identifier
 + 06h WORD pointer to send buffer
 + 08h WORD length of send buffer
 + 0Ah WORD flags
 + bit 0: async request
 +     1: reliable message
 +     3: end of user message received
 +     4: vectored request (if set, send buffer contains buffer
 + descriptors)
 +     5: connection-specific receive
 +     6: change to connection-specific receive mode
 + 0Ch 16 BYTEs socket address (see below)
 + 1Ch WORD timeout value in multiples of 200ms
 + 1Eh WORD connection identifier
 + 20h WORD type of request
 + 0001h send message
 + 0002h establish a virtual connection
 + 0003h terminate a virtual connection
 +
 +Format of buffer descriptor:
 +Offset Size Description
 + 00h WORD data segment
 + 02h WORD buffer pointer
 + 04h WORD buffer length
 + 06h WORD character count
 +
 +Format of socket address for unreliable datagrams:
 +Offset Size Description
 + 00h WORD 0003h   address family
 + 02h DWORD FFFFFFFFh network number
 + 06h WORD FFFFh   subnet number
 + 08h WORD   local port number
 + 0Ah BYTE 00h-0Fh   hop count
 + 0Bh  5 BYTEs 0000h   filler
 +----------610001-----------------------------
 +INT 61 - Banyan VINES - "Sorec" - RECEIVE INPUT EVENT NOTIFICATION
 + AX = 0001h
 + DS:DX -> communications control block (function 0003h)
 +Return: AX = status
 +     0000h  successful
 +     0001h  service not installed
 +     0002h  invalid service ID
 +     0003h-000Ah reserved for BANV interface errors
 +     0097h  invalid socket identifier
 +     00A2h  no more buffer space
 +     00A3h  timeout
 +Note: BANYAN can use any interrupt from 60h through 66h.  The Banyan
 +   interrupt handler is identified by the string "BANV" in the four
 +   bytes immediately preceding the interrupt handler
 +
 +Format of control block:
 +Offset Size Description
 + 00h WORD 0003h
 + 02h WORD pointer to argument block (see below)
 + 04h WORD error return code
 + 0000h successful
 + 0097h invalid socket ID
 + 00A2h no more buffer space
 + 00A3h timeout event
 + 00A5h resource not available
 + 00A6h internal communication failure
 + 00B1h resource disconnect
 + 06h  4 BYTEs reserved
 +
 +Format of argument block:
 +Offset Size Description
 + 00h WORD character count
 + 02h WORD error return code
 + 04h WORD socket identifier
 + 06h WORD pointer to receive buffer
 + 08h WORD length of receive buffer
 + 0Ah WORD flags
 + bit 0: async request
 +     2: flush receive buffer on overflow
 +     3: end of user message received
 +     4: vectored request (if set, receive buffer contains buffer
 + descriptors)
 +     5: connection-specific receive
 +     6: change to connection-specific receive mode
 + 0Ch 16 BYTEs socket address
 + 1Ch WORD timeout value in multiples of 200ms
 + 1Eh WORD connection identifier
 + 20h WORD type of response
 + 0001h message received
 + 0002h virtual connection established
 + 0003h virtual connection terminated
 +
 +Format of buffer descriptor:
 +Offset Size Description
 + 00h WORD data segment
 + 02h WORD buffer pointer
 + 04h WORD buffer length
 + 06h WORD character count
 +----------610001-----------------------------
 +INT 61 - Banyan VINES - "Soclose" - CLOSE A SOCKET
 + AX = 0001h
 + DS:DX -> communications control block (function 0004h)
 +Return: AX = status
 +     0000h  successful
 +     0001h  service not installed
 +     0002h  invalid service ID
 +     0003h-000Ah reserved for BANV interface errors
 +     0097h  invalid socket identifier
 +Note: BANYAN can use any interrupt from 60h through 66h.  The Banyan
 +   interrupt handler is identified by the string "BANV" in the four
 +   bytes immediately preceding the interrupt handler
 +
 +Format of control block:
 +Offset Size Description
 + 00h WORD 0004h
 + 02h WORD pointer to argument block (see below)
 + 04h WORD error return code
 + 06h  4 BYTEs reserved
 +
 +Format of argument block:
 +Offset Size Description
 + 00h WORD socket identifier
 +----------610001-----------------------------
 +INT 61 - Banyan VINES - "Sowait" - WAIT FOR ASYNCHRONOUS EVENT COMPLETION
 + AX = 0001h
 + DS:DX -> communications control block (function 0005h)
 +Return: AX = status
 +     0000h  successful
 +     0001h  service not installed
 +     0002h  invalid service ID
 +     0003h-000Ah reserved for BANV interface errors
 +     00A2h  no more buffer space available
 +     00A3h  timeout event
 +Notes: BANYAN can use any interrupt from 60h through 66h.  The Banyan
 +   interrupt handler is identified by the string "BANV" in the four
 +   bytes immediately preceding the interrupt handler
 + returns results for all asynchronous operations invoked from the
 +   data segment used for this call
 +
 +Format of control block:
 +Offset Size Description
 + 00h WORD 0005h
 + 02h WORD pointer to argument block (see below)
 + 04h WORD error return code
 + 06h  4 BYTEs reserved
 +
 +Format of argument block:
 +Offset Size Description
 + 00h WORD pointer to WORD event pointer
 + 02h WORD timeout in multiples of 200ms, FFFFh = infinite
 +----------610001-----------------------------
 +INT 61 - Banyan VINES - "Sosession" - REGISTER APPLICATION WITH COMM SERVICE
 + AX = 0001h
 + DS:DX -> communications control block (function 0008h)
 +Return: AX = status
 +     0000h  successful
 +     00A2h  no more buffer space available
 +Note: BANYAN can use any interrupt from 60h through 66h (default 61h).  The
 +   Banyan interrupt handler is identified by the string "BANV" in the
 +   four bytes immediately preceding the interrupt handler
 +
 +Format of control block:
 +Offset Size Description
 + 00h WORD 0008h
 + 02h WORD process type
 + 0001h transient process
 + 0002h resident process
 + 04h WORD error return code
 + 06h  4 BYTEs reserved
 +----------610001-----------------------------
 +INT 61 - Banyan VINES - "Soint" - SET USER COMPLETION FUNCTION
 + AX = 0001h
 + DS:DX -> communications control block (function 000Bh)
 +Return: AX = status
 +     0000h  successful
 +     0001h  service not installed
 +     0002h  invalid service ID
 +     0003h-000Ah reserved for BANV interface errors
 +     00A2h  no more buffer space available
 +Notes: BANYAN can use any interrupt from 60h through 66h.  The Banyan
 +   interrupt handler is identified by the string "BANV" in the four
 +   bytes immediately preceding the interrupt handler
 + FAR user function is invoked with SS,DS, and ES set to segment of
 +   control block, and with the stack containing
 + DWORD return address
 + WORD argument pointer (sosend or sorec argument block)
 + WORD error return code
 + 0000h argument pointer is valid
 + 00A3h timeout
 +
 +Format of control block:
 +Offset Size Description
 + 00h WORD 000Bh
 + 02h WORD pointer to argument block (see below)
 + 04h WORD error return code
 + 06h  2 BYTEs reserved
 + 08h WORD user CS register
 +
 +Format of argument block:
 +Offset Size Description
 + 00h WORD pointer to user interrupt function
 + 02h WORD pointer to user stack
 + 04h WORD initial timeout value in multiples of 200ms, FFFFh = infinite
 +----------610001-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - CENTER ZOOM WINDOW
 + AX = 0001h
 + BX = X coordinate to center
 + CX = Y coordinate to center
 +Notes: Positions the zoom window such that the specified window-relative
 +   coordinates appear as close as possible to the center of the
 +   display.  Useful for scrolling and panning.
 + INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0002h"OPTIMA"
 +SeeAlso: INT 61/AX=0005h"OPTIMA"
 +----------610002-----------------------------
 +INT 61 - Banyan VINES - 3270 INTERFACE
 + AX = 0002h
 + BH = function
 +     00h "pi2reset"  reset 3270/SNA or 3270/BSC driver
 +     02h "pi2bsc" (3270/BSC only)
 +     03h "pi2get"    get information stored in 3270 resident driver
 +     04h "pi2put"    store information in 3270 resident driver
 +     05h "pi2gcur"   get current screen position
 +     07h "pi2sdat"   send data keystroke
 +     08h "pi2scom"   send command keystroke
 +     0Ah "pi2field"  get field info for arbitrary screen positions
 +     0Fh "pi2stat"   get logical unit/device status
 +     12h "pi2nlus"   determine logical unit/device assignment
 +     13h "pi2gate"   specifies comm port address to gateway service
 +     14h "pi2attach" attach a logical unit/device
 +     15h "pi2sdev"   save logical unit/device info in resident driver
 +     (not supported in >3.0)
 +     16h "pi2gdev"   get device information (not supported in >3.0)
 +     17h "pi2luinfo" get info about specific logical unit/device
 +     18h "pi2gerr"   get finer error detail
 +     19h "pi2dhold"  (3270/SNA only)  holds a 3270 device
 +     1Ah "pi2shut"   release memory-resident module
 +     1Ch "pi2sprof"  save profile info in res driver (not supp in >3.0)
 +     1Dh "pi2gprof"  get prevsly stored profile info (not supp in >3.0)
 + DS:CX -> argument block (except BH=00h,1Ah)
 +Return: AX = status
 +     0000h successful
 +     000Bh invalid parameter or data does not fit data area
 +     000Ch another code path currently active in resident driver
 +     000Dh operation currently not allowed
 +     0032h encountered connection disconnect error
 +     0033h encountered "sosend" completion error
 +     0034h encountered "sosend" communication error
 +     0035h attach request refused.  extended error info via "pi2gerr":
 + 01h resource unavailable
 + 02h invalid type
 + 03h version mismatch
 + 04h invalid logical unit number
 + 05h error during ARL processing
 + 06h no access for user
 +     0071h encountered "sosock" error
 +     0072h encountered unrecognizable error
 +     0073h encountered "sowait" error (extended info via "pi2gerr")
 +     0074h encountered invalid type-of-request on "sowait"
 +     0075h encountered "sorec" error (extended info via "pi2gerr")
 +     0076h encountered "sorec" completion error (ext info via "pi2gerr")
 +     0077h encountered connection request
 +     0078h encountered unrecognizable data
 +     0079h encountered unknown connection ID (ext info via "pi2gerr")
 +Notes: Either 3270/SNA or 3270/BSC interface may use AX=0002h, depending on
 +   which is loaded first.  The other interface will use AX=000Ah
 + Status codes greater than 63h indicate an inconsistency in the 3270/SNA
 +   or 3270/BSC resident driver, which must be reloaded by the user
 +
 +Format of argument block for BH=03h,04h:
 +Offset Size Description
 + 00h WORD size of data area (max 256)
 + 02h  N BYTEs data area
 +
 +Format of argument block for BH=05h:
 +Offset Size Description
 + 00h WORD logical unit/device number
 + 02h WORD pointer to WORD buffer for cursor index
 + 04h WORD pointer to BYTE buffer for current field attribute
 +
 +Format of argument block for BH=07h:
 +Offset Size Description
 + 00h WORD logical unit/device number
 + 02h WORD ASCII data byte
 + 04h WORD pointer to WORD count of characters which will need updating
 +
 +Format of argument block for BH=08h:
 +Offset Size Description
 + 00h WORD logical unit/device number
 + 02h WORD keystroke
 + 0000h Enter
 + 0001h Clear
 + 0002h PA1
 + 0003h PA2
 + 0004h PA3
 + 0005h PF1
 + ...
 + 001Ch PF24
 + 001Dh CSELECT (cursor select)
 + 001Eh Insert
 + 001Fh Delete
 + 0020h EOField
 + 0021h EINPUT (erase input)
 + 0022h Reset
 + 0023h Attention
 + 0024h SysReq
 + 0025h Duplicate
 + 0026h Fieldmark
 + 0027h Home
 + 0028h NextLine
 + 0029h Tab
 + 002Ah BackTab
 + 002Bh cursor up
 + 002Ch cursor down
 + 002Dh cursor right
 + 002Eh cursor left
 + 002Fh double cursor right
 + 0030h double cursor left
 + 0031h PRINT
 + 0032h CANCEL
 + 0033h Backspace
 +
 +Format of argument block for BH=0Ah:
 +Offset Size Description
 + 00h WORD logical unit/device number
 + 02h WORD screen index
 + 04h WORD pointer to WORD buffer for field length
 + 06h WORD pointer to WORD buffer for offset in screen of field start
 +
 +Format of argument block for BH=0Fh:
 +Offset Size Description
 + 00h WORD logical unit/device number
 + 02h WORD clear mask (clear these bits of status after returning status)
 + 04h WORD pointer to WORD buffer for status
 + bit 10: status modified
 + bit  9: buffer modified
 + bit  8: set cursor
 + bit  5: sound alarm
 + bits 0,1: size of print line for printer logical units
 + 00 unformatted line
 + 01 40-character line
 + 10 64-character line
 + 11 80-character line
 +
 +Format of argument block for BH=12h:
 +Offset Size Description
 + 00h WORD pointer to WORD buffer for number of logical units or devices
 + 02h WORD pointer to WORD buffer for version number
 + 04h WORD pointer to 64-byte buffer for logical unit/device list
 +
 +Format of argument block for BH=13h:
 +Offset Size Description
 + 00h 16 BYTEs communications port address (see AX=0001h#"Sosock")
 +
 +Format of argument block for BH=14h:
 +Offset Size Description
 + 00h WORD logical unit/device number 
 + 0000h attach any free device of the specified type
 + 02h WORD logical unit/device type
 + (3270/SNA) 01h, 02h, or 03h
 + (3270/BSC) 02h display
 + (3270/BSC) 03h printer
 + 04h WORD pointer to WORD buffer for attached logical unit/device number
 +
 +Format of argument block for BH=16h:
 +Offset Size Description
 + 00h WORD pointer to 18-byte buffer for device block (see below)
 + first WORD must be set to desired logical unit/device number
 +
 +Format of argument block for BH=17h:
 +Offset Size Description
 + 00h WORD logical unit/device number
 + 02h WORD pointer to information block in caller's DS (see below)
 +
 +Format of argument block for BH=18h:
 +Offset Size Description
 + 00h WORD pointer to WORD buffer for major error code
 + 02h WORD pointer to WORD buffer for minor error code
 +
 +Format of argument block for BH=19h:
 +Offset Size Description
 + 00h WORD logical unit/device number
 +
 +Format of argument block for BH=1Ch,1Dh:
 +Offset Size Description
 + 00h WORD pointer to profile block in caller's DS (see below)
 +
 +Format of device block, argument block for BH=15h:
 +Offset Size Description
 + 00h WORD logical unit/device number
 + 02h WORD logical unit/device type
 + 04h WORD display model number
 + 06h WORD numeric checking
 + 08h WORD status line
 + 0Ah BYTE unprotected normal field attribute
 + 0Bh BYTE unprotected intensified field attribute
 + 0Ch BYTE protected normal field attribute
 + 0Dh BYTE protected intensified field attribute
 + 0Eh WORD reserved
 + 10h WORD printer port number
 +
 +Format of information block:
 +Offset Size Description
 + 00h WORD device model number
 + 02h DWORD screen buffer pointer
 + 06h DWORD status line pointer (see below)
 + 0Ah DWORD reserved
 +
 +Format of status line:
 +Offset Size Description
 + 00h BYTE comm line status
 + 00h inactive
 + 01h active
 + 01h BYTE activation level
 + 01h physical unit activated
 + 02h logical unit also activated
 + 03h session is bound
 + 02h BYTE data traffic state
 + 00h inactive
 + 01h active
 + 03h BYTE screen ownership
 + 00h SLU->PLU sessoin owns screen
 + 01h SLU->SSCP session owns screen
 + 04h BYTE keyboard status
 + 00h UNLOCK - ready to accept data
 + 01h TIME - aid was struck
 + 02h SYSTEM - received response no restore
 + 03h FUNCTION - unavailable keyboard function
 + 04h INPUT - not currently used
 + 05h ENDFIELD - field filled in insert mode
 + 06h PROTECTED - attempt to enter in protected field
 + 07h NUMERIC - attempt to enter in numeric field
 + 08h PROGRAM - error in outbound data stream
 + 05h BYTE insert mode
 + 01h if in insert mode
 + 06h BYTE numeric
 + 01h if current screen buffer is numeric only
 + 07h BYTE printer status
 + 00h printer not assigned
 + 01h printer is inactive
 + 02h printer error
 + 03h currently printing
 + 04h printer is busy
 + 05h printer is very busy
 + 08h BYTE printer assignment
 + 09h BYTE maximum size of network name
 + 0Ah  N BYTEs ASCIZ network name
 + BYTE maximum size of message window
 +      M BYTEs null-terminated message window
 + BYTE code set
 + 00h EBCDIC
 + 01h ASCII
 +      M BYTEs extended attributes
 + 01h extended attributes are in effect (stored at screen+1920)
 + each extended attribute specifies
 + bits 0,1: 00=normal, 01=blink, 10=reverse, 11=underscor
 + bits 2-4: 000=default,001=blue,010=red,011=pink,
 +   100=green,101=turquoise,110=yellow,111=white
 + BYTE extended color
 + 01h other than base color is in effect
 +
 +Format of profile block:
 +Offset Size Description
 + 00h 64 BYTEs gateway service name
 + 40h 16 BYTEs gateway comm port address
 + 50h WORD primary logical unit number
 + 52h WORD secondary logical unit type
 + 54h WORD secondary logical unit number
 + 56h WORD printer assignment
 + 58h 50 BYTEs keyboard definitions filename
 +----------610002-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - END ZOOM
 + AX = 0002h
 +Note: switches off zoom and returns window to its original state
 + INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA"
 +----------610003-----------------------------
 +INT 61 - Banyan VINES - ASYNCHRONOUS TERMINAL EMULATION
 + AX = 0003h
 + DS:BX -> argument block with function number (see below)
 +Return: AX = status
 +     0000h successful
 +     000Bh invalid session ID
 +     000Ch session not active
 +     000Dh invalid request type
 +     000Eh invalid parameters
 +     000Fh out of heap space
 +     0010h timeout on send
 +     0011h Banyan communications error
 +     0012h session not waiting for host
 +     0013h session is active
 +     0014h duplicate suspend session request
 +     0015h no session suspended
 +     0016h ring data buffer full
 +     0017h printer error encountered
 +     0018h Banyan communications error
 +     0019h unable to make connection
 +     001Ah no ring buffer specified at startup
 +     001Bh service is down
 +     001Ch invalid service name
 +     001Dh service is closed
 +     001Eh invalid connection name
 +     001Fh max session limit reached for service
 +     0020h access rights list for connection/dialout does not include
 + this user
 +     0021h service not responding
 +     0022h missing telephone number
 +
 +Format of argument block:
 +Offset Size Description
 + 00h BYTE session ID (00h)
 + 01h BYTE asynchronous interface request number
 + 00h initialize user buffer pointer information area
 + 01h send to host
 + 02h "control monitor"
 + 03h "flow control data": freeze/unfreeze display, ring buffer
 + 04h end active session
 + 05h set session parameter
 + 06h get session parameter
 + 07h set tab settings
 + 08h get tab settings
 + 09h refresh emulation screen
 + 0Ah suspend session temporarily
 + 0Bh restore previously suspended session
 + 0Ch set state of scroll lock checking
 + 0Dh exit emulation
 + 0Eh interrupt on character from host
 + 0Fh start a session
 + 10h start/stop printing of data received from host
 + 11h get file transfer parameters
 + 12h get connection information
 + 13h start/stop tracing data traffic in session
 + 14h interrupt on message from host
 + 15h reset error
 +---request=00h---
 + 02h WORD pointer to info area in caller's current DS
 + Offset Size Description
 + 00h WORD flags
 + 0000h don't read interface's data buffer
 + 0001h read data buffer
 + 02h DWORD pointer to ring buffer
 + 06h WORD length of ring buffer
 + 08h WORD ring buffer offset to last byte read by caller
 + 0Ah DWORD pointer to WORD containing offset of last byte
 +   in ring buffer filled
 + 0Eh DWORD pointer to screen buffer
 + 12h DWORD pointer to field containing cursor position
 + 16h DWORD pointer to terminal status area (see below)
 +---request=01h---
 + 02h BYTE type
 + 00h ASCII byte
 + 01h ASCII string
 + 02h terminal function code
 + 03h up arrow
 + 04h down arrow
 + 05h left arrow
 + 06h right arrow
 + 07h break
 + 03h  N BYTEs type-specific info
 + Offset Size Description
 + ---ASCII byte---
 + 03h BYTE byte to send to host
 + ---ASCII string---
 + 03h WORD length of string
 + 05h WORD pointer to string
 + ---terminal function code (VT52/VT100)---
 + 03h BYTE function code
 + 00h keypad 0
 + 01h keypad 1
 + ...
 + 09h keypad 9
 + 0Ah keypad -
 + 0Bh keypad ,
 + 0Ch keypad .
 + 0Dh keypad ENTER
 + 0Eh PF1
 + 0Fh PF2
 + 10h PF3
 + 11h PF4
 + ---terminal function code (IBM3101)---
 + 03h BYTE function code
 + 00h PF1
 + ...
 + 07h PF8
 + 08h Home
 +---request=02h---
 + 02h BYTE display flag
 + 00h don't display data received from host
 + 01h display data
 +---request=03h---
 + 02h BYTE flow control flag
 + 00h allow characters to be put into display or ring buffer
 + 01h don't place any more characters into display or ring buffer
 +---request=05h,06h---
 + 02h BYTE parameter number
 + 00h line speed (00h=any, 01h=50, 02h=110, 03h=134.5, 04h=150,
 + 05h=300,06h=600,07h=1200,08h=2400,09h=4800, 0Ah=9600)
 + 01h parity (00h=none, 01h=odd, 02h=even)
 + 02h duplex (00h=full, 01h=half)
 + 03h character size (00h=7 bits, 01h=8 bits)
 + 04h stop bits (00h=1, 01h=2)
 + 05h XON/XOFF flow control (00h=no, 01h=yes)
 + 07h intercharacter delay in tenths of a second
 + 08h interline delay in tenths of a second
 + 09h auto linefeed (00h=no, 01h=yes)
 + 0Ah filter control characters (00h=no, 01h=yes)
 + 0Bh terminal type (00h=VT100,01h=glassTTY,02h=VT52,03h=IBM3101)
 + 0Ch auto wrap (00h=no, 01h=yes)
 + 0Dh cursor shape (00h=underscore, 01h=block)
 + 0Eh character set (00h=UK, 01h=US ASCII)
 + 0Fh printer port (00h=LPT1, 01h=LPT2, 02h=LPT3)
 + 03h BYTE parameter value (returned for 06h)
 +---request=07h,08h---
 + 02h WORD pointer to 80-byte buffer in caller's current DS
 +   each byte = 00h if no tab, 01h if tab at that position
 +---request=0Ah---
 + 02h WORD size of session information to be saved
 + 04h WORD pointer to buffer in caller's DS
 +---request=0Bh---
 + 02h WORD size of buffer into which session info is restored
 + 04h WORD pointer to buffer in caller's DS
 +---request=0Ch---
 + 02h BYTE check_scroll_lock flag
 + 00h off
 + 01h on (display of host data stopped while ScrollLock on)
 +---request=0Eh,14h---
 + 02h DWORD pointer to routine to be called (0000h:0000h = don't call)
 + 06h DWORD stack pointer to use when call is made
 +---request=0Fh---
 + 02h WORD pointer to information area in caller's current DS
 + Offset Size Description
 + 00h WORD length of service name
 + 02h WORD pointer to service name in caller's DS
 + 04h BYTE type of connection
 + (00h=connection name, 01h=dialout)
 + 05h WORD length of connection name/telephone number
 + 07h WORD pointer to connection name/telephone number
 +---request=10h---
 + 02h WORD print capture flag (00h=off, 01h=on)
 +---request=11h---
 + 02h WORD pointer to info area in caller's current DS
 + Offset Size Description
 + 00h BYTE protocol flag (00h none, 01h Kermit)
 + 01h BYTE direction flag (00h send, 01h receive)
 + 02h BYTE length of null-terminated PC filename
 + 03h DWORD pointer to null-terminated PC filename
 + 07h BYTE length of null-terminated host filename
 + 08h DWORD pointer to null-terminated host filename
 +---request=12h---
 + 02h WORD pointer to info area in caller's current DS (see below)
 + Offset Size Description
 + 00h WORD length of service name (returned)
 + 02h WORD pointer to 64-byte buffer for service name
 + 04h BYTE type of connection
 + 00h connection name
 + 01h dialout
 + 05h WORD length of connection name/telephone number
 + 07h WORD pointer to 64-byte buffer for name/telno
 + 09h BYTE server line number being used (returned)
 +---request=13h---
 + 02h BYTE trace flag (00h=off, 01h=on)
 +
 +Format of terminal status area:
 +Offset Size Description
 + 00h BYTE status of session: 4Eh=oNline, 46h=oFfline, 57h=Waiting
 + 01h BYTE terminal type (00h=VT100, 01h=TTY, 02h=VT52, 03h=IBM3101)
 + 02h BYTE current keypad mode (VT100,VT52 only)
 + 4Eh ("N") numeric mode
 + 41h ("A") application mode
 + 03h  4 BYTEs current state of LEDs (VT100 only)
 + 00h off
 + 01h on
 + 07h WORD line error count
 + 09h WORD primary error code
 + 0000h no error
 + 0001h unable to make connection
 + 0002h communications error, restart session
 + 0003h async terminal emulation service unavailable
 + 0004h lost carrier
 + 0005h all matching lines busy
 + 0006h no lines defined for connection name
 + 0007h no dial lines available on server
 + 0008h no matching dial lines available
 + 0009h out of heap space
 + 000Ah service error encountered
 + 000Bh timed out waiting to connect
 + 000Ch communications error
 + 000Dh communications error
 + 000Eh host wants file transferred to/from PC
 + 000Fh host software changed session parameter
 + 0010h host software changed tap settings
 + 0011h host software changed LED indicator
 + 0012h host software changed display background (secondary error
 + code 00h for white on black, 01h for black on white)
 + 0013h host software changed display option (secondary error
 + code 00h for off, 01h for on)
 + 0014h communications error
 + 0015h communications error
 + 0016h unable to make connection
 + 0017h unable to make connection
 + 0Bh WORD secondary error code
 +----------610003-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - REPORT ZOOM FACTOR
 + AX = 0003h
 +Return: AX = zoom factor
 +Note: returns the current zoom factor
 + INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0005h"OPTIMA"
 +----------610004-----------------------------
 +INT 61 - Banyan VINES - GET SERVER SERIAL NUMBER
 + AX = 0004h
 + DS:DX -> request block (function 0008h)
 +Return: AX = status
 +     0000h server ID returned in request block
 +     000Fh invalid drive
 +     0015h drive not ready
 +
 +Format of request block:
 +Offset Size Description
 + 00h WORD 0008h
 + 02h WORD drive number (0=default, 1=A, ...)
 + 04h  6 BYTEs buffer for server ID
 +----------610004-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - ENTER SPECIFY MODE
 + AX = 0004h
 +Note: Specify Mode is enabled by hot key (seeAlso below), and allows
 + panning and zooming via the numeric keypad.
 + INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 + The Zoom interrupt no. can be obtained with function INT 16h,AH=0FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0007h"OPTIMA"
 +----------610005-----------------------------
 +INT 61 - Banyan VINES - PRINTER CONTROL
 + AX = 0005h
 + DS:DX -> request block
 +Return: AX = status
 +     0000h successful
 +     0001h network software not installed or incompatible
 +SeeAlso: INT 2F/AX=D702h
 +
 +Format of request block:
 +Offset Size Description
 + 00h WORD function
 + 0201h "endspool" all data for a print job has been sent
 + 0205h "getactive" get currently active printer port
 + 02h WORD number of active port (1-3)
 + 04h WORD ??? (0 for func 0201h, 3 for func 0205h)
 + 06h WORD 0000h
 +----------610005-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - QUERY ZOOM WINDOW
 + AX = 0005h
 + BX:CX -> buffer for window parameters (see below)
 +Note: INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0003h"OPTIMA"
 +SeeAlso: INT 61/AX=0006h"OPTIMA"
 +
 +Format of window parameters:
 +Offset Size Description
 + 00h WORD X start of zoom window
 + 02h WORD Y start of zoom window
 + 04h WORD X end of zoom window
 + 06h WORD Y end of zoom window
 + 08h WORD current zoom factor
 + 0Ah WORD zoom offset start X
 + 0Ch WORD zoom offset start Y
 +----------610006-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - SET ZOOM WINDOW
 + AX = 0006h
 + BX:CX -> zoom window description (see below)
 +Notes: width of zoom window must be a multiple of the pixel replication
 +   factor
 + INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0001h"OPTIMA"
 +SeeAlso: INT 61/AX=0005h"OPTIMA",INT 61/AX=0008h"OPTIMA"
 +
 +Format of zoom window description:
 +Offset Size Description
 + 00h WORD X start of zoom window
 + 02h WORD Y start of zoom window
 + 04h WORD X end of zoom window
 + 06h WORD Y end of zoom window
 +----------610007-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - QUERY APPLICATION KEY
 + AX = 0007h
 +Return: AX = 0000h/0001h
 +Notes: In specify mode, the END key has been reserved for applications.
 + Returns the current toggle state of that key. E.g. in the
 +   OPTIMA AutoCAD driver, 0 means, AutoCAD calls subfunction 0001h
 +   every time the cross cursor moves.
 + INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0001h"OPTIMA"
 +SeeAlso: INT 61/AX=0004h"OPTIMA",INT 7A"AutoCAD"
 +----------610007BX0002-----------------------
 +INT 61 - Banyan VINES - GET PORTS FOR A SERVICE
 + AX = 0007h
 + BX = 0002h
 + DS:DX -> StreetTalk service name
 + DS:DI -> port record block (see below)
 +Return: AX = status
 +     0000h successful
 +     0001h PC network software not installed or incompatible
 +     03E9h incorrect name syntax
 +     03EAh organization name too long
 +     03EBh group name too long
 +     03ECh item name too long
 +     03EDh StreetTalk name too long
 +     03F3h organization not found
 +     03F4h group not found
 +     03F5h StreetTalk name not found
 +     03F8h not a StreetTalk name
 +     040Dh appropriate StreetTalk name unavailable
 +
 +Format of port record block:
 +Offset Size Description
 + 00h WORD number of 17-byte elements
 + 02h 17 BYTEs element (byte 00h = input port type, bytes 01h-10h = port)
 + (see AX=0001h#"Sosock" for port format)
 +----------610007BX0004-----------------------
 +INT 61 - Banyan VINES - SET PORTS FOR A SERVICE
 + AX = 0007h
 + BX = 0004h
 + DS:DX -> StreetTalk name of service
 + DS:DI -> port record block (see below)
 +Return: AX = status
 +     0000h successful
 +     0001h PC network software not installed or incompatible
 +     03E9h incorrect name syntax
 +     03EAh organization name too long
 +     03EBh group name too long
 +     03ECh item name too long
 +     03EDh StreetTalk name too long
 +     03F3h organization not found
 +     03F4h group not found
 +     03F5h StreetTalk name not found
 +     03F8h not a StreetTalk name
 +     0409h modify access denied
 +     040Dh appropriate StreetTalk name unavailable
 +
 +Format of port record block:
 +Offset Size Description
 + 00h WORD number of 17-byte elements
 + 02h 17 BYTEs element: byte 00h = input port type, 01h-10h = port
 + (see AX=0001h#"Sosock" for port format)
 +----------610007BX0005-----------------------
 +INT 61 - Banyan VINES - GET USER NAME
 + AX = 0007h
 + BX = 0005h
 + DS:DX -> 64-byte buffer for user's StreetTalk name
 +Return: AX = status
 +     0000h successful
 +     0001h network software not installed or incompatible
 +Note: if no user logged in, first byte of returned name will be 00h
 +----------610007BX0006-----------------------
 +INT 61 - Banyan VINES - TRANSLATE ERROR INTO ASCII STRING
 + AX = 0007h
 + BX = 0006h
 + SI = error code (>100)
 + DS:DX -> 80-byte buffer for error text
 +Return: AX = status
 +     0000h successful
 +     0001h network software not installed or incompatible     
 +----------610007BX0007-----------------------
 +INT 61 - Banyan VINES - VERIFY EXISTENCE OF NAME AND RETURN CANONICAL FORM
 + AX = 0007h
 + BX = 0007h
 + DS:DX -> NiceName block (see below)
 +Return: AX = status
 +     0000h successful
 +     0001h PC network software not installed or incompatible
 +     03E9h incorrect name syntax
 +     03EAh organization name too long
 +     03EBh group name too long
 +     03ECh item name too long
 +     03EDh StreetTalk name too long
 +     03F3h organization not found
 +     03F4h group not found
 +     03F5h StreetTalk name not found
 +     03F8h not a StreetTalk name
 +     040Dh appropriate StreetTalk name unavailable
 +SeeAlso: AX=0007h/BX=0008h
 +
 +Format of NiceName block:
 +Offset Size Description
 + 00h WORD type of name
 + 0064h organization
 + 00C8h group
 + 012Ch item
 + 02h WORD pointer to ASCIZ input name
 + 04h WORD pointer to 64-byte buffer for output name
 +----------610007BX0008-----------------------
 +INT 61 - Banyan VINES - ENUMERATE StreetTalk NAMES
 + AX = 0007h
 + BX = 0008h
 + DS:DX -> enumerate block (see below)
 +Return: AX = status
 +     0000h successful
 +     0411h all matching names have been returned
 +     0412h some groups unavailable, all available matches returned
 +Note: each program using this call should continue until a nonzero status
 +   is returned; otherwise, some resources will not be freed for several
 +   hours
 +SeeAlso: AX=0007h/BX=0007h
 +
 +Format of enumerate block:
 +Offset Size Description
 + 00h WORD return code
 + 02h WORD pointer to pattern string
 + 04h WORD enumerate type
 + 0064h organization
 + 00C8h group
 + 012Ch item
 + 06h WORD enumerate class
 + 0000h unspecified (return all matching items)
 + 0001h user names
 + 0002h service names
 + 0003h list names
 + 0004h nicknames
 + 08h WORD pointer to category criteria block (see below) or 0
 + 0Ah WORD pointer to array of 64-byte returned names
 + 0Ch WORD number of names returned
 + 0Eh  6 BYTEs reserved for subsequent enumerated calls (set to zeros on first
 +   call)
 +
 +Format of category criteria block:
 +Offset Size Description
 + 00h WORD exclude flag
 + 0000h return only items with the specified categories
 + 0001h return all items except those with the given categories
 + 02h WORD number of categories
 + 04h WORD category 1 value
 + 06h WORD category 2 value
 + ...
 +
 +Values for common service categories:
 + 0002h file service
 + 0003h print service
 + 0004h mail service
 + 0005h StreetTalk
 + 0006h time service
 + 0008h semaphore service
 + 0009h 3270/SNA service
 + 000Ah asynchronous terminal emulation service
 + 000Ch NETBIOS service
 + 000Dh PC-based service
 +----------610008-----------------------------
 +INT 61 - OPTIMA 1024 VGA-Sync - SET ZOOM OFFSET
 + AX = 0008h
 + BX = X start of zoom offset
 + CX = Y start of zoom offset
 +Notes: specifies the first byte of video memory to appear in the zoom window
 + INT 61h is the default interrupt; the actual interrupt number can be
 +   obtained by calling INT 16/AH=FFh
 +SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0006h"OPTIMA"
 +----------610008BX0002-----------------------
 +INT 61 - Banyan VINES - POST MESSAGE ON LOCAL DISPLAY
 + AX = 0008h
 + BX = 0002h
 + CX = flags
 +     bit 0: message will remain on screen until user presses ^X
 +     bit 1: ring bell after displaying message
 +     bit 2: blink
 + DS:DX -> ASCIZ string to display (only first 80 chars used)
 +Return: AX = status
 +     0000h successful
 +     000Bh message display function currently busy
 +     000Ch message queue full
 +Note: queues up to three messages to be displayed on the bottom line
 +----------610008BX0003-----------------------
 +INT 61 - Banyan VINES - INTERCEPT VINES 25th-LINE MESSAGES AT LOCAL PC
 + AX = 0008h
 + BX = 0003h
 + DS:DX -> request block
 +Return: AX = status
 +     0000h successful
 +     0001h network software not installed or incompatible
 +Notes: message handler should not call BIOS or DOS functions, and should
 +   either call next handler or simply return
 + to stop intercepting messages, set prev and next request blocks to
 +   point at each other
 +
 +Format of request block:
 +Offset Size Description
 + 00h DWORD pointer to user-written message handler
 + 04h DWORD pointer to next request block (filled in by VINES)
 + 08h DWORD pointer to previous request block (filled in by VINES)
 + 0Ch DWORD pointer to message storage area (filled by VINES) (see below)
 +
 +Format of message storage area:
 +Offset Size Description
 + 00h 16 BYTEs IPC port of message sender (see AX=0001h#"Sosock")
 + 10h BYTE message flags
 + 11h WORD reserved
 + 13h BYTE length of message
 + 14h 80 BYTEs message text
 +----------61000A-----------------------------
 +INT 61 - Banyan VINES - SECONDARY 3270 INTERFACE
 + AX = 000Ah
 +Notes: either 3270/SNA or 3270/BSC interface will use AX=000Ah, depending on
 +   which is loaded second.  The first interface loaded will use AX=0002h
 +SeeAlso: INT 61/AX=0002h
 +----------6101-------------------------------
 +INT 61 - Banyan VINES - CHECK SERVICE
 + AH = 01h
 + AL = service ID
 +     01h communications
 +     02h primary 3270 emulation
 +     03h async terminal emulation
 +     04h file deflection
 +     07h StreetTalk
 +     08h environment
 +     0Ah secondary 3270 emulation
 +     0Bh semaphore service
 +     0Ch 3270 emulation active status
 +     0Dh 3270 keyboard interrupt simulator
 +Return: AX = status
 +     0000h installed
 +     0001h not installed
 +     0002h invalid ID
 +----------6102-------------------------------
 +INT 61 - Banyan VINES - GET REVISION NUMBER
 + AH = 02h
 + DS:DX -> 2-byte buffer for result
 +Return: AX = 0000h installed
 +     DS:DX buffer contains revision number as
 + 10000d * major_ver + 100d * minor_ver + patch_revision
 +----------6105-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 05h
 + BX = connection handle???
 +Return: CF clear if successful
 +     DX:AX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +Notes: the installation check consists of testing for the signature "TCPTSR"
 +   three bytes beyond the start of the interrupt handler
 + INT 61 is the default; PC/TCP v2.05 may be configured to use any
 +   interrupt from 20h through E0h
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=06h
 +----------6106-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - GET INTERFACE STATISTICS
 + AH = 06h
 + BX = connection handle???
 + DS:SI -> 38-byte buffer (see below)
 +Return: CF clear if successful
 +     buffer filled
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=05h
 +
 +Format of buffer:
 +Offset Size Description
 + 00h WORD ???
 + 02h WORD ???
 + 04h WORD ???
 + 06h DWORD IP address of interface, high byte first
 + 0Ah DWORD subnet mask
 + 0Eh WORD ??? (apparently always 0001h)
 + 10h DWORD total packets received
 + 14h DWORD total packets sent
 + 18h DWORD receive errors
 + 1Ch DWORD send errors
 + 20h WORD ??? (apparently always 0006h)
 + 22h DWORD pointer to ???
 +----------6107-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 07h
 + BX = connection handle???
 +Return: CF clear if successful
 +     AX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6108-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 08h
 + BX = connection handle???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6109-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ??? ALL
 + AH = 09h
 +Return: CF clear
 +Notes: performs function 08h on every connection handle???
 + the installation check consists of testing for the signature "TCPTSR"
 +   three bytes beyond the start of the interrupt handler
 + INT 61 is the default; PC/TCP v2.05 may be configured to use any
 +   interrupt from 20h through E0h
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------610C-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - GET CONNECTION??? STATISTICS
 + AH = 0Ch
 + BX = connection handle???
 +     FFFCh for kernel ICMP statistics
 +     FFFDh for kernel UDP statistics
 +     FFFEh for kernel IP statistics
 +     FFFFh for kernel TCP statistics
 + DS:DX -> 64-byte buffer
 +Return: CF clear if successful
 +     buffer filled
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +
 +Format of handle statistics:
 +Offset Size Description
 + 00h  4 BYTEs unused
 + 04h DWORD ???
 + 08h  8 BYTEs unused
 + 10h DWORD ???
 + 14h DWORD ???
 + 18h 12 BYTEs unused
 + 24h DWORD ???
 + 28h 24 BYTEs unused
 +
 +Format of kernel TCP statistics:
 +Offset Size Description
 + 00h 16 BYTEs unused
 + 10h DWORD bytes sent
 + 14h DWORD bytes received
 + 18h  8 BYTEs unused
 + 20h DWORD packets sent
 + 24h DWORD packets received
 + 28h DWORD bad checksums
 + 2Ch DWORD protocol errors
 + 30h DWORD timeouts
 + 34h DWORD resets
 + 38h DWORD duplicate packets
 + 3Ch DWORD retransmits
 +
 +Format of kernel IP statistics:
 +Offset Size Description
 + 00h  8 BYTEs unused
 + 08h DWORD ??? errors
 + 0Ch DWORD ??? errors
 + 10h DWORD ???
 + 14h DWORD ??? errors
 + 18h DWORD security errors
 + 1Ch DWORD ??? errors
 + 20h DWORD packets sent
 + 24h DWORD packets received
 + 28h DWORD bad checksums
 + 2Ch DWORD protocol errors
 + 30h DWORD timeouts
 + 34h DWORD errors
 + 38h DWORD fragments
 + 3Ch
 +
 +Format of kernel UDP statistics:
 +Offset Size Description
 + 00h 32 BYTEs unused
 + 20h DWORD packets sent
 + 24h DWORD packets received
 + 28h DWORD bad checksums
 + 2Ch DWORD port not listening errors
 + 30h  4 BYTEs unused
 + 34h DWORD truncated receives
 + 38h  8 BYTEs unused
 +
 +Format of kernel ICMP statistics:
 +Offset Size Description
 + 00h DWORD "TimeEx" sent
 + 04h DWORD "TimeEx" received
 + 08h DWORD "ParamProb" sent
 + 0Ch DWORD "ParamProb" received
 + 10h DWORD redirects received
 + 14h DWORD source quenches received
 + 18h DWORD ???
 + 1Ch DWORD ???
 + 20h DWORD packets sent
 + 24h DWORD packets received
 + 28h DWORD bad packets received
 + 2Ch DWORD "DestUn" received
 + 30h DWORD packet send errors
 + 34h DWORD "DestUn" sent
 + 38h DWORD ???
 + 3Ch DWORD ???
 +----------610D-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - CHECK IF CONNECTION HANDLE??? VALID
 + AH = 0Dh
 + BX = connection handle???
 +Return: CF clear if valid
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------610E-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 0Eh
 + BX = ???
 + DS:DX -> ???
 + ES:DI -> ???
 +Return: CF clear
 + ???
 +Notes: the installation check consists of testing for the signature "TCPTSR"
 +   three bytes beyond the start of the interrupt handler
 + INT 61 is the default; PC/TCP v2.05 may be configured to use any
 +   interrupt from 20h through E0h
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------610F-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - GET VERSION
 + AH = 0Fh
 +Return: CF clear
 +     AX = version (AH = major, AL = minor)
 +     BX = patch level
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6110-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - UNINSTALL
 + AH = 10h
 +Return: CF clear if successful
 + CF set on error???
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6111-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 11h
 +Return: CF clear
 + AX = ???
 +Note: clears location whose value is returned in AX and decrements another if
 +   it is not already zero
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=12h
 +----------6112-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 12h
 +Return: CF clear
 + AX = ???
 +Note: sets location whose value is returned in AX to 0001h and performs other
 +   actions if another location is nonzero; these two locations are the
 +   same ones used by AH=11h
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=11h
 +----------6113-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 13h
 + BX = connection handle??? or FFFFh
 + DX = subfunction
 +     0000h ??? (returns error 0016h)
 +     0001h ???
 +     0002h ???
 +     0003h ???
 +     0004h ???
 +     0005h ???
 + DS:SI -> result buffer???
 +Return: CF clear if successful
 +     AX = connection handle???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +Note: invokes AH=22h if BX=FFFFh on entry; also invokes AH=19h in various
 +   cases
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=23h
 +----------6114-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - NO LONGER SUPPORTED
 + AH = 14h
 + BX = connection handle???
 +Return: CF set
 +     AX = 0018h (see INT 61"PC/TCP")
 +Note: displays error message "Illegal system call!  Please upgrade your
 +   PCserver software" to standard output
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6116-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - GET ???
 + AH = 16h
 + BX = connection handle???
 + DS:DX -> 9-byte buffer for ???
 +Return: CF clear if successful
 +     ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6117-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 17h
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6118-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 18h
 + BX = connection handle???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6119-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 19h
 + BX = connection handle???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------611A-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 1Ah
 + BX = connection handle???
 + CX = ???
 + DX = ???
 + DS:SI -> ???
 +Return: CF clear if successful
 +     AX = ???
 +     DX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +Notes: the installation check consists of testing for the signature "TCPTSR"
 +   three bytes beyond the start of the interrupt handler
 + INT 61 is the default; PC/TCP v2.05 may be configured to use any
 +   interrupt from 20h through E0h
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------611B-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 1Bh
 + BX = connection handle???
 + CX = ???
 + DX = ???
 + DS:SI -> ???
 + ES:DI -> ???
 +Return: CF clear if successful
 +     CX = ???
 +     DX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------611C-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 1Ch
 + BX = connection handle???
 + CX = ???
 + DX = ???
 + DS:SI -> ???
 + ES:DI -> ???
 +Return: CF clear if successful
 +     AX = ???
 +     DX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------611D-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 1Dh
 + BX = connection handle???
 + CX = ???
 + DX = ???
 + DS:SI -> ???
 + ES:DI -> 9-byte buffer containing ???
 +Return: CF clear if successful
 +     CX = ???
 +     DX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------611E-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 1Eh
 + BX = connection handle???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------611F-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 1Fh
 + BX = connection handle???
 + CX = ???
 + DS:SI -> ???
 + ES:DI -> ???
 +Return: CF clear if successful
 +     DS:DX -> ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6120-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 20h
 + BX = connection handle???
 + CX = ???
 + DS:DX -> ???
 + SI = ???
 + DI = ???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6121-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 21h
 + BX = connection handle???
 + CX = ???
 + DS:DX -> ???
 + SI = ???
 + DI = ???
 +Return: CF clear if successful
 +     DS:DX -> ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6122-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 22h
 + BX = connection handle???
 +Return: CF clear if successful
 +     AX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6123-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 23h
 + BX = connection handle??? or FFFFh
 + DX = subfunction???
 + DS:SI -> ???
 +Return: CF clear if successful
 +     AX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h
 +----------6124-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 24h
 + ???
 +Return: ???
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6125-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 25h
 + BX = ???
 + CX = ???
 + DX = ???
 + DS:SI -> ???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6126-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 26h
 + BX = ???
 + CX = ???
 + DX = ???
 + DS:SI -> ???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6127-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 27h
 + BX = ???
 + CX = ???
 + DX = ???
 + DS:SI -> ???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6128-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 28h
 + BX = connection handle???
 + CX = ???
 +Return: CF clear if successful
 +     ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6129-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 29h
 +Return: CF clear if successful
 +     AX = ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------612A-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - GET CONFIGURATION INFORMATION
 + AH = 2Ah
 + DS:SI -> 26-byte buffer for configuration information (see below)
 +Return: CF clear
 + AX = 0000h
 + buffer filled
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +
 +Format of configuration information:
 +Offset Size Description
 + 00h BYTE maximum TCP connections available
 + 01h BYTE maximum UDP connections available
 + 02h BYTE maximum IP connections available
 + 03h BYTE ???
 + 04h BYTE number of TCP connections currently in use
 + 05h BYTE number of UDP connections currently in use
 + 06h BYTE number of IP connections currently in use
 + 07h BYTE ???
 + 08h WORD number of local network descriptors active
 + 0Ah WORD number of global network descriptors active
 + 0Ch BYTE ???
 + 0Dh BYTE ???
 + 0Eh WORD ???
 + 10h WORD ???
 + 12h DWORD ???
 + 16h DWORD IP broadcast address
 +----------612B-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 2Bh
 + BX = connection handle???
 + CX = ???
 + DX = ???
 + DS:SI -> ???
 + ES:DI -> ???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6130-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 30h
 + BX = ???
 + CX = ???
 + DX = ???
 +Return: CF clear if successful
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------61---------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - NOP for SLIP kernel
 + AH = function (31h-33h)
 +----------6150-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 50h
 + DS:DX -> 127-byte buffer containing ???
 +Return: CF clear if successful
 +     DX:AX -> ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6151-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 51h
 + CX = size of destination buffer
 + DS:DX -> 127-byte buffer containing ???
 + ES:DI -> destination buffer or 0000h:0000h
 +Return: CF clear if successful
 +     DX:AX -> ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6152-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 52h
 + CX = size of destination buffer
 + DS:DX -> 127-byte buffer containing ???
 + ES:DI -> destination buffer or 0000h:0000h
 +Return: CF clear if successful
 +     DX:AX -> ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6153-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 53h
 + DS:DX -> 127-byte buffer containing ???
 +Return: CF clear if successful
 +     DX:AX -> ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------6154-------------------------------
 +INT 61 U - PC/TCP kernel v2.05 - ???
 + AH = 54h
 + CX = size of destination buffer
 + DS:DX -> 127-byte buffer containing ???
 + ES:DI -> destination buffer or 0000h:0000h
 +Return: CF clear if successful
 +     DX:AX -> ???
 + CF set on error
 +     AX = error code (see INT 61"PC/TCP")
 +BUG: the SLIP kernel for v2.05 bounds-checks the wrong register, so values
 +   greater than 54h in AH may crash the system.  Other kernels may have
 +   this bug as well.
 +SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
 +----------62---------------------------------
 +INT 62 - reserved for user interrupt
 +----------62---------------------------------
 +INT 62 - Adaptec and OMTI controllers - DRIVE 0 DATA
 +Notes: this vector stores the third four bytes of the parameter table for
 +   hard disk 0
 +SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 63"Adaptec"
 +----------62---------------------------------
 +INT 62 - HP 95LX - USED BY CALCULATOR
 +SeeAlso: INT 60"HP 95LX"
 +----------62---------------------------------
 +INT 62 - MS SQL Server/Sybase DBLIBRARY interface - ???
 + AH = function (00h to 07h)
 + CX = FFFEh
 + DX = FFFFh
 + ???
 +Return: ???
 +Note: the installation check consists of testing for the string "DBLIBRARY"
 +   2 bytes past the interrupt handler
 +SeeAlso: AH=08h"SQL"
 +----------620000-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETMODE" - GET CURRENT VIDEO MODE NUMBER
 + AX = 0000h
 + ES:BX -> ???
 +Return: AX = current video mode number
 +Notes: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 + the installation check consists of testing for the signature "FG" ten
 +   bytes beyond the start of the interrupt handler
 +SeeAlso: AX=0001h,AX=0006h
 +----------620001-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETMODE" - SELECT VIDEO MODE AND INITIALIZE
 + AX = 0001h
 + BX = new video mode or FFFFh for current mode
 + ES:DX -> ???
 +Notes: video modes are the same as the BIOS video modes except for
 + 0Bh Hercules graphics 720x348
 + 0Ch Hercules graphics 320x200
 + 15h VGA graphics 320x400x256
 + 16h VGA graphics 320x240x256
 + 17h VGA graphics 320x480x256
 + this call resets the active video page to page 0000h, the clipping
 +   region to the entire screen, text rows to 25, etc.
 +SeeAlso: AX=0000h,AX=0002h,INT 10/AH=00h
 +----------620002-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_TESTMODE" - CHECK IF VIDEO MODE AVAILABLE
 + AX = 0002h
 + BX = desired video mode (00h-17h)
 + CX = required number of video pages (ignore memory size if <= 0)
 +Return: AX = status
 +     0000h mode not available with requested number of pages
 +     0001h mode is available
 +SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0005h
 +----------620003-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_BESTMODE" - GET BEST VIDEO MODE GIVEN RESOLUTN
 + AX = 0003h
 + BX = horizontal resolution
 + CX = vertical resolution
 + DX = number of video pages required (both physical and virtual)
 +Return: AX = proposed video mode number or FFFFh if no matching video mode
 +SeeAlso: AX=0002h,AX=0004h
 +----------620004-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_AUTOMODE" - GET VIDEO MODE WITH MOST FEATURES
 + AX = 0004h
 +Return: AX = proposed video mode number
 +Note: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 +SeeAlso: AX=0002h,AX=0003h,AX=0005h
 +----------620005-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_EGACHECK" - GET INFO ABOUT ACTIVE EGA DISPLAY
 + AX = 0005h
 +Return: AX = number of 64K banks of video memory, or 0000h if no EGA or EGA
 + without an Enhanced Color Display
 +SeeAlso: AX=0002h,AX=0003h
 +----------620006-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_RESET" - ERASE SCREEN AND RESTORE SCREEN ATTR
 + AX = 0006h
 +Notes: this call is ignored in graphics modes
 + the screen attributes are only restored if ANSI.SYS is loaded
 +SeeAlso: AX=0000h
 +----------620007-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_CURSOR" - SPECIFY WHETHER TEXT CURSR IS VISIBLE
 + AX = 0007h
 + BX = new state (0000h invisible, 0001h visible)
 +Note: this call is ignored in text modes
 +----------620008-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0008h to 0009h
 +Return: AX = 0000h
 +----------62000A-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETMAXX" - GET MAXIMUM COLUMN IN SCREEN SPACE
 + AX = 000Ah
 +Return: AX = maximum X coordinate in screen space
 + (or character space if in text mode)
 +SeeAlso: AX=000Bh,AX=0045h
 +----------62000B-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETMAXY" - GET MAXIMUM ROW IN SCREEN SPACE
 + AX = 000Bh
 +Return: AX = maximum Y coordinate in screen space
 + (or character space if in text mode)
 +SeeAlso: AX=000Ah,AX=0045h
 +----------62000C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_XALPHA" - CONVERT SCREEN COLUMN TO CHAR COLUMN
 + AX = 000Ch
 + BX = screen space column
 +Return: AX = character space column containing specified coordinate
 +SeeAlso: AX=000Dh,AX=000Eh
 +----------62000D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_YALPHA" - CONVERT SCREEN ROW TO CHARACTER ROW
 + AX = 000Dh
 + BX = screen space row
 +Return: AX = character space row containing specified coordinate
 +SeeAlso: AX=000Ch,AX=000Fh
 +----------62000E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_XCONVERT" - CONVERT CHAR COLUMN TO SCREEN COL
 + AX = 000Eh
 + BX = character space column
 +Return: AX = screen space column of leftmost pixel in specified character col
 +SeeAlso: AX=000Ch,AX=000Fh
 +----------62000F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_YCONVERT" - CONVERT CHARACTER ROW TO SCREEN ROW
 + AX = 000Fh
 + BX = character space row
 +Return: AX = screen space row of topmost pixel in specified character row
 +SeeAlso: AX=000Dh,AX=000Eh
 +----------620010-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETLINES" - GET TEXT ROWS FOR CURR VIDEO MODE
 + AX = 0010h
 +Return: AX = number of text rows on screen in current video mode
 +SeeAlso: AX=0011h
 +----------620011-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETLINES" - SET TEXT ROWS ON SCREEN
 + AX = 0011h
 + BX = new screen size (25, 43, 50)
 +SeeAlso: AX=0010h
 +----------620012-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0012h to 0013h
 +Return: AX = 0000h
 +----------620014-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DEFCOLOR" - ASSIGN COLOR VALUE TO COLOR INDEX
 + AX = 0014h
 + BX = color index (0000h-00FFh)
 + CX = new color value (0 to maximum color value for current video mode)
 +Note: this call is ignored in text modes and 256-color graphics modes
 +SeeAlso: AX=0015h,AX=0016h,AX=001Dh
 +----------620015-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETCOLOR" - GET CURRENT TEXT ATTRIBUTE
 + AX = 0015h
 +Return: AX = current text attribute or color index (graphics modes)
 +Note: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 +SeeAlso: AX=0019h,AX=001Ah
 +----------620016-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETINDEX" - GET COLOR VALUE FOR COLOR INDEX
 + AX = 0016h
 + BX = color index (0000h to 00FFh)
 +Return: AX = color value for specified color index
 +Note: this call returns the value passed to it in text and 256-color
 +   graphics modes
 +SeeAlso: AX=0014h,AX=001Ch
 +----------620017-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_PALETTE" - SET PALETTE / SET VIDEO DAC REGISTER
 + AX = 0017h
 +---CGA 4-color graphics---
 + BX = CGA paletee number
 + CX = background color
 +---CGA 2-color graphics---
 + BX ignored
 + CX = foreground color
 +---16-color graphics---
 + BX = palette register number
 + CX = palette value
 +---256-color graphics---
 + BX = DAC register number
 + CX =  DAC value
 +Notes: ignored in text modes and Hercules graphics modes
 + few EGA/VGA adapters correctly set the foreground color in CGA mode 6
 +SeeAlso: AX=0018h,AX=001Dh
 +----------620018-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_PALETTES" - SET ALL PALETTE REGISTERS
 + AX = 0018h
 + ES:BX -> array of 16 WORDs containing values for palette registers
 + (or first 16 DAC registers in 256-color modes)
 +Note: ignored in text modes, CGA and Hercules graphics modes
 +SeeAlso: AX=0017h
 +----------620019-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETATTR" - SET TEXT-MODE CHARACTER ATTRIBUTE
 + AX = 0019h
 + BX = foreground
 + CX = background
 + DX = blink (0000h nonblinking, 0001h blink)
 +Note: this call is ignored in graphics modes
 +SeeAlso: AX=0015h,AX=001Ah,AX=0037h
 +----------62001A-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETCOLOR" - SET CURRENT COLOR
 + AX = 001Ah
 + BX = new color index (or text attribute in text modes)
 +SeeAlso: AX=0015h,AX=0019h
 +----------62001B-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETRGB" - SET VIDEO DAC REGISTER CONTENTS
 + AX = 001Bh
 + BX = palette or DAC register number
 + CX = red color component
 + DX = green component
 + SI = blue component
 +Notes: the register number may be negative for Tandy, PCjr, and 200-line
 +   EGA graphics modes to specify an intense color
 + this call has no effect in text, CGA graphics, and Hercules graphics
 +   modes
 +SeeAlso: AX=001Ch,AX=00A5h
 +----------62001C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETRGB" - GET VIDEO DAC REGISTER CONTENTS
 + AX = 001Ch
 + ES:BX -> variable pointer record (see below)
 + CX = DAC register number
 +Return: variables updated
 +Note: this call is ignored in text modes and CGA/EGA video modes (since
 +   they do not use DAC registers)
 +SeeAlso: AX=001Bh,AX=001Dh,AX=00A4h
 +
 +Format of variable pointer record:
 +Offset Size Description
 + 00h WORD segment of WORD buffer for red component of DAC register
 + 02h WORD offset of WORD buffer for red component
 + 04h WORD segment of WORD buffer for green component of DAC register
 + 06h WORD offset of WORD buffer for green component
 + 08h WORD segment of WORD buffer for blue component of DAC register
 + 0Ah WORD offset of WORD buffer for blue component
 +----------62001D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MAPRGB" - MAP COLOR COMPONENTS INTO PALETTE VAL
 + AX = 001Dh
 + BX = red component
 + CX = green component
 + DX = blue component
 +Return: AX = mode-specific palette value corresponding to specified components
 +Note: only meaningful in 16-color graphics modes
 +SeeAlso: AX=0015h,AX=0017h
 +----------62001E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_ERASE" - CLEAR THE ACTIVE VIDEO PAGE
 + AX = 001Eh
 +Note: sets each pixel to 0 in graphics modes, each character cell to a blank
 +   with a gray foreground attribute in text modes
 +----------62001F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_POINT" - DISPLAY A PIXEL
 + AX = 001Fh
 + BX = column
 + CX = row
 +Note: this call is ignored in text modes
 +SeeAlso: AX=0020h
 +----------620020-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETPIXEL" - GET COLOR OF SPECIFIED PIXEL
 + AX = 0020h
 + BX = column in screen space
 + CX = row in screen space
 +Return: AX = color value of pixel (0 to num_colors-1)
 +     0000h in text modes
 +SeeAlso: AX=001Fh
 +----------620021-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETXPOS" - GET GRAPHICS CURSOR COLUMN
 + AX = 0021h
 +Return: AX = screen space X coordinate of graphics cursor position
 +SeeAlso: AX=0022h,AX=0023h,AX=0024h
 +----------620022-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETXPOS" - GET GRAPHICS CURSOR ROW
 + AX = 0022h
 +Return: AX = screen space Y coordinate of graphics cursor position
 +SeeAlso: AX=0021h,AX=0023h,AX=0024h
 +----------620023-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOVE" - SET GRAPHICS CURSOR POSITION
 + AX = 0023h
 + BX = new column
 + CX = new row
 +Note: this call is ignored in text modes
 +SeeAlso: AX=0021h,AX=0022h,AX=0024h
 +----------620024-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOVEREL" - ADJUST GRAPHICS CURSOR POSITION
 + AX = 0024h
 + BX = column offset
 + CX = row offset
 +Note: this call is ignored in text modes
 +SeeAlso: AX=0021h,AX=0022h,AX=0023h
 +----------620025-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DRAW" - DRAW SOLID LINE TO ABSOLUTE POSITION
 + AX = 0025h
 + BX = endpoint column
 + CX = endpoint row
 +Notes: this call is ignored in text modes
 + the starting point is the current graphics cursor position; the cursor
 +   position is updated
 +SeeAlso: AX=0026h,AX=0027h
 +----------620026-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DRAWREL" - DRAW SOLID LINE TO RELATIVE POSITION
 + AX = 0026h
 + BX = endpoint column offset
 + CX = endpoint row offset
 +Notes: this call is ignored in text modes
 + the starting point is the current graphics cursor position; the cursor
 +   position is updated
 +SeeAlso: AX=0025h,AX=0028h
 +----------620027-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DASH" - DRAW DASHED LINE TO ABSOLUTE POSITION
 + AX = 0027h
 + BX = endpoint column
 + CX = endpoint row
 + DX = dash pattern (set bits cause drawn pixels)
 +Notes: this call is ignored in text modes
 + the starting point is the current graphics cursor position; the cursor
 +   position is updated
 +SeeAlso: AX=0025h,AX=0028h
 +----------620028-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DASHREL" - DRAW DASHED LINE TO RELATVE POSITION
 + AX = 0028h
 + BX = endpoint column offset
 + CX = endpoint row offset
 + DX = dash pattern (set bits cause drawn pixels)
 +Notes: this call is ignored in text modes
 + the starting point is the current graphics cursor position; the cursor
 +   position is updated
 +SeeAlso: AX=0026h,AX=0027h
 +----------620029-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETCLIP" - SET CLIPPING REGION
 + AX = 0029h
 + BX = left edge of clipping region
 + CX = right edge of clipping region
 + DX = top edge of clipping region
 + SI = bottom edge of clipping region
 +SeeAlso: AX=004Ah,AX=004Ch,AX=0052h,AX=0054h
 +----------62002A-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_RECT" - DRAW UNFILLED RECTANGLE IN SCREEN SPACE
 + AX = 002Ah
 + BX = left edge column
 + CX = right edge column
 + DX = top edge row
 + SI = bottom edge row
 +SeeAlso: AX=002Bh,AX=002Ch,AX=002Eh,AX=00A2h
 +----------62002B-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_CLPRECT" - DRAW FILLED RECTANGLE IN SCREEN SPCE
 + AX = 002Bh
 + BX = screen space column of left edge
 + CX = screen space column of right edge
 + DX = screen space row of top edge
 + SI = screen space row of bottom edge
 +Note: this call is ignored in text modes
 +SeeAlso: AX=002Ah,AX=002Ch,AX=00A2h
 +----------62002C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DRECT" - DRAW DITHERED RECTANGLE IN SCRN SPACE
 + AX = 002Ch
 + BX = screen space column of left edge
 + CX = screen space column of right edge
 + DX = screen space row of top edge
 + SI = screen space row of bottom edge
 + ES:DI -> dithering matrix (video-mode dependent)
 +Note: this call is ignored in text modes
 +SeeAlso: AX=002Bh,AX=00A2h
 +----------62002D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_ELLIPSE" - DRAW UNFILLED ELLIPSE IN SCRN SPACE
 + AX = 002Dh
 + BX = horizontal semi-axis length in screen space units
 + CX = vertical semi-axis length in screen space units
 +Notes: this call is ignored in text modes
 + the ellipse is centered at the current graphics cursor position
 +SeeAlso: AX=002Ah,AX=002Eh,AX=00A2h
 +----------62002E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_POLYGON" - DRAW AN UNFILLED POLYGON
 + AX = 002Eh
 + CX = number of vertices in polygon
 + ES:BX -> variable pointer record (see below)
 +SeeAlso: AX=002Dh,AX=0030h,AX=00A2h
 +
 +Format of variable pointer record:
 +Offset Size Description
 + 00h WORD segment of WORD array containing vertex columns
 + 02h WORD offset of WORD array containing vertex columns
 + 04h WORD segment of WORD array containing vertex rows
 + 06h WORD offset of WORD array containing vertex rows
 +----------62002F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_PAINT" - FLOOD CLOSED REGION WITH COLOR
 + AX = 002Fh
 + BX = column
 + CX = row
 +Notes: fills an arbitrary closed region around the specified point with the
 +   current color; the screen edges are not considered region boundaries
 + ignored in text modes
 +----------620030-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_CIRCLE" - DRAW UNFILLED CIRCLE
 + AX = 0030h
 + BX = radius in horizontal screen space units (> 0)
 +Notes: the circle is drawn in screen space, centered at the current graphics
 +   cursor position
 + this call is ignored in text modes
 +SeeAlso: AX=00A2h
 +----------620031-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0031h
 +Return: AX = 0000h
 +----------620032-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_TEXT" - DISPLAY STRING OF CHARACTERS
 + AX = 0032h
 + CX = length of string
 + ES:BX -> string
 +Notes: the string is displayed staring at the text cursor position using the
 +   current text attribute (text modes) or color index (graphics modes)
 + the text cursor position is updated after this call
 +SeeAlso: AX=001Ah,AX=0033h,AX=0035h,AX=0036h
 +----------620033-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_LOCATE" - SET TEXT-MODE CURSOR POSITION
 + AX = 0033h
 + BX = row
 + CX = column
 +Note: there are only eight text cursors shared by successive groups of
 +   eight video pages (pages 0, 8, 16, ... share one cursor, 1, 9, ...
 +   share the second, etc)
 +SeeAlso: AX=0034h
 +----------620034-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_WHERE" - GET CURRENT CURSOR POSITION
 + AX = 0034h
 + ES:BX -> variable pointers (see below)
 +Return: indicated variables filled with cursor row and column for active
 +   display
 +Note: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 +SeeAlso: AX=0033h
 +
 +Format of variable pointers:
 +Offset Size Description
 + 00h WORD segment of WORD buffer for cursor row
 + 02h WORD offset of WORD buffer for cursor row
 + 04h WORD segment WORD buffer for cursor column
 + 06h WORD offset WORD buffer for cursor column
 +----------620035-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_CHGATTR" - APPLY CURRENT TEXT ATTRIB TO CHARS
 + AX = 0035h
 + BX = number of characters to recolor
 +Notes: this call is ignored in graphics modes
 + starting at the current text cursor position, the specified number of
 +   characters have their attributes to the current text attribute
 +SeeAlso: AX=0036h
 +----------620036-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_CHGTEXT" - DISPLAY STRING AT CURSOR POSITION
 + AX = 0036h
 + CX = length of string
 + ES:BX -> string to be displayed
 +Return: text cursor updated
 +Note: this call is ignored in graphics modes
 +SeeAlso: AX=0032h,AX=0035h
 +----------620037-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETATTR" - GET CHARACTER ATTRIB FOR POSITION
 + AX = 0037h
 + BX = row
 + CX = column
 +Return: AX = character attribute at specified location on active video page
 +Note: this call is ignored in graphics modes
 +SeeAlso: AX=0019h,AX=0038h
 +----------620038-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETCHAR" - GET CHARACTER FOR SCREEN POSITION
 + AX = 0038h
 + BX = row
 + CX = column
 +Return: AX = character at specified location on active video page
 +Note: this call is ignored in graphics modes
 +SeeAlso: AX=0037h
 +----------620039-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0039h to 003Bh
 +Return: AX = 0000h
 +----------62003C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETPAGE" - GET ACTIVE VIDEO PAGE NUMBER
 + AX = 003Ch
 +Return: AX = active video page (0000h-003Fh)
 +SeeAlso: AX=003Dh,AX=003Eh,AX=0040h
 +----------62003D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETPAGE" - SET ACTIVE VIDEO PAGE
 + AX = 003Dh
 + BX = new video page (0000h to 003Fh)
 +Note: the specified page must be a physical or virtual page
 +SeeAlso: AX=0001h,AX=003Ch,AX=003Fh,AX=0041h
 +----------62003E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETVPAGE" - GET VISIBLE VIDEO PAGE NUMBER
 + AX = 003Eh
 +Return: AX = visible video page (0000h-003Fh)
 +SeeAlso: AX=003Ch,AX=003Fh,AX=0040h
 +----------62003F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETVPAGE" - SET VISIBLE VIDEO PAGE
 + AX = 003Fh
 + BX = new video page (0000h to 003Fh)
 +Note: the specified page must be a physical or virtual page
 +SeeAlso: AX=0001h,AX=003Dh,AX=003Eh,AX=0041h
 +----------620040-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETHPAGE" - GET CURRENT HIDDEN VIDEO PAGE NUM
 + AX = 0040h
 +Return: AX = current hidden video page number (0000h-003Fh)
 +SeeAlso: AX=003Ch,AX=003Eh,AX=0041h
 +----------620041-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETHPAGE" - SET HIDDEN VIDEO PAGE
 + AX = 0041h
 + BX = new hidden page (0000h to 003Fh)
 +Note: specified page must be a physical page or a virtual page
 +SeeAlso: AX=003Dh,AX=003Fh,AX=0040h
 +----------620042-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_ALLOCATE" - CREATE VIRTUAL VIDEO PAGE
 + AX = 0042h
 + BX = page number (0000h-003Fh)
 +Return: AX = status
 +     0000h successful
 +     0001h specified page is a physical or logical page
 +     0007h virtual page created, but memory control blocks corrupted
 +     0008h not enough memory
 +Notes: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 + the amount of memory required by the virtual video page depends on the
 +   current video mode
 +SeeAlso: AX=0043h,AX=009Dh,AX=009Fh
 +----------620043-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_FREEPAGE" - FREE VIRTUAL OR LOGICAL VIDEO PAGE
 + AX = 0043h
 + BX = page number (0000h-003Fh)
 +Return: AX = status
 +     0000h successful
 +     0001h specified page is a physical page
 +     0007h virtual page released, but memory control blocks corrupted
 +     0009h attempt to free a page which was never created
 +SeeAlso: AX=0042h,AX=009Dh,AX=009Eh,AX=009Fh
 +----------620044-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETADDR" - GET SEGMENT OF ACTIVE VIDEO PAGE
 + AX = 0044h
 +Return: AX = segment of active video page
 +----------620045-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_RESIZE" - SET GRAPHICS MODE VIDEO PAGE SIZE
 + AX = 0045h
 + BX = new page width in pixels
 + CX = new page height in pixels
 +Notes: the visible page must be set to 0000h before making this call
 + mouse, joysticks, expanded memory, and extended memory must be
 +   reinitialized after this call
 +SeeAlso: AX=000Ah,AX=000Bh,AX=0075h,AX=007Ah,AX=00A0h,AX=00A1h
 +----------620046-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETMAP" - STORE IMAGE AS MODE-INDEPENDNT BITMAP
 + AX = 0046h
 + ES:BX -> buffer for video mode-independent bitmap
 + CX = width of bitmap in bytes
 + DX = height of bitmap in pixel rows
 +Return: each bit in bitmap is set if corresponding pixel is of the current
 +   color, cleared otherwise
 +Note: this call is ignored in text modes
 +SeeAlso: AX=0047h,AX=0048h
 +----------620047-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DRAWMAP" - DISPLAY MODE-INDEPENDENT BIT MAP
 + AX = 0047h
 + ES:BX -> bitmap (each set bit is pixel drawn in current color)
 + CX = width of bitmap in bytes
 + DX = height of bitmap in pixel rows
 +SeeAlso: AX=0046h,AX=004Ah,AX=004Dh,AX=0052h
 +----------620048-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETIMAGE" - STORE IMAGE AS BITMAP
 + AX = 0048h
 + ES:BX -> buffer for video mode-specific bitmap
 + CX = width of bitmap in bytes
 + DX = height of bitmap in pixel rows
 +SeeAlso: AX=0046h,AX=0049h,AX=0062h
 +----------620049-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DRWIMAGE" - DISPLAY BITMAPPED IMAGE
 + AX = 0049h
 + ES:BX -> video mode-specific bitmap
 + CX = width of bitmap in bytes
 + DX = height of bitmap in pixel rows
 +Note: the image will be drawn with its lower left corner at the current
 +   cursor position (either text or graphics)
 +SeeAlso: AX=0048h,AX=004Ah,AX=0062h
 +----------62004A-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_CLPIMAGE" - DISPLAY CLIPPED IMAGE (BITMAP)
 + AX = 004Ah
 + ES:BX -> mode-specific bitmap
 + CX = width of bit map in bytes
 + DX = height of bit map in pixel rows
 +Notes: this call is ignored in text modes
 + the image is drawn with its lower left corner at the current graphics
 +   cursor position
 + the current clipping region is used, extended to a byte boundary
 +SeeAlso: AX=0029h,AX=0047h,AX=0049h,AX=004Ch,AX=0052h
 +----------62004B-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_REVIMAGE" - DISPLAY REVERSED IMAGE (BITMAP)
 + AX = 004Bh
 + ES:BX -> mode-specific bitmap
 + CX = width of bitmap in bytes
 + DX = height of bitmap in pixel rows
 +Notes: this call is ignored in text modes
 + the image is drawn with its lower left corner at the current graphics
 +   cursor position
 +SeeAlso: AX=004Ah,AX=004Ch
 +----------62004C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_FLPIMAGE" - DISPLAY INV CLIPPED IMAGE (BITMAP)
 + AX = 004Ch
 + ES:BX -> mode-specific bitmap
 + CX = width of bit map in bytes
 + DX = height of bit map in pixel rows
 +Notes: this call is ignored in text modes
 + the image is drawn with its lower left corner at the current graphics
 +   cursor position
 + the current clipping region is used, extended to a byte boundary
 +SeeAlso: AX=0029h,AX=004Ah
 +----------62004D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DISPLAY" - DISPLAY IMAGE (STD PIXEL RUN FORMAT)
 + AX = 004Dh
 + ES:BX -> pixel run map (pairs of bytes: color index, count)
 + CX = number of pixel runs to display
 + DX = width of image in pixels (> 0)
 +Notes: this call is ignored in text modes
 + the image is displayed with its lower left corner at the current
 +   graphics cursor position
 +SeeAlso: AX=0047h,AX=004Eh,AX=004Fh,AX=0050h,AX=0060h
 +----------62004E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DISPLAY" - DISPLAY IMAGE (PACKED PIXEL RUN FMT)
 + AX = 004Eh
 + ES:BX -> pixel run map (trios of bytes: colors, count1, count2; colors
 + contains the color for the first run in its high nybble and the
 + color for the second run in its low nybble)
 + CX = number of pixel runs to display
 + DX = width of image in pixels (> 0)
 +Notes: this call is ignored in text modes
 + the image is displayed with its lower left corner at the current
 +   graphics cursor position
 +SeeAlso: AX=004Dh,AX=004Fh,AX=0050h,AX=0060h
 +----------62004F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DISPFILE" - DISPLAY STORED IMAGE
 + AX = 004Fh
 + ES:BX -> ASCIZ filename
 + CX = image width in pixels (> 0)
 + DX = image format
 +     0000h Fastgraph standard pixel run format
 +     0001h packed pixel run format
 +Notes: this call is ignored in text modes
 + the image is displayed with its lower left corner at the current
 +   graphics cursor position
 +SeeAlso: AX=004Dh,AX=004Eh,AX=0050h,AX=0060h
 +----------620050-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_PATTERN" - SPECIFY DISPLAY PATTERN FOR COLOR
 + AX = 0050h
 + BX = index of pattern to define
 + CX = number of predefined display pattern
 +Notes: when displaying a pixel run map, Fastgraph uses the pattern associated
 +   with each color index rather than displaying the actual color
 + this call has no effect in text and 256-color graphics modes
 +SeeAlso: AX=004Dh,AX=004Eh,AX=004Fh
 +----------620051-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DRAWMASK" - DISPLAY IMAGE (MASKING MAP)
 + AX = 0051h
 + ES:BX -> array containing image stores as a masking map (see below)
 + CX = number of pixel runs in masking map
 + DX = width of masking map in pixels
 +Notes: this call is ignored in text modes and in native EGA and VGA graphics
 +   modes
 + the image is drawn with its lower left corner at the current graphics
 +   cursor position
 +SeeAlso: AX=0052h
 +
 +Format of masking map:
 +Offset Size Description
 + 00h BYTE length of first "protect" run (pixels remain unchanged)
 + 01h BYTE length of first "zero" run (pixels set to background color)
 + 02h BYTE length of second "protect" run
 + 03h BYTE length of second "zero" run
 +  ...
 +----------620052-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_CLIPMASK" - DISPLAY CLIPPED IMAGE (MASKING MAP)
 + AX = 0052h
 + ES:BX -> array containing image stored as a masking map (see AX=0051h)
 + CX = number of pixel runs in masking map
 + DX = width of masking map in pixels
 +Notes: this call is ignored in text modes and in native EGA and VGA graphics
 +   modes
 + the image is drawn with its lower left corner at the current graphics
 +   cursor position
 +SeeAlso: AX=0029h,AX=004Ah,AX=0051h,AX=0053h,AX=0054h
 +----------620053-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_REVMASK" - DISPLAY REVERSED IMAGE (MASKING MAP)
 + AX = 0053h
 + ES:BX -> array containing image stored as a masking map (see AX=0051h)
 + CX = number of pixel runs in masking map
 + DX = width of masking map in pixels
 +Notes: this call is ignored in text modes and in native EGA and VGA graphics
 +   modes
 + the image is drawn with its lower left corner at the current graphics
 +   cursor position
 +SeeAlso: AX=0052h,AX=0054h
 +----------620054-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_FLIPMASK" - DISPLAY INV CLIPPED IMAGE (MASKMAP)
 + AX = 0054h
 + ES:BX -> array containing image stored as a masking map (see AX=0051h)
 + CX = number of pixel runs in masking map
 + DX = width of masking map in pixels
 +Notes: this call is ignored in text modes and in native EGA and VGA graphics
 +   modes
 + the image is drawn with its lower left corner at the current graphics
 +   cursor position
 +SeeAlso: AX=0029h,AX=0052h,AX=0053h
 +----------620055-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0055h to 0059h
 +Return: AX = 0000h
 +----------62005A-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SAVE" - COPY REGION FROM VISIBLE TO HIDDEN PAGE
 + AX = 005Ah
 + BX = left edge column
 + CX = right edge column
 + DX = top edge row
 + SI = bottom edge row
 +Note: left and right edges are adjusted to byte boundaries if necessary
 +SeeAlso: AX=005Bh
 +----------62005B-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_RESTORE" - COPY REGION FROM HIDDEN TO VIS PAGE
 + AX = 005Bh
 + BX = left edge column
 + CX = right edge column
 + DX = top edge row
 + SI = bottom edge row
 +Note: left and right edges are adjusted to byte boundaries if necessary
 +SeeAlso: AX=005Ah,AX=0064h
 +----------62005C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_TRANSFER" - COPY REGION
 + AX = 005Ch
 + CX = source video page
 + DX = destination video page
 + ES:BX -> copy record (see below)
 +Note: source and destination regions must not overlap if on the same page
 +SeeAlso: AX=005Dh,AX=005Fh
 +
 +Format of copy record:
 +Offset Size Description
 + 00h WORD left edge column of source region
 + 02h WORD right edge column of source region
 + 04h WORD top edge row of source region
 + 06h WORD bottom edge row of source region
 + 08h WORD left edge of destination
 + 0Ah WORD bottom edge of destination
 +----------62005D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_TCXFER" - COPY REGION EXCLUDING TRANSPARENT
 + AX = 005Dh
 + CX = source video page
 + DX = destination video page
 + ES:BX -> copy record (see AX=005Ch)
 +Notes: pixels which are in any of the colors defined as transparent with
 +   AX=005Eh are left unchanged in the destination region
 + source and destination regions must not overlap if on the same page
 + this call is ignored in text modes
 +SeeAlso: AX=005Ch,AX=005Eh
 +----------62005E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_TCMASK" - SET TRANSPARENT COLORS
 + AX = 005Eh
 + BX = colors to consider transparent (bit 0 = color 0, etc)
 +Notes: this call is ignored in text modes
 + the specified colors are considered transparent by AX=005Dh
 +SeeAlso: AX=005Dh
 +----------62005F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_COPYPAGE" - TRANSFER VIDEO PAGE CONTENTS
 + AX = 005Fh
 + BX = source page number (0000h-003Fh)
 + CX = destination page number (0000h-003Fh)
 +Note: if both source and destination pages are logical pages, they must both
 +   be located in the same type (conventional, EMS, XMS) of memory
 +SeeAlso: AX=005Ch,AX=009Dh,AX=009Eh,AX=009Fh
 +----------620060-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_DISPPCX" - DISPLAY PCX FILE
 + AX = 0060h
 + ES:BX -> ASCIZ filename
 + CX = flags
 +     bit 0: use current palette rather than PCX file's palette
 +     bits 1-15: reserved (0)
 +Return: AX = status
 +     0000h success
 +     0001h file not found
 +     0002h file is not a valid PCX file
 +Notes: this call is ignored in text modes and Hercules low-resolution graphics
 + the image is displayed with its upper left corner at the current
 +   graphics cursor position
 +SeeAlso: AX=004Dh,AX=004Eh,AX=004Fh,AX=0061h
 +----------620061-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MAKEPCX" - CREATE PCX FILE FROM SCREEN WINDOW
 + AX = 0061h
 + BX = left edge in screen space units
 + CX = right edge in screen space units
 + DX = top edge in screen space units
 + SI = bottom edge in screen space units
 + ES:DI -> ASCIZ filename of PCX file to create
 +Return: AX = status
 +     0000h successful
 +     0001h file not created
 +Notes: the PCX file is created from the specified region of the active video
 +   page; the left and right edges are adjusted to a byte boundary if
 +   necessary
 + if the specified file already exists, it is overwritten
 + this call is ignored in text and Hercules low-resolution graphics modes
 +SeeAlso: AX=0060h
 +----------620062-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_IMAGESIZ" - DETERMINE IMAGE STORAGE REQUIREMENT
 + AX = 0062h
 + BX = image width in pixels
 + CX = image height in pixels
 +Return: DX:AX = size in bytes of mode-specific bitmap for current video mode
 +SeeAlso: AX=0048h
 +----------620063-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0063h
 +Return: AX = 0000h
 +----------620064-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_FADEIN" - FADE IN HIDDEN PAGE
 + AX = 0064h
 + BX = delay (0000h = fastest possible fade-in)
 +Notes: the current hidden page is copied to the current visible page in small
 +   random sections to produce a fade-in effect
 + this call is ignored in text modes
 +SeeAlso: AX=005Bh,AX=0065h
 +----------620065-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_FADEOUT" - FADE OUT TO CURRENT COLOR
 + AX = 0065h
 + BX = delay (0000h = fastest possible fade-out)
 +Notes: this call is ignored in text modes
 + the current visible page is filled with pixels of the current color in
 +   small random sections to give a fade-out effect
 +SeeAlso: AX=0064h
 +----------620066-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_PAN" - SET SCREEN ORIGIN
 + AX = 0066h
 + BX = new column for screen origin
 + CX = new row for screen origin
 +SeeAlso: AX=0067h
 +----------620067-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SCROLL" - VERTICALLY SCROLL SCREEN REGION
 + AX = 0067h
 + BX = left edge column
 + CX = right edge column
 + DX = top edge row
 + SI = bottom edge row
 + DI = number of pixels by which to scroll (positive scrolls up,
 + negative scrolls down)
 + ES = type of scroll
 +     0000h circular (rows scrolled off are copied to vacated rows)
 +     else vacated rows are filled with the current color
 +Notes: in graphics modes, the left and right edges are adjusted to byte
 +   boundaries if necessary
 + circular scrolling uses part of the hidden page as a workspace
 +SeeAlso: AX=0066h
 +----------620068-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0068h to 006Ch
 +Return: AX = 0000h
 +----------62006D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_WAITKEY" - FLUSH KEYBOARD BUFFER AND AWAIT KEY
 + AX = 006Dh
 +Return: after next key pressed
 +SeeAlso: AX=006Eh,AX=006Fh,AX=0096h
 +----------62006E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETKEY" - GET NEXT KEYSTROKE
 + AX = 006Eh
 + ES:BX -> variable pointer record (see below)
 +Return: (after next keystroke if no typeahead) variables updated
 +SeeAlso: AX=006Dh,AX=006Fh,AX=0070h
 +
 +Format of variable pointer record:
 +Offset Size Description
 + 00h WORD segment of BYTE buffer for ASCII keycode
 + 02h WORD offset of BYTE buffer for ASCII keycode
 + 04h WORD segment of BYTE buffer for extended keycode
 + 06h WORD offset of BYTE buffer for extended keycode
 +----------62006F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_INTKEY" - GET KEYSTROKE, NO WAIT
 + AX = 006Fh
 + ES:BX -> variable pointer record (see below)
 +Return: variables updated
 +Note: if the keyboard buffer is empty, both the ASCII and extended keycodes
 +   are set to 00h
 +SeeAlso: AX=006Dh,AX=006Eh,AX=0070h,AX=0079h
 +
 +Format of variable pointer record:
 +Offset Size Description
 + 00h WORD segment of BYTE buffer for ASCII keycode
 + 02h WORD offset of BYTE buffer for ASCII keycode
 + 04h WORD segment of BYTE buffer for extended keycode
 + 06h WORD offset of BYTE buffer for extended keycode
 +----------620070-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_CAPSLOCK" - GET STATE OF CAPSLOCK KEY
 + AX = 0070h
 +Return: AX = CapsLock state (0000h off, 0001h on)
 +SeeAlso: AX=006Eh,AX=006Fh,AX=0071h,AX=0072h,AX=0074h
 +----------620071-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETCAPS" - SET STATE OF CAPSLOCK KEY
 + AX = 0071h
 + BX = new state (0000h off, 0001h on)
 +SeeAlso: AX=0070h,AX=0073h
 +----------620072-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_NUMLOCK" - GET STATE OF NUMLOCK KEY
 + AX = 0072h
 +Return: AX = NumLock state (0000h off, 0001h on)
 +SeeAlso: AX=0070h,AX=0074h
 +----------620073-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETNUM" - SET STATE OF NUMLOCK KEY
 + AX = 0073h
 + BX = new state (0000h off, 0001h on)
 +SeeAlso: AX=0071h,AX=0072h
 +----------620074-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SCRLOCK" - GET STATE OF SCROLL LOCK KEY
 + AX = 0074h
 +Return: AX = ScrollLock state (0000h off, 0001h on)
 +SeeAlso: AX=0070h,AX=0072h
 +----------620075-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_INITJOY" - INITIALIZE JOYSTICK USE
 + AX = 0075h
 + BX = joystick number (0001h or 0002h)
 +Return: AX = status
 +     0000h successful
 +     FFFFh joystick not connected or no game port
 +Note: Fastgraph assumes that the requested joystick is centered at the time
 +   this function is called
 +SeeAlso: AX=0076h,AX=0077h,AX=0078h,AX=0079h
 +----------620076-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETXJOY" - GET HORIZONTAL POSITION OF JOYSTICK
 + AX = 0076h
 + BX = joystick number (0001h or 0002h)
 +Return: AX = horizontal position of joystick
 +     FFFFh if joystick uninitialized or not present
 +Notes: the actual coordinates are processor- and joystick-dependent
 + you must call AX=0075h before this function
 +SeeAlso: AX=0075h,AX=0077h,AX=0078h
 +----------620077-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETYJOY" - GET VERTICAL POSITION OF JOYSTICK
 + AX = 0077h
 + BX = joystick number (0001h or 0002h)
 +Return: AX = vertical position of joystick
 +     FFFFh if joystick uninitialized or not present
 +Notes: the actual coordinates are processor- and joystick-dependent
 + you must call AX=0075h before this function
 +SeeAlso: AX=0075h,AX=0076h,AX=0078h
 +----------620078-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_BUTTON" - GET JOYSTICK BUTTON STATE
 + AX = 0078h
 + BX = joystick number (0001h or 0002h)
 +Return: AX = button states
 +     bit 0: top button pressed
 +     bit 1: bottom button pressed
 +SeeAlso: AX=0075h,AX=0076h,AX=0077h,AX=0079h
 +----------620079-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_INTJOY" - GET KEYCODES CORRESP TO JOYSTICK POS
 + AX = 0079h
 + CX = joystick number (0001h or 0002h)
 + ES:BX -> variable pointer record (see below)
 +Notes: if the indicated joystick has not been initialized with AX=0075h, both
 +   the button code and joystick position will be set to 00h
 + if either button is pressed, a button code of 0Dh is returned;
 +   otherwise, a button code of 00h is returned
 +SeeAlso: AX=006Fh,AX=0075h,AX=0078h
 +
 +Format of variable pointer record:
 +Offset Size Description
 + 00h WORD segment of BYTE buffer for button code
 + 02h WORD offset of BYTE buffer for button code
 + 04h WORD segment of BYTE buffer for joystick position
 + 06h WORD offset of BYTE buffer for joystick position
 +----------62007A-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSEINI" - INITIALIZE MOUSE SUPPORT
 + AX = 007Ah
 +Return: AX = status
 +     0002h two-button mouse
 +     0003h three-button mouse
 +     FFFFh initialization failed
 +Note: after this call, the mouse cursor is invisible
 +SeeAlso: AX=007Bh,AX=007Ch,AX=007Eh,AX=0080h,INT 33/AX=0000h
 +----------62007B-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSEVIS" - SET MOUSE CURSOR VISIBILITY
 + AX = 007Bh
 + BX = new state (0000h invisible, 0001h visible)
 +SeeAlso: AX=007Ah,AX=007Eh,INT 33/AX=0001h,INT 33/AX=0002h
 +----------62007C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSEBUT" - GET MOUSE BUTTON PRESS/RELEASE CNTS
 + AX = 007Ch
 + CX = mouse button (1 = left press, 2 = right press, 3 = middle press,
 +   -1=left release, -2=right release, -3=middle release)
 + ES:BX -> variable pointer record (see below)
 +Return: variables updated
 +Note: returns the count of presses or releases since the last call to this
 +   function; if the count is zero, row and col will also be zero
 +SeeAlso: AX=007Ah,INT 33/AX=0005h,INT 33/AX=0006h
 +
 +Format of variable pointer record:
 +Offset Size Description
 + 00h WORD segment of WORD buffer for press/release count
 + 02h WORD offset of WORD buffer for press/release count
 + 04h WORD segment of WORD buffer for screen space col of last press/rls
 + 06h WORD offset of WORD buffer for screen space col of last press/rels
 + 08h WORD segment of WORD buffer for screen space row of last press/rls
 + 0Ah WORD offset of WORD buffer for screen space row of last press/rls
 +----------62007D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSEPOS" - GET CURRENT MOUSE POSITION
 + AX = 007Dh
 + ES:BX -> variable pointer record (see below)
 +SeeAlso: AX=007Ah,AX=0081h
 +
 +Format of variable pointer record:
 +Offset Size Description
 + 00h WORD segment of WORD buffer for mouse column
 + 02h WORD offset of WORD buffer for mouse column
 + 04h WORD segment of WORD buffer for mouse row
 + 06h WORD offset of WORD buffer for mouse row
 + 08h WORD segment of WORD buffer for button status
 + 0Ah WORD offset of WORD buffer for button status
 +Note: button status: bit 0 = left button, bit 1 = right, bit 2 = middle
 +----------62007E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSECUR" - SPECIFY TEXT-MODE MOUSE CURSOR
 + AX = 007Eh
 + BX = screen mask
 + CX = cursor mask
 +Note: this call is ignored in graphics modes
 +SeeAlso: AX=007Ah,AX=007Fh,INT 33/AX=000Ah
 +----------62007F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSEPTR" - SPECIFY GRAPH-MODE MOUSE CURSOR
 + AX = 007Fh
 + ES:BX -> masks (16-byte screen mask followed by 16-byte cursor mask)
 + CX = X offset of hot spot from upper left corner
 + DX = Y offset of hot spot from upper left corner
 +Note: this call is ignored in text modes
 +SeeAlso: AX=007Ah,AX=007Eh,INT 33/AX=0009h
 +----------620080-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSELIM" - SPECIFY MOUSE CURSOR LIMITS
 + AX = 0080h
 + BX = left-most position allowed for mouse cursor
 + CX = right-most position allowed
 + DX = top-most position allowed
 + SI = bottom-most position allowed
 +SeeAlso: AX=007Ah,AX=0081h,INT 33/AX=0007h,INT 33/AX=0008h
 +----------620081-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSEMOV" - SET MOUSE CURSOR POSITION
 + AX = 0081h
 + BX = new column
 + CX = new row
 +Note: will not move the mouse cursor outside the bounding box specified with
 +   AX=0080h
 +SeeAlso: AX=007Ah,AX=007Dh,AX=0080h,INT 33/AX=0004h
 +----------620082-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MOUSESPD" - SET MOUSE CURSOR SPEED
 + AX = 0082h
 + BX = horizontal mickeys per eight pixels of movement (default 16)
 + CX = vertical mickeys per eight pixels of movement (default 16)
 +SeeAlso: INT 33/AX=000Fh,INT 33/AX=001Ah
 +----------620083-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0083h to 0087h
 +Return: AX = 0000h
 +----------620088-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SOUND" - MAKE SOUND FOR SPECIFIED DURATION
 + AX = 0088h
 + BX = frequency in Hertz (18-32767)
 + CX = duration in clock ticks (0000h or negative for continuous sound)
 +Note: ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in
 +   progress
 +SeeAlso: AX=0089h,AX=008Ah,AX=008Eh,AX=0090h
 +----------620089-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SOUNDS" - PLAY SOUNDS IN BACKGROUND
 + AX = 0089h
 + CX = number of times to cycle through sound list
 + ES:BX -> sounds array (see below)
 +Note: ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in
 +   progress
 +SeeAlso: AX=0088h,AX=008Eh,AX=008Fh
 +
 +Format of sounds array element:
 +Offset Size Description
 + 00h WORD frequency of sound in Hertz (0000h ends array)
 + 02h WORD duration of sound in clock ticks
 +----------62008A-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_VOICE" - START SOUND
 + AX = 008Ah
 + BX = channel on TI sound chip
 + 1-3 = channels 1-3, 4 = channel 4 with periodic noise,
 + 5 = channel 4 with white noise
 + CX = frequency in Hz (18-32767 for channels 1-3; 0=512 Hz, 1=1024 Hz, 
 + 2=2048 Hz for channels 4 and 5)
 + DX = volume
 + SI = duration in clock ticks (continuous if <= 0)
 +Notes: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 + only available on PCjr and Tandy 1000
 +SeeAlso: AX=0088h,AX=008Bh,AX=008Ch
 +----------62008B-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_VOICES" - PLAY SOUNDS IN BACKGROUND
 + AX = 008Bh
 + ES:BX -> tone array (see below)
 + CX = number of times to repeat tone array
 +Notes: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 + only available on PCjr and Tandy 1000
 +SeeAlso: AX=008Ah,AX=008Dh,AX=008Eh,AX=008Fh,AX=0091h
 +
 +Format of tone array element:
 +Offset Size Description
 + 00h WORD channel number (0000h terminates array)
 + 02h WORD frequency
 + 04h WORD volume
 + 06h WORD duration in 1/72.8 seconds
 +----------62008C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MUSIC" - PLAY SERIES OF NOTES
 + AX = 008Ch
 + ES:BX -> '$'-terminated music string in BASIC PLAY format
 +Return: after music completed
 +Note: ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in
 +   progress
 +SeeAlso: AX=008Ah,AX=008Dh
 +----------62008D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MUSICB" - PLAY SERIES OF NOTES IN BACKGROUND
 + AX = 008Dh
 + CX = number of repetitions (negative = continuous play)
 + ES:BX -> '$'-terminated music string in BASIC PLAY format
 +Note: ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in
 +   progress
 +SeeAlso: AX=008Bh,AX=008Ch,AX=008Eh,AX=008Fh,AX=0091h
 +----------62008E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_HUSH" - STOP ASYNCHRONOUS SOUND IMMEDIATELY
 + AX = 008Eh
 +Note: immediately stops any sounds started with "FG_MUSICB", "FG_SOUNDS",
 +   or AX=008Bh; ignored if no asynchronous sound is playing
 +SeeAlso: AX=0088h,AX=008Bh,AX=008Fh,AX=0090h,AX=0091h
 +----------62008F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_HUSHNEXT" - STOP ASYNCHRONOUS SOUND
 + AX = 008Fh
 +Note: stops any sounds started with "FG_MUSICB", "FG_SOUNDS", or AX=008Bh
 +   after the current repetition completes; ignored unless asynchronous
 +   sound is continuous
 +SeeAlso: AX=008Bh,AX=008Eh,AX=0090h
 +----------620090-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_QUIET" - STOP CONTINUOUS SYNCHRONOUS SOUND
 + AX = 0090h
 +Note: this call has no effect if there is no continuous sound playing
 +SeeAlso: AX=008Eh,AX=008Fh,AX=0091h
 +----------620091-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_PLAYING" - DETERMINE WHETHER ASYNC SOUND ACTIVE
 + AX = 0091h
 +Return: AX = sound state (0 = no asynchronous sound, 1 = async sound playing)
 +SeeAlso: AX=008Bh,AX=008Dh,AX=0090h
 +----------620092-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_RESUME" - RESTART ASYNCHRONOUS SOUND
 + AX = 0092h
 +SeeAlso: AX=008Eh,AX=008Fh,AX=0090h
 +----------620093-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SUSPEND" - TEMPORARILY STOP ASYNCHRONOUS SOUND
 + AX = 0093h
 +Notes: this call has no effect if there is no asynchronous sound in progress
 + the program must not exit while sound is suspended
 +SeeAlso: AX=0092h
 +----------620094-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 0094h to 0095h
 +Return: AX = 0000h
 +----------620096-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_WAITFOR" - DELAY FOR SPECIFIED DURATION
 + AX = 0096h
 + BX = duration in clock ticks
 +Return: after delay elapses
 +SeeAlso: AX=006Dh,AX=0097h
 +----------620097-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_STALL" - PAUSE FOR SPECIFIED DURATION
 + AX = 0097h
 + BX = duration in processor-dependent delay units (see AX=0098h)
 +Return: after delay elapses
 +SeeAlso: AX=0096h,AX=0098h
 +----------620098-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MEASURE" - GET DELAY UNITS PER CLOCK TICK
 + AX = 0098h
 +Return: AX = delay units per clock tick (processor-dependent)
 +Note: delay units are used by "FG_STALL" (AX=0097h)
 +SeeAlso: AX=0097h
 +----------620099-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETCLOCK" - GET CLOCK TICKS SINCE MIDNIGHT
 + AX = 0099h
 +Return: DX:AX = number of clock ticks since midnight
 +Note: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 +----------62009A-----------------------------
 +INT 62 - FGDRIVER v1.10 - UNUSED
 + AX = 009Ah
 +Return: AX = 0000h
 +----------62009B-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_MEMAVAIL" - QUERY AMOUNT OF FREE MEMORY
 + AX = 009Bh
 +Return: DX:AX = number of bytes of conventional memory available
 +SeeAlso: AX=009Dh
 +----------62009C-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETFUNC" - SET LOGICAL OPERATION FOR VIDEO OPS
 + AX = 009Ch
 + BX = operation
 +     0000h replacement
 +     0001h AND
 +     0002h OR
 +     0003h XOR
 +Note: only available in native EGA/VGA graphics mode (0Dh to 12h)
 +----------62009D-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_ALLOCCMS" - CREATE LOGICAL VIDEO PAGE (CONVMEM)
 + AX = 009Dh
 + BX = page number (0001h-003Fh)
 +Return: AX = status
 +     0000h successful
 +     FFFCh insufficient memory
 +     FFFDh page already created, or exists as physical or virtual page
 +     FFFEh invalid page number
 +Note: the only operation which is allowed on logical pages is AX=005Fh
 +SeeAlso: AX=0043h,AX=005Fh,AX=009Bh,AX=009Eh,AX=009Fh
 +----------62009E-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_ALLOCEMS" - CREATE LOGICAL VIDEO PAGE (EMS)
 + AX = 009Eh
 + BX = page number (0001h-003Fh)
 +Return: AX = status
 +     0000h successful
 +     FFFCh insufficient memory
 +     FFFDh page already created, or exists as physical or virtual page
 +     FFFEh invalid page number
 +     FFFFh memory manager not initialized
 +Notes: must first call AX=00A0h
 + the only operation which is allowed on logical pages is AX=005Fh
 +SeeAlso: AX=0043h,AX=005Fh,AX=009Dh,AX=009Fh,AX=00A0h
 +----------62009F-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_ALLOCXMS" - CREATE LOGICAL VIDEO PAGE (XMS)
 + AX = 009Fh
 + BX = page number (0001h-003Fh)
 +Return: AX = status (see AX=009Eh)
 +Notes: must first call AX=00A1h
 + the only operation which is allowed on logical pages is AX=005Fh
 +SeeAlso: AX=0043h,AX=005Fh,AX=009Dh,AX=009Eh,AX=00A1h
 +----------6200A0-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_INITEMS" - INITIALIZE EXPANDED MEMORY USE
 + AX = 00A0h
 +Return: AX = status
 +     0000h successful
 +     FFFFh expanded memory manager inaccessible or not installed
 +SeeAlso: AX=009Eh,AX=00A1h
 +----------6200A1-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_INITXMS" - INITIALIZE EXTENDED MEMORY USE
 + AX = 00A1h
 +Return: AX = status
 +     0000h successful
 +     FFFFh extended memory manager inaccessible or not installed
 +SeeAlso: AX=009Fh,AX=00A0h
 +----------6200A2-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_BOX" - DRAW UNFILLED RECTANGLE
 + AX = 00A2h
 + BX = left column
 + CX = right column
 + DX = top row
 + SI = bottom row
 +Notes: FGDRIVER is the external video driver for the shareware
 +   Fastgraph/Light by Ted Gruber Software
 + the rectangle is drawn in screen space, respecting the clipping region,
 +   width edges of the width specified with AX=00A3h (default = 1 is set
 +   by "FG_SETMODE")
 + this function has no effect in text modes
 +SeeAlso: AX=002Bh,AX=002Ch,AX=002Eh,AX=0030h,AX=00A3h
 +----------6200A3-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_BOXDEPTH" - SET RECTANGLE BORDER WIDTH
 + AX = 00A3h
 + BX = width of left and right edges in pixels (> 0)
 + CX = width of top and bottom edges in pixels (> 0)
 +SeeAlso: AX=00A2h
 +----------6200A4-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_GETDACS" - GET VIDEO DAC CONTENTS
 + AX = 00A4h
 + CX = number of DAC registers to return (0001h to 0100h)
 + DX = starting DAC register number (0000h to 00FFh)
 + ES:BX -> buffer for DAC red/green/blue triples
 +Note: the register number wraps back to zero after FFh
 +SeeAlso: AX=001Ch,AX=00A5h
 +----------6200A5-----------------------------
 +INT 62 u - FGDRIVER v1.10 - "FG_SETDACS" - SET VIDEO DAC CONTENTS
 + AX = 00A5h
 + CX = number of DAC registers to set (0001h to 0100h)
 + DX = starting DAC register number (0000h to 00FFh)
 + ES:BX -> buffer containing DAC red/green/blue triples
 +Notes: the register number wraps back to zero after FFh
 + this call has no effect in text modes or graphics modes below 11h
 +SeeAlso: AX=001Bh,AX=00A4h
 +----------6201-------------------------------
 +INT 62 - Cswitch - GIVE UP REST OF TIME-SLICE
 + AH = 01h
 +Note: Cswitch is a set of multitasking functions by Herb Rose
 +SeeAlso: AH=05h,AH=06h,INT 15/AX=1000h
 +----------6202-------------------------------
 +INT 62 - Cswitch - WAIT FOR SEMAPHORE
 + AH = 02h
 + DX = semaphore number (0-63)
 +Return: AX = FFFFh bad semaphore number
 +      else  success
 +SeeAlso: AH=03h,AH=04h
 +----------6203-------------------------------
 +INT 62 - Cswitch - CHECK SEMAPHORE
 + AH = 03h
 + DX = semaphore number (0-63)
 +Return: AX = FFFFh not owned
 +      else  owned
 +SeeAlso: AH=02h,AH=04h
 +----------6204-------------------------------
 +INT 62 - Cswitch - TRIGGER SEMAPHORE
 + AH = 04h
 + DX = semaphore number (0-63)
 +Return: AX = FFFFh bad semaphore number
 +      else  success
 +SeeAlso: AH=02h,AH=03h
 +----------6205-------------------------------
 +INT 62 - Cswitch - SLEEP
 + AH = 05h
 + BX = seconds to sleep
 +SeeAlso: AH=01h,AH=06h,AH=08h"Cswitch"
 +----------6206-------------------------------
 +INT 62 - Cswitch - SUSPEND
 + AH = 06h
 +SeeAlso: AH=05h,AH=08h"Cswitch"
 +----------6207-------------------------------
 +INT 62 - Cswitch - SPAWN
 + AH = 07h
 + ES:BX -> function address to start executing at
 + CX = priority (1-10)
 +Return: AX = FFFDh  no free memory control blocks
 +    = FFFEh  no free task control blocks
 +    = FFFFh  not enough memory to create new task stack
 +    = >0     the tcb number of the new task, indicating no error
 +SeeAlso: AH=0Fh,AH=10h
 +----------6208-------------------------------
 +INT 62 - Cswitch - WAKE UP TASK
 + AH = 08h
 + BX = tcb identifier
 +SeeAlso: AH=05h,AH=06h
 +----------6208--CXFFFE-----------------------
 +INT 62 - MS SQL Server/Sybase DBLIBRARY interface - UNINSTALL/GET PSP ADDR
 + AH = 08h
 + CX = FFFEh
 + DX = FFFFh
 +Return: AX = PSP address of resident DBLIBRARY
 +Note: this call does not free the memory allocated to the TSR; the calling
 +   code must do the deallocation.
 +SeeAlso: INT 62"DBLIBRARY"
 +----------6209-------------------------------
 +INT 62 - Cswitch - SET PRIORITY
 + AH = 09h
 + BX = new base priority (1-10)
 +Note: the lower the priority is numerically, the more often the task will run
 +----------620A-------------------------------
 +INT 62 - Cswitch - TEST MESSAGE QUEUE
 + AH = 0Ah
 + DX = queue number (0-63)
 +Return: AX = FFFFh bad queue number
 +    = 0000h nothing on queue
 +      else  number of bytes in first message in queue
 +SeeAlso: AH=0Bh,AH=0Ch
 +----------620B-------------------------------
 +INT 62 - Cswitch - SEND MESSAGE
 + AH = 0Bh
 + CX = number of bytes to write
 + DS:SI -> buffer
 + DX = queue number (0-63)
 +Return: AX = FFFEh triggered by something arriving, redo the call
 +    = FFFFh bad queue number
 +    = 0000h no message was on queue
 +      else  number of bytes in message
 +SeeAlso: AH=0Ah,AH=0Ch
 +----------620C-------------------------------
 +INT 62 - Cswitch - READ MESSAGE
 + AH = 0Ch
 + CX = number of bytes to read
 + DS:SI -> buffer
 + DX = queue number (0-63)
 +Return: AX = FFFFh bad queue number
 +      else  number of bytes transferred
 +SeeAlso: AH=0Ah,AH=0Bh
 +----------620D-------------------------------
 +INT 62 - Cswitch - DON'T ALLOW TASK TO BE SWAPPED OUT
 + AH = 0Dh
 +SeeAlso: AH=0Eh
 +----------620E-------------------------------
 +INT 62 - Cswitch - ALLOW TASK TO BE SWAPPED OUT
 + AH = 0Eh
 +SeeAlso: AH=0Dh
 +----------620F-------------------------------
 +INT 62 - Cswitch - LOAD AND RUN PROGRAM FROM DISK
 + AH = 0Fh
 + ES:BX -> command line
 + CX = priority (1-10)
 + DX = background flag
 +    = != 0000h  allows loading to EMS
 +Return: AX = 0000h task loader queue is full
 +    = 0001h  no error
 +SeeAlso: AH=07h,AH=10h,AH=13h
 +----------6210-------------------------------
 +INT 62 - Cswitch - TERMINATE SPAWNED PROGRAM
 + AH = 10h
 +SeeAlso: AH=07h,AH=0Fh
 +----------6211-------------------------------
 +INT 62 - Cswitch - GET TCB INFORMATION
 + AH = 11h
 + ES:BX -> a pointer which will be set to the tcb address
 +Return: AX = tcb indentifier
 +SeeAlso: AH=12h
 +----------6212-------------------------------
 +INT 62 - Cswitch - GET TCB ADDRESS
 + AH = 12h
 + ES:BX -> a pointer which will be set to the tcb table address
 +Return: AX = tcb indentifier
 +SeeAlso: AH=11h
 +----------6213-------------------------------
 +INT 62 - Cswitch - CHECK STATUS OF PREVIOUS LOAD_TASK
 + AH = 13h
 +Return: AX = FFFCh no Memory Control Blocks available
 +    = FFFDh no TCBs available
 +    = FFFEh insufficient memory
 +    = FFFFh cannot open file
 +    = 0000h load in progress (not done yet)
 +      else  tcb indentifier
 +SeeAlso: AH=0Fh
 +----------6247-------------------------------
 +INT 62 - PC Tools 7 COMMUTE - ???
 + AH = 47h
 + AL = subfunction (00h-31h)
 + ???
 + CF set
 +Return: ???
 +----------6248-------------------------------
 +INT 62 - PC Tools 7 COMMUTE - ???
 + AH = 48h
 + AL = ???
 + ???
 + CF set
 +Return: ???
 +----------6249-------------------------------
 +INT 62 - PC Tools 7 COMMUTE - ???
 + AH = 49h
 + ???
 + CF set
 +Return: ???
 +Note: may be the same as AH=4Ch
 +----------624A-------------------------------
 +INT 62 - PC Tools 7 COMMUTE - ???
 + AH = 4Ah
 + AL = subfunction (00h-46h)
 + ???
 + CF set
 +Return: ???
 +----------624B--BX1234-----------------------
 +INT 62 - PC Tools 7 COMMUTE - ???
 + AH = 4Bh
 + BX = 1234h
 + CX = 1234h
 + ES = ???
 + CF set
 +Return: ???
 +----------624C-------------------------------
 +INT 62 - PC Tools 7 COMMUTE - ???
 + AH = 4Ch
 + BL = subfunction
 +     00h ???
 +     02h ???
 +Return: CF clear if successful
 + CF set on error
 +----------626262-----------------------------
 +INT 62 - PC Tools 7 COMMUTE - INSTALLATION CHECK
 + AX = 6262h
 + CF set
 +Return: AX = 0000h
 + BX = segment of resident code's PSP
 +----------63---------------------------------
 +INT 63 - reserved for user interrupt
 +----------63---------------------------------
 +INT 63 - Adaptec and OMTI controllers - DRIVE 0 DATA
 +Notes: this vector stores the last four bytes of the parameter table for
 +   hard disk 0
 +SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 62"Adaptec",INT 64"Adaptec"
 +----------63---------------------------------
 +INT 63 - Oracle SQL Protected Mode Executive - ???
 +----------63---------------------------------
 +INT 63 - 4+Power FLOPPY CONTROLLER - ORIGINAL INT 13/40
 +   the "4+Power" quad floppy controller BIOS hooks INT 13 (or INT 40 if INT 13
 +   has been moved there) and places the old value here
 +----------63---------------------------------
 +INT 63 - Kofax KF9X00 image manipulation card interface
 +----------63---------------------------------
 +INT 63 - DESQview/X - ???
 +Notes: parameters are passed by patching!! data field immediately following
 +   the entry point, as detailed below
 + the installation check consists of testing for the string "dvxunix"
 +   (yes, lowercase) at offset 9 from the interrupt handler start
 +SeeAlso: INT BE"DESQview"
 +
 +Format of interrupt handler entry:
 +Offset Size Description
 + 00h  3 BYTEs near jump or short jump + NOP to actual interrupt handler
 + 03h WORD offset from following pointer for initial top of local stack
 + 05h DWORD pointer to argument/stack block (see below)
 + 09h  7 BYTEs signature "dvxunix"
 +
 +Format of argument/stack block:
 +Offset Size Description
 + 00h WORD signature F0ADh
 + 02h WORD function number (0000h-002Ah or FFFFh)
 + 04h  4 BYTEs ???
 + 08h WORD PSP segment to use or 0000h for current PSP
 + 0Ah WORD scratch space (JFT size)
 + 0Ch DWORD scratch space (JFT address)
 + 10h ???
 +----------64---------------------------------
 +INT 64 - reserved for user interrupt
 +----------64---------------------------------
 +INT 64 - Adaptec controllers - DRIVE 1 DATA
 +Notes: this vector stores the first four bytes of the parameter table for
 +   hard disk 1
 + these vectors are used by the following Adaptec controllers:
 +     ACB 2370 A/B/C, ACB 2372 A/B/C, ACB 2333 A/B, 2322B-8, 2322B-16
 + these vectors are NOT used by the following Adaptec controllers:
 +     ACB 2310, ACB 2312, ACB 2320D, ACB 2322D
 +SeeAlso: INT 60"Adaptec",INT 65"Adaptec",INT 66"Adaptec",INT 67"Adaptec"
 +----------64---------------------------------
 +INT 64 - Oracle SQL Protected Mode Executive - ???
 +----------64---------------------------------
 +INT 64 - Novell NetWare to v2.0a - LOW-LEVEL API
 +Note: equivalent to INT 7A for NetWare versions through 2.0a only; later
 +   versions do not use this interrupt for IPX/SPX access, instead
 +   getting an entry point from INT 2F/AX=7A00h
 +SeeAlso: INT 2F/AX=7A00h,INT 7A"Novell"
 +----------64---------------------------------
 +INT 64 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
 +SeeAlso: INT 65"DG10",INT 66"DG10"
 +----------64---------------------------------
 +INT 64 - Extended Batch Language v3.14+
 + AH = function
 +     00h to 5Fh chained to previous handler
 +     60h to 6Ch reserved, return immediately
 +     80h to FFh chained to previous handler
 +     6Dh (v4.01+) insert tone in queue
 + AL = ???
 + CX = frequency in Hertz
 + DL = duration in clock ticks
 + Return: AL = 00h if note stored
 +    = 01h if no room to store
 +     6Eh clear ??? counter/flag
 +     6Fh return counter/flag that AH=6Eh clears
 +     70h ???
 + AL = ???
 +     71h ???
 + AL = ???
 +     72h ???
 +     73h insert byte at end of keyboard buffer
 + AL = byte to insert
 + Return: AL = 00h if byte inserted
 +    = 01h if no room to store
 +     74h insert byte at front of keyboard buffer
 + AL = byte to insert
 + Return: AL = 00h if byte inserted
 +    = 01h if no room to store
 +     75h ???
 +     76h get keyboard "stack" status
 + AL = 'K' if kbd read will read physical keyboard
 +      'S' if it will read EBL internal keyboard buffer
 + AH = ???
 +     77h clear internal keyboard buffer
 +     78h ???
 + AL = ???
 +     79h ???
 +     7Ah ???
 + AL = ???
 +     7Bh ???
 + AL = ???
 +     7Ch ???
 + AL = ???
 +     7Dh ???
 + AL = ???
 +     7Eh clear buffer for ???
 +     7Fh installation check
 + Return: CX = version in BCD
 + DI = segment of ???
 + BX = segment of next program's PSP???
 +Notes: Extended Batch Language is a batch-file enhancer by Seaware
 + the chaining does not check whether the interrupt had been hooked
 +   before, so if you try to chain when the previous vector was 
 +   0000h:0000h, you'll be in trouble
 + functions 72h and 7Ah-7Dh appear to be interfaces to the optional
 +   floating-point and extended function packages
 +----------64---------------------------------
 +INT 64 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
 +Note:   This vector is overwritten by Pdisk to install custom harddrive types.
 +          It can either destroy 4 vectors and take no memory or TSR and take
 +          up some memory.
 +SeeAlso: INT 65"Pdisk"
 +----------65---------------------------------
 +INT 65 - reserved for user interrupt
 +----------65---------------------------------
 +INT 65 - Adaptec controllers - DRIVE 1 DATA
 +Note: this vector stores the second four bytes of the parameter table for
 +   hard disk 1
 +SeeAlso: INT 64"Adaptec",INT 66"Adaptec",INT 67"Adaptec"
 +----------65---------------------------------
 +INT 65 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
 +SeeAlso: INT 64"DG10",INT 66"DG10"
 +----------65---------------------------------
 +INT 65 - FTP Software NDIS-Packet Driver adapter - POST PROCESSING INTERRUPT
 +----------65---------------------------------
 +INT 65 - SD.COM v6.2
 +   The unregistered version of SD62.COM uses the low byte of this vector to
 +   count the number of invocations, displaying a registration reminder each
 +   time after the 20th use.
 +----------65---------------------------------
 +INT 65 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
 +SeeAlso: INT 64"Pdisk",INT 66"Pdisk"
 +----------65---------------------------------
 +INT 65 - Ad Lib SOUND.COM - INTERFACE
 + SI = function number (see separate entries for details on several)
 +    = 0000h Init
 +    = 0002h RelTimeStart
 +    = 0003h SetState
 +    = 0004h GetState
 +    = 0005h Flush
 +    = 0006h SetMode
 +    = 0007h GetMode
 +    = 0008h SetRelVolume
 +    = 0009h SetTempo
 +    = 000Ah SetTranspose
 +    = 000Bh GetTranspose
 +    = 000Ch SetActVoice
 +    = 000Dh GetActVoice
 +    = 000Eh PlayNoteDel
 +    = 000Fh PlayNote
 +    = 0010h SetTimbre
 +    = 0011h SetPitch
 +    = 0012h SetTickBeat
 +    = 0013h NoteOn
 +    = 0014h NoteOff
 +    = 0015h Timbre
 +    = 0016h SetPitchBend
 +    = 0017h WaveForm
 + ES:BX -> arguments
 +Note: the installation check consists of checking for the signature block
 +   immediately preceding the interrupt handler (see below)
 +
 +Format of signature block:
 +Offset Size Description
 + 00h WORD version number
 + 02h 19 BYTEs "SOUND-DRIVER-AD-LIB"
 + 15h BYTE 01h
 + 16h BYTE 01h
 + 17h BYTE 00h
 +----------65----SI0000-----------------------
 +INT 65 - Ad Lib SOUND.COM - INITIALIZE (RESET)
 + SI = 0000h
 +----------65----SI0003-----------------------
 +INT 65 - Ad Lib SOUND.COM - SET STATE
 + SI = 0003h
 + ES:BX -> WORD state = 0000h disabled 
 +     = 0001h enabled
 +SeeAlso: SI=0004h
 +----------65----SI0004-----------------------
 +INT 65 - Ad Lib SOUND.COM - GET STATE
 + SI = 0004h
 +Return: AX = 0000h all done playing sounds
 +    = else  still playing sounds
 +SeeAlso: SI=0003h
 +----------65----SI0006-----------------------
 +INT 65 - Ad Lib SOUND.COM - SET MODE
 + SI = 0006h
 + ES:BX -> WORD mode = 0000h melodic
 +    = 0001h percussive
 +SeeAlso: SI=0007h
 +----------65----SI0007-----------------------
 +INT 65 - Ad Lib SOUND.COM - GET MODE
 + SI = 0007h
 +Return: AX = 0000h melodic
 +    = 0001h percussive
 +SeeAlso: SI=0006h
 +----------65----SI000C-----------------------
 +INT 65 - Ad Lib SOUND.COM - SET ACTIVE VOICE
 + SI = 000Ch
 + ES:BX -> WORD voice = 0000h to 0008h
 +SeeAlso: SI=000Dh
 +----------65----SI000D-----------------------
 +INT 65 - Ad Lib SOUND.COM - GET ACTIVE VOICE
 + SI = 000Dh
 +Return: AX = voice (0000h to 0008h)
 +SeeAlso: SI=000Ch
 +----------66---------------------------------
 +INT 66 - reserved for user interrupt
 +----------66---------------------------------
 +INT 66 - Adaptec controllers - DRIVE 1 DATA
 +Note: this vector stores the third four bytes of the parameter table for
 +   hard disk 1
 +SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 67"Adaptec"
 +----------66---------------------------------
 +INT 66 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
 +SeeAlso: INT 64"DG10"
 +----------66---------------------------------
 +INT 66 - Nanosoft, Inc. TurboNET - NETWORK PROCESSING ???
 +Notes: hooked but not used (IRET) by both redirector and server; called from
 +   server's INT 28 handler
 + TurboNET is a NetBIOS-based file redirector and server
 +SeeAlso: INT 2F/AX=8100h
 +----------66---------------------------------
 +INT 66 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
 +SeeAlso: INT 64"Pdisk",INT 67"Pdisk"
 +----------66---------------------------------
 +INT 66 - Microsoft Windows VITD.386 Virtual Interval Timer
 +Note: This Windows 3.x Virtual Device Driver implements a virtual timer
 +   which will expire and call INT 66.  This timer can be used to
 +   calculate elapsed execution time etc.
 +----------6601-------------------------------
 +INT 66 - BitFax Scheduler - SET MODE???
 + AH = 01h
 +SeeAlso: AH=02h
 +----------6602-------------------------------
 +INT 66 - BitFax Scheduler - SET MODE???
 + AH = 02h
 +SeeAlso: AH=01h
 +----------6603-------------------------------
 +INT 66 - BitFax Scheduler - SCHEDULE FAX TRANSMISSIONS
 + AH = 03h
 + ???
 +Return: ???
 +SeeAlso: AH=05h
 +----------6604-------------------------------
 +INT 66 - BitFax Scheduler - GET STATUS???
 + AH = 04h
 +Return: AX = ??? (0000h or 0001h)
 + DX = BitSched version???  (for versions >= 3.00)
 +     9796h (ver. 3.00)
 +     97E6h (ver. 3.02)
 +     92D0h (ver. 3.04.06)
 +     9510h (ver. 3.06.02)
 +SeeAlso: AH=06h,AX=3345h,INT 2F/AX=8000h"FaxBIOS"
 +----------6605-------------------------------
 +INT 66 - BitFax Scheduler - CONVERT FILE AND SEND FAX
 + AH = 05h
 + BX:CX -> command block (see below)
 + ???
 +Return: ???
 +SeeAlso: AH=03h
 +
 +Format of command block:
 +Offset Size Description
 + 00h 18 BYTEs configuration bytes???
 + 12h BYTEs ASCIZ temporary file name to place converted fax
 + 52h BYTEs ASCIZ directory containing BitFax executables
 + 92h BYTEs ASCIZ telephone number
 + C2h BYTE 00h don't send cover page
 + 01h send cover page
 + C3h 15 BYTEs configuration bytes???
 + E2h BYTEs ASCIZ path of BITFAX.TRA file (containing additional
 + configuration information???)
 +122h BYTEs configuration bytes???
 +12Ch BYTE 00h don't send cover page
 + 01h send cover page
 +12Dh  7 BYTEs configuration bytes???
 +134h BYTEs ASCIZ path of file to send
 +174h BYTEs more configuration bytes???
 + ???
 +----------6606-------------------------------
 +INT 66 - BitFax Scheduler - SET MODE???
 + AH = 06h
 +Return: DX = BitSched version??? (same as AH=04h)
 +SeeAlso: AH=04h
 +----------660688-----------------------------
 +INT 66 - John W. Ratcliff (The IBM Digitized Sound Package)
 + AX = 0688h
 + ???
 +Return: ???
 +SeeAlso: AX=0689h
 +----------660689-----------------------------
 +INT 66 - John W. Ratcliff (The IBM Digitized Sound Package)
 + AX = 0689h
 + ???
 +Return: ???
 +SeeAlso: AX=0688h
 +----------663345-----------------------------
 +INT 66 - BitFax Scheduler - REMOVE TSR FROM MEMORY
 + AX = 3345h
 +Return: AX = FFFFh error removing TSR
 +Note: the installation check consists of checking for the signature
 +   "BitFax Scheduler" beginning two bytes past the interrupt handler
 +SeeAlso: AH=04h,INT 2F/AH=2Ah,INT 2F/AX=CB00h
 +----------66FFFBBXFFFB-----------------------
 +INT 66 - MicroHelp Stay-Res Plus - ???
 + AX = FFFBh
 + BX = FFFBh
 + ???
 +Return: ???
 +SeeAlso: AX=FFFEh,INT 2D"AMIS"
 +----------66FFFEBXFFFE-----------------------
 +INT 66 - MicroHelp Stay-Res/Stay-Res Plus - UNINSTALL
 + AX = FFFEh
 + BX = FFFEh
 +Return: only if unsuccessful
 +Notes: installation check is for the interrupt handler to begin with the bytes
 +   FBh 9Ch or 9Ch FAh, and the program name (not case-sensitive) to
 +   appear at offset 0005h (older versions) or the offset returned by
 +   AX=FFFFh/BX=FFF0h in the interrupt handler segment.
 + Programs which use Stay-Res include ThesPlus (program name "THESPLUS")
 +   and Personal Calendar (program name "CAL") by Paul Mun~oz-Colman.
 +SeeAlso: AX=FFFBh,AX=FFFFh,INT 2D"AMIS"
 +----------66FFFFBXFFF0-----------------------
 +INT 66 - MicroHelp Stay-Res Plus - FIND PROGRAM NAME
 + AX = FFFFh
 + BX = FFF0h
 +Return: DI = offset of program name in interrupt handler segment
 +SeeAlso: AX=FFFBh,AX=FFFEh,INT 2D"AMIS"
 +----------67---------------------------------
 +INT 67 - Adaptec controllers - DRIVE 1 DATA
 +Note: this vector stores the last four bytes of the parameter table for
 +   hard disk 1
 +SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 66"Adaptec"
 +----------67---------------------------------
 +INT 67 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
 +SeeAlso: INT 64"Pdisk",INT 66"Pdisk"
 +----------67---------------------------------
 +INT 67 - Sangoma CCPOP 3270 resident module
 +SeeAlso: INT 61"Sangoma",INT 68"Sangoma"
 +----------67---------------------------------
 +INT 67 - CUCKOO.COM - INSTALLATION CHECK
 +Notes: this is not a vector; when loaded for the first time, CUCKOO.COM uses
 +   the last unused (0000h:0000h) vector in the range 60h-67h to store
 +   the signature value 434Ch:4F4Bh ('CLOK')
 + CUCKOO is a resident on-screen clock with optional hourly chime or
 +   cuckoo by an unknown author with revisions by Thomas A. Lundin
 +----------6700-------------------------------
 +INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE AND WAIT
 + AH = 00h
 + DS:DX -> ASCIZ semaphore name (max 64 bytes)
 +Return: AL = status
 +     00h successful
 +     01h invalid function
 +     02h semaphore already locked
 +     03h unable to lock semaphore
 +     04h semaphore space exhausted
 + AH = semaphore owner if status=02h
 +SeeAlso: AH=01h,AH=02h"PC-NET",INT 7F/AH=00h
 +----------6701-------------------------------
 +INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE
 + AH = 01h
 + DS:DX -> ASCIZ semaphore name (max 64 bytes)
 +Return: AL = status (see AH=00h)
 + AH = semaphore owner if status=02h
 +SeeAlso: AH=00h,AH=02h"PC-NET",INT 7F/AH=01h"Alloy"
 +----------6702-------------------------------
 +INT 67 - PC-NET, Alloy NTNX - UNLOCK SEMAPHORE
 + AH = 02h
 + DS:DX -> ASCIZ semaphore name (max 64 bytes)
 +Return: AL = status (see AH=00h)
 + AH = semaphore owner if status=02h
 +SeeAlso: AH=00h,AH=01h"PC-NET",INT 7F/AH=02h
 +----------673F--CX5145-----------------------
 +INT 67 U - QEMM-386 v4.23+ - INSTALLATION CHECK
 + AH = 3Fh
 + CX = 5145h ("QE")
 + DX = 4D4Dh ("MM")
 +Return: AH = 00h if installed
 +     ES:DI -> QEMM API entry point
 +Notes: if no other program has hooked INT 67, an alternate installation
 +   check is to test for the string
 +   "QUARTERDECK EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
 +   handler's segment; the word at offset 12h contains the offset in
 +   the handler's segment of the API entry point
 + MICEMM (Micronics Expanded Memory Manager) versions 2.0C and 4D support
 +   the alternate QEMM installation check and entry point functions 00h,
 +   02h, and 03h; version 4D only provides the signature string if the
 +   commandline argument "DV" is provided
 + 386MAX v6.01 responds to this call, but DESQview 2.42 does not
 +   recognize the returned entry point as providing QEMM's capabilities
 +   because a) only functions 0Ch (different from QEMM 0Ch) and
 +   1000h-1009h are supported,
 +     b) status is returned as for EMS functions, not QEMM funcs
 +   c) the protected-mode entry point returned by function 1000h
 +   only supports functions 0Ch, 1004h, 1005h, and 100Ah
 + the string check mentioned above is not supported by 386MAX
 +SeeAlso: AH=DDh,AX=5BF0h,AX=FFA5h,INT 15/AX=11DEh,INT 21/AX=4402h"QEMM"
 +SeeAlso: INT 21/AX=4402h"386MAX",INT 2F/AX=D201h/BX=5145h
 +
 +Call QEMM entry point with:
 + AH = 00h get QEMM state
 + Return: CF clear
 + AL = QEMM state
 +     bit 0 set if QEMM turned OFF
 +     bit 1 set if in "Auto" mode
 + AH = 01h set QEMM state
 + AL = new state
 +     bit 0 set: place QEMM in OFF state
 + Return: CF clear if successful
 + CF set on error
 + AH = 02h get ???
 + Return: CF clear
 + AX = segment of ??? data structure
 + Data Structure
 + Offset Size Description
 + 00h BYTE ???
 + 01h WORD ???
 + ???
 + AH = 03h get QEMM version
 + Return: CF clear
 + AX = BX = version in BCD
 + Notes: the official docs only state that the version is
 +   returned in BX
 + MICEMM returns AX=0001h, BX unchanged
 + AH = 04h allocate 4K page and set AUTO/ON mode
 + Return: CF clear if successful
 +     DX = page number of a 4K page
 + CF set if unable to allocate page
 + Note: QEMM mode unchanged if not AUTO/OFF
 + AH = 05h free 4K page and turn QEMM off
 + DX = page number returned by function 04h
 + Return: CF clear
 + Note: QEMM mode unchanged if not AUTO/ON
 + AH = 06h make new mapping context???
 + DX = page number of 4K page to hold page table
 + Return: CF clear
 + Note: copies page table into given page and then sets ???
 +   page table entry to point at copy
 + AH = 07h get mapping context???
 + Return: CF clear
 + DX = page table number???
 + AH = 08h ???
 + DX = linear page number
 + Return: CF clear
 + AH = 09h get linear page number for page table entry
 + CX = page table index
 + Return: CF clear
 + DX = linear page number
 + AH = 0Ah set linear page number for page table entry
 + CX = page table index
 + DX = linear page number
 + Return: CF clear
 + AH = 0Bh map 4K pages???
 + BX = number of pages???
 + CX = first page number??? (must be 0100h to allocate HMA)
 + DX = EMS handle???
 + Return: AH = 00h
 + AH = 0Ch get available memory
 + Return: CF clear
 + BX = 0001h
 + CX = total 4K pages???
 + DX = number of 4K pages free
 + AH = 0Dh ??? (related to callbacks)
 + AL = 00h/01h/02h ???
 + Return: CF clear
 + AH = 0Eh set ??? callbacks
 + DS:BX -> FAR routine for ???
 + ES:DX -> FAR routine for ???
 + Return: CF clear
 + Note: DS:BX callback should return BX=???; ES:DX is called
 +   with BX=???, and should set the ??? from which the
 +   other handler read the value of BX.  BH and BL
 +   appear to be separate values.
 + AH = 0Fh unmap 4K pages???
 + CX = first page number
 + DX = number of pages
 + Return: CF clear
 + AL = 00h/01h if ???
 + Note: if CX=0100h and DX=0010h, the HMA is remapped to
 +   simulate a disabled A20
 + AX = 1000h get protected-mode interface
 + DS:SI -> 16-byte buffer for two GDT entries
 + ES:DI -> buffer for 4K page table
 + Return: CF clear
 + EAX = offset of protected-mode API entry point
 + DS:SI buffer filled with two GDT descriptors
 + first is QEMM code segment, second is data???
 + ES:DI buffer filled with 4K page table
 + DI points to first unused page table entry
 + SeeAlso: INT 67/AX=DE01h
 + AX = 1001h get CPU debug registers
 + ES:DI -> buffer for debug registers (8 DWORDs)
 + Return: CF clear
 + BL = INT01 handling (see function 1002h)
 + ES:DI buffer filled
 + AX = 1002h set CPU debug registers
 + BL = INT01 handling
 +     00h  reflect all debugging exceptions as V86-mode INT 01's
 +     else convert debugging exceptions other than single-step
 +        into V86-mode INT 03's, single-step to INT 01's
 + ES:DI -> buffer containing debug registers (8 DWORDs)
 + Return: CF clear
 + Notes: identical to INT 67/AX=DE09h if BL=01h
 + the INT01 handling flag is set to 01h by the general-
 +   protection violation handler for certain privileged
 +   instructions
 + AX = 1003h get machine status word CR0
 + Return: CF clear
 + EAX = contents of CR0
 + SeeAlso: INT 67/AX=DE07h
 + AX = 1004h allocate a 4K page
 + Return: CF clear if successful
 +     EDX = linear address of allocated page
 + CF set on error
 + SeeAlso: INT 67/AX=DE04h
 + AX = 1005h free 4K page
 + EDX = linear address of page to free
 + Return: CF clear
 + SeeAlso: INT 67/AX=DE05h
 + AX = 1006h NOP
 + Return: CF set
 + AX = 1007h get maximum physical memory address
 + Return: CF clear
 + EDX = physical address of highest 4K memory page
 + SeeAlso: INT 67/AX=DE02h
 + AX = 1008h get physical address of page in first megabyte
 + CX = page number (linear address shifted right 12 bits)
 + Return: CF clear
 + EDX = linear address of page
 + SeeAlso: function 1F00h
 + AX = 1009h switch to protected mode
 + ESI = linear address in first megabyte of system reg values
 + (see INT 67/AX=DE0Ch)
 + interrupts disabled
 + Return: interrupts disabled
 + GDTR, IDTR, LDTR, TR loaded
 + SS:ESP must have at least 16 bytes space, and the
 + entry point is required to set up a new stack
 + before enabling interrupts
 + EAX, ESI, DS, ES, FS, GS destroyed
 + AX = 100Ah switch back to virtual-86 mode
 + DS = selector for data segment from function 1000h
 + SS:ESP in first megabyte of linear memory
 + interrupts disabled
 + STACK: QWORD  return address from FAR call to 32-bit segment
 + DWORD  EIP
 + DWORD  CS
 + DWORD  reserved for EFLAGS
 + DWORD  ESP
 + DWORD  SS
 + DWORD  ES
 + DWORD  DS
 + DWORD  FS
 + DWORD  GS
 + will switch to virtual86 mode with interrupts disabled, all
 +   segment registers loaded, and EAX destroyed.
 + AH = 11h get memory type map
 + AL = zero/nonzero ??? (set by QEMM.COM but apparently ignored
 + by QEMM 6.00)
 + ES:DI -> 256-byte buffer for memory types
 + Return: CF clear
 + BL = ???
 + ES:DI buffer filled
 + Note: each byte of the buffer corresponds to a 4K page, and
 +   contains the type of that page: 00h = mappable,
 +   02h = mapped ROM, 03h = high RAM, 04h = excluded,
 +   05h = video, 06h = ROM, 07h = adapter ROM,
 +   08h = split ROM, 09h = page frame, 0Ah = RAMmable,
 +   0Bh = conventional
 + AH = 12h get HIRAM chain
 + Return: CF clear
 + BX = segment of first MCB in high memory
 +     0000h if no high memory
 + AX = 1300h VIDRAMEGA???
 + BL = 00h copy ???
 +      nonzero copy ??? (reverse)
 + Return: CF clear
 + AL = 00h if all pages clean
 +    = 01h if any page dirty
 + AX = 1301h check if ???
 + DX:DI = start address of range to check ???
 + CX = length of range
 + Return: CF clear
 + CX = ??? (0000h or 1000h)
 + AX = 1302h ???
 + BL = ???
 + BH = ???
 + CX = ???
 + SI = offset of ???
 + DI = offset of ???
 + ???
 + Return: CF clear
 + ???
 + Note: disables certain interrupts at the two 8259 PICs during
 +   execution; also modifies CRT controller during
 +   execution under certain circumstances
 + AX = 1303h ??? EMS allocation
 + BX = number of pages of EMS to allocate
 + ???
 + Return: CF clear if successful
 + CF set on error
 + ???
 + AX = 1304h EMS deallocation
 + DX = EMS handle
 + Return: CF clear
 + AX = 1305h ???
 + CX = ???
 + Return: CF clear
 + Note: disables certain interrupts at the two 8259 PICs during
 +   execution (see AX=130Ch)
 + AX = 1306h set DESQview critical section counter address
 + ES:BX -> WORD DESQview critical section counter or 0000h:0000h
 + Return: CF clear
 + Note: also sets pointer in low-memory part of QEMM to current
 +   value of INT 15 if ES:BX not 0000h:0000h
 + AX = 1307h ???
 + ???
 + Return: CF clear
 + Note: disables certain interrupts at the two 8259 PICs during
 +   execution (see AX=130Ch)
 + AX = 1308h ???
 + BL = ??? (zero/nonzero)
 + Return: CF clear
 + AX = 1309h Hercules mode-change support
 + ES:BX -> new address for Hercules mode-change callback
 + Return: CF clear
 + Note: the callback function is called whenever the CRTC mode
 +   register is written, with AL set to the value written
 + AX = 130Ah virtualize EGA/VGA I/O ports 03C8h/03C9h???
 + CX:DX -> buffer for storing CRTC register contents???
 + or 0000h:0000h to disable
 + Return: CF clear
 + AX = 130Bh ???
 + BL = ???
 + Return: CF clear
 + ???
 + AX = 130Ch set interrupts to mask
 + BX = interrupts to mask out during AX=1302h,AX=1307h,AX=1308h,
 + AX=130Dh,AX=1310h (BL = master PIC, BH = slave PIC)
 + Return: CF clear
 + AX = 130Dh ???
 + ???
 + Return: CF clear
 + Note: disables certain interrupts at the two 8259 PICs during
 +   execution (see AX=130Ch)
 + AX = 130Eh ??? (modifies CRT controller setup)
 + ???
 + Return: CF clear
 + AX = 130Fh reset ???
 + Return: CF clear
 + AX = 1310h ???
 + ???
 + Return: CF clear
 + Note: disables certain interrupts at the two 8259 PICs during
 +   execution (see AX=130Ch)
 + AX = 1311h set ???
 + BL = ???
 + Return: CF clear
 + AX = 1312h (v6.02) NOP???
 + Note: called by DV 2.42, but appears to be a NOP in QEMM 6.02
 + AX = 1400h ???
 + ES:DI -> ??? data structure (at least 24 bytes)
 + BL = ???
 + Return: AX = ???
 + Data structure
 + Offset Size Description
 + 00h  WORD ???
 + 02h DWORD far pointer to ???
 + 06h DWORD far pointer to ??? pointer array (see below)
 + 0Ah DWORD far pointer to ???
 + 0Eh DWORD ???
 + 12h WORD segment of ???
 + 14h DWORD far pointer to ???
 + Pointer array
 + Offset Size Description
 + 00h WORD number of pointers to follow
 + 02h  N DWORDs far pointers to ???
 + Note: QEMM converts the pointers into linear addresses in place
 + AX = 1401h ???
 + Return: CF clear
 + ???
 + AX = 1402h ???
 + BL = function
 +     00h NOP
 +     01h ???
 +     02h ???
 +     other ???
 + ES:DI -> ???
 + Return: CF clear
 + ???
 + Data structure
 + Offset Size Description
 + 00h WORD segment of ??? (X, word at X:0136h set to X)
 + 02h WORD segment of ??? (word at X:0124h set to this)
 + 04h WORD number of paragraphs of ???
 + 06h  3 WORDs ??? (copied to X:0000h)
 + 0Ch  WORD ???
 + AX = 1403h add ??? to list and ??? (execute func 1406h)
 + ES:DI -> ??? structure added to end of ??? list
 + (at least 31 bytes, DWORD at offset 06h used for
 + storing pointer to next struc, WORD at offset 00h
 + seems to be a key or index)
 + Return: CF clear
 + AX = 1404h NOP
 + AX = 1405h remove ??? from ??? list
 + BX = key???
 + Return: CF clear
 + AX = 1406h ???
 + ???
 + Return: CF clear
 + ???
 + AX = 1407h ???
 + ???
 + Return: CF clear
 + ???
 + AX = 1408h ???
 + ???
 + Return: CF clear
 + ???
 + AX = 1409h ???
 + ???
 + Return: CF clear
 + ???
 + AX = 140Ah ???
 + BX = ???
 + Return: CF clear
 + ???
 + AX = 140Bh ???
 + BX = ???
 + Return: CF clear
 + SI = segment of 256-byte buffer???
 + AH = 15h ???
 + ES:BX -> ??? or 0000h:0000h
 + Return: CF clear
 +     ---QEMM v5.00+ ---
 + AX = 1600h get memory access status
 + ES:DI -> 256-byte buffer
 + Return: ES:DI buffer filled
 + Note: each byte of the buffer indicates the status of a 4K
 +   page (bit 0 set if read, bit 1 set if written)
 + AX = 1601h set memory access status
 + ES:DI -> 256-byte buffer containing access statuses (see above)
 + AH = 17h get memory usage statistics
 + ES:DI -> 81-byte buffer for memory statistics (see below)
 + Return: CF clear
 +     ---QEMM v5.11+ ---
 + AH = 18h check whether conventional memory mapped into address range
 + ES:BX = starting address
 + CX = number of 4K pages
 + Return: CF clear
 + AL = 00h one or more pages is remapped
 +      01h all pages in range are conventional memory
 +       (physical address == virtual address)
 + AH = 19h NOP
 + Return: CF set
 + AH = 1Ah I/O port access
 + AL = subfunction
 +     00h get byte from I/O port
 + Return: BL = port value
 +     01h send byte to I/O port
 + BL = value to send
 +     02h send byte to I/O port, get byte from following port
 + BH = value to send
 + Return: BL = value read
 +     03h send bytes to two consecutive I/O ports
 + BH = value for first I/O port (DX)
 + BL = value for second I/O port (DX+1)
 + DX = port number
 + Return: CF clear
 + AH = 1Bh MS Windows 3 support
 + AL = subfunction
 +     00h get ???
 + ES:DI -> buffer for ??? data structure
 + Return: CF set on error
 + CF clear if successful
 + Data structure:
 + Offset Size Description
 + 00h DWORD pointer to ???
 + 04h BYTE ??? (v6.00 sets to 01h)
 + 05h BYTE ??? (v6.00 sets to 00h or 0Bh)
 + SeeAlso: INT 21/AX=4402h"QEMM"
 +     01h ???
 + Return: CF set on error
 + CF clear if successful
 +     02h ???
 + Return: CF set on error
 + CF clear if successful
 +     03h MS Windows initializing
 +     CX = segment from which Windows init broadcast made???
 + DL = Windows startup flags???
 + DI = Windows version number (major in upper byte)
 + Return: ???
 + SeeAlso: INT 2F/AX=1605h
 +     04h MS Windows terminating
 + Return: CF clear
 +     05h determine whether program is driver???
 + DS:DX -> ASCIZ filename
 + Return: CF clear
 + AL = 01h if string ends in ".DRV"
 +    = FFh if string ends in "GDI.EXE"
 +    = 00h otherwise
 +     06h ???
 + CX = length of data pointed at by DS:DX
 + DS:DX -> ???
 + Return: CF clear
 +     07h BUG: QEMM 6.00-6.03 accept this and branch randomly
 +     else Return: CF set
 + AH = 1Ch protected-mode hardware interrupt handlers ???
 + AL = subfunction
 +     00h restore??? IRQ0-7 handlers
 +     01h set??? IRQ0-7 handlers
 + ES:DI -> 8 DWORDs containing ???
 +     02h restore??? IRQ8-15 handlers
 +     03h set??? IRQ8-15 handlers
 + ES:DI -> 8 DWORDs containing ???
 + BUG: although the jump table only contains four entries,
 + QEMM 6.00 will attempt to use it for any value of
 + AL between 00h and 2Ah, thus branching unpredictably
 + for AL=04h-2Ah
 +     ---QEMM v6.00+ ---
 + AH = 1Dh Stealth interrupts
 + AL = subfunction
 +     00h switch to pre-Stealth interrupt vector table
 +     Note: also switches VGA Save table pointer
 +   (0040h:00A8h) and overwrites the vectors
 +   currently assigned for use by the two
 +   interrupt controllers (see INT 67/AX=DE0Ah)
 +   with the vectors for INT 08-0F and 70-77 (to
 +   avoid crashing the system).
 +     01h restore user interrupt vector table
 + Notes: interrupts should be disabled around the
 +   AX=1D00h and AX=1D01h calls because QEMM does
 +   not modify the memory maps to map in ROM, so
 +   an interrupt could be disastrous
 + clears any pending IRQ7 at end of function
 +     else
 + Return: CF set
 + AH = 1Eh Stealth information
 + AL = subfunction
 +     00h get Stealth configuration
 + Return: BL = flags
 +     bit 0: conventional memory sorted
 +     bit 1: conventional memory filled
 +     bit 2: ???
 +     bit 3: ???
 +     bit 4: expanded memory is in use
 +     bit 5: ???
 + BH = ??? (always 00h for v6.00)
 + CL = stealth type (00h none,46h Frame,4Dh Map)
 + CH = ??? (zero/nonzero important)
 + DX = ??? (always 0000h for v6.00)
 + SI = ??? (always 0000h for v6.00)
 + DI = ??? (always 0000h for v6.00)
 +     01h get number of Stealth'ed ROMs
 + Return: CF clear
 + BX = number of Stealth'ed ROMs
 +     02h get Stealth'ed ROM info
 +     ES:DI -> buffer for Stealth ROM info (see below)
 + Return: CF clear
 + BX = number of Stealth'ed ROMs
 + ES:DI buffer filled
 +     else
 + Return: CF set
 + AH = 1Fh page table manipulation
 + AL = subfunction
 +     00h get page table entry
 + CX = page number
 + Return: EDX = page table entry
 + CF clear
 +     01h set page table entry
 + CX = page number
 + EDX = page table entry
 + Return: CF clear
 + SeeAlso: function 1008h
 +     else
 + Return: CF set
 + AH = 20h asynchronous disk access support???
 + AL = subfunction
 +     00h get ???
 + Return: CF clear
 + BL = flags
 +     bit 7: ??? (set if Stealth:F or :M active)
 +     bit 0: ???
 +     01h set ???
 + BL = ??? (bit 0 only)
 + Return: CF clear
 +     else
 + Return: CF set
 + AH = 21h Stealth support
 + AL = subfunction
 +     00h copy data from Stealthed address space
 + DS:SI -> start address of hidden memory to copy
 + ES:DI -> buffer for copied data
 + ECX = number of bytes to copy
 + Return: CF clear if successful
 + CF set on error (DS:SI < C000h:0000h or
 + DS:SI + ECX > 1M)
 +     else
 + Return: CF set
 + ---QEMM v6.03 only---
 + AH = 22h DESQview/X support???
 + AL = subfunction
 +     00h get ???
 +     Return: CF clear
 + ES:DI -> ???
 +     01h set ???
 +     ES:DI -> ??? or 0000h:0000h
 + Return: ???
 + other
 + Return: CF set
 +
 +Format of QEMM 6.0 memory statistics:
 +Offset Size Description
 + 00h BYTE 01h if Shadow RAM found, 00h otherwise
 + 01h DWORD initial conventional memory in bytes
 + 05h DWORD initial extended memory in bytes
 + 09h DWORD initial expanded memory in bytes
 + 0Dh DWORD initial "top" or "shadow" memory in bytes
 + 11h DWORD Unavailable conventional memory in bytes
 + 15h DWORD Unavailable extended memory in bytes
 + 19h DWORD Unavailable expanded memory in bytes
 + 1Dh DWORD Unavailable "top" or "shadow" memory in bytes
 + Add to offset 49h for Total unavailable top/shadow.
 + 21h DWORD QEMM code size in bytes
 + 25h DWORD QEMM data size in bytes
 + 29h DWORD bytes used for TASKS=
 + 2Dh DWORD DMA buffer size
 + 31h DWORD bytes used for MAPS=
 + 35h DWORD bytes of high RAM
 + 39h DWORD bytes used by mapped ROMs
 + 3Dh DWORD bytes of conventional memory provided by QEMM
 + 41h DWORD bytes of extended memory NOT converted by QEMM (EXT=xxx)
 + 45h DWORD bytes of EMS/XMS pool memory provided by QEMM
 + 49h DWORD Unavailable "top" or "shadow" memory in bytes
 + Add to offset 1Dh for Total unavailable top/shadow.
 + 4Dh DWORD conventional memory overhead in bytes
 +  (set to 0 by QEMM.COM prior to call)
 +
 +Format of Stealth ROM info [array]:
 +Offset Size Description
 + 00h WORD starting segment of ROM
 + 02h WORD length of ROM in paragraphs
 +----------6740-------------------------------
 +INT 67 - LIM EMS - GET MANAGER STATUS
 + AH = 40h
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested by application
 +Note: this call can be used only after establishing that the EMS driver is in
 +   fact present
 +SeeAlso: AH=3Fh,AX=FFA5h
 +----------6741-------------------------------
 +INT 67 - LIM EMS - GET PAGE FRAME SEGMENT
 + AH = 41h
 +Return: AH = 00h function successful
 +     BX = segment of page frame
 + AH = error code (see AH=40h)
 +SeeAlso: AH=58h,AH=68h
 +----------6742-------------------------------
 +INT 67 - LIM EMS - GET NUMBER OF PAGES
 + AH = 42h
 +Return: AH = 00h function successful
 +     BX = number of unallocated pages
 +     DX = total number of pages
 + AH = error code (see AH=40h)
 +SeeAlso: INT 2F/AX=2702h
 +----------6743-------------------------------
 +INT 67 - LIM EMS - GET HANDLE AND ALLOCATE MEMORY
 + AH = 43h
 + BX = number of logical pages to allocate
 +Return: AH = status
 +     00h function successful
 + DX = handle
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +     85h no more handles available
 +     87h more pages requested than physically exist
 +     88h more pages requested than currently available
 +     89h zero pages requested
 +SeeAlso: AH=45h
 +----------6744-------------------------------
 +INT 67 - LIM EMS - MAP MEMORY
 + AH = 44h
 + AL = physical page number (0-3)
 + BX = logical page number
 + DX = handle
 +Return: AH = status
 +     00h function successful
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +     8Ah invalid logical page number
 +     8Bh illegal physical-page number
 +SeeAlso: AH=69h
 +----------6745-------------------------------
 +INT 67 - LIM EMS - RELEASE HANDLE AND MEMORY
 + AH = 45h
 + DX = EMM handle
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +     86h error in save or restore of mapping context
 +SeeAlso: AH=43h
 +----------6746-------------------------------
 +INT 67 - LIM EMS - GET EMM VERSION
 + AH = 46h
 +Return: AH = status
 +     00h successful
 + AL = EMM version number
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +----------6747-------------------------------
 +INT 67 - LIM EMS - SAVE MAPPING CONTEXT
 + AH = 47h
 + DX = handle
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +     8Ch page-mapping hardware state save area is full
 +     8Dh save of mapping context failed
 +SeeAlso: AH=48h
 +----------6748-------------------------------
 +INT 67 - LIM EMS - RESTORE MAPPING CONTEXT
 + AH = 48h
 + DX = handle
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +     8Eh restore of mapping context failed
 +SeeAlso: AH=47h
 +----------6749-------------------------------
 +INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES
 + AH = 49h
 +Note: defined in EMS 3.0, but undocumented in EMS 3.2
 +----------674A-------------------------------
 +INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY
 + AH = 4Ah
 +Note: defined in EMS 3.0, but undocumented in EMS 3.2
 +----------674B-------------------------------
 +INT 67 - LIM EMS - GET NUMBER OF EMM HANDLES
 + AH = 4Bh
 +Return: AH = status
 +     00h successful
 + BX = number of EMM handles
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +----------674C-------------------------------
 +INT 67 - LIM EMS - GET PAGES OWNED BY HANDLE
 + AH = 4Ch
 + DX = EMM handle
 +Return: AH = status
 +     00h successful
 + BX = number of logical pages
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +SeeAlso: AH=4Dh
 +----------674D-------------------------------
 +INT 67 - LIM EMS - GET PAGES FOR ALL HANDLES
 + AH = 4Dh
 + ES:DI -> array to receive information
 +Return: AH = status
 +     00h successful
 + BX = number of active EMM handles
 + array filled with 2-word entries, consisting of a handle
 +   and the number of pages allocated to that handle
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +SeeAlso: AH=4Ch
 +----------674E-------------------------------
 +INT 67 - LIM EMS - GET OR SET PAGE MAP
 + AH = 4Eh
 + AL = 00h if getting mapping registers
 +      01h if setting mapping registers
 +      02h if getting and setting mapping registers at once
 +      03h if getting size of page-mapping array
 + DS:SI -> array holding information (AL=01/02)
 + ES:DI -> array to receive information (AL=00/02)
 +Return: AH = status
 +     00h successful
 + AL = bytes in page-mapping array (AL=03h only)
 + array pointed to by ES:DI receives mapping info (AL=00h/02h)
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +     8Fh undefined subfunction parameter
 +     A3h contents of source array corrupted (EMS 4.0?)
 +Note: this function was designed to be used by multitasking operating systems
 +   and should not ordinarily be used by appplication software.
 +SeeAlso: AH=4Fh
 +----------674F-------------------------------
 +INT 67 - LIM EMS 4.0 - GET/SET PARTIAL PAGE MAP
 + AH = 4Fh
 + AL = subfunction
 +     00h get partial page map
 +        DS:SI -> structure containing list of segments whose mapping
 + contexts are to be saved
 +        ES:DI -> array to receive page map
 +     01h set partial page map
 +        DS:SI -> structure containing saved partial page map
 +     02h get size of partial page map
 +        BX = number of mappable segments in the partial map to be saved
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +     8Bh one of specified segments is not mappable
 +     8Fh undefined subfunction parameter
 +     A3h contents of partial page map corrupted or count of mappable
 + segments exceeds total number of mappable segments in system
 + AL = size of partial page map for subfunction 02h
 +SeeAlso: AH=4Eh
 +----------6750-------------------------------
 +INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES
 + AH = 50h
 + AL = subfunction
 +     00h use physical page numbers
 +     01h use segment addresses
 + DX = handle
 + CX = number of entries in array
 + DS:SI -> mapping array (see below)
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +     8Ah one or more logical pages are invalid
 +     8Bh one or more physical pages are invalid
 +     8Fh invalid subfunction
 +SeeAlso: AH=40h
 +
 +Format of mapping array entry:
 +Offset Size Description
 + 00h WORD logical page number or FFFFh to unmap physical page
 + 02h WORD physical page number or segment address
 +----------6751-------------------------------
 +INT 67 - LIM EMS 4.0 - REALLOCATE PAGES
 + AH = 51h
 + DX = handle
 + BX = number of pages to be allocated to handle
 +Return: BX = actual number of pages allocated to handle
 + AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +     87h more pages requested than present in system
 +     88h more pages requested than currently available
 +----------6752-------------------------------
 +INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES
 + AH = 52h
 + AL = subfunction
 +     00h get handle attributes
 + Return: AL = attribute
 +     00h handle is volatile
 +     01h handle is nonvolatile
 +     01h set handle attributes
 + BL = new attribute (see returned AL)
 +     02h get attribute capability
 + Return: AL = attribute capability
 +     00h only volatile handles supported
 +     01h both volatile and non-volatile supported
 + DX = handle
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +     8Fh undefined subfunction
 +     90h undefined attribute type
 +     91h feature not supported
 +SeeAlso: AH=53h
 +----------6753-------------------------------
 +INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME
 + AH = 53h
 + AL = subfunction
 +     00h get handle name
 +        ES:DI -> 8-byte buffer for handle name
 +     01h set handle name
 +        DS:SI -> 8-byte handle name
 + DX = handle
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     83h invalid handle
 +     84h undefined function requested
 +     8Fh undefined subfunction
 +     A1h duplicate handle name
 +SeeAlso: AH=52h
 +----------6754-------------------------------
 +INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY
 + AH = 54h
 + AL = subfunction
 +     00h get handle directory
 +        ES:DI -> buffer for handle directory (see below)
 +     01h search for named handle
 +        DS:SI -> 8-byte name
 +     02h get total number of handles
 +Return: AL = number of entries in handle directory (subfunction 00h)
 + DX = value of named handle (subfunction 01h)
 + BX = total number of handles (subfunction 02h)
 + AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +     8Fh undefined subfunction
 +     A0h no such handle name
 +     A1h a handle found had no name
 +
 +Format of handle directory entry:
 +Offset Size Description
 + 00h WORD handle
 + 02h  8 BYTEs handle's name
 +----------6755-------------------------------
 +INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND JUMP
 + AH = 55h
 + AL = subfunction
 +     00h physical page numbers provided by caller
 +     01h segment addresses provided by caller
 + DX = handle
 + DS:SI -> structure containing map and jump address
 +Return: (at target address unless error)
 + AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware failure
 +     83h invalid handle
 +     84h undefined function requested
 +     8Ah invalid logical page number encountered
 +     8Bh invalid physical page number encountered
 +     8Fh invalid subfunction
 +SeeAlso: AH=56h
 +----------6756-------------------------------
 +INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND CALL
 + AH = 56h
 + AL = subfunction
 +     00h physical page numbers provided by caller
 + DX = handle
 + DS:SI -> structure containing page map and call address
 +     01h segment addresses provided by caller
 + DX = handle
 + DS:SI -> structure containing page map and call address
 +     02h get page map stack space required
 + Return: BX = stack space required
 +Return: (if successful, the target address is called.  Use a RETF to return and
 + restore mapping context)
 + AH = status (see AH=55h)
 +SeeAlso: AH=55h
 +----------6757-------------------------------
 +INT 67 - LIM EMS 4.0 - MOVE/EXCHANGE MEMORY REGION
 + AH = 57h
 + AL = subfunction
 +     00h move memory region
 +     01h exchange memory region
 + DS:SI -> structure describing source and destination (see below)
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware failure
 +     83h invalid handle
 +     84h undefined function requested
 +     8Ah invalid logical page number encountered
 +     8Fh undefined subfunction
 +     92h successful, but a portion of the source region has been
 + overwritten
 +     93h length of source or destination region exceeds length of region
 + allocated to either source or destination handle
 +     94h conventional and expanded memory regions overlap
 +     95h offset within logical page exceeds size of logical page
 +     96h region length exceeds 1M
 +     97h source and destination EMS regions have same handle and overlap
 +     98h memory source or destination type undefined
 +     A2h attempted to wrap around 1M conventional address space
 +Note: source and destination may overlap for a move, in which case the copy
 +   direction is chosen such that the destination receives an intact copy
 +   of the source region
 +
 +Format of EMS copy data:
 +Offset Size Description
 + 00h DWORD region length in bytes
 + 04h BYTE source memory type
 + 00h conventional
 + 01h expanded
 + 05h WORD source handle (0000h if conventional memory)
 + 07h WORD source initial offset (within page if EMS, segment if convent)
 + 09h WORD source initial segment (conv mem) or logical page (EMS)
 + 0Bh BYTE destination memory type
 + 00h conventional
 + 01h expanded
 + 0Ch WORD destination handle
 + 0Eh WORD destination initial offset
 + 10h WORD destination initial segment or page
 +----------6758-------------------------------
 +INT 67 - LIM EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY
 + AH = 58h
 + AL = subfunction
 +     00h get mappable physical address array
 + ES:DI -> buffer to be filled with array
 +     01h get number of entries in m.p.a. array
 +Return: CX = number of entries in array
 + AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware failure
 +     84h undefined function requested
 +     8Fh undefined subfunction
 +Note: the returned array for subfunction 00h is filled in physical segment
 +   address order
 +
 +Format of mappable physical address entry:
 +Offset Size Description
 + 00h WORD physical page segment
 + 02h WORD physical page number
 +----------6759-------------------------------
 +INT 67 - LIM EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION
 + AH = 59h
 + AL = subfunction
 +     00h get hardware configuration array
 + ES:DI -> buffer to be filled with array (see below)
 +     01h get unallocated raw page count
 + Return: BX = unallocated raw pages
 + DX = total raw pages
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware failure
 +     84h undefined function requested
 +     8Fh undefined subfunction
 +     A4h access denied by operating system
 +Note: subfunction 00h is for use by operating systems only, and can be
 +   enabled or disabled at any time by the operating system
 +
 +Format of hardware configuration array:
 +Offset Size Description
 + 00h WORD size of raw EMM pages in paragraphs
 + 02h WORD number of alternate register sets
 + 04h WORD size of mapping-context save area in bytes
 + 06h WORD number of register sets assignable to DMA
 + 08h WORD DMA operation type
 + 0000h DMA with alternate register sets
 + 0001h only one DMA register set
 +----------675A-------------------------------
 +INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES
 + AH = 5Ah
 + AL = subfunction
 +     00h allocate standard pages
 +     01h allocate raw pages
 + BX = number of pages to allocate
 +Return: DX = handle
 + AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware failure
 +     84h undefined function requested
 +     85h no more handles available
 +     87h insufficient memory pages in system
 +     88h insufficient memory pages available
 +     8Fh undefined subfunction
 +----------675B-------------------------------
 +INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET
 + AH = 5Bh
 + AL = subfunction
 +     00h get alternate map register set
 + Return: BL = current active alternate map register set number
 + ES:DI -> map register context save area if BL=00h
 +     01h set alternate map register set
 + BL = new alternate map register set number
 + ES:DI -> map register context save area if BL=0
 +     02h get alternate map save array size
 + Return: DX = array size in bytes
 +     03h allocate alternate map register set
 + Return: BL = number of map register set; 00h = not supported
 +     04h deallocate alternate map register set
 + BL = number of alternate map register set
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +     8Fh undefined subfunction
 +     9Ah specified alternate map register set not supported
 +     9Bh all alternate map register sets currently allocated
 +     9Ch alternate map register sets not supported
 +     9Dh undefined or unallocated alternate map register set
 +     A3h source array corrupted
 +     A4h operating system denied access
 +Note: this function is for use by operating systems only, and can be
 +   enabled or disabled at any time by the operating system
 +----------675B-------------------------------
 +INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET - DMA REGISTERS
 + AH = 5Bh
 + AL = subfunction
 +     05h allocate DMA register set
 + Return: BL = DMA register set number, 00h if not supported
 +     06h enable DMA on alternate map register set
 +        BL = DMA register set number
 +        DL = DMA channel number
 +     07h disable DMA on alternate map register set
 +        BL = DMA register set number
 +     08h deallocate DMA register set
 +        BL = DMA register set number
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +     8Fh undefined subfunction
 +     9Ah specified DMA register set not supported
 +     9Bh all DMA register sets currently allocated
 +     9Ch alternate DMA sets not supported
 +     9Dh undefined or unallocated DMA register set
 +     9Eh dedicated DMA channels not supported
 +     9Fh specified dedicated DMA channel not supported
 +     A3h source array corrupted
 +     A4h operating system denied access
 +Note: this function is for use by operating systems only, and can be
 +   enabled or disabled at any time by the operating system
 +----------675BE0-----------------------------
 +INT 67 - MICEMM v4D - GET LINEAR ADDRESS OF MEMORY
 + AX = 5BE0h
 + ES:BX -> memory for which to get linear address
 +Return: AH = 00h
 + DX:CX = linear address of physical memory corresponding to ES:BX
 +SeeAlso: AX=5BF0h,AX=5BF1h
 +----------675BF0-----------------------------
 +INT 67 - MICEMM v4D - INSTALLATION CHECK
 + AX = 5BF0h
 +Return: AH = 00h if MICEMM present
 +     BX = code segment of driver
 +Note: MICEMM is the Micronics Expanded Memory Manager
 +SeeAlso: AH=3Fh,AX=5BE0h,AX=5BF1h
 +----------675BF1-----------------------------
 +INT 67 - MICEMM v4D - GET MEMORY TYPES
 + AX = 5BF1h
 + ES:BX -> 256-byte buffer for memory types
 +Return: AH = 00h
 + ES:BX buffer filled
 +Note: each byte in the buffer specifies the type of a 4K page of memory:
 +     00h unused
 +     02h DOS extension
 +     04h shadowed ROM
 +     08h mappable EMS
 +     10h page frame
 +     20h ROM
 +     40h reserved (video memory, etc)
 +     80h RAM
 +SeeAlso: AX=5BE0h,AX=5BF0h
 +----------675C-------------------------------
 +INT 67 - LIM EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT
 + AH = 5Ch
 +Return: AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +----------675D-------------------------------
 +INT 67 - LIM EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS
 + AH = 5Dh
 + AL = subfunction
 +     00h enable OS Function Set
 +     01h disable OS Function Set
 +     02h return access key (resets memory manager, returns access key at
 + next invocation)
 + BX,CX = access key returned by first invocation
 +Return: BX,CX = access key, returned only on first invocation of function
 + AH = status
 +     00h successful
 +     80h internal error
 +     81h hardware malfunction
 +     84h undefined function requested
 +     8Fh undefined subfunction
 +     A4h operating system denied access
 +----------6760-------------------------------
 +INT 67 - EEMS - GET PHYSICAL WINDOW ARRAY
 + AH = 60h
 + ES:DI -> buffer
 +Return: AH = status
 + AL = number of entries
 + buffer at ES:DI filled
 +----------6761-------------------------------
 +INT 67 - EEMS - GENERIC ACCELERATOR CARD SUPPORT
 + AH = 61h
 + ???
 +Return: ???
 +Note: can be used by accelerator card manufacturer to flush RAM cache,
 +   ensuring that the cache accurately reflects what the processor would
 +   see without the cache.
 +----------6768-------------------------------
 +INT 67 - EEMS - GET ADDRESSES OF ALL PAGE FRAMES IN SYSTEM
 + AH = 68h
 + ES:DI -> buffer
 +Return: AH = status
 + AL = number of entries
 + buffer at ES:DI filled
 +Note: equivalent to LIM 4.0 function 58h
 +----------6769-------------------------------
 +INT 67 - EEMS - MAP PAGE INTO FRAME
 + AH = 69h
 + AL = frame number
 + BX = page number
 + DX = handle
 +Return: AH = status
 +Note: similar to EMS function 44h
 +SeeAlso: AH=44h,AH=50h,AH=6Ah
 +----------676A-------------------------------
 +INT 67 - EEMS - PAGE MAPPING
 + AH = 6Ah
 + AL = subfunction
 +     00h save partial page map
 + CH = first page frame
 + CL = number of frames
 + ES:DI -> buffer which is to be filled
 +     01h restore partial page map
 + CH = first page frame
 + CL = number of frames
 + DI:SI -> previously saved page map
 +     02h save and restore partial page map
 + CH = first page frame
 + CL = number of frames
 + ES:DI = buffer for current page map
 + DI:SI = new page map
 +     03h get size of save array
 + CH = first page frame
 + CL = number of frames
 + Return: AL = size of array in bytes
 +     04h switch to standard map register setting
 +     05h switch to alternate map register setting
 +     06h deallocate pages mapped to frames in conventional memory
 + CH = first page frame
 + CL = number of frames
 +Return: AH = status
 +Note: similar to EMS function 4Eh, except that a subrange of pages can be
 +   specified
 +SeeAlso: AH=69h
 +----------67DD-------------------------------
 +INT 67 - Quadtel QMAPS - API
 + AH = DDh
 + AL = function
 + ???
 +Return: ???
 +Notes: details are not yet available
 + Hewlett-Packard's HPMM.SYS is a licensed version of QMAPS, and thus
 +   supports this API
 +SeeAlso: AH=3Fh,AX=FFA5h
 +----------67DE00-----------------------------
 +INT 67 - Virtual Control Program Interface - INSTALLATION CHECK
 + AX = DE00h
 +Return: AH = 00h    VCPI is present
 +     BH = major version number
 +     BL = minor version number
 + AH nonzero  VCPI not present
 +----------67DE01-----------------------------
 +INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
 + AX = DE01h
 + ES:DI -> 4K page table buffer
 + DS:SI -> three descriptor table entries in GDT
 + first becomes code segment descriptor, other two for use by
 + main control program
 +Return: AH = 00h successful
 +     DI -> first unused page table entry in buffer
 +     EBX -> protected mode entry point in code segment
 + AH = nonzero  failed
 +Note: protected mode entry point may be called with AX=DE00h-DE05h and
 +   AX=DE0Ch (in each case, all other registers as appropriate for
 +   the function)
 +SeeAlso: INT 67/AH=3Fh
 +
 +QEMM v6.03 protected mode entry point may also be called with:
 + AX = DF00h ???
 + ???
 + Return: ???
 + AX = DF01h ???
 + ???
 + Return: ???
 +
 +----------67DE02-----------------------------
 +INT 67 - Virtual Control Program Interface - GET MAX PHYSICAL MEMORY ADDRESS
 + AX = DE02h
 +Return: AH = 00h  successful
 +     EDX = physical address of highest 4K memory page
 + AH nonzero: failed
 +SeeAlso: AH=3Fh
 +----------67DE03-----------------------------
 +INT 67 - Virtual Control Program Interface - GET NUMBER OF FREE 4K PAGES
 + AX = DE03h
 +Return: AH = 00h  successful
 +     EDX = number of free 4K pages
 + AH nonzero: failed
 +Notes: returns total number of pages available to ALL tasks in system
 + also available in protected mode by calling the protected-mode VCPI
 +   entry point
 +SeeAlso: AX=DE04h
 +----------67DE04-----------------------------
 +INT 67 - Virtual Control Program Interface - ALLOCATE A 4K PAGE
 + AX = DE04h
 +Return: AH = 00h successful
 +     EDX = physical address of allocated page
 + AH nonzero: failed
 +Notes: the client program is responsible for freeing all memory allocated
 +   with this call before terminating
 + also available in protected mode by calling the protected-mode VCPI
 +   entry point
 +SeeAlso: AH=3Fh,AX=DE03h,AX=DE05h
 +----------67DE05-----------------------------
 +INT 67 - Virtual Control Program Interface - FREE 4K PAGE
 + AX = DE05h
 + EDX = physical address of 4K page
 +Return: AH = 00h successful
 + AH nonzero: failed
 +Note: also available in protected mode by calling the protected-mode VCPI
 +   entry point
 +SeeAlso: AH=3Fh,AX=DE04h
 +----------67DE06-----------------------------
 +INT 67 - Virtual Control Program Interface - GET PHYS ADDR OF PAGE IN FIRST MB
 + AX = DE06h
 + CX = page number (linear address shifted right 12 bits)
 +Return: AH = 00h successful
 +     EDX = physical address of page
 + AH nonzero: invalid page number (AH = 8Bh recommended)
 +----------67DE07-----------------------------
 +INT 67 - Virtual Control Program Interface - READ CR0
 + AX = DE07h
 +Return: AH = 00h
 + EBX = value of Control Register 0
 +SeeAlso: AH=3Fh,AX=DE07h
 +----------67DE08-----------------------------
 +INT 67 - Virtual Control Program Interface - READ DEBUG REGISTERS
 + AX = DE08h
 + ES:DI -> array of 8 DWORDs
 +Return: AH = 00h
 + buffer filled with DR0 first, DR7 last, DR4 and DR5 unused
 +SeeAlso: AH=3Fh,AX=DE09h
 +----------67DE09-----------------------------
 +INT 67 - Virtual Control Program Interface - SET DEBUG REGISTERS
 + AX = DE09h
 + ES:DI -> array of 8 DWORDs holding new values of debug registers
 +Return: AH = 00h
 +Note: values for DR4 and DR5 ignored
 +SeeAlso: AH=3Fh,AX=DE08h
 +----------67DE0A-----------------------------
 +INT 67 - Virtual Control Program Interface - GET 8259 INTERRUPT VECTOR MAPPINGS
 + AX = DE0Ah
 +Return: AH = 00h successful
 +     BX = first vector used by master 8259 (IRQ0)
 +     CX = first vector used by slave 8259 (IRQ8)
 + AH nonzero: failed
 +Note: CX is undefined in systems without a slave 8259
 +SeeAlso: AX=DE0Bh
 +----------67DE0B-----------------------------
 +INT 67 - Virtual Control Program Interface - SET 8259 INTERRUPT VECTOR MAPPINGS
 + AX = DE0Bh
 + BX = first vector used by master 8259
 + CX = first vector used by slave 8259
 + interrupts disabled
 +Return: AH = 00h successful
 + AH nonzero: failed 
 +Notes: This call merely informs the server that the client has changed the
 +   interrupt mappings.  The client may not change the mappings if they
 +   have already been changed by the server or another client, and is
 +   responsible for restoring the original mappings before terminating.
 +SeeAlso: AX=DE0Ah
 +----------67DE0C-----------------------------
 +INT 67 - Virtual Control Program Interface - SWITCH TO PROTECTED MODE
 + AX = DE0Ch
 + ESI = linear address in first megabyte of values for system registers
 + interrupts disabled
 +Return: interrupts disabled
 + GDTR, IDTR, LDTR, TR loaded
 + SS:ESP must have at least 16 bytes space, and the entry point is
 + required to set up a new stack before enabling interrupts
 + EAX, ESI, DS, ES, FS, GS destroyed
 +SeeAlso: AH=3Fh,INT 15/AH=89h
 +
 +Note: in protected mode, calling the protected-mode VCPI entry point with 
 +   AX = DE0Ch
 +   DS = segment selector from function DE01h
 +   SS:ESP in first megabyte of linear memory
 +   STACK:QWORD  return address from FAR call to 32-bit segment
 + DWORD  EIP
 + DWORD  CS
 + DWORD  reserved for EFLAGS
 + DWORD  ESP
 + DWORD  SS
 + DWORD  ES
 + DWORD  DS
 + DWORD  FS
 + DWORD  GS
 +   and interrupts disabled, will switch to virtual86 mode with
 +   interrupts disabled, all segment registers loaded, and EAX destroyed.
 +
 +Format of system register values for switch to protected mode:
 +Offset Size Description
 + 00h DWORD value for CR3
 + 04h DWORD linear address in first megabyte of value for GDTR
 + 08h DWORD linear address in first megabyte of value for IDTR
 + 0Ch WORD value for LDTR
 + 0Eh WORD value for TR
 + 10h PWORD CS:EIP of protected mode entry-point
 +----------67FFA5-----------------------------
 +INT 67 - Microsoft EMM386.EXE v4.20+ - INSTALLATION CHECK
 + AX = FFA5h
 +Return: AX = 845Ah if loaded
 +     BX:CX -> API entry point
 +Notes: this call is available even if EMM386 is not providing EMS
 + if no other program has hooked INT 67, an alternate installation
 +   check is to search for the string
 +   "MICROSOFT EXPANDED MEMORY MANAGER 386" early in the INT 67
 +   handler's segment, usually at offset 14h
 +SeeAlso: AH=3Fh
 +
 +Call API entry point with:
 + AH = 00h get memory manager's status
 +     Return: AH = status
 +     bit 0: not active (OFF)
 + bit 1: in "Auto" mode
 + AH = 01h set memory manager's state
 +     AL = new state (00h ON, 01h OFF, 02h AUTO)
 + AH = 02h Weitek coprocessor support
 +     AL = subfunction
 + 00h get Weitek support state
 +     Return: AL = status
 +     bit 0: Weitek coprocessor is present
 + bit 1: Weitek support is enabled
 + 01h turn on Weitek support
 + 02h turn off Weitek support
 +     --- v4.20-4.41 only ---
 + AH = 03h Windows support???
 +     AL = subfunction (00h, 01h)
 + AH = 04h print copyright notice to standard output
 + (using INT 21/AH=09h)
 + AH = 05h print available report
 + (the one shown when running EMM386 from the DOS prompt)
 +---------------------------------------------
 +Interrupt List, part 7 of 7
 +This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
 +----------68---------------------------------
 +INT 68 - Sangoma CCPOP 3270 resident module
 +SeeAlso: INT 67"Sangoma",INT 92"Sangoma"
 +----------6801-------------------------------
 +INT 68 - APPC/PC - NETWORK DEVICE CONTROL
 + AH = 01h
 + DS:DX -> control block
 +
 +Format of control block:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD verb (action)
 + 0Eh  6 BYTEs 00h
 + 14h DWORD (high byte first) return code (see below)
 +---if verb = 1B00h (DISPLAY)---
 + 18h WORD 00h
 + 1Ah  8 BYTEs (high byte first) logical unit ID
 + 22h  8 BYTEs (high byte first) partner logical unit name
 + 2Ah  8 BYTEs (high byte first) mode name
 + 32h BYTE logical unit session limit
 + 33h BYTE partner logical unit session limit
 + 34h BYTE node maximum negotiable session limit
 + 35h BYTE current session limit
 + 36h BYTE minimum negotiated winner limit
 + 37h BYTE maximum negotiated loser limit
 + 38h BYTE active session count
 + 39h BYTE active CONWINNER session count
 + 3Ah BYTE active CONLOSER session count
 + 3Bh BYTE session termination count
 + 3Ch BYTE bit 7: SESSION_TERMINATION_TARGET_DRAIN
 + bit 6: SESSION_TERMINATION_SOURCE_DRAIN
 +---if verb=2000h (Attach Physical Unit)---
 + 18h WORD 00h
 + 1Ah BYTE version
 + 1Bh BYTE release
 + 1Ch  8 BYTEs (high byte first) net name
 + 24h  8 BYTEs (high byte first) physical unit name
 + 2Ch  8 BYTEs 00h
 + 34h DWORD pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors
 + 38h DWORD 00h
 + 3Ch BYTE 00h RETURN_CONTROL: COMPLETE
 + 01h RETURN_CONTROL: INCOMPLETE
 +---if verb=2100h (Attach Logical Unit)---
 + 18h WORD 70  offset to partner logical unit record
 + 1Ah  8 BYTEs (high byte first) logical unit name
 + 22h  8 BYTEs (high byte first) logical unit ID
 + 2Ah BYTE logical unit local address
 + 2Bh BYTE logical unit session limit
 + 2Ch DWORD pointer to CREATE_TP_EXIT routine,
 + FFFFFFFFh = reject incoming ALLOCATEs
 + 00000000h = queue ALLOCATEs
 + 30h DWORD 00h
 + 34h DWORD pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors
 + 38h DWORD 00h
 + 3Ch BYTE maximum TPs
 + 3Dh BYTE queue depth
 + 3Eh DWORD pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh=no pswd exit
 + 42h DWORD 00h
 + 46h WORD total length of partner records
 +    for each partner logical unit:
 + WORD length of this partner logical unit record
 + WORD 42  offset to mode records
 +      8 BYTEs (high byte first) partner logical unit name
 + BYTE partner logical unit security capabilities
 + bit 7: already verified
 + bit 6: conversation level security
 + bit 5: session level security
 + BYTE partner logical unit session limit
 + WORD partner logical unit maximum MC_SEND_LL
 +      8 BYTEs (high byte first) partner logical unit DLC name
 + BYTE partner logical unit adapter number
 +     17 BYTEs (counted string) partner logical unit adapter address
 + WORD total length of mode records
 +   for each mode:
 + WORD 16  length of this mode record
 +      8 BYTEs (high byte first) mode name
 + WORD RU_SIZE high bound
 + WORD RU_SIZE low bound
 + BYTE mode maximum negotiable session limit
 + BYTE pacing size for receive
 +---if verb=2200h (Detach Logical Unit)---
 + 18h  8 BYTEs (high byte first) logical unit ID
 + 20h BYTE 00h
 +---if verb=2700h (Detach Physical Unit)---
 + 18h BYTE 00h  type: hard
 + 01h  type: soft
 +---if verb=2B00h (Activate DLC)---
 + 18h  8 BYTEs (high byte first) DLC name
 + 20h BYTE adapter number
 +
 +Values for return code:
 + 0000h successful
 + 0001h BAD_TP_ID
 + 0002h BAD_CONV_ID
 + 0003h bad logical unit ID
 + 0008h no physical unit attached
 + 0110h bad state
 + 01B1h BAD_PART_LUNAME
 + 01B2h bad mode name
 + 0201h physical unit already active
 + 0211h logical unit already active
 + 0212h BAD_PART_SESS
 + 0213h BAD_RU_SIZES
 + 0214h BAD_MODE_SESS
 + 0216h BAD_PACING_CNT
 + 0219h EXTREME_RUS
 + 021Ah SNASVCMG_1
 + 0223h SSCP_CONNECTED_LU
 + 0230h invalid change
 + 0243h too many TPs
 + 0272h adapter close failure
 + 0281h GET_ALLOC_BAD_TYPE
 + 0282h unsuccessful
 + 0283h DLC failure
 + 0284h unrecognized DLC
 + 0286h duplicate DLC
 + 0301h SSCP_PU_SESSION_NOT_ACTIVE
 + 0302h data exceeds RU size
 + 0401h invalid direction
 + 0402h invalid type
 + 0403h segment overlap
 + 0404h invalid first character
 + 0405h table error
 + 0406h conversion error
 +     F0010000h APPC disabled
 +     F0020000h APPC busy
 +     F0030000h APPC abended
 +     F0040000h incomplete
 +
 +Routines defined by LU_LU_PASSWORD_EXIT, CREATE_TP_EXIT, and SYSTEM_LOG_EXIT
 +pointers are called by pushing the DWORD pointer to the verb on the stack and
 +then performing a FAR call.
 +
 +Format of ACCESS_LU_LU_PW verb:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD 1900h
 + 0Eh  8 BYTEs (high byte first) logical unit ID
 + 16h  8 BYTEs (high byte first) logical unit name
 + 1Eh  8 BYTEs (high byte first) partner logical unit name
 + 26h 17 BYTEs (counted string) partner fully qualified logical unit name
 + 37h BYTE password available (0=no, 1=yes)
 + 38h  8 BYTEs password
 +
 +Format of CREATE_TP verb:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD 2300h
 + 0Eh  6 BYTEs 00h
 + 14h DWORD (high byte first) sense code
 + 00000000h Ok
 + 080F6051h SECURITY_NOT_VALID
 + 084B6031h TP_NOT_AVAIL_RETRY
 + 084C0000h TP_NOT_AVAIL_NO_RETRY
 + 10086021h TP_NAME_NOT_RECOGNIZED
 + 10086034h CONVERSATION_TYPE_MISMATCH
 + 10086041h SYNC_LEVEL_NOT_SUPPORTED
 + 18h  8 BYTEs (high byte first) TP ID
 + 20h  8 BYTEs (high byte first) logical unit ID
 + 28h DWORD (high byte first) conversation ID
 + 2Ch BYTE 0 basic conversation, 1 mapped conversation
 + 2Dh BYTE 0 no sync level, 1 confirm
 + 2Eh BYTE reserved
 + 2Fh 65 BYTEs (counted string) transaction program name
 + 70h  6 BYTEs 00h
 + 76h WORD length of ERROR_LOG_DATA to return
 + 78h DWORD pointer to ERROR_LOG_DATA buffer
 + 7Ch  8 BYTEs (high byte first) partner logical unit name
 + 84h 18 BYTEs (counted string) partner fully qualified logical unit name
 + 96h  8 BYTEs (high byte first) mode name
 + 9Eh 12 BYTEs 00h
 + AAh 11 BYTEs (counted string) password
 + B5h 11 BYTEs (counted string) user ID
 + C0h BYTE 0 verification should be performed
 + 1 already verified
 +
 +Format of SYSLOG verb:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD 2600h
 + 0Eh 10 BYTEs 00h
 + 18h WORD (high byte first) type
 + 1Ah DWORD (high byte first) subtype
 + 1Eh DWORD pointer to ADDITIONAL_INFO
 + 22h DWORD (high byte first) conversation ID
 + 26h  8 BYTEs (high byte first) TP ID
 + 2Eh  8 BYTEs (high byte first) physical unit or logical unit name
 + 36h WORD length of data
 + 38h DWORD pointer to data
 + 3Ch BYTE 00h
 +----------6802-------------------------------
 +INT 68 - APPC/PC - CONNECTION CONTROL
 + AH = 02h
 + DS:DX -> control block
 +
 +Format of control block:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD verb (action)
 + 0Eh BYTE 1 if MC_ (mapped conversation) form of verb
 + 0 if basic verb
 + 0Fh  5 BYTEs reserved (0)
 + 14h WORD (high byte first) primary return code (see below)
 + 16h DWORD (high byte first) error code (see below)
 + 1Ah  8 BYTEs (high byte first) TP_ID
 + 22h DWORD (high byte first) conversation ID
 +---if verb=0100h (Allocate or MC_Allocate)---
 + 26h BYTE (MC_Allocate only) 0 basic conversation
 +    1 mapped conversation
 + 27h BYTE 00h SYNC_LEVEL = none
 + 01h SYNC_LEVEL = confirm
 + 28h WORD 0000h
 + 2Ah BYTE 00h RETURN_CONTROL: when session allocated
 + 01h RETURN_CONTROL: immediate
 + 02h RETURN_CONTROL: when session free
 + 2Bh  8 BYTEs 00h
 + 33h  8 BYTEs (high byte first) partner logical unit name
 + 3Bh  8 BYTEs (high byte first) mode name
 + 43h 65 BYTEs (counted string) TP name
 + 84h BYTE 00h security: none
 + 01h security: same
 + 02h security: pgm
 + 85h 11 BYTEs 00h
 + 90h 11 BYTEs (counted string) password
 + 9Bh 11 BYTEs (counted string) user ID
 + A6h WORD PIP_DATA length
 + A8h DWORD pointer to PIP_DATA
 +---if verb=0300h (Confirm or MC_Confirm)---
 + 26h BYTE  request to send received (0=no, 1=yes)
 +---if verb=0400h (Confirmed or MC_Confirmed), no additional fields---
 +---if verb=0500h (Deallocate or MC_Deallocate)---
 + 26h BYTE 00h
 + 27h BYTE type 0 SYNC_LEVEL
 +      1 FLUSH
 +      2 ABEND_PROC
 +      3 ABEND_SVC
 +      4 ABEND_TIMER
 +      5 ABEND
 + 28h WORD (MC_Deallocate only) length of error log data
 + 2Ah DWORD (MC_Deallocate only) pointer to error log data
 +---if verb=0600h (Flush or MC_Flush), no additional fields---
 +---if verb=0700h (Get_Attributes or MC_Get_Attributes)---
 + 26h  8 BYTEs (high byte first) logical unit ID
 + 2Eh BYTE 00h
 + 2Fh BYTE SYNC_LEVEL (0=none, 1=confirm)
 + 30h  8 BYTEs (high byte first) mode name
 + 38h  8 BYTEs (high byte first) own net name
 + 40h  8 BYTEs (high byte first) own logical unit name
 + 48h  8 BYTEs (high byte first) partner logical unit name
 + 50h 18 BYTEs (counted string) partner's fully qualified logical unit name
 + 62h BYTE 00h
 + 63h 11 BYTEs (counted string) user ID
 +---if verb=0800h (Get_Type)---
 + 26h BYTE type (0=basic conversation, 1=mapped conversation)
 +---if verb=0900h (Post_on_Receipt)---
 + 26h WORD maximum length
 + 28h BYTE fill (0=buffer, 1=LL)
 +---if verb=0A00h (Prepare_to_Receive or MC_Prepare_to_Receive)---
 + 26h BYTE type (0=SYNC_LEVEL, 1=FLUSH)
 + 27h BYTE locks (0=short, 1=long)
 +---if verb=0B00h (Receive_and_Wait or MC_Receive_and_Wait)---
 + 26h BYTE what received
 + 00h data
 + 01h data complete
 + 02h data incomplete
 + 03h confirm
 + 04h confirm send
 + 05h confirm deallocate
 + 06h send
 + 27h BYTE (MC_Receive_and_Wait only) fill (0=buffer, 1=LL)
 + 28h BYTE Request_to_Send_Received (0=no, 1=yes)
 + 29h WORD maximum length
 + 2Bh WORD data length
 + 2Dh DWORD pointer to data
 +---if verb=0C00h (Receive_Immediate or MC_Receive_Immediate)---
 + 26h BYTE what received
 + 00h data
 + 01h data complete
 + 02h data incomplete
 + 03h confirm
 + 04h confirm send
 + 05h confirm deallocate
 + 06h send
 + 27h BYTE (MC_Receive_Immediate only) fill (0=buffer, 1=LL)
 + 28h BYTE Request_to_Send_Received (0=no, 1=yes)
 + 29h WORD maximum length
 + 2Bh WORD data length
 + 2Dh DWORD pointer to data
 +---if verb=0E00h (Request_to_Send or MC_Request_to_Send), no other fields---
 +---if verb=0F00h (Send_Data or MC_Send_Data)---
 + 26h BYTE request to send received (0=no, 1=yes)
 + 27h BYTE 00h
 + 28h WORD data length
 + 2Ah DWORD pointer to data
 +---if verb=1000h (Send_Error or MC_Send_Error)---
 + 26h BYTE request to send received (0=no, 1=yes)
 + 27h BYTE type (0=program, 1=SVC)
 + 28h DWORD 00h
 + 2Ch WORD (MC_Send_Error only) LOG_DATA length
 + 2Eh DWORD (MC_Send_Error only) pointer to LOG_DATA
 +---if verb=1200h (Test or MC_Test)---
 + 26h BYTE (MC_Test only) test (0=posted, 1=request_to_send received)
 + Note: error code has different interpretations for:
 + 0 posted data
 + 1 posted not data (primary return code = 0)
 + 1 bad TP_ID (primary return code = 1)
 +---if verb=1300h (Wait)---
 + 26h BYTE number of conversations to wait on
 + Note: error codes have interpretations as for 1200h above
 +
 +Values for primary return code:
 + 0000h successful
 + 0001h parameter check
 + 0002h state check
 + 0003h allocation error
 + 0005h deallocate abended
 + 0006h deallocate abended program
 + 0007h deallocate abended SVC
 + 0008h deallocate abended timer
 + 0009h deallocate normal return
 + 000Ah data posting blocked
 + 000Bh posting not active
 + 000Ch PROG_ERROR_NO_TRUNC
 + 000Dh PROG_ERROR_TRUNC
 + 000Eh PROG_ERROR_PURGING
 + 000Fh CONV_FAILURE_RETRY
 + 0010h CONV_FAILURE_NO_RETRY
 + 0011h SVC_ERROR_NO_TRUNC
 + 0012h SVC_ERROR_TRUNC
 + 0013h SVC_ERROR_PURGING
 + 0014h unsuccessful
 + 0018h CNOS partner logical unit reject
 + 0019h conversation type mixed
 + F001h APPC disabled
 + F002h APPC busy
 + F003h APPC abended
 + F004h incomplete
 +
 +Values for error code:
 + 0001h bad TP ID
 + 0002h bad conversation ID
 + 0004h allocation error, no retry
 + 0005h allocation error, retry
 + 0006h data area crosses segment boundary
 + 0010h bad TPN length
 + 0011h bad CONV length
 + 0012h bad SYNC level
 + 0013h bad security selection
 + 0014h bad return control
 + 0015h SEC_TOKENS too big
 + 0016h PIP_LEN incorrect
 + 0017h no use of SNASVCMG
 + 0018h unknown partner mode
 + 0031h confirm: SYNC_NONE
 + 0032h confirm: bad state
 + 0033h confirm: NOT_LL_BDY
 + 0041h confirmed: bad state
 + 0051h deallocate: bad type
 + 0052h deallocate: flush bad state
 + 0053h deallocate: confirm bad state
 + 0055h deallocate: NOT_LL_BDY
 + 0057h deallocate: log LL_WRONG
 + 0061h flush: not send state
 + 0091h post on receipt: invalid length
 + 0092h post on receipt: not in receive state
 + 0093h post on receipt: bad fill
 + 00A1h prepare to receive:invalid type
 + 00A2h prepare to receive: unfinished LL
 + 00A3h prepare to receive: not in send state
 + 00B1h receive and wait: bad state
 + 00B2h receive and wait: NOT_LL_BDY
 + 00B5h receive and wait: bad fill
 + 00C1h receive immediate: not in receive state
 + 00C4h receive immediate: bad fill
 + 00E1h request to send: not in receive state
 + 00F1h send data: bad LL
 + 00F2h send data: not in send state
 + 0102h send error: log LL wrong
 + 0103h send error: bad type
 + 0121h test: invalid type
 + 0122h test: not in receive state
 +----------6803-------------------------------
 +INT 68 - APPC/PC
 + AH = 03h
 + DS:DX -> control block (see below)
 +
 +Format of control block:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD verb (action)
 + 0Eh  6 BYTEs 0
 + 14h DWORD (high byte first) return code (see AH=01h)
 + 18h WORD 0
 + 1Ah  8 BYTEs (high byte first) logical unit ID
 +---if verb=2400h (TP Started), control block continues---
 + 22h  8 BYTEs (high byte first) TP ID
 +---if verb=2800h (Get ALLOCATE), control block continues---
 + 22h BYTE type
 + 00h dequeue
 + 01h test
 + 23h DWORD pointer to CREATE_TP record
 +---if verb=2A00h (Change Logical Unit). control block continues---
 + 22h DWORD pointer to CREATE_TP_EXIT routine
 + FFFFFFFFh reject incoming ALLOCATEs
 + 00000000h queue ALLOCATEs
 + 26h DWORD 00000000h
 + 2Ah DWORD pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh= don't log errors
 + 2Eh DWORD 00000000h
 + 32h BYTE maximum TPs
 + 33h BYTE 00h stop QUEUE_ALLOCATEs
 + 01h resume QUEUE_ALLOCATEs
 + 34h DWORD pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh = no exit
 + 38h DWORD 00000000h
 +----------6804-------------------------------
 +INT 68 - APPC/PC
 + AH = 04h
 + DS:DX -> control block (see below)
 +
 +Format of control block:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD verb (action)
 + 2500h TP_ENDED
 + 2900h TP_VALID
 + 0Eh  6 BYTEs 0
 + 14h DWORD (high byte first) return code (see AH=01h)
 + 18h WORD 0
 + 1Ah  8 BYTEs (high byte first) TP_ID
 + 22h DWORD -> CREATE_TP record (only if verb = 2900h)
 +----------6805-------------------------------
 +INT 68 - APPC/PC - TRANSFER MSG DATA
 + AH = 05h
 + DS:DX -> control block (see below)
 +
 +Format of control block:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD 1C00h
 + 0Eh BYTE 00h user defined
 + 01h NMVT
 + 02h alert subvectors
 + 03h PDSTATS subvectors
 + 0Fh  5 BYTEs 0
 + 14h DWORD (high byte first) return code (see AH=01h)
 + 18h 12 BYTEs 0
 + 24h BYTE if bit 0 clear, add correlation subvector
 + if bit 1 clear, add product set ID subvector
 + if bit 2 clear, do SYSLOG
 + if bit 3 clear, send SSCP_PU_SESSION
 + 25h BYTE 0
 + 26h WORD length of data
 + 28h  N BYTEs data
 +----------6806-------------------------------
 +INT 68 - APPC/PC - CHANGE NUMBER OF SESSIONS
 + AH = 06h
 + DS:DX -> control block (see below)
 +
 +Format of control block:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD 1500h
 + 0Eh  6 BYTEs 0
 + 14h WORD (high byte first) primary return code (see AH=02h)
 + 16h DWORD (high byte first) secondary return code (see below, AH=01h)
 + 1Ah  8 BYTEs (high byte first) logical unit ID
 + 22h  8 BYTEs blanks
 + 2Ah  8 BYTEs (high byte first) partner logical unit name
 + 32h  8 BYTEs (high byte first) mode name
 + 3Ah BYTE bit 7: use MODE_NAME_SELECT_ALL rather than MODE_NAME
 + bit 6: set negotiable values
 + 3Bh BYTE partner logical unit mode session limit
 + 3Ch BYTE minimum CONWINNERS_SOURCE
 + 3Dh BYTE maximum CONWINNERS_TARGET
 + 3Eh BYTE automatic activation
 + 3Fh BYTE 0
 + 40h BYTE bit 7: drain target
 + bit 6: drain source
 + bit 5: target responsible, not source
 +
 +Values for secondary return code (see also AH=01h):
 +  0000h accepted
 +  0001h negotiated
 +  0003h bad logical unit ID
 +  0004h allocation failure, no retry
 +  0005h allocation failure, retry
 +  0151h can't raise limits
 +  0153h all modes must reset
 +  0154h bad SNASVCMG limits
 +  0155h minimum greater than total
 +  0156h mode closed (prim return code = 1)
 + CNOS mode closed (prim return code = 18h)
 +  0157h bad mode name (prim return code = 1)
 + CNOS bad mode name (prim return code = 18h)
 +  0159h reset SNA drains
 +  015Ah single not SRC response
 +  015Bh bad partner logical unit
 +  015Ch exceeds maximum allowed
 +  015Dh change SRC drains
 +  015Eh logical unit detached
 +  015Fh CNOS command race reject
 +----------6807-------------------------------
 +INT 68 - APPC/PC - PASSTHROUGH
 + AH = 07h
 + DS:DX -> control block (format depends on application subsystem)
 +SeeAlso: AH=FFh
 +----------68FA-------------------------------
 +INT 68 - APPC/PC - ENABLE/DISABLE APPC
 + AH = FAh
 + AL bit 0 = 0 enable
 +    1 disable
 +----------68FB-------------------------------
 +INT 68 - APPC/PC - CONVERT
 + AH = FBh
 + DS:DX -> control block (see below)
 +
 +Format of control block:
 +Offset Size Description
 + 00h 12 BYTEs reserved
 + 0Ch WORD 1A00h
 + 0Eh  6 BYTEs 0
 + 14h DWORD (high byte first) return code
 + 18h BYTE conversion
 +    00h ASCII to EBCDIC
 +    01h EBCDIC to ASCII
 + 19h BYTE character set
 +    00h AE
 +    01h A
 +    02h G
 + 1Ah WORD length of string to convert
 + 1Ch DWORD pointer to source
 + 20h DWORD pointer to target
 +----------68FC-------------------------------
 +INT 68 - APPC/PC - ENABLE/DISABLE MESSAGE TRACING
 + AH = FCh
 + AL = 00h disable tracing
 +    = 01h enable tracing
 + DX = number of bytes to keep (0=all)
 +SeeAlso: AH=FDh
 +----------68FD-------------------------------
 +INT 68 - APPC/PC - ENABLE/DISABLE API VERB TRACING
 + AH = FDh
 + AL = 00h disable tracing
 +      01h enable tracing
 +SeeAlso: AH=FCh,AH=FEh
 +----------68FE-------------------------------
 +INT 68 - APPC/PC - SET TRACE DESTINATION
 + AH = FEh
 + AL = trace destinations
 +     bit 0  storage (DS:DX -> trace stats record)
 +     bit 1  display
 +     bit 2  file (trace written to file OUTPUT.PC)
 +     bit 3  printer
 +SeeAlso: AH=FDh
 +
 +Format of Trace Statistics Record:
 +Offset Size Description
 + 00h DWORD pointer to storage trace buffer
 + 04h WORD max number of 80-byte records in trace
 + 06h WORD (high-order byte first!) current record number (must init to 0)
 + 08h DWORD (high-order byte first!) number of records written (init to 0)
 + 0Ch DWORD reserved
 +Note: do not move record while trace is active
 +----------68FF-------------------------------
 +INT 68 - APPC/PC - SET PASSTHROUGH
 + AH = FFh
 + DS:DX -> passthrough exit routine
 +SeeAlso: AH=07h
 +----------69---------------------------------
 +INT 69 - Zenith AT BIOS - ???
 +   called by INT 09 handler
 +----------690100-----------------------------
 +INT 69 - DECnet DOS CTERM - INSTALLATION CHECK
 + AX = 0100h
 +Return: AL = FFh if present
 +SeeAlso: AX=010Fh
 +----------690101-----------------------------
 +INT 69 - DECnet DOS CTERM - SEND BYTE
 + AX = 0101h
 + BL = character
 + DX = session handle
 +Return: AH >= 80h on error
 +SeeAlso: AX=0102h
 +----------690102-----------------------------
 +INT 69 - DECnet DOS CTERM - READ BYTE
 + AX = 0102h
 + DX = session handle
 +Return: AH >= 80h on error
 + AH < 80h if successful
 +     AL = character
 +SeeAlso: AX=0101h
 +----------690103-----------------------------
 +INT 69 - DECnet DOS CTERM - STATUS
 + AX = 0103h
 + DX = session handle
 +Return: AH status flags
 +     bit 7 session has been aborted
 + 6 DECnet error
 + 1 trace data available
 + 0 receive data available
 + AL = reason code if DECnet error
 +     00h normal disconnect
 +     01h unknown message from host
 +     02h protocol violation from host
 +     03h could not process the initiate message
 +     04h error receiving message from host
 +     05h error sending message to host
 +     06h error checking for message from host
 +     07h remote system does not support CTERM
 +     08h remote system does not support correct protocol version
 +     09h did not receive BIND message from host
 +     0Ah could not send BIND message to host
 +     0Bh no more sessions available
 +     0Ch session does not exist
 +     0Dh not enough memory to complete operation
 +     0Eh connection has broken
 +SeeAlso: AX=0104h
 +----------690104-----------------------------
 +INT 69 - DECnet DOS CTERM - DECnet STATUS
 + AX = 0104h
 + DX = session handle
 +Return: AX = reason code (see AX=0103h)
 +Note: use this call when AX=0103h returns a DECnet error
 +SeeAlso: AX=0103h
 +----------690105-----------------------------
 +INT 69 - DECnet DOS CTERM - OPEN SESSION
 + AX = 0105h
 + DS:BX -> ASCIZ node name
 + ES:DX -> buffer for session control block (see INT 6A/AH=D0h)
 +Return: AX <= 0 on error
 + AX > 0 session handle
 +SeeAlso: AX=0103h,AX=0106h,AX=010Ah
 +----------690106-----------------------------
 +INT 69 - DECnet DOS CTERM - CLOSE SESSION
 + AX = 0106h
 + DX = session handle
 +Return: AH = 00h good close
 +    other error code (see AX=0103h)
 +SeeAlso: AX=0103h,AX=0105h
 +----------69010A-----------------------------
 +INT 69 - DECnet DOS CTERM - GET SESSION CONTROL BLOCK SIZE
 + AX = 010Ah
 +Return: AX = length of session control block in bytes
 +SeeAlso: AX=0105h
 +----------69010B-----------------------------
 +INT 69 - DECnet DOS CTERM - GET DECnet SOCKET
 + AX = 010Bh
 + DX = session handle
 +Return: AX > 0 DECnet socket for the session
 +    = 0 no match for handle
 +----------69010F-----------------------------
 +INT 69 - DECnet DOS CTERM - DEINSTALL CTERM
 + AX = 010Fh
 +Return: AH = 00h succesful uninstall
 +    other error code
 +Note: CTERM must have been the last TSR loaded in order to deinstall it
 +SeeAlso: AX=0100h
 +----------690A-------------------------------
 +INT 69 - DECnet DOS 2.1+ - DATA LINK LAYER
 + AH = 0Ah
 + AL = function
 +     00h initialize
 +     01h open portal
 +     02h close portal
 +     03h enable multicast address
 +     04h disable multicast address
 +     05h transmit
 +     06h request transmit buffer
 +     07h deallocate transmit buffer
 +     08h read channel status
 +     09h read datalink portal list
 +     0Ah read information about a datalink portal
 +     0Bh read and/or clear counters
 +     0Ch request to boot from a network server
 +     0Dh enable Ethernet channel
 +     0Eh disable Ethernet channel
 +     0Fh start MOP/send a System ID message
 +     10h stop MOP
 +     11h get DECPARM
 +     12h set DECPARM
 +     13h external loopback
 + ES:BX -> Datalink Communication Block
 +Return: AX = status
 +     00h successful
 +     01h hardware failed to initialize
 +     02h channel state was not off (must be off to execute that command)
 +     03h channel state is off (must be on to execute that command)
 +     04h address not set
 +     05h hardware missing
 +     06h buffer too small
 +     07h no more buffers available
 +     08h no more resources available
 +     09h promiscuous receiver active
 +     0Ah non exclusive
 +     0Bh unrecognized portal
 +     0Ch protocol type in use
 +     0Dh not a valid Multicast address
 +     0Eh outstanding calls
 +     0Fh hardware doesn't support receiving bad frames
 +     10h none outstanding
 +     11h no events
 +     12h broken
 +     13h buffer quota exceeded
 +     14h already initialized
 +     15h loopback failure
 +SeeAlso: INT 6D"DECnet"
 +
 +Format of Datalink Communication Block
 +Offset Type Description
 + 00h WORD portal ID
 + 02h  6 BYTEs source address
 + 08h  6 BYTEs destination address
 + 0Eh DWORD buffer pointer
 + 12h WORD buffer length
 + 14h WORD operation
 + 16h BYTE pad flag (used on open)
 +     00h no pad
 +     01h pad
 + 17h BYTE mode flag (used on open)
 +     00h 802.3
 +     01h Ethernet
 +     02h promiscuous
 + 18h DWORD line status change function
 + 1Ch DWORD received data function
 + 20h DWORD transmitted data function
 + 24h BYTE maximum outstanding transmits/receives
 + 25h  2 BYTEs protocol type
 + 27h WORD buffers lost
 +----------696996-----------------------------
 +INT 69 - ISR.COM v1.00 - SPECIFY INTERRUPT HANDLER
 + AX = 6996h
 + DS:DX -> interrupt handler or 0000h:0000h to disable
 +Return: AX = 9669h
 +Notes: ISR (Interrupt Service Reflector) is a TSR by Rich Bono which permits
 +   a program to provide hardware interrupt handlers even while being
 +   debugged with a debugger that swaps interrupt vectors during
 +   debugging.
 + the interrupt vector which is to be reflected is set at installation
 +   time and cannot be changed
 +----------6A---------------------------------
 +INT 6A - OPTHELP.COM
 +Notes: OPTHELP is an optionally-resident help system for SLR Systems's OPTASM
 +   assembler
 + may be configured to use any interrupt from 60h to 7Fh (default 6Ah)
 +----------6A---------------------------------
 +INT 6A - DECnet DOS - LOCAL AREA TRANSPORT PROGRAM
 +Note: the 3 bytes preceding the interrupt handler are "LAT"; this serves as
 +   the installation check
 +----------6A01--DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - SEND BYTE
 + AH = 01h
 + DH = FFh
 + AL = character
 + DL = handle
 +Return: AH >= 80h on error
 +SeeAlso: AH=02h
 +----------6A02--DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - READ BYTE
 + AH = 02h
 + DH = FFh
 + DL = handle
 +Return: AH < 80h if successful
 +     AL = character
 + AH >= 80h on error
 +SeeAlso: AH=01h
 +----------6A03--DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - STATUS
 + AH = 03h
 + DH = FFh
 + DL = handle
 +Return: AH = status flags
 +     bit 5 transmit buffer empty
 + 3 session in start state
 + 2 session not active
 + 1 unable to queue transmit data
 + 0 receive data available
 +----------6AD0--DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - OPEN SESSION
 + AH = D0h
 + DH = FFh
 + AL = FFh no password
 +    = 0Fh password at ES:DI
 + ES:BX -> LAT session control block (see below)
 + ES:DI -> 16-byte blank-padded password
 +Return: AH = 00h success
 +     DL = handle
 +SeeAlso: AX=D000h
 +
 +Format of LAT Session Control Block:
 +Offset Size Description
 + 00h 18 BYTEs service name
 + 12h 18 BYTEs node name (future use)
 + 24h 18 BYTEs port name (future use)
 + 36h DWORD -> session stopped post routine
 + 3Ah DWORD -> service table overflow post routine
 + 3Eh DWORD -> transmit post routine
 + 42h DWORD -> receive post routine
 + 46h WORD session status
 + 04h circuit failure
 + 08h stop slot received
 + 48h WORD slot state (LAT driver use)
 + 4Ah WORD local credits (LAT driver use)
 + 4Ch DWORD -> VCB (LAT driver use)
 + 50h WORD backward slot (LAT driver use)
 + 52h WORD forward slot (LAT driver use)
 + 54h WORD remote slot ID (LAT driver use)
 + 56h WORD local slot ID (LAT driver use)
 + 58h WORD slot byte count (LAT driver use)
 + 5Ah BYTE remote credits (LAT driver use)
 + 5Bh 255 BYTEs transmitted data slot
 +15Ah BYTE number of receive data slots (4 recommended)
 +15Bh BYTE number of occupied slots
 +15Ch BYTE index of next receive slot to use
 +15Dh BYTE index of current receive slot
 +15Eh WORD pointer to first received character
 +160h  N WORDs pointers to receive slots (buffers); each is 259 bytes
 +Note: set post routines to 0000h:0000h if polled operation will be used
 +----------6AD000DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - CLOSE SESSION
 + AX = D000h
 + DH = FFh
 + DL = handle
 +Return: AX = 0000h successful
 +    = 0001h no such session
 +    = 0002h session not running, try again later
 +SeeAlso: AH=D0h
 +----------6AD100DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - SEND BREAK
 + AX = D100h
 + DH = FFh
 + DL = handle
 +Return: AX = 0000h if successful
 + AH bit 7 set if unable to send break
 +----------6AD300DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - RESET LAT COUNTERS
 + AX = D300h
 + DH = FFh
 +SeeAlso: AX=D400h
 +----------6AD400DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - COPY LAT COUNTERS
 + AX = D400h
 + DH = FFh
 + CX = buffer size
 + ES:BX -> buffer for LAT counters
 +Return: AX = 0000h counters copied into buffer
 +    = FFFFh buffer too small
 +SeeAlso: AX=D300h
 +----------6AD500DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - GET NEXT LAT SERVICE NAME
 + AX = D500h
 + DH = FFh
 + ES:BX -> 17-byte buffer for name
 +Return: AH = 00h if successful
 +    ES:BX buffer filled
 + AX = FFFFh if end of table or no name available
 +Notes: use this function to get the names of the hosts on the network
 + successive calls are necessary to get all names
 +SeeAlso: AX=D600h
 +----------6AD600DHFF-------------------------
 +INT 6A - DECnet DOS LOCAL AREA TRANSPORT - LAT SERVICE TABLE RESET
 + AX = D600h
 + DH = FFh
 +Return: AX = number of service table entries
 + BX = 0000h service table has not overflowed
 +    = FFFFh service table has overflowed
 +SeeAlso: AX=D500h
 +----------6B0000-----------------------------
 +INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - BUFFERED WRITE
 + AX = 0000h
 + CX = length
 + ES:BX -> buffer
 +Return: CX = number of bytes written
 +Note: also supported by NPC NCSI
 +SeeAlso: AX=0100h,AH=18h,INT 14/AH=19h
 +----------6B0100-----------------------------
 +INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - BUFFERED READ
 + AX = 0100h
 + CX = length of buffer
 + ES:BX -> buffer
 +Return: CX = number of bytes read
 +Note: also supported by NPC NCSI
 +SeeAlso: AX=0000h,AH=19h,INT 14/AH=18h,INT 14/AX=FF02h
 +----------6B02-------------------------------
 +INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - INSTALL CHECK
 + AH = 02h
 + AL nonzero
 +Return: AL = 00h if present and OK
 +Note: also supported by NPC NCSI
 +SeeAlso: AX=0700h
 +----------6B0600-----------------------------
 +INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - CONTROL
 + AX = 0600h
 + CX = command
 +     02h send break
 +     04h disconnect
 +     06h hold
 +Note: also supported by NPC NCSI
 +----------6B0700-----------------------------
 +INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - GET STATUS
 + AX = 0700h
 +Return: CH <> 00h if connection active
 +Note: also supported by NPC NCSI
 +SeeAlso: AH=02h,AH=10h
 +----------6B10-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - GET STATUS
 + AH = 10h
 + ???
 +Return: ???
 +SeeAlso: AX=0700h,AH=12h,AH=1Fh
 +----------6B11-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - ALLOCATE A VIRTUAL CIRCUIT
 + AH = 11h
 + ???
 +Return: ???
 +SeeAlso: AH=12h,AH=15h,AH=16h,AH=17h,AH=18h
 +----------6B12-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - VIRTUAL CIRCUIT STATUS
 + AH = 12h
 + ???
 +Return: ???
 +SeeAlso: AH=10h,AH=15h,AH=1Ah,AH=1Bh,AH=1Fh
 +----------6B13-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE REQUEST/REPLY SERVICE NAME
 + AH = 13h
 + ???
 +Return: ???
 +SeeAlso: AH=14h,AH=15h
 +----------6B14-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE SERVICE ADDRESS
 + AH = 14h
 + ???
 +Return: ???
 +SeeAlso: AH=13h,AH=15h,AH=21h
 +----------6B15-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE VIRTUAL CIRCUIT CONFIG
 + AH = 15h
 + ???
 +Return: ???
 +SeeAlso: AH=13h,AH=14h
 +----------6B16-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - LOG AND/OR INITIALIZE VIRTUAL CIRCUIT
 + AH = 16h
 + ???
 +Return: ???
 +SeeAlso: AH=11h,AH=12h,AH=17h
 +----------6B17-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - DISCONNECT A VIRTUAL CIRCUIT
 + AH = 17h
 + ???
 +Return: ???
 +SeeAlso: AH=11h,AH=16h
 +----------6B18-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - WRITE DATA ON A VIRTUAL CIRCUIT
 + AH = 18h
 + ???
 +Return: ???
 +SeeAlso: AX=0000h,AH=12h,AH=19h
 +----------6B19-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - READ DATA ON A VIRTUAL CIRCUIT
 + AH = 19h
 + ???
 +Return: ???
 +SeeAlso: AX=0100h,AH=12h,AH=18h
 +----------6B1A-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - RECEIVE STATUS
 + AH = 1Ah
 + ???
 +Return: ???
 +SeeAlso: AH=12h,AH=1Bh
 +----------6B1B-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - TRANSMIT STATUS
 + AH = 1Bh
 + ???
 +Return: ???
 +SeeAlso: AH=12h,AH=1Ah
 +----------6B1C-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - RECEIVE BUFFER CONTROL
 + AH = 1Ch
 + ???
 +Return: ???
 +SeeAlso: AH=1Dh,AH=1Eh
 +----------6B1D-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - TRANSMIT BUFFER CONTROL
 + AH = 1Dh
 + ???
 +Return: ???
 +SeeAlso: AH=1Ch,AH=1Eh
 +----------6B1E-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - ISSUE CONTROL REQUEST
 + AH = 1Eh
 + ???
 +Return: ???
 +SeeAlso: AH=1Ch,AH=1Dh
 +----------6B1F-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - EXTERNAL STATUS
 + AH = 1Fh
 + ???
 +Return: ???
 +SeeAlso: AH=10h,AH=12h
 +----------6B21-------------------------------
 +INT 6B - NPC NCSI EXTENDED SERIAL I/O - QUERY NAME SERVICE
 + AH = 21h
 + ???
 +Return: ???
 +SeeAlso: AH=14h
 +----------6B6B-------------------------------
 +INT 6B - Tandy SCHOOLMATE PLUS - API
 + AH = 6Bh
 + AL = E0h to FFh
 +----------6B---------------------------------
 +INT 6B - VIRUS - "Saddam" - ???
 +SeeAlso: INT 21/AX=FFFFh,INT 61"VIRUS",INT 70"VIRUS"
 +----------6C---------------------------------
 +INT 6C - system resume vector (CONVERTIBLE)
 +----------6C---------------------------------
 +INT 6C - DOS 3.2 Realtime Clock update
 +----------6C---------------------------------
 +INT 6C - DECnet DOS network scheduler
 +SeeAlso: INT 6D"DECnet",INT 6E"DECnet"
 +----------6D---------------------------------
 +INT 6D - VGA - internal
 +Note: used by IBM, Paradise, Video7, and NCR
 +----------6D---------------------------------
 +INT 6D - ATI VGA Wonder - VIDEO BIOS ENTRY POINT
 +   points at the original INT 10 entry point set up by the ATI BIOS
 +SeeAlso: INT 10
 +----------6D---------------------------------
 +INT 6D - DECnet DOS (before 2.1) - DATA LINK LAYER PROGRAM
 + AH = function
 + ???
 +Return: ???
 +SeeAlso: INT 69/AH=0Ah,INT 6C"DECnet",INT 6E"DECnet"
 +----------6E---------------------------------
 +INT 6E - DECnet DOS - DECnet NETWORK PROCESS API
 +Notes: this is the main DECnet DOS access, and is described in Digital manual
 +   AA-EB46B-TV ("DECnet-DOS Programmer's Reference Manual")
 + there is a signature/data area immediately prior to the interrupt
 +   handler which may be used as an installation check
 +
 +Format of signature area:
 +Offset Size Description
 + -5 BYTE major version number
 + -4 BYTE minor version number
 + -3   3 BYTEs signature (ASCII "DNP")
 +----------6F----BP0012-----------------------
 +INT 6F - HP ES-12 EXTENDED BIOS - READ CMOS MEMORY
 + BP = 0012h
 + AH = 22h
 + BL = address of CMOS byte to read
 +Return: AH = status
 + AL = byte read
 + BP, DS destroyed
 +SeeAlso: BP=0012h/AH=24h
 +----------6F----BP0012-----------------------
 +INT 6F - HP ES-12 EXTENDED BIOS - WRITE CMOS MEMORY
 + BP = 0012h
 + AH = 24h
 + BL = address of CMOS byte to write
 + AL = new value
 +Return: AH = status
 + BP, DS destroyed
 +SeeAlso: BP=0012h/AH=22h
 +----------6F---------------------------------
 +INT 6F - Novell NetWare - PCOX API (3270 PC terminal interface)
 +----------6F00-------------------------------
 +INT 6F - 10-NET - LOGIN
 + AH = 00h
 + DS:DX -> login record (see below)
 +Return: CL = security level
 + AX = status
 +     0000h successful
 +     01FFh time out on response
 +     02FFh network (hardware) error
 +     03FFh invalid password
 +     04FFh local resource not available
 +     05FFh server resource not available
 +     06FFh already logged in under different name
 +     07FFh login security failure (node)
 +     08FFh not logged in
 +     09FFh position calc error
 +     0AFFh receive subfunction not = send subfunction (i.e. read, write)
 +     0BFFh request function not in range
 +     0CFFh no more server file handle entries left
 +     0DFFh no more shared file table entries left
 +     0EFFh no more user file handle entries left
 +     0FFFh chat permit not on
 +     10FFh not a server on request
 +     11FFh no transporter board error
 +     12FFh time out on send
 +     13FFh item not found (spool item not on queue)
 +     14FFh DOS access incompatible
 +     15FFh record already locked
 +     16FFh invalid parameter
 +     17FFh record lock time out error
 +     18FFh currently spooling to named device
 +     19FFh dropped receive message (throttle)
 +     1AFFh open sharing violation
 +     1BFFh no more tuf entries left
 +     1CFFh not file owner on open
 +     1DFFh read security not passed
 +     1EFFh write security not passed
 +     1FFFh group security not passed
 +     20FFh security file failure
 +     21FFh activity file failure
 +     22FFh spool cntrl file failure
 +     23FFh device not mounted (spooling)
 +     24FFh spool file has not been terminated
 +     25FFh device not mounted or is not being shared
 +     26FFh duplicate node id
 +     27FFh file not found error
 +     28FFh no more files
 +     29FFh unknown internal system error
 +     2AFFh print queue is full or corrupted
 +     2BFFh invalid function
 +     2CFFh invalid handle
 +     2DFFh too many files opened
 +     2EFFh path not found
 +     2FFFh named file is active
 +/* I've gotten one submission which says FFxxh, and another with xxFFh */
 +/* I don't know which way around these should be, does somebody else know? */
 +     FF01h timeout
 +     FF02h network error
 +     FF03h invalid password
 +     FF04h no local buffer
 +     FF05h superstation not available
 +     FF06h node already logged in
 +     FF07h login not valid from this node
 +     FF08h node ID already in use
 +     FF16h invalid parameter (bad length, invalid node ID, etc)
 +     FF17h record locked by another user
 +     FF18h sent message has been dropped
 +SeeAlso: AH=01h
 +
 +Format of login record:
 +Offset Size Description
 + 00h  8 BYTEs user name
 + 08h  8 BYTEs password
 + 10h 12 BYTEs name of SuperStation
 +----------6F01-------------------------------
 +INT 6F - 10-NET - LOGOFF
 + AH = 01h
 + DS:DX -> superstation ID or nulls (12 bytes)
 +Return: CX = number of files closed
 + AX = status (see AH=00h)
 +     FF08h superstation ID not already logged in
 +SeeAlso: AH=00h
 +----------6F02-------------------------------
 +INT 6F - 10-NET - STATUS OF NODE
 + AH = 02h
 + DS:DX -> 512-byte status record (see below)
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +
 +Format of node status record:
 +Offset Size Description
 + 00h  8 BYTEs user name (0 if none)
 + 08h BYTE station type
 +    00h workstation
 +    01h superstation
 +    02h gateway station
 +    03h gateway active
 +    04h logged into multiple superstations
 +    05h reserved
 + 09h 24 BYTEs list of superstations logged into more than one superstation
 + 21h 12 BYTEs node ID
 + 2Dh WORD message count for this station (send for user node, receive for
 + superstations)
 +---for superstations only---
 + 2Fh WORD drives allocated (bit 0=A:, bit 1=B:,...)
 + 31h BYTE user service flag
 + bit 7: gate
 +     6: print permit on
 +     4: SUBMIT is on
 +     3: mail waiting for node
 +     2: calendar waiting for you
 +     1: news waiting for you
 +     0: mail waiting for you
 + 32h BYTE printers allocated (bit 0=LPT1,...)
 + 33h BYTE number of unprinted spool files
 + 34h BYTE number of opened files
 + 35h BYTE number of logged on nodes
 + 36h BYTE primary drive (1=A:)
 + 37h BYTE reserved
 + 38h  N BYTEs list of logged on node IDs (each 12 bytes, max 37 IDs)
 +1F4h  3 BYTEs time: sec/min/hrs
 +1F7h  3 BYTEs date: day/mon/year-1980
 +----------6F03-------------------------------
 +INT 6F - 10-NET - GET ADDRESS OF CONFIGURATION TABLE
 + AH = 03h
 + DS:DI -> node ID (optional)
 +Return: ES:BX -> configuration table 
 +SeeAlso: AH=13h
 +
 +Format of configuration table:
 +Offset Size Description
 +-41 WORD local device table address
 +-39 WORD extended network error mapping table address
 +-37 WORD shared device table address
 +-35 WORD mounted device table address
 +-33 BYTE receive buffer counter
 +-32 BYTE collect buffer counter
 +-31 WORD TUF address
 +-29 BYTE enable flag
 +-28 BYTE FCB keep flag
 +-27 WORD reserved
 +---up to here, 10-Net v3.3---
 +-25 WORD count of dropped Send6F
 +-23 WORD buffer start address
 +-21 WORD comm driver base address
 +-19 WORD send/receive retry count
 +-17 BYTE number of 550ms loops before timeout
 +-16 WORD UFH address
 +-14 WORD CDIR address
 +-12 WORD LTAB address
 +-10 WORD SFH address
 +-8 WORD FTAB address
 +-6 WORD RLTAB address
 +-4 WORD SMI address
 +-2 WORD NTAB address
 + 00h WORD address of first CT_DRV
 + 02h BYTE number of DRV entries
 + 03h  8 BYTEs login name
 + 0Bh 12 BYTEs node ID (blank-padded)
 + 17h  6 BYTEs node address
 + 1Dh BYTE flag
 + 1Eh BYTE CT_CFLG (chat permit)
 + bit 1: sound bell
 + bit 0: CHAT permit
 + 1Fh BYTE CT_PSFLG
 + bit 5: PRINT permit
 + bit 4: KB initiated
 + bit 3: CHAT called FOXPTRM
 + bit 2: SUBMIT active
 + bit 1: SUBMIT received
 + bit 0: SUBMIT permit
 + 20h BYTE in 10Net flag
 + 21h WORD receive message count
 + 23h WORD send message count
 + 25h WORD retry count
 + 27h WORD failed count
 + 29h WORD driver errors
 + 2Bh WORD dropped responses/CHATs
 + 2Dh  9 BYTEs LIST ID/NTAB address (3 entries--LPT1-3)
 + 36h  6 BYTEs AUX ID/NTAB address (2 entries--COM1-2)
 + 3Ch BYTE active CB channel
 + 3Dh BYTE received 6F messages on queue
 + 3Eh  9 BYTEs activity counters for channels 1-9
 +---beyond here, 10-Net v3.3---
 + 47h BYTE bit 0 = RS232 gate
 +     1 = Send6F gate (user set)
 + 48h DWORD pointer into gate (user set)
 + 4Ch DWORD pointer into 10Net send
 + 50h  N WORDs addresses of timer blocks
 +----------6F04-------------------------------
 +INT 6F - 10-NET - SEND
 + AH = 04h
 + DS:BX -> record
 + 12 BYTEs receiving node's ID
 + if first byte has high-order bit set, message is
 +    directed to the CT_RGATE vector at the receiver
 + if second byte is 00h, first byte is taken as a CB
 +    channel number and delivered to all nodes on same
 +    channel
 +    WORD length of data at DX
 + DS:DX -> data (max 1024 bytes)
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +SeeAlso: AH=05h
 +----------6F05-------------------------------
 +INT 6F - 10-NET - RECEIVE
 + AH = 05h
 + CX = number of seconds before timeout
 + DS:DX -> receive buffer (see below)
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +     AH = FEh if dequeued message is a CB message
 +SeeAlso: AH=04h
 +
 +Format of receive buffer:
 +Offset Size Description
 + 00h 12 BYTEs sending node's ID
 + 0Ch WORD length of message
 + 0Eh  N BYTEs message (maximum 1024 bytes)
 +----------6F07-------------------------------
 +INT 6F - 10-NET - LOCK HANDLE
 + AH = 07h
 + BX = file handle
 + CX:DX = starting offset in file
 + SI = record length
 +Return: CF set on error
 +     AX = error code (see also AH=00h)
 + 0002h file not found
 + CF clear if successful
 +SeeAlso: AH=08h,INT 21/AH=5Ch
 +----------6F08-------------------------------
 +INT 6F - 10-NET - UNLOCK HANDLE
 + AH = 08h
 + BX = file handle
 + AL = mode
 +     00h unlock all
 +     01h unlock record at CX:DX
 +Return: CF set on error
 +     AX = error code (see also AH=00h)
 + 0002h file not found
 + CF clear if successful
 +SeeAlso: AH=07h,INT 21/AH=5Ch
 +----------6F09-------------------------------
 +INT 6F - 10-NET - SUBMIT
 + AH = 09h
 + DS:BX -> submit record (see below)
 +
 +Format of submit record:
 +Offset Size Description
 + 00h 12 BYTEs destination node ID (must be logged in)
 + 0Ch WORD length+2 of following 'command line' text
 + 0Eh  N BYTEs command line text (<=100 bytes), system adds CR
 +----------6F0A-------------------------------
 +INT 6F - 10-NET - CHAT
 + AH = 0Ah
 + DS:BX -> control parameters (see below)
 + DS:DX -> chat message (see below)
 +
 +Format of control parameters:
 +Offset Size Description
 + 00h  8 BYTEs sender ID, defaults to node's userID if nulls
 + 08h  8 BYTEs destination user ID, 'EVERYONE' may be used
 + 10h 12 BYTEs destination node ID
 +
 +Format of chat message:
 +Offset Size Description
 + 00h WORD length+2 of following text
 + 02h  N BYTEs text, max 101 bytes
 +----------6F0B-------------------------------
 +INT 6F - 10-NET - LOCK SEMAPHORE, RETURN IMMEDIATELY
 + AH = 0Bh
 + AL = drive number or 0
 + ES:SI = Ethernet address or 0
 + DS:BX -> 31-byte ASCIZ semaphore name
 +Return: AL = status
 +     00h successful
 +     01h semaphore currently locked
 +     02h server not responding
 +     03h invalid semaphore name
 +     04h semaphore list is full
 +     05h invalid drive ID
 +     06h invalid Ethernet address
 +     07h not logged in
 +     08h write to network failed
 +     09h semaphore already logged in this CPU
 +Note: same as INT 60/AH=12h
 +SeeAlso: AH=0Ch,INT 60/AH=12h
 +----------6F0C-------------------------------
 +INT 6F - 10-NET - UNLOCK SEMAPHORE
 + AH = 0Ch
 + AL = drive number or 0
 + ES:SI = Ethernet address or 0
 + DS:BX -> 31-byte ASCIZ semaphore name
 +Return: AL = status (see also AH=0Bh)
 +     01h semaphore not locked
 +Note: same as INT 60/AH=13h
 +SeeAlso: AH=0Bh,INT 60/AH=13h
 +----------6F0D-------------------------------
 +INT 6F - 10-NET - WHO
 + AH = 0Dh
 + AL = type code
 +     01h return superstations only
 +     02h return non-superstations only
 +     otherwise return all
 + CX = length of data
 + DS:DX -> array of records to be filled (see below)
 +Return: CL = number of records returned (responding stations)
 +
 +Format of station record:
 +Offset Size Description
 + 00h 12 BYTEs node ID
 + 0Ch BYTE flags
 + bit 1 = workstation
 +     2 = superstation
 +     3 = xgate
 +     4 = active gate
 +---if AL = 01h---
 + 0Dh BYTE version number
 + WORD level number of 10Net software in responding node
 +---if AL = 02h---
 + 0Dh  8 BYTEs user ID
 + 15h BYTE version number
 + 16h WORD level number
 +----------6F0E-------------------------------
 +INT 6F - 10-NET - SPOOL/PRINT
 + AH = 0Eh
 + DS:DX -> spool/print record (see below)
 +Return: CF set on error
 +     AX = error code (see also AH=00h)
 + FF17h device not mounted
 + FF18h already spooling to named device
 + CF clear if successful
 +
 +Format of Spool/Print record:
 +Offset Size Description
 + 00h WORD operation code
 +    00h initiate spool
 +    01h abort print
 +    02h close spool
 +    03h delete spool
 +    04h print
 +    05h get report info
 +    06h set chat template
 +    07h queue
 +    08h return queue
 +    09h queue non-spooled file for printing
 + 02h 11 BYTEs file name in FCB format
 +---if operation code = 00h or 06h---
 + 0Dh BYTE notification
 + bit 7: queue to top
 + bit 6: do ID page
 + bit 5: no form feed
 + bit 4: reserved
 + bit 3: explicity queuing only
 + bit 2: notify at print completion
 + bit 1: notify server operator/reply
 + bit 0: notify at print start
 + 0Eh BYTE days to keep (FFh=forever)
 + 0Fh BYTE bits 0,1: device (1=LPT1)
 + bits 4-7: remote drive to store spool file (1=A,...)
 + 10h WORD length of following data area
 + 12h  N BYTEs up to 64 bytes of description
 +---if operation code = 03h---
 + 0Dh  8 BYTEs user ID to associate with filename
 +---if operation code = 04h---
 + 0Dh WORD block number
 + 0Fh  8 BYTEs user ID to associate with filename
 +---if operation code = 05h---
 + 0Dh BYTE RRN to start retrieve
 + 0Eh BYTE bits 0,1: local print device (LPTx)
 + bit 3: if set, return entries for all users
 + 0Fh WORD length of following area
 + 11h  N BYTEs up to 1500 bytes to receive $SCNTL records returned
 +---if operation code = 07h---
 + 0Dh BYTE queue number
 + 0Eh BYTE bits 0,1: local print device (LPTx)
 + 0Fh WORD number of bytes of test print to be done
 + 11h BYTE code: 01h print device
 +       02h test print count
 +       03h prn
 +---if operation code = 08h---
 + 0Dh BYTE queue location or $SCNTL location to start access
 + returns next item for access:
 + 00h-7Fh queued items
 + 80h-FEh non-queued, non-printed items
 + FFh no more items
 + 0Eh WORD unused
 + 10h WORD length of following area
 + 12h  N BYTEs up to 64 bytes to receive $SCNTL records
 +---if operation code = 09h---
 + 0Dh  3 BYTEs unused
 + 10h  N BYTEs path to non-spooled file to be queued for printing
 +
 +Format of $SCNTL record:
 +Offset Size Description
 + 00h  8 BYTEs user ID
 + 08h 11 BYTEs filename in FCB format
 + 13h  6 BYTEs node ID
 + 19h  3 BYTEs creation date
 + 1Ch BYTE flags
 + bit 7: queue to top
 +     6: do ID page
 +     5: no form feed at end
 +     4: reserved
 +     3: explicit queueing only
 +     2: notify at completion
 +     1: notify server operator/reply
 +     0: notify at start
 + 1Dh BYTE retention time in days
 + 1Eh BYTE printing device (LPTx)
 + 1Fh  3 BYTEs date last printed (0 = never)
 + 22h BYTE device containing spoolfile
 + 23h WORD bytes to print for test print
 + 25h WORD block number to start print
 + 27h BYTE reserved
 +----------6F10-------------------------------
 +INT 6F - 10-NET - ATTACH/DETACH PRINTER
 + AH = 10h
 + AL = subfunction
 +     00h initiate spooling if LPT1 is mounted
 +     01h terminate spooling if LPT1 is mounted
 +SeeAlso: INT 21/AX=5D08h
 +----------6F11-------------------------------
 +INT 6F - 10-NET - LOCK FCB
 + AH = 11h
 + AL = mode
 +     01h sequential
 +     02h random
 +     03h random block
 + CX = number of records
 + DS:DX -> FCB (see INT 21/AH=0Fh)
 +Return: CF set on error
 +     AX = error code (see also AH=00h)
 + 0002h file not found
 + CF clear if successful
 +SeeAlso: AH=12h
 +----------6F12-------------------------------
 +INT 6F - 10-NET - UNLOCK FCB
 + AH = 12h
 + AL = mode
 +     00h sequential
 +     01h random
 +     02h random block
 + CX = number of records
 + DS:DX -> FCB (see INT 21/AH=0Fh)
 +Return: CF set on error
 +     AX = error code (see also AH=00h)
 + 0002h file not found
 + CF clear if successful
 +SeeAlso: AH=11h
 +----------6F13-------------------------------
 +INT 6F - 10-NET v3.3 - GET REMOTE CONFIGURATION TABLE ADDRESS
 + AH = 13h
 + DS:DX -> node ID, 12 bytes blank-padded
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +     ES:BX = configuration table address on given machine
 +SeeAlso: AH=03h
 +----------6F14-------------------------------
 +INT 6F - 10-NET v3.3 - GET REMOTE MEMORY
 + AH = 14h
 + BX:SI = address of remote memory
 + CX = length (<=1024 bytes)
 + DS:DX -> node ID, 12 bytes blank-padded
 + DS:DI -> area to receive remote memory image
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +     CX = amount of memory copied to DS:SI
 +----------6F1501-----------------------------
 +INT 6F - 10-NET v3.3 - GET SHARED DEVICE ENTRY
 + AX = 1501h
 + BX = zero-based index
 + DS:SI -> node ID, 12 bytes blank-padded
 + ES:DI -> 85-byte buffer for shared device table entry (see below)
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +     ES:DI buffer contains shared device table entry of BXth device:
 +SeeAlso: AX=1502h,AX=1503h
 +
 +Format of shared device table entry:
 +Offset Size Description
 + 00h  8 BYTEs device
 + 08h  8 BYTEs alias
 + 10h 64 BYTEs path
 + 50h  8 BYTEs password
 + 58h BYTE access
 + 59h  4 BYTEs mask
 +----------6F1502-----------------------------
 +INT 6F - 10-NET v3.3 - SET SHARED DEVICE ENTRY
 + AX = 1502h
 + DS:SI -> node ID, 12 bytes blank-padded
 + ES:DI -> valid shared device table entry
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +SeeAlso: AX=1501h,AX=1503h
 +----------6F1503-----------------------------
 +INT 6F - 10-NET v3.3 - DELETE SHARED DEVICE ENTRY
 + AX = 1503h
 + BX = zero-based index
 + DS:SI -> node ID, 12 bytes blank-padded
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +SeeAlso: AX=1501h,AX=1502h
 +----------6F17-------------------------------
 +INT 6F - 10-NET v3.3 - MOUNT
 + AH = 17h
 + AL = local drive number (0=A:)
 + BL = remote drive letter or '1'..'3' for LPTn or '4' or '5' for COMx
 + DS:DX -> node ID, 12 bytes blank-padded
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +SeeAlso: AH=18h
 +----------6F18-------------------------------
 +INT 6F - 10-NET v3.3 - UNMOUNT
 + AH = 18h
 + AL = local drive number (0=A:)
 + BL = type
 +     00h     disk
 +     01h-03h LPTn
 +     04h,05h COMx
 +Return: CF set on error
 +     AX = error code (see AH=00h)
 + CF clear if successful
 +SeeAlso: AH=17h
 +----------70---------------------------------
 +INT 70 - IRQ8 - CMOS REAL-TIME CLOCK
 +Notes: this interrupt is called when the real-time clock chip generates an
 +   alarm or periodic interrupt, among others.  The periodic interrupt
 +   occurs 1024 times per second, although many BIOSes turn it off in
 +   the INT 70h handler unless in an event wait (see INT 15/AH=83h or
 +   INT 15/AH=86h).
 + may be masked by setting bit 0 on I/O port A1h
 +SeeAlso: INT 08,INT 0F"HP 95LX",INT 15/AH=01h"Amstrad",INT 15/AH=83h
 +SeeAlso: INT 15/AH=86h,INT 1A/AH=02h,INT 58"DESQview"
 +----------70---------------------------------
 +INT 70 - VIRUS "Stupid" - ???
 +SeeAlso: INT 6B"VIRUS",INT E0"VIRUS"
 +----------71---------------------------------
 +INT 71 - IRQ9 - REDIRECTED TO INT 0A BY BIOS
 +Notes: may be masked by setting bit 1 on I/O port A1h
 + the default BIOS handler invokes INT 0A for compatibility, since the
 +   pin for IRQ2 on the PC expansion bus became the pin for IRQ9 on the
 +   AT expansion bus.
 + under DESQview, only the INT 15h vector and BASIC segment address (the
 +   word at 0000h:0510h) may be assumed to be valid for the handler's
 +   process
 +SeeAlso: INT 0A,INT 59
 +----------72---------------------------------
 +INT 72 - IRQ10 - RESERVED
 +Note: may be masked by setting bit 2 on I/O port A1h
 +SeeAlso: INT 5A
 +----------73---------------------------------
 +INT 73 - IRQ11 - RESERVED
 +Note: may be masked by setting bit 3 on I/O port A1h
 +SeeAlso: INT 5B
 +----------74---------------------------------
 +INT 74 - IRQ12 - POINTING DEVICE (PS)
 +Notes: may be masked by setting bit 4 on I/O port A1h
 + under DESQview, only the INT 15h vector and BASIC segment address (the
 +   word at 0000h:0510h) may be assumed to be valid for the handler's
 +   process
 +SeeAlso: INT 33,INT 5C
 +----------75---------------------------------
 +INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION (AT and up)
 +   redirected to INT 02 by the BIOS, for compatibility with the PC
 +Notes: may be masked by setting bit 5 on I/O port A1h
 + not all clones wire the coprocessor to generate this IRQ; some systems
 +   generate an NMI (see INT 02) or assert the -ERROR pin on the CPU
 +   (see INT 10"COPROCESSOR")
 + under DESQview, only the INT 15h vector and BASIC segment address (the
 +   word at 0000h:0510h) may be assumed to be valid for the handler's
 +   process
 +SeeAlso: INT 10"COPROCESSOR",INT 5D
 +----------76---------------------------------
 +INT 76 - IRQ14 - HARD DISK CONTROLLER (AT and later)
 +Note: may be masked by setting bit 6 on I/O port A1h
 +SeeAlso: INT 0E"IRQ6",INT 5E
 +----------77---------------------------------
 +INT 77 - IRQ15 - RESERVED (AT,PS)
 +Note: may be masked by setting bit 7 on I/O port A1h
 +SeeAlso: INT 5F
 +----------77---------------------------------
 +INT 77 - IRQ15 - POWER CONSERVATION (Compaq SLT/286)
 +Note: may be masked by setting bit 7 on I/O port A1h
 +SeeAlso: INT 15/AX=4600h,INT 5F
 +----------78---------------------------------
 +INT 78 - UofSalford DBOS DOS extender - API
 + BYTE following INT instruction contains function code
 +     03h switch to protected mode
 +     1Eh set real-mode memory size (specify how much real-mode memory
 +       to leave free when running FTN77 programs)
 +     22h uninstall
 + ???
 +Return: ???
 +Note: DBOS supports functions 00h through 50h
 +----------78---------------------------------
 +INT 78 - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ0
 +Note: this vector is overwritten when GO32 starts but is not restored
 +SeeAlso: INT 08,INT 10/AH=FFh"GO32",INT 79"GO32"
 +----------78---------------------------------
 +INT 78 - AutoCAD 10 ADI for Plotters
 + AX = function
 +     0001h initialize comm port and reset plotter
 +     BX = ??? (comm port?)
 +     0002h close plotter
 +     0003h move (pen up)
 +     BX = new X position
 + CX = new Y position
 +     0004h move (pen down)
 +     BX = new X position
 + CX = new Y position
 +     0005h select pen
 +     BX = pen number
 +     0006h select drawing speed
 +     BX = drawing speed N
 +     0007h select line style
 +     BX = line style N
 +     0008h return pen to pen carrier??? (called before change-pen cmd)
 +Return: ???
 +SeeAlso: INT 7A"AutoCAD",INT 7B"AutoCAD"
 +----------78---------------------------------
 +INT 78 - ADP-60 IDE controller - ORIGINAL INT 13
 +SeeAlso: INT 79"ADP-60"
 +----------7800-------------------------------
 +INT 78 - TARGA.DEV - CMC International SCSI device driver - SET I/O PORT
 + AH = 00h
 + DX = interface board I/O port
 +Return: CF set on error
 +     AL = error code
 + 00h illegal command given to SCSI code
 + 01h invalid I/O port specified (must be from 100H to 3F8H, and
 +     must be on an 8-port boundary)
 + 02h invalid DMA channel specified (must be from 1 to 3)
 + 03h invalid SCSI board number specified (must be from 0 to 7)
 + 04h error from data register test during self-test
 + 05h SCSI input signals not all 0 when SCSI RST activated
 + 06h SCSI input signals not all 0 before selecting a SCSI device
 + 07h BSY signal is active; SCSI bus is busy
 + 08h SCSI board not selected, BSY signal did not come on in
 +     response to raising SEL
 + 09h time-out waiting for status state, signifying end of DMA
 +     transfer
 +Note: if this routine is not called, the port is the driver's default
 +   (usually 0280h or 0300h)
 + an installation check is performed by TARGA.DEV upon initialization
 +   by checking for the string "SCSI" at offset 03h into the interrupt
 +   handler
 +SeeAlso: AH=01h,AH=02h
 +----------7801-------------------------------
 +INT 78 - TARGA.DEV - GET I/O PORT
 + AH = 01h
 +Return: DX = current interface board I/O port
 +SeeAlso: AH=00h,AH=03h"TARGA"
 +----------7802-------------------------------
 +INT 78 - TARGA.DEV - SET DMA CHANNEL
 + AH = 02h
 + AL = interface board DMA channel
 +Return: CF set on error
 + AL = error code (see AH=00h)
 +Note: if this routine is not called, the DMA channel is the driver's default
 +   (usually 3)
 +SeeAlso: AH=00h,AH=03h"TARGA"
 +----------7803-------------------------------
 +INT 78 - TARGA.DEV - GET DMA CHANNEL
 + AH = 03h
 +Return: AL = current interface board DMA channel
 +SeeAlso: AH=01h,AH=02h
 +----------7804-------------------------------
 +INT 78 - TARGA.DEV - SET SCSI DEVICE NUMBER
 + AH = 04h
 + AL = SCSI device number
 +Return: CF set on error
 + AL = error code (see AH=00h)
 +Note: if this routine is not called, the device number used is the driver's
 +   default (usually 0)
 +SeeAlso: AH=02h,AH=05h
 +----------7805-------------------------------
 +INT 78 - TARGA.DEV - GET SCSI DEVICE NUMBER
 + AH = 05h
 +Return: AL = current SCSI device number
 +SeeAlso: AH=03h"TARGA",AH=04h
 +----------7806-------------------------------
 +INT 78 - TARGA.DEV - SET/CLEAR EARLY RETURN MODE
 + AH = 06h
 + AL = 00h clear early return mode
 +    = 01h set early return mode
 +Note: if early return mode is set then SCSI will return with no errors
 +   when the last DMA transfer is started in a call with AH=13h or AH=14h
 + if this routine is not called, early return mode is cleared
 +SeeAlso: AH=13h,AH=14h,AH=15h
 +----------7808-------------------------------
 +INT 78 - TARGA.DEV - INTERFACE BOARD SELF-TEST
 + AH = 08h
 +Return: CF set on error
 + AL = error code (see AH=00h)
 +Note: the SCSI bus is also reset
 +SeeAlso: AH=09h
 +----------7809-------------------------------
 +INT 78 - TARGA.DEV - RESET SCSI BUS
 + AH = 09h
 +Return: AL = error code if carry set (see AH=00h)
 +SeeAlso: AH=08h
 +----------7810-------------------------------
 +INT 78 - TARGA.DEV - SEND SCSI COMMAND
 + AH = 10h
 + DS:SI -> command bytes
 +Return: AH = SCSI status byte
 + CF clear if successful
 +     AL = SCSI message byte
 + CF set on error
 +     AL = error code (see AH=00h)
 +SeeAlso: AH=11h,INT 21/AX=4403h"ST-01"
 +
 +Format of SCSI Command:
 +Offset Size Description
 + 00h BYTE length of command
 + 01h ??? command bytes
 +----------7811-------------------------------
 +INT 78 - TARGA.DEV - SEND SCSI COMMAND, RECEIVE DATA (PROGRAMMED I/O)
 + AH = 11h
 + DS:SI -> command bytes
 + ES:BX -> data storage area
 + CX = number of data bytes to transfer
 +Return: AH = SCSI status byte
 + CF clear if successful
 +     AL = SCSI message byte
 + CF set on error
 +     AL = error code (see AH=00h)
 +Note: this command receives data internally one byte at a time
 +SeeAlso: AH=10h,AH=13h
 +
 +Format of SCSI Command:
 +Offset Size Description
 + 00h BYTE length of command
 + 01h ??? command bytes
 +----------7812-------------------------------
 +INT 78 - TARGA.DEV - SEND SCSI COMMAND AND DATA (PROGRAMMED I/O)
 + AH = 12h
 + DS:SI -> command bytes
 + ES:BX -> data storage area
 + CX = number of data bytes to transfer
 +Return: AH = SCSI status byte
 + CF clear if successful
 +     AL = SCSI message byte
 + CF set on error
 +     AL = error code (see AH=00h)
 +Note: this command sends data internally one byte at a time
 +SeeAlso: AH=14h
 +
 +Format of SCSI Command:
 +Offset Size Description
 + 00h BYTE length of command
 + 01h ??? command bytes
 +----------7813-------------------------------
 +INT 78 - TARGA.DEV - SEND SCSI COMMAND, RECEIVE DATA (DMA)
 + AH = 13h
 + DS:SI -> command bytes
 + ES:BX -> data storage area
 + DX:CX = number of data bytes to transfer
 +Return: AH = SCSI status byte (if early return mode is clear)
 + CF clear if successful
 +     AL = SCSI message byte (if early return mode is clear)
 + CF set on error
 +     AL = error code (see AH=00h)
 +Note: this command receives data using DMA
 +SeeAlso: AH=11h,AH=12h
 +
 +Format of SCSI Command:
 +Offset Size Description
 + 00h BYTE length of command
 + 01h ??? command bytes
 +----------7814-------------------------------
 +INT 78 - TARGA.DEV - SEND SCSI COMMAND AND DATA (DMA)
 + AH = 14h
 + DS:SI -> command bytes
 + ES:BX -> data storage area
 + DX:CX = number of data bytes to transfer
 +Return: AH = SCSI status byte (if early return mode is clear)
 + CF clear if successful
 +     AL = SCSI message byte (if early return mode is clear)
 + CF set on error
 +     AL = error code (see AH=00h)
 +Note: this command sends data using DMA
 +SeeAlso: AH=12h,AH=13h
 +
 +Format of SCSI Command:
 +Offset Size Description
 + 00h BYTE length of command
 + 01h ??? command bytes
 +----------7815-------------------------------
 +INT 78 - TARGA.DEV - FINISH DATA TRANSFER (DMA)
 + AH = 15h
 +Return: AH = SCSI status byte
 + CF clear if successful
 +     AL = SCSI message byte
 + CF set on error
 +     AL = error code (see AH=00h)
 +Note: if AH=06h was previously called to set the early return mode, this
 +   function finishes a command AH=13h or AH=14h which returned before
 +   the last DMA transfer was finished
 +SeeAlso: AH=06h,AH=13h,AH=14h
 +----------79---------------------------------
 +INT 79 - AVATAR.SYS - FAST GET KEYSTROKE
 +Return: CF set if no keystroke available
 +     AX = FFFFh
 + CF clear if key pressed
 +     AX = keystroke
 +Notes: if a keystroke is available, it is removed from the keyboard buffer
 +   before being returned
 + AVATAR.SYS is a CON driver by George Adam Stanislav which interprets
 +   AVATAR command codes just as ANSI.SYS interprets ANSI commands
 +SeeAlso: INT 29
 +----------79---------------------------------
 +INT 79 - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ1
 +Note: this vector is overwritten when GO32 starts but is not restored
 +SeeAlso: INT 09,INT 78"GO32",INT 7A"GO32"
 +----------79---------------------------------
 +INT 79 U - ADP-60 IDE adapter - ???
 +SeeAlso: INT 78"ADP-60"
 +----------790001-----------------------------
 +INT 79 U - AutoCAD Device Interface - DIGITIZER - INITIALIZE
 + AX = 0001h
 +Return: AX = 0001h ??? self-test result???
 + BX = 0001h
 +SeeAlso: AX=0002h,AX=0003h,INT 7A"AutoCAD"
 +----------790002-----------------------------
 +INT 79 U - AutoCAD Device Interface - DIGITIZER - CLOSE
 + AX = 0002h
 +SeeAlso: AX=0001h,AX=0003h
 +----------790003-----------------------------
 +INT 79 U - AutoCAD Device Interface - DIGITIZER - GET DIGITIZER STATUS
 + AX = 0003h
 +Return: AX = button state
 +     0002h no button pressed
 +     BX = X coordinate
 + CX = Y coordinate
 +     0003h Pick button (0,A,B,C,D) pressed
 +     BX = X coordinate
 + CX = Y coordinate
 +     0005h other button (1-9) pressed
 +     BX = number of button - 1
 + CX = X coordinate
 + DX = Y coordinate
 +Note: these return values are valid for the Houston Instruments HiPad Plus
 +   9236 digitizer with a 16-button cursor
 +SeeAlso: AX=0001h,AX=0002h
 +----------7A---------------------------------
 +INT 7A U - Topware Network Operating System - ???
 + AL = ???
 + ???
 +Return: ???
 +SeeAlso: INT 21/AH=FFh"Topware",INT 2F/AX=FF00h
 +----------7A---------------------------------
 +INT 7A - AutoCAD Device Interface
 + ???
 +SeeAlso: INT 61/AX=0007h"OPTIMA",INT 78"AutoCAD",INT 79/AX=0001h
 +SeeAlso: INT 7B"AutoCAD"
 +----------7A---------------------------------
 +INT 7A - X.PC Packet software interface
 +        ES:BX -> parameter block
 +SeeAlso: INT 60/AX=01FFh
 +----------7A---------------------------------
 +INT 7A - Novell NetWare - LOW-LEVEL API - Notes
 +Note: this interrupt is used for IPX/SPX access in NetWare versions through
 +   2.0a; in later versions, you should use INT 2F/AX=7A00h to get an
 +   entry point even though INT 7A still exists.  For both INT 7A and
 +   the FAR entry point, BX contains the function number; IPX is
 +   sometimes called internally with BX bit 15 set.
 +SeeAlso: INT 2F/AX=7A00h,INT 64"Novell",INT 7A/BX=0000h
 +----------7A---------------------------------
 +INT 7A - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ2
 +Note: this vector is overwritten when GO32 starts but is not restored
 +SeeAlso: INT 0A,INT 79"GO32",INT 7B"GO32"
 +----------7A----BX0000-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - OPEN SOCKET
 + BX = 0000h
 + AL = mode
 +     00h open until close or terminate
 +     FFh open until close
 + DX = socket number (high byte in DL)
 +     0000h dynamic allocation
 +     else  socket to open
 +Return: AL = return code
 +     00h success
 + DX = socket number
 +     FEh socket table full
 +     FFh socket already open
 +SeeAlso: BX=0001h
 +----------7A----BX0001-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - CLOSE SOCKET
 + BX = 0001h
 + DX = socket (high byte in DL)
 +SeeAlso: BX=0000h
 +----------7A----BX0002-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - GET LOCAL TARGET
 + BX = 0002h
 + ES:SI -> target internetwork address
 + ES:DI -> 6-byte buffer for local target
 +Return: AL = return code
 +     00h success
 +        CX = expected one-way transfer time (clock ticks)
 +        ES:DI -> local target
 +     FAh unsuccessful
 +Note: The internetwork address consists of a 4-byte network address followed
 +   by a 6-byte node address.  The local target is only a 6-byte node
 +   address.  If the target is in the same network, the local target is
 +   just the node address of target; otherwise, the local target is the
 +   node address of the bridge that leads to the target.
 +SeeAlso: BX=0009h
 +----------7A----BX0003-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - SEND PACKET
 + BX = 0003h
 + ES:SI -> Event Control Block (see below)
 +SeeAlso: BX=0004h,BX=000Fh
 +
 +Format of Event Control Block:
 +Offset Size Description
 + 00h DWORD Link
 + 04h DWORD -> Event Service Routine (00000000h if none)
 + 08h BYTE in use flag
 + 09h BYTE completion code
 + 0Ah WORD socket (high byte first [big-endian])
 + 0Ch  4 BYTES IPX workspace
 + 10h 12 BYTES driver workspace
 + 1Ch  6 BYTES immediate local node address
 + 22h WORD fragment count
 + 26h var fragment descriptors
 + Offset Size Description
 + 00h DWORD -> fragment data
 + 04h WORD size of fragment in bytes.
 +Notes: ESR is a far procedure that is called when the ECB has been handled.
 +   On call, the in use flag is zero if the ECB has been handled,
 +   non-zero otherwise. If the flag is zero, the completion code holds
 +   the result of the event:
 +     00h success
 +     F9h event should not be cancelled
 +     FCh cancelled
 +     FDh malformed packet
 +     FEh packet undeliverable
 +     FFh physical error
 + the first fragment should start with an IPX header
 + all fragments are concatenated and sent in one piece
 + node address FF FF FF FF FF FF broadcasts to all nodes
 +
 +Event Service Routine called with:
 + AL = caller's identity (00h = AES, FFh = IPX)
 + ES:SI -> event control block
 + interrupts disabled
 +
 +Format of IPX header:
 +Offset Size Description
 + 00h WORD checksum (high byte first [big-endian])
 + 02h WORD length in bytes (high byte first) of total packet
 + 04h BYTE transport control
 + 05h BYTE packet type
 + 00h unknown packet type
 + 01h routing information packet
 + 02h echo packet
 + 03h error packet
 + 04h packet exchange packet (always use this one)
 + 05h SPX packet
 + 11h (used internally)
 + 06h 10 BYTES destination internetwork address
 + 10h WORD destination socket (high byte first)
 + 12h 10 BYTES source internetwork address
 + 1Ch WORD source socket
 +----------7A----BX0004-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - LISTEN FOR PACKET
 + BX = 0004h
 + ES:SI -> Event Control Block (see BX=0003h)
 +SeeAlso: BX=0003h
 +----------7A----BX0005-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - SCHEDULE IPX EVENT
 + BX = 0005h
 + AX = delay time
 + ES:SI -> Event Control Block (see BX=0003h)
 +SeeAlso: BX=0006h,BX=0007h,BX=0008h
 +----------7A----BX0006-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - CANCEL EVENT
 + BX = 0006h
 + ES:SI -> Event Control Block (see BX=0003h)
 +Return: AL = return code
 +     00h success
 +     F9h event in use
 +     FFh unsuccessful, event not in use
 +SeeAlso: BX=0005h
 +----------7A----BX0007-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - SCHEDULE SPECIAL EVENT
 + BX = 0007h
 + AX = delay time
 + ES:SI -> Event Control Block (see BX=0003h)
 +SeeAlso: BX=0006h
 +----------7A----BX0008-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - GET INTERVAL MARKER
 + BX = 0008h
 +Return: AX = interval marker in clock ticks
 +SeeAlso: BX=0005h
 +----------7A----BX0009-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - GET INTERNETWORK ADDRESS
 + BX = 0009h
 + ES:SI -> 10-byte buffer
 +Return: ES:SI -> own internetwork address
 +SeeAlso: BX=0002h,BX=000Bh
 +----------7A----BX000A-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - RELINQUISH CONTROL
 + BX = 000Ah
 +Note: this call permits the IPX driver to do some work
 +SeeAlso: INT 15/AX=1000h,INT 2F/AX=1680h
 +----------7A----BX000B-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - DISCONNECT FROM TARGET
 + BX = 000Bh
 + ES:SI -> internetwork address
 +Note: only use in point-to-point networks
 +SeeAlso: BX=0002h,BX=0009h
 +----------7A----BX000C-----------------------
 +INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL
 + BX = 000Ch
 + ???
 +Return: ???
 +----------7A----BX000D-----------------------
 +INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL
 + BX = 000Dh
 + ???
 +Return: ???
 +----------7A----BX000E-----------------------
 +INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL
 + BX = 000Eh
 + ???
 +Return: ???
 +----------7A----BX000F-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - INTERNAL - SEND PACKET
 + BX = 000Fh
 + ES:SI -> Event Control Block (see BX=0003h)
 +Note: similar to function 0003h, but apparently does not allow multiple
 +   fragments
 +SeeAlso: BX=0003h
 +----------7A----BX0010-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - SPX INSTALLATION CHECK
 + BX = 0010h
 + AL = 00h
 +Return: AL = FFh if SPX loaded
 +SeeAlso: BX=0015h
 +----------7A----BX0011-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - ESTABLISH SPX CONNECTION
 + BX = 0011h
 + AL = retry count
 + AH = watchdog flag
 + ES:SI -> Event Control Block (see BX=0003h)
 +Return: DX = assigned connection number
 +Notes: there should always be at least two SPX ECB's listening to a socket, so
 +   that NetWare can perform its internal packet exchanges
 + The first fragment should start with a SPX header.  Fill in all
 +   destination addresses.
 +SeeAlso: BX=0000h,BX=0012h,BX=0013h,BX=0014h
 + 
 +Format of SPX header:
 +Offset Size Description
 + 00h WORD checksum (high byte first [big-endian])
 + 02h WORD length in bytes of total packet (high byte first)
 + 04h BYTE transport control
 + 05h BYTE packet type
 + 06h 10 BYTEs destination internet address
 + 10h WORD destination socket (high byte first)
 + 12h 10 BYTEs source internet address
 + 1Ch WORD source socket (high byte first)
 + 1Eh BYTE connection control
 + 1Fh BYTE datastreamtype
 + 20h WORD source connection ID
 + 22h WORD destination connection ID
 + 24h WORD sequence number
 + 26h WORD acknowledge number
 + 28h WORD allocation number
 +----------7A----BX0012-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - LISTEN FOR SPX CONNECTION
 + BX = 0012h
 + AL = retry count
 + AH = watchdog flag
 + ES:SI -> Event Control Block (see BX=0003h)
 +Notes: there should always be at least two SPX ECB's listening to a socket, so
 +   that NetWare can perform its internal packet exchanges
 +SeeAlso: BX=0011h,BX=0013h,BX=0014h
 +----------7A----BX0013-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - TERMINATE SPX CONNECTION
 + BX = 0013h
 + DX = connection ID to terminate
 + ES:SI -> Event Control Block (see BX=0003h)
 +SeeAlso: BX=0011h,BX=0012h,BX=0014h
 +----------7A----BX0014-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - ABORT SPX CONNECTION
 + BX = 0014h
 + DX = connection ID to terminate
 +Note: this function does not tell the other side that the connection has been
 +   terminated
 +SeeAlso: BX=0011h,BX=0013h
 +----------7A----BX0015-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - GET SPX STATUS
 + BX = 0015h
 + DX = connection ID
 + ES:SI -> status buffer (see below)
 +Return: AL = return code
 +     00h connection still valid
 + ES:SI -> status buffer filled
 +SeeAlso: BX=0010h
 + 
 +Format of status buffer:
 +Offset Size Description
 + 00h BYTE status
 + 01h BYTE flag
 + 02h WORD source connection (high byte first [big-endian])
 + 04h WORD destination connection (high byte first)
 + 06h WORD sequence number (high byte first)
 + 08h WORD acknowledge number (high byte first)
 + 0Ah WORD allocation number (high byte first)
 + 0Ch WORD remote acknowledge number (high byte first)
 + 0Eh WORD remote allocation number (high byte first)
 + 10h WORD connection socket (high byte first)
 + 12h  6 BYTEs immediate node address
 + 18h 10 BYTEs destination internet address
 + 22h WORD retransmit count (high byte first)
 + 24h WORD estimated roundtrip delay
 + 26h WORD retransmitted packets
 + 28h WORD suppressed packets
 +----------7A----BX0016-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - SEND SPX PACKET
 + BX = 0016h
 + DX = connection ID
 + ES:SI -> Event Control Block (see BX=0003h)
 +Note: CX may need to be 0001h ???
 +SeeAlso: BX=0011h,BX=0017h
 +----------7A----BX0017-----------------------
 +INT 7A - Novell NetWare Low-Level API (IPX) Driver - LISTEN FOR SPX PACKET
 + BX = 0017h
 + DX = connection ID
 + ES:SI -> Event Control Block (see BX=0003h)
 +Note: CX may need to be 0001h ???
 +SeeAlso: BX=0011h,BX=0016h
 +----------7A----BX0018-----------------------
 +INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL
 + BX = 0018h
 + ???
 +Return: ???
 +----------7A----BX0019-----------------------
 +INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL
 + BX = 0019h
 + ???
 +Return: ???
 +----------7A----BX001A-----------------------
 +INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL
 + BX = 001Ah
 + ???
 +Return: ???
 +----------7A----BX001B-----------------------
 +INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL
 + BX = 001Bh
 + ???
 +Return: ???
 +----------7A04-------------------------------
 +INT 7A - IBM 3270 Workstation Program API - CREATE A QUEUE
 + AH = 04h
 + ???
 +Return: ???
 +SeeAlso: AH=06h
 +----------7A06-------------------------------
 +INT 7A - IBM 3270 Workstation Program API - DELETE A QUEUE
 + AH = 06h
 + ???
 +Return: ???
 +SeeAlso: AH=04h
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - SESSION SERVICES
 + AH = 09h
 + BX = 8020h (synchronous request)
 + CX = 0000h
 + DX = ID of session manager (SESSMGR)
 + AL = service
 +     01h get session ID
 +     02h get session info
 +     04h dettach from session
 +     05h attach to session
 +     06h get list of windows available
 +     07h get environment of window
 +     08h get 'PIF' (program information file) info
 +     0Ah get base window ID
 +     0Bh get cursor info
 + ES:DI -> control block
 +Return: ???
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - KEYBOARD SERVICES
 + AH = 09h
 + BX = 8020h (synchronous request)
 + CX = 0000h
 + DX = ID of keyboard manager
 + AL = service
 +     01h connect to keyboard
 +     02h disconnect from keyboard
 +     03h read from keyboard
 +     04h send keystroke to session
 +     05h disable input
 +     06h enable input
 +     07h update status code
 + ES:DI -> control block
 +Return: ???
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - WINDOW SERVICES
 + AH = 09h
 + BX = 8020h (synchronous request)
 + CX = 00FFh
 + DX = ID of window service controller (WSCTRL)
 + AL = service
 +     01h connect to WS control
 +     02h disconnect from WS control
 +     03h add a window
 +     04h change window's position on screen
 +     05h change window's size
 +     06h change window's color
 +     07h change window's position in the presentation space
 +     08h hide/unhide toggle
 +     09h enlarge/reduce toggle
 +     0Ah change screen background color
 +     0Bh get window's position on screen
 +     0Ch get window's size
 +     0Dh get window's color
 +     0Eh get window's position in the presentation space
 +     0Fh determine whether hidden
 +     10h determine whether enlarged
 +     11h get background color
 +     12h get window names
 +     13h delete all windows from profile
 +     14h pick active window
 +     15h redraw screen
 +     16h redraw window
 +     17h delete a window from profile
 +     18h get active window
 +     19h get active screen
 +     1Ah get window data
 +     1Bh change window data
 +     1Ch select active screen
 + ES:DI -> control block
 +Return: ???
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - PRESENTATION SPACE SERVICES
 + AH = 09h
 + BX = 8020h
 + CX = 00FFh
 + DX = ID of PCPSM
 + AL = service
 +     01h define presentation space
 +     02h delete presentation space
 +     03h display presentation space
 +     04h position cursor in presentation space
 +     05h change default presentation space
 + ES:DI -> control block
 +Return: ???
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - 3270 EMULATION
 + AH = 09h
 + BX = 8020h
 + CX = 00FFh
 + DX = ID of 3270EML
 + AL = service
 +     01h connect
 +     02h disconnect
 + ES:DI -> control block
 +Return: ???
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - OPERATOR INFORMATION AREA
 + AH = 09h
 + BX = 8020h
 + CX = 00FFh
 + DX = ID of OIAM
 + AL = service
 +     01h read Operator Information Area
 +     02h read OIA subset
 + ES:DI -> control block
 +Return: ???
 +Note: the OIA is the 25th line on the Host session
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - TRANSLATE DATA
 + AH = 09h
 + BX = 8020h
 + CX = 00FFh
 + DX = ID of XLATE
 + AL = service
 +     01h translate from host characters to ASCII and vice versa
 + (determined by control block byte 11)
 + ES:DI -> control block
 +Return: ???
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - COPY SERVICE
 + AH = 09h
 + BX = 8020h
 + CX = 00FFh
 + DX = ID of copy service
 + AL = service
 +     01h copy string from one presentation space to another
 +     02h copy block from one presentation space to another
 +     03h connect to PC session for copy
 +     04h disconnect PC session from copy
 + ES:DI -> control block
 +Return: ???
 +----------7A09--BX8020-----------------------
 +INT 7A - IBM 3270 Workstation Program API - Multi-DOS
 + AH = 09h
 + BX = 8020h
 + CX = 00FFh
 + ES:DI -> control block
 + DX = ID of INDJQRY  
 + get environment size
 +    = ID of INDJASY
 + request DOS functions from workstation
 +    = ID of MEMORY
 + AL = function
 +     01h allocate memory
 +     02h deallocate memory
 +     03h modify allocated size
 +Return: ???
 +----------7A09-------------------------------
 +INT 7A - IBM 3270 Workstation Program API - HOST SERVICES
 + AH = 09h
 + BX = request type (4000h async, 8028h synchronous)
 + CX = 0000h
 + DX = ID of MFIC
 + AL = service
 +    01h connect to host
 +    02h disconnect from host
 +    03h read DFT structured data from host
 +    04h write DFT structured data to host
 +    05h create a host buffer
 + ES:DI -> control block
 +----------7A13-------------------------------
 +INT 7A - IBM 3270 Workstation Program API - GET DATA FROM A QUEUE
 + AH = 13h
 + ???
 +Return: ???
 +----------7A7A-------------------------------
 +INT 7A - Canon IX-30F Image Scanner SI3.SYS - INTERFACE
 + AH = 7Ah
 + ???
 +Return: AX = 0000h success
 +      000Eh undefined function code
 +Note: this interface is normally on INT 7A but can be changed via device
 +   driver command line arguments
 +----------7A81-------------------------------
 +INT 7A - IBM 3270 Workstation Program API - RESOLVE A GATE NAME
 + AH = 81h
 + ES:DI -> 8-char blank-padded gate name
 + "SESSMGR ", "KEYBOARD", "WSCTRL ", "MFIC    ", "PCPSM ",
 + "3270EML ", "COPY    ", "XLATE ", "OIAM    ", "MEMORY ",
 + "INDJQRY ", or "INDJASY "
 +Return: DX = gate ID
 +----------7A83-------------------------------
 +INT 7A - IBM 3270 Workstation Program API - GET COMPLETION RESULTS
 + AH = 83h
 + ???
 +Return: ???
 +----------7AFDCB-----------------------------
 +INT 7A - IBM Personal Communications/3270 - INSTALLATION CHECK
 + AX = FDCBh
 +Return: DX:AX -> PCS/3270 signature block if loaded (see below)
 +
 +Format of signature block:
 +Offset Size Description
 + 04h WORD PCS/3270 signature (5741h)
 + 06h WORD version (0501h = PCS/3270 v1.0)
 +----------7AFE01-----------------------------
 +INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL SEND/RECEIVE FUNCTION
 + AX = FE01h
 + ???
 +Return: ???
 +SeeAlso: AX=FE02h
 +----------7AFE02-----------------------------
 +INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL SEND/RECEIVE FUNCTION
 + AX = FE02h
 + ???
 +Return: ???
 +SeeAlso: AX=FE01h
 +----------7AFF01-----------------------------
 +INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API INITIALIZATION
 + AX = FF01h
 + ES:DI -> API function handler routine
 +Return: CX = 1200h
 +SeeAlso: AX=FF02h,AX=FF03h
 +----------7AFF02-----------------------------
 +INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API TERMINATION
 + AX = FF02h
 +Return: CX = 1200h
 +SeeAlso: AX=FF01h
 +----------7AFF03-----------------------------
 +INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API INITIALIZATION
 + AX = FF03h
 + ES:DI -> send/receive function handler routine
 +Return: CX = 1200h
 +SeeAlso: AX=FF01h
 +----------7AFF04-----------------------------
 +INT 7A U - IBM PC3270 EMUL PROG v3 - INTERNAL ???
 + AX = FF04h
 + ES:DI -> ???
 +Return: CX = 1200h
 +----------7B---------------------------------
 +INT 7B - Btrieve API (single user)
 + DS:DX -> 38-byte parameter record (see below)
 +Return: return code field set
 +Note: Btrieve sets low byte of vector to 33h; this serves as the installation
 +   check
 +SeeAlso: INT 21/AX=3000h"Btrieve",INT 2F/AX=AB01h,INT 7F/AX=0200h
 +
 +Format of Btrieve parameter record:
 +Offset Size Description
 + 00h DWORD pointer to data buffer
 + 04h WORD data buffer length
 + 06h DWORD pointer to 90-byte record containing positioning info
 + (should be same for all calls for same file)
 + 0Ah DWORD pointer to 38-byte FCB info buffer
 + (should be same for all calls for same file)
 + 0Eh WORD function code (see below)
 + 10h DWORD pointer to file name/key buffer
 + 14h BYTE key length
 + 15h BYTE key number
 + 16h DWORD pointer to status code (see below)
 + 1Ah WORD interface code (version specific)
 +  6176h version 5.10
 +
 +Values for function code:
 + 00h open
 + 01h close
 + 02h insert
 + 03h update
 + 04h delete
 + 05h get_equal
 + 06h get_next
 + 07h get_prev
 + 08h get_greater
 + 09h get_gr_eql
 + 0Ah get_less
 + 0Bh get_less_eq
 + 0Ch get_first
 + 0Dh get_last
 + 0Eh create
 + 0Fh stat
 + 10h extend
 + 11h set_dir: set directory information
 + 12h get_dir: get directory information
 + 13h begin_trans
 + 14h end_trans
 + 15h abort_trans
 + 16h get_pos: get record position number
 + 17h get_direct: get data by sending record position
 + 18h step_next
 + 19h stop
 + 1Ah version
 + 1Bh unlock
 + 1Ch reset
 + 1Dh set owner
 + 1Eh clear owner
 + 1Fh create supplemental index
 + 20h drop supplemental index
 + 21h step first
 + 22h step last
 + 23h step previous
 + 24h get next extended: get multiple records using a filter
 + 25h get previous extended: get multiple records using a filter
 + 26h step next extended: get multiple records using a filter
 + 27h step previous extended: get multiple records using a filter
 + 28h insert extended: insert one or more records
 + 31h ???
 + add 50 (32h) to any "get" operation to just return the key data
 + add 100 (64h) for a single-record wait lock (automatically released on next
 + get)
 + add 200 (C8h) for a single-record nowait lock (nowait lock returns error 54h
 + or 55h if record already locked)
 + add 300 (12Ch) for a multiple-record wait lock (not released until unlock
 + called)
 + add 400 (190h) for a multiple-record nowait lock (nowait lock returns error
 + 54h or 55h if record already locked)
 +
 +Values for status code:
 + 00h successful
 + 01h invalid operation
 + 02h I/O error
 + 03h file not open
 + 04h key value not found
 + 05h duplicate key value
 + 06h invalid key number
 + 07h different key number
 + 08h invalid positioning
 + 09h end of file
 + 0Ah modifiable key value error
 + 0Bh invalid file name
 + 0Ch file not found
 + 0Dh extended file error
 + 0Eh pre-image open error
 + 0Fh pre-image I/O error
 + 10h expansion error
 + 11h close error
 + 12h disk full
 + 13h unrecoverable error
 + 14h record manager inactive
 + 15h key buffer too short
 + 16h data buffer length overrun
 + 17h position block length
 + 18h page size error
 + 19h create I/O error
 + 1Ah number of keys
 + 1Bh invalid key position
 + 1Ch invalid record length
 + 1Dh invalid key length
 + 1Eh not a Btrieve file
 + 1Fh file already extended
 + 20h extended I/O error
 + 22h invalid extension name
 + 23h directory error
 + 24h transaction error
 + 25h transaction is active
 + 26h transaction control file I/O error
 + 27h end/abort transaction error
 + 28h transaction max files
 + 29h operation not allowed
 + 2Ah incomplete accelerated access
 + 2Bh invalid record address
 + 2Ch null key path
 + 2Dh inconsistent key flags
 + 2Eh access to file denied
 + 2Fh maximum open files
 + 30h invalid alternate sequence definition
 + 31h key type error
 + 32h owner already set
 + 33h invalid owner
 + 34h error writing cache
 + 35h invalid interface
 + 36h variable page error
 + 37h autoincrement error
 + 38h incomplete index
 + 39h expanded memory error
 + 3Ah compression buffer too short
 + 3Bh file already exists
 + 3Ch reject count reached
 + 3Dh work space too small
 + 3Eh incorrect descriptor
 + 3Fh invalid extended insert
 + 40h filter limit reached
 + 41h incorrect field offset
 + 4Ah automatic transaction abort
 + 4Eh deadlock detected
 + 50h conflict
 + 51h lock error
 + 52h lost position
 + 53h read outside transaction
 + 54h record in use
 + 55h file in use
 + 56h file table full
 + 57h handle table full
 + 58h incompatible open mode
 + 5Ah redirected device table full
 + 5Bh server error
 + 5Ch transaction table full
 + 5Dh incompatible lock type
 + 5Eh permission error
 + 5Fh session no longer valid
 + 60h communications environment error
 + 61h data message too small
 + 62h internal transaction error
 +----------7B---------------------------------
 +INT 7B - Eicon Access API (3270/5250 gateways)
 +----------7B---------------------------------
 +INT 7B U - AutoCAD ADI INTERFACE
 + AX = function
 +     0000h output blank line
 +     other ???
 +Return: ???
 +Note: called by AutoCAD to perform its output
 +SeeAlso: INT 78"AutoCAD",INT 7A"AutoCAD"
 +----------7B---------------------------------
 +INT 7B - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ3
 +Note: this vector is overwritten when GO32 starts but is not restored
 +SeeAlso: INT 0B,INT 10/AH=FFh"GO32",INT 7A"GO32",INT 7C"GO32"
 +----------7C---------------------------------
 +INT 7C U - IBM REXX88PC command language
 + ???
 +----------7C---------------------------------
 +INT 7C - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ4
 +Note: this vector is overwritten when GO32 starts but is not restored
 +SeeAlso: INT 0C,INT 7B"GO32",INT 7D"GO32"
 +----------7D---------------------------------
 +INT 7D - [proposed] - ALTERNATE MULTIPLEX INTERRUPT
 +Note: this interface proposal has been moved to INT 2D; there are no known
 +   implementations on INT 7D
 +SeeAlso: INT 2D, INT 2F
 +----------7D---------------------------------
 +INT 7D U - YTERM 1.4 - CLOCK SUPPORT
 +SeeAlso: INT 7E"YTERM"
 +----------7D---------------------------------
 +INT 7D - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ5
 +Note: this vector is overwritten when GO32 starts but is not restored
 +SeeAlso: INT 0D,INT 7C"GO32",INT 7E"GO32"
 +----------7E---------------------------------
 +INT 7E - RESERVED FOR DIP, Ltd. ROM LIBRARY
 +----------7E---------------------------------
 +INT 7E U - YTERM 1.4 - ???
 +SeeAlso: INT 7D"YTERM",INT 7F"YTERM"
 +----------7E---------------------------------
 +INT 7E - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ6
 +Note: this vector is overwritten when GO32 starts but is not restored
 +SeeAlso: INT 0E,INT 7D"GO32",INT 7F"GO32"
 +----------7F---------------------------------
 +INT 7F - IBM XGA - ???
 +----------7F---------------------------------
 +INT 7F - Halo88 - API
 + BX = function
 + 64h arc
 + 65h bar
 + 66h box
 + 67h circle
 + 68h clr
 + 69h default hatch style
 + 6Ah default line style
 + 6Bh delhcur
 + 6Ch delln / deltcur
 + 6Dh ellipse
 + 6Eh fill
 + 6Fh flood
 + 70h flood2
 + 71h init graphics
 + 72h init hcur
 + 73h init marker
 + 74h init tcur
 + 75h inqarc
 + 76h inqbknd
 + 77h inqclr
 + 78h inqerr
 + 79h inqgcur
 + 7Ah inqhcur
 + 7Bh inqmarker
 + 7Dh inqtcur
 + 7Eh inqtext
 + 7Fh lnabs
 + 80h lnrel
 + 81h markerabs
 + 82h markerrel
 + 83h moveabs
 + 84h movehcurabs
 + 85h movehcurrel
 + 86h moverel
 + 87h movetcurabs
 + 88h movetcurrel
 + 89h movefrom
 + 8Ah moveto
 + 8Bh pie
 + 8Ch polylnabs
 + 8Dh polylnrel
 + 8Eh ptabs
 + 8Fh ptrel
 + 91h setasp
 + 92h set color
 + 93h set font
 + 94h set hatch style
 + 95h set line style
 + 97h settext
 + 98h set text color
 + 99h btext
 + 9Ah setseg
 + 9Bh display
 + 9Ch setscreen
 + 9Eh close graphics
 + 9Fh ftinit
 + A0h ftlocate
 + A1h ftext
 + A5h set viewport
 + A6h set window
 + A7h set world
 + AAh ftcolor
 + ACh initlp
 + ADh inqasp
 + AEh inqdev
 + AFh inqdisplay
 + B0h inqft
 + B1h inqftcolor
 + B2h inqinterlace
 + B3h inqlpa
 + B4h inqlpg
 + B5h inqmode
 + B6h inqscreen
 + B7h inqversion
 + B8h roam
 + B9h scroll
 + BAh setieee
 + BBh set interlace
 + BCh shift
 + BDh start graphics
 + BEh vpan
 + CBh gwrite
 + CCh gread
 + CDh setxor
 + CEh rbox
 + CFh rcir
 + D0h rlnabs
 + D1h rlnrel
 + D2h delbox
 + D3h delcir
 + D5h setseg2
 + DCh worldoff
 + DDh mapwtod
 + DEh mapdtow
 + DFh mapwton
 + E0h mapntow
 + E1h mapdton
 + E2h mapntod
 + E3h inqworld
 + E4h inqviewport
 + E5h set line width
 + E6h lnjoint
 + E7h set locator
 + E8h read locator
 + E9h setdev
 + EBh setstext
 + ECh setstclr
 + EDh setstang
 + EEh stext
 + EFh inqstext
 + F0h setdegree
 + F1h inqstsize
 + F2h polyfabs
 + F3h polyfrel
 + F4h inqdrange
 + F5h inqstang
 + F6h orglocator
 + F7h inqlocator
 + F8h inqarea
 + F9h setipal
 + FAh setborder
 + FBh inqcrange
 + FEh setclip
 + FFh fcir
 +        100h setcrange
 +        101h setdrange
 +        102h setlattr
 +        103h polycabs
 +        104h polycrel
 +        108h memcom
 +        109h memexp
 +        10Ah memmov
 +        10Eh movefx
 +        10Fh movetx
 +        110h inqrgb
 +        111h save image
 +        112h restore image
 +        113h setapal
 +        114h setxpal
 +        118h inqtsize
 +        12Eh gprint
 +        130h setprn
 +        131h setpattr
 +        133h setbattr
 +        135h pexpand
 +        136h ptnorm
 +        137h pfnorm
 +        13Bh inqprn
 +        13Ch lopen
 +        13Dh lclose
 +        13Eh lappend
 +        13Fh lrecord
 +        140h lswitch
 +        142h inqfun
 +        15Dh lsetup
 +        15Eh lrest
 +        15Fh lsave
 + additional parameters on stack
 +Return: ???
 +Notes: Halo88 is a suite of graphics routines
 + according to Stuart Kemp, the code appears to make no provisions for
 +    chaining
 +----------7F---------------------------------
 +INT 7F - CONVERGENT TECHNOLOGIES ClusterShare CTOS ACCESS VECTOR
 + AL = request ID
 +     01h "Request"/"RequestDirect"
 + ES:BX -> pRq
 + DX ignored
 +     04h "Wait"
 + ES:BX -> ppMsgRet
 + DX = exchange
 +     05h "AllocExch"
 + ES:BX -> pExchRet
 +     06h "DeAllocExch"
 + DX = exchange
 +     07h "Check"
 + ES:BX -> ppMsgRet
 + DX = exchange
 + CX = 4354h ('CT')
 +Return: AX = status
 +     0000h successful
 +----------7F---------------------------------
 +INT 7F - Telebit ACS SERIAL I/O
 + ES:SI-> parameter block
 +Return: CF set on error
 + CF clear on success
 +Notes: the signature "PDGATEWRKSTNIF" appears just prior to the interrupt
 +   handler; this serves as the installation check
 +
 +Format of Telebit ACS parameter block:
 +Offset Size Description
 + 00h BYTE command
 +     3Ch status
 +     3Dh connect
 +     3Eh disconnect
 +     3Fh read
 +     40h data/command write
 +     41h clear receive buffer
 +     42h get configuration
 +     43h get receiver status
 +     44h raw write
 +     45h search servers
 +     46h set transmit buffer size
 + 01h BYTE gateway number
 + 02h BYTE reserved
 + 03h BYTE port
 + 04h 17 BYTES auxiliary buffer
 + 15h BYTE session
 + 16h WORD count of bytes passed to API
 + 18h DWORD buffer pointer passed to/from API
 + 1Ch WORD count of bytes passed from API
 + 1Eh BYTE return code (see below)
 +
 +Values for return code:
 + 00h - success
 + 01h - invalid session
 + 05h - servername invalid
 + 06h - netware fileserver bindery is locked
 + 07h communication server not active
 + 08h general failure in netware fileserver
 + 09h not logged into a fileserver
 + 10h connection table full
 + 11h no response from communication server
 + 12h connection attempt terminated abnormally
 + 13h connection refused - no sessions available
 + 14h gw_no/port already in use
 + 15h invalid connection response
 + 16h port invalid
 + 17h incorrect version in server response
 + 18h gw_no/port combination not configured
 + 19h initialization has not been completed
 + 20h no more sockets are available
 + 21h no active poolname
 + 23h FATAL internal interface error
 + 24h registration of host workstation failed - name is already in used
 + 25h registration of host workstation failed - workstation name table full
 + 26h registration of host workstation failed - only one session may be
 + registered for dial-in
 + FFh telebit acs api is busy - retry later
 +----------7F---------------------------------
 +INT 7F - Non-dedicated NetWare 2.x File Server - ENTER CONSOLE MODE
 +Notes: the installation check consists of checking for the signature "Lynn"
 +   in the four bytes preceding the interrupt handler; if present, the
 +   current program is running as a DOS task on a non-dedicated NetWare
 +   2.x file server.
 + Before placing the server into "console" mode, it is recommended that
 +   NetWare broadcast messages be disabled with INT 21/AX=DE00h.
 +SeeAlso: INT 21/AX=DE00h
 +----------7F---------------------------------
 +INT 7F U - YTERM - ???
 +SeeAlso: INT 7E"YTERM"
 +----------7F---------------------------------
 +INT 7F - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ7
 +Note: this vector is overwritten when GO32 starts but is not restored
 +SeeAlso: INT 0F,INT 7E"GO32"
 +----------7F---------------------------------
 +INT 7F - Canon IXHND2 Scanner Interface
 +----------7F---------------------------------
 +INT 7F - Alloy 386/MultiWare (MW386), Novell-Type Network Executive (NTNX)
 +Notes: the words at C800h:0000h and C800h:0002h will both be 584Eh if the
 +   MW386 multitasking system is present (i.e. signature "NXNX")
 + NTNX allows its API to be placed on a different interrupt than 7Fh at
 +   load time.  To determine the actual vector used, open the device
 +   "SPOOLER" with INT 21/AX=3D02h, place it in RAW mode with
 +   INT 21/AX=4400h and INT 21/AX=4401h, then read one byte which will
 +   be the actual interrupt number being used; the other interrupts may
 +   be found with INT 7F/AH=09h/CL=03h
 +----------7F---------------------------------
 +INT 7F - Alloy NetWare Support Kit (ANSK) v2.2+ - INSTALLATION CHECK
 +Note: a program may determine that it is running on an ANSK Slave by checking
 +   the five bytes at F000h:0000h for the ASCIZ signature "ANSK"; this
 +   address is RAM, and should not be written.  However, the above check
 +   will not work on Slaves with <1MB RAM or those using the SLIM.SYS
 +   device driver
 +----------7F00-------------------------------
 +INT 7F - Alloy NTNX, MW386 - SEMAPHORE LOCK AND WAIT
 + AH = 00h
 + DS:DX -> ASCIZ semaphore name (max 64 bytes)
 +Return: AL = status
 +     00h successful
 +     01h invalid function
 +     02h semaphore already locked
 +     03h unable to lock semaphore
 +     04h semaphore space exhausted
 +     05h host/target PC did not respond (NTNX)
 + AH = semaphore owner if status=02h
 +SeeAlso: AH=01h,AH=02h,AH=41h,INT 67/AH=00h
 +----------7F01-------------------------------
 +INT 7F - Alloy NTNX, MW386 - SEMAPHORE LOCK
 + AH = 01h
 + DS:DX -> ASCIZ semaphore name (max 64 bytes)
 +Return: AL = status (see AH=00h)
 + AH = semaphore owner if status=02h
 +SeeAlso: AH=00h,AH=02h,AH=41h
 +----------7F0104BX0000-----------------------
 +INT 7F - HLLAPI (IBM 3270 High-Level Language API)/LLAPI (Rabbit Low Level API)
 + AX = 0104h (HLLAPI gate ID)
 + BX = 0000h
 + DS:SI -> parameter control block (see below)
 +Return: parameter control block updated
 +
 +Format of parameter control block:
 +Offset Size Description
 + 00h  3 BYTEs signature = 'PCB'
 + 03h BYTE function number (see below)
 + 04h WORD segment of control string
 + 06h WORD offset of control string
 + 08h WORD length of control string, unless explicit end-of-str char set
 + 0Ah BYTE unused (IBM)
 + ControlString[0] (Rabbit)
 + 0Bh WORD return code
 + 0Dh WORD maximum length of control string (IBM)
 + unused (Rabbit)
 +
 +Values for HLLAPI function number:
 + 00h Query system (Attachmate implementation only)
 + 01h Connect presentation space
 + 02h Disconnect presentation space
 + 03h Send string of keystrokes as if typed from keyboard
 + 04h Wait ~60s, returns status of presentation space
 + 05h Copy current presentation space into a user-defined buffer
 + 06h Search presentation space for first occurrence of a specified string
 + 07h Query cursor location in current presentation space
 + 08h Copy part or all of current presentation space into user buffer
 + 09h Set session parameters; parameters vary by vendor
 + 0Ah Get info on sessions currently connected
 + 0Bh Lock current presentation space
 + 0Ch Unlock previously locked presentation space
 + 0Dh Return copy of operator info area (OIA) of current presentation space
 + 0Eh get attribute byte for given position in the current presentation space
 + 0Fh copy string of characters to the current presentation space
 + 10h workstation control functions
 + 11h storage manager functions, intended primarily for BASIC applications
 + (not implemented by Rabbit)
 + 12h set delay period in half-second intervals
 + 14h get info on level of workstation support used
 + 15h reset session parameters to default values
 + 16h get detailed info on the current session
 + 17h start host notification to application on presentation sp or OIA update
 + 18h check host update when host notification enabled
 + 19h stop host notification
 + 1Eh search field within current presentation space for string
 + 1Fh get first positionof a selected field in the current presentation space
 + 20h get length of specified field
 + 21h copy string into a specified field
 + 22h copy specified field into a user-defined buffer
 + 23h create alternate presentation space (IBM only), don't use with BASIC
 + 24h switch to alternate presentation space (IBM only), not with BASIC
 + 25h display cursor in specified area (IBM only), don't use with BASIC
 + 26h display alternate presentation space (IBM only), don't use with BASIC
 + 27h delete alternate presentation space (IBM only), don't use with BASIC
 + 32h start intercepting keystrokes to allow filtering
 + 33h get keystrokes after turning on interception
 + 34h notify operator when keystroke rejected by filter subroutine
 + 35h stop intercepting keystrokes
 + 5Ah send file
 + 5Bh receive file
 + 5Ch run a program (not implemented by Rabbit)
 + 5Dh execute DOS command (not implemented by Rabbit)
 + 63h change presentation space position to PC display row/col or vice versa
 + FFh Get info on DCA implementation
 +
 +Values for LLAPI function number:
 + 80h initialize LLAPI (internal call)
 + 83h set Session ID (one-character ID)
 + 84h read Session ID (one-character ID)
 + 85h lock 327x keyboard
 + 86h unlock 327x keyboard
 + 87h wait for Clear to Send
 + 88h type ASCII character
 + 89h type 327x key
 + 8Ah read keyboard lock state
 + 8Fh force screen update
 + 90h view session
 + 91h relinquish (suspend foreground until background becomes idle)
 + 92h poke screen character
 + 93h poke translated character
 + 94h peek screen character
 + 95h peek translated character
 + 96h set cursor position
 + 97h send scan code (Rabbit only)
 + 98h synchronize (returns after keystroke queue empty)
 + 99h type PC key (Rabbit only)
 +
 +Session Parameters for function 09h:
 + ASCII ??? (Rabbit only)
 + ATTRIB return attributes in hex
 + NOATTRIB return attributes as blanks
 + CONPHYS make physical connection
 + CONLOG only make logical connection
 + EAB copy extended attribute bytes along with data 
 + NOEAB copy data only
 + ESC=n set escape character to "n" (default '@')
 + EOT=n set end of string character (default 00h)
 + FPAUSE full-duration pause
 + FTNOWAIT return immediately from functions 5Ah and 5Bh (Rabbit only)
 + FTWAIT wait for file transfer to complete (Rabbit only)
 + IPAUSE interruptible pause
 + RABESC ??? (Rabbit only)
 + NORABESC ??? (Rabbit only)
 + SCANCODE ??? (Rabbit only)
 + STRLEN use explicit string lengths
 + STREOT use terminated strings
 + SRCHALL search entire presentation space
 + SRCHFROM search from specified offset
 + SRCHFRWD search forward from position 1
 + SRCHBKWD search backward from last position in presentation space
 + TIMEOUT=n ??? (Rabbit only)
 + TWAIT wait specified time for keyboard ready
 + LWAIT wait until keyboard ready
 + NWAIT no wait
 + TRON enable tracing
 + TROFF disable tracing
 + AUTORESET send reset before sending keys with function 03h
 + NORESET don't send reset
 + QUIET don't display messages sent with INT 21/AH=09h
 + NOQUIET allow messages to be displayed
 + TIMEOUT=n set timeout in 30-second intervals, 0 = wait until ^Break
 + XLATE translate extended attribute bytes
 + NOXLATE don't translate
 + NEWRET use HLLAPI v3.0 return code conventions
 + OLDRET use HLLAPI v2.0 return code conventions
 +----------7F0105-----------------------------
 +INT 7F - HDILOAD.EXE - 8514/A VIDEO CONTROLLER INTERFACE
 + AX = 0105h get 8514/A entry points
 +Return: CF set on error
 + CF clear if successful
 +     CX:DX -> array of FAR pointers to entry points
 +Note: most functions are invoked by pushing the DWORD parameter block pointer
 +   and then performing a FAR call via the appropriate vector of the
 +   entry point array
 +
 +Function numbers: (do FAR call via entry_points+4*function)
 + 08h HOPEN
 + 10h HINT
 + 13h HLDPAL
 + 15h HBBW
 + 17h HBBR
 + 18h HBBCHN
 + 1Dh HQMODE
 + 22h HCLOSE
 + 30h HINIT
 + 31h HSYNC
 + 39h HSPAL
 + 3Ah HRPAL 
 +----------7F02-------------------------------
 +INT 7F - Alloy NTNX, MW386 - RELEASE SEMAPHORE
 + AH = 02h
 + DS:DX -> ASCIZ semaphore name (max 64 bytes)
 +Return: AL = status
 +     00h successful
 +     01h invalid function
 +     02h semaphore locked by other user
 + AH = semaphore owner
 +     03h unable to unlock semaphore
 +     05h target PC did not respond
 +SeeAlso: AH=00h,AH=01h,AH=42h
 +----------7F0200-----------------------------
 +INT 7F - Btrieve Multi-User - GIVE UP TIME???
 + AX = 0200h
 +SeeAlso: INT 21/AX=3000h"Btrieve",INT 2F/AX=AB01h,INT 2F/AX=AB02h
 +SeeAlso: INT 7B"Btrieve"
 +----------7F03-------------------------------
 +INT 7F - Alloy ANSK, NTNX, MW386 - GET USER NUMBER
 + AH = 03h
 +Return: AL = user number
 + AH = machine number (MW386)
 +Note: this function call is the recommended method for a CPU-bound process to
 +   prevent its priority from being lowered
 +SeeAlso: AH=04h,AH=05h,AH=A1h
 +----------7F04-------------------------------
 +INT 7F - Alloy NTNX, MW386 - GET NUMBER OF USERS
 + AH = 04h
 +Return: AL = total number of users on currrent machine (MW386)
 + AL = number of slaves on system (NTNX)
 +SeeAlso: AH=03h
 +----------7F05-------------------------------
 +INT 7F - Alloy NTNX (Host) - LOCK/UNLOCK SYSTEM, SPOOLER CONTROL
 + AH = 05h
 + AL = function
 +     00h lock system (disable slave services)
 +     01h unlock system
 +     02h enable spooler
 +     03h disable spooler
 +     04h enable slave timer update
 +     05h disable slave timer update
 +     06h enable form feeds
 +     07h disable form feeds
 +SeeAlso: INT 17/AH=A4h
 +----------7F05-------------------------------
 +INT 7F - Alloy NTNX (Slave), MW386 - GET USER PARAMETERS
 + AH = 05h
 + DX:DI -> buffer for user information record (see below)
 +Notes: MW386 provides this function for backward compatibility only, and sets
 +   many of the fields to zero because they are meaningless under MW386
 + this function has no effect when called by the host (user 0)
 +SeeAlso: AH=03h
 +
 +Format of user information record:
 +Offset Size Description
 + 00h WORD segment of video RAM
 + 02h WORD segment of secondary copy of video RAM
 + 04h WORD offset of screen update flag (see INT 10/AH=8Bh)
 + flag nonzero if update needed
 + 06h WORD video NMI enable port
 + (not used by MW386, set to 0000h)
 + 08h WORD video NMI disable port
 + (not used by MW386, set to 0000h)
 + 0Ah BYTE processor type
 + 00h 8088
 + 01h V20
 + 02h 8086
 + 03h V30
 + 06h 80386
 + 0Bh WORD multitasking flag (00h = single tasking, 01h = multitasking)
 + (not used by MW386, set to 0000h)
 + 0Dh WORD offset of terminal driver
 + (not used by MW386, set to 0000h)
 + 0Fh BYTE port for console I/O
 + (not used by MW386, set to 0000h)
 + 10h WORD offset of processor communication busy flag
 + bit 7 set when slave communicating with host
 + 12h WORD pointer to FAR NX system call
 + (not used by MW386, set to 0000h)
 + 14h WORD offset of 16-byte user configuration record (see AH=38h)
 + 16h WORD offset of command/status word
 + 18h WORD offset of screen valid flag (see INT 10/AH=93h)
 + nonzero if screen must be repainted
 + 1Ah WORD offset of screen repaint flag
 + 1Ch WORD pointer to NEAR NX system call
 + (not used by MW386, set to 0000h)
 + 1Eh WORD offset for intercept flags
 + (not used by MW386, set to 0000h)
 + intercept flag = FFh if MSDOS intercepts should be disabled
 + 20h WORD offset of terminal lock flag (see INT 10/AH=92h)
 + lock flag = FFh if backgrnd screen updates should be suspended
 + 22h 26 BYTEs reserved
 +----------7F06-------------------------------
 +INT 7F - Alloy NTNX (Host) - GET SHARED DRIVE INFO
 + AH = 06h
 + AL = drive number (1=A:, 2=B:, etc)
 + ES:DI -> drive info record (see below)
 +Return: AX = status
 +     0000h successful
 + ES:DI buffer filled
 +     0001h not shared drive
 +
 +Format of drive info record:
 +Offset Size Description
 + 00h WORD segment of drive IO-REQUEST structure (MSDOS DPB)
 + 02h WORD segment of allocation map (owner table)
 + one byte per FAT entry, containing user ID owning that entry
 + 04h WORD segment of master FAT for drive (copy of FAT on disk)
 + 06h WORD pointer to configuration file
 + 08h WORD total number of clusters
 + 0Ah WORD bytes per sector
 + 0Ch WORD sectors per cluster
 + 0Eh BYTE FAT type (0Ch = 12-bit, 10h = 16-bit)
 +----------7F06-------------------------------
 +INT 7F - Alloy NTNX (Slave) - ALLOCATE FREE CLUSTER ON SHARED DRIVE
 + AH = 06h
 + DL = drive number (1=A:,2=B:,etc)
 + CX = number of clusters to allocate
 +Return: AH = status
 +     00h successful
 + CX = number of clusters still free
 +     10h invalid shared drive request
 + CL = first and second shared drives
 +     11h invalid cluster count (must be 01h-FFh)
 +----------7F07-------------------------------
 +INT 7F - Alloy NTNX, MW386 - GET LIST OF SHARED DRIVES
 + AH = 07h
 +Return: ES:DI -> shared drive list (see below)
 +Note: MW386 considers all fixed disks to be shared drives; only C and D will
 +   be returned as shared
 +
 +Format of shared drive list:
 +Offset Size Description
 + 00h BYTE string length
 + 01h BYTE number of shared drives
 + 02h  N BYTEs one byte per shared drive
 +----------7F08-------------------------------
 +INT 7F - Alloy NTNX (Host) - GET INTERRUPT VECTORS
 + AH = 08h
 + CL = function
 +     00h get original interrupt vector
 +     01h get Network Executive interrrupt
 + AL = interrupt number
 + DX:SI -> DWORD to hold interrupt vector
 +Return: AL = status
 +     00h successful
 +     01h interrupt vector not used by network executive
 +     02h invalid subfunction
 +Note: the network executive uses interrupts 02h,08h,09h,0Fh,10h,13h,16h-19h,
 +   1Ch,20h,28h,2Ah,2Fh,5Bh,67h,7Fh,ECh, and F0h-FFh
 +SeeAlso: AH=09h/CL=03h,INT 21/AH=35h
 +----------7F08--CL02-------------------------
 +INT 7F - Alloy NTNX - SET MESSAGE DISPLAY TIMEOUT
 + AH = 08h
 + CL = 02h
 + DX = timeout in seconds
 +Return: AL = status
 +     00h successful
 +     02h invalid subfunction
 +----------7F09-------------------------------
 +INT 7F - MultiLink Advanced - SET TASK PRIORITY
 + AH = 09h
 + AL = priority (0-7)
 +Note: the installation check consists of ensuring that the interrupt vector
 +   is not pointing at segment 0000h, then checking whether the byte
 +   at offset 0000h in the interrupt handler's segment is E9h
 +----------7F09-------------------------------
 +INT 7F - Alloy NTNX - ENABLE/DISABLE MUD FILE CHECKING
 + AH = 09h
 + CL = function
 +     00h enable checking of RTNX.MUD file
 +     01h disable RTNX.MUD checking
 +----------7F09--CL02-------------------------
 +INT 7F - Alloy NTNX - SWITCH HOST TO DEDICATED MODE
 + AH = 09h
 + CL = 02h
 +Note: in dedicated mode, the host will only poll for I/O requests from the
 +   slave processors, and not provide workstation services
 +----------7F09--CL03-------------------------
 +INT 7F - Alloy NTNX,MW386 - GET ALTERNATE INTERRUPT
 + AH = 09h
 + CL = 03h
 + AL = default interrupt number (67h,7Fh,etc)
 +Return: CL = actual interrupt which handles specified interrupt's calls
 +SeeAlso: AH=08h
 +----------7F0A--CL00-------------------------
 +INT 7F - Alloy NTNX - GET SYSTEM FLAGS
 + AH = 0Ah
 + CL = 00h
 + ES:DI -> buffer for system flags (see below)
 +Return: ES:DI buffer filled
 +Notes: on a slave, only the NX_Busy flag is returned
 + all three flags are at fixed positions, so this function only needs to
 +   be called once
 + an interrupt handler should only perform DOS or device accesses when
 +   all three flags are 00h
 +
 +Format of system flags:
 +Offset Size Description
 + 00h DWORD pointer to NX_Busy flag (nonzero when communicating with users)
 + 04h DWORD pointer to device driver busy flag
 + 08h DWORD pointer to InTimer flag
 +----------7F0B--CL02-------------------------
 +INT 7F - Alloy NTNX (Host) - SET/RESET GRAPHICS DOS ON SLAVE
 + AH = 0Bh
 + CL = 02h
 + AL = slave ID number
 + CH = DOS to activate
 +     00h graphics DOS
 +     01h character DOS
 +Return: AL = status
 +     00h successful
 +     01h nothing done, proper DOS type already loaded
 +----------7F10--CL00-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - OPEN CHANNEL
 + AH = 10h
 + CL = 00h
 + AL = channel number
 + DX:DI -> channel buffer
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +     0Dh unable to open
 +Note: may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=01h,AH=10h/CL=04h,AH=14h/CL=02h
 +----------7F10--CL01-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - CLOSE CHANNEL
 + AH = 10h
 + CL = 01h
 + AL = channel number
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +     0Ah channel not open
 +Note: may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=00h,AH=10h/CL=05h
 +----------7F10--CL02-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK CHANNEL
 + AH = 10h
 + CL = 02h
 + AL = channel number
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +     0Ah channel not open
 +     0Ch channel already locked
 +Note: may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=03h,AH=10h/CL=06h,AH=10h/CL=08h
 +----------7F10--CL03-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK CHANNEL
 + AH = 10h
 + CL = 03h
 + AL = channel number
 +Return: AL = status (see AH=10h/CL=02h)
 +Notes: should only be used on channels locked with AH=10h/CL=02h, not on those
 +   locked by receipt of a datagram
 + may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=02h,AH=10h/CL=04h,AH=10h/CL=09h
 +----------7F10--CL04-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - RELEASE BUFFER
 + AH = 10h
 + CL = 04h
 + AL = channel number
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +Notes: unlocks buffer after received datagram has been processed
 + may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=00h
 +----------7F10--CL05-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - CLOSE ALL CHANNELS
 + AH = 10h
 + CL = 05h
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +Notes: clears all pending datagrams and clears buffer pointers before closing
 +   the channels
 + may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=01h
 +----------7F10--CL06-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK ALL OPEN CHANNELS
 + AH = 10h
 + CL = 06h
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +Note: may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=02h,AH=10h/CL=08h
 +----------7F10--CL07-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK ALL LOCKED IDLE CHANNELS
 + AH = 10h
 + CL = 07h
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +Notes: unlocks all locked channels which have no pending datagrams
 + may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=03h,AH=10h/CL=09h
 +----------7F10--CL08-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK MULTIPLE CHANNELS
 + AH = 10h
 + CL = 08h
 + DX = maximum channel number to lock
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +Notes: locks channels numbered 00h through the value in DX
 + may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=02h,AH=10h/CL=06h,AH=10h/CL=09h
 +----------7F10--CL09-------------------------
 +INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK MULTIPLE CHANNELS
 + AH = 10h
 + CL = 09h
 + DX = maximum channel number to unlock
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +Notes: unlocks channels numbered 00h through the value in DX
 + may not be invoked from within a hardware interrupt handler
 +SeeAlso: AH=10h/CL=03h,AH=10h/CL=07h,AH=10h/CL=08h
 +----------7F11-------------------------------
 +INT 7F - Alloy NTNX, MW386 - SEND DATAGRAM
 + AH = 11h
 + DX:SI -> request block (see below)
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +     0Ah packet too large (or <2 bytes if NTNX)
 +     0Bh can't send packet to itself
 +     0Ch invalid number of destinations
 +     0Dh destination channel number out of range
 +     0Eh destination user is busy
 +     0Fh destination user has locked channel
 +     10h channel not open
 +     11h no datagram server on destination (NTNX)
 +Note: if wildcard channel FFh used, actual channel number will be filled in
 +SeeAlso: AH=12h
 +
 +Format of request block:
 +Offset Size Description
 + 00h DWORD pointer to packet to send
 + 04h WORD packet size in bytes (1-4096)
 + 06h BYTE number of destinations for packet (max 1Fh)
 + 07h 31 BYTEs destination user IDs (FFh = broadcast to all except sender)
 + 26h 31 BYTEs destination channels (FFh = first available channel)
 + 45h 31 BYTEs return destination statuses
 +----------7F12-------------------------------
 +INT 7F - Alloy NTNX, MW386 - ACKNOWLEDGE DATAGRAM
 + AH = 12h
 + AL = channel number being acknowledged
 + DI:DX = 32-bit status to return to sender
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +     0Ah channel not open
 +     0Bh no message in channel
 +     0Ch destination slave busy--retry (NTNX)
 +     0Dh destination user not active
 +     0Eh destination slave not active (NTNX)
 +     0Fh destination disabled datagram service
 +Note: also unlocks the channel, allowing the next datagram to be received
 +SeeAlso: AH=11h,AH=15h/CL=04h
 +----------7F13--CL00-------------------------
 +INT 7F - Alloy NTNX, MW386 - RESET USER DATAGRAMS
 + AH = 13h
 + CL = 00h
 +Note: clears all pending datagrams and removes all channels opened in NTNX
 +   compatibility mode
 +----------7F14--CL00-------------------------
 +INT 7F - Alloy NTNX, MW386 -  SET RECEIVE ISR
 + AH = 14h
 + CL = 00h
 + DX:DI -> application FAR receive service routine (see below)
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +SeeAlso: AH=14h/CL=01h,AH=14h/CL=03h
 +
 +Service routine called with:
 + DH = sender ID
 + DL = channel with datagram
 + interrupts disabled
 +Return: AL = response code
 +     00h leave buffer locked, set channel status, and repeat call later
 +     01h release channel buffer
 +     02h change buffer pointer to DX:DI
 + AH,CX,DX,DI,SI may be destroyed
 +----------7F14--CL01-------------------------
 +INT 7F - Alloy NTNX, MW386 - SET ACKNOWLEDGE ISR
 + AH = 14h
 + CL = 01h
 + DX:DI -> application FAR acknowledge service routine (see below)
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +Note: the service routine will be called as soon as an acknowledgment arrives
 +SeeAlso: AH=12h,AH=14h/CL=00h,AH=14h/CL=04h,AH=15/CL=04h
 +
 +Service routine called with:
 + DS:SI -> acknowledge structure (see AH=15h/CL=04h)
 +Return: AL = response code
 +     00h application busy, network executive should call again later
 +     01h acknowledge accepted
 + AH,DX,SI may be destroyed
 +----------7F14--CL02-------------------------
 +INT 7F - Alloy NTNX, MW386 - SET CHANNEL BUFFER POINTER
 + AH = 14h
 + CL = 02h
 + AL = channel number
 + DX:DI -> receive buffer
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +Note: may be called from within a receive ISR or when a datagram is pending
 +SeeAlso: AH=10h/CL=00h,AH=14h/CL=00h
 +----------7F14--CL03-------------------------
 +INT 7F - Alloy NTNX, MW386 - GET RECEIVE ISR
 + AH = 14h
 + CL = 03h
 +Return: DX:DI -> current receive ISR
 +SeeAlso: AH=14h/CL=00h,AH=14h/CL=04h
 +----------7F14--CL04-------------------------
 +INT 7F - Alloy NTNX, MW386 - GET ACKNOWLEDGE ISR
 + AH = 14h
 + CL = 04h
 +Return: DX:DI -> current acknowledge ISR
 +SeeAlso: AH=14h/CL=01h,AH=14h/CL=03h
 +----------7F14--CL05-------------------------
 +INT 7F - Alloy NTNX (Host), MW386 - GET BUSY POINTER
 + AH = 14h
 + CL = 05h
 + DX:DI -> buffer for busy structure (see below)
 +Return: DX:DI buffer filled
 +
 +Format of busy structure:
 +Offset Size Description
 + 00h DWORD pointer to busy flag byte
 + 04h WORD fixed port address (FF00h)
 +----------7F15--CL00-------------------------
 +INT 7F - Alloy NTNX, MW386 - GET CHANNEL STATUS
 + AH = 15h
 + CL = 00h
 + AL = channel number
 + DX:DI -> status structure (see below)
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     02h channel range error (not 00h-3Fh)
 +     03h invalid subfunction
 +SeeAlso: AH=15h/CL=01h
 +
 +Format of status structure:
 +Offset Size Description
 + 00h BYTE channel status
 + bit 0: channel open
 +     1: channel buffer contains received data
 +     7: channel locked
 + 01h BYTE sender ID
 +----------7F15--CL01-------------------------
 +INT 7F - Alloy NTNX, MW386 - GET NEXT FULL CHANNEL
 + AH = 15h
 + CL = 01h
 + DX:DI -> full-channel structure
 +Return: AL = status
 +     00h successful
 +     01h busy
 +     0Ah no datagrams available
 +Note: MW386 v1.0 returns the lowest channel with a datagram; newer versions
 +   and NTNX return the oldest datagram
 +SeeAlso: AH=15h/CL=00h
 +
 +Format of full-channel structure:
 +Offset Size Description
 + 00h BYTE number of channel with oldest datagram
 + 01h BYTE sender ID
 +----------7F15--CL02-------------------------
 +INT 7F - Alloy NTNX, MW386 - GET MAXIMUM NUMBER OF CHANNELS
 + AH = 15h
 + CL = 02h
 +Return: AH = number of channels available (40h for MW386)
 +Note: the application may always assume at least 32 channels available
 +SeeAlso: AH=15h/CL=03h
 +----------7F15--CL03-------------------------
 +INT 7F - Alloy NTNX, MW386 - GET MAXIMUM PACKET SIZE
 + AH = 15h
 + CL = 03h
 + DX:DI -> WORD for return value
 +Return: buffer WORD filled with maximum packet size (4096 for MW386)
 +SeeAlso: AH=15h/CL=02h
 +----------7F15--CL04-------------------------
 +INT 7F - Alloy NTNX, MW386 - GET AND CLEAR ACKNOWLEDGE STATUS
 + AH = 15h
 + CL = 04h
 + DX:DI -> status structure (see below)
 +Return: AL = status
 +     00h successful
 + DX:DI structure filled
 +     01h busy
 +     0Ah no acknowledgement has arrived
 +SeeAlso: AH=12h,AH=14h/CL=01h
 +
 +Format of status structure:
 +Offset Size Description
 + 00h BYTE sender ID
 + 01h BYTE channel number
 + 02h  4 BYTEs receiver status (see AH=12h)
 +----------7F16-------------------------------
 +INT 7F - Alloy NTNX, MW386 - DIRECT MEMORY TRANSFER
 + AH = 16h
 + DX:SI -> transfer structure (see below)
 +Return: AL = status
 +     00h successful
 +     0Ah source or destination out of range
 +     0Bh transfer kernal busy--try again
 +Notes: this call transfers memory contents directly between users; both source
 +   and destination user IDs may differ from the caller's ID
 + no segment wrap is allowed
 +
 +Format of transfer structure:
 +Offset Size Description
 + 00h WORD bytes to transfer
 + 02h BYTE source ID
 + FEh = caller
 + 03h DWORD source address
 + 07h BYTE destination ID
 + FFh = all slaves except caller
 + FEh = caller
 + 08h DWORD destination address
 +----------7F21-------------------------------
 +INT 7F - Alloy NTNX, MW386 - SEND MESSAGE OR COMMAND TO USER(S)
 + AH = 21h
 + AL = sender's user ID
 + DS:DX -> control packet (see below)
 +Note: messages or commands are ignored if disabled by the destination user
 +SeeAlso: AH=22h
 +
 +Format of control packet:
 +Offset Size Description
 + 00h BYTE packet type
 + 00h message
 + 01h NTNX command
 + 02h MW386 command
 + 01h BYTE destination user ID or 'A' for all users
 + 02h 62 BYTEs ASCIZ message (packet type 00h)
 + BIOS keycodes terminated by NUL byte (type 01h) or word (02h)
 +Note: a maximum of 16 keycodes will be processed for NTNX and MW386 commands
 +----------7F22-------------------------------
 +INT 7F - Alloy NTNX - GET MESSAGE
 + AH = 22h
 +Return: pending messages displayed on user's screen
 +SeeAlso: AH=21h
 +----------7F24-------------------------------
 +INT 7F - Alloy NTNX, MW386 - ATTACH OR RELEASE DRIVE FOR LOW-LEVEL WRITE ACCESS
 + AH = 24h
 + CL = function
 +     00h attach
 +     01h release
 + CH = drive (0=A:,1=B:,etc)
 +Return: AX = status
 +     00h successful
 +     01h invalid request
 +     02h already attached
 +     03h not attached
 +     04h lock table full
 +Note: only drives on the current machine may be attached
 +----------7F24-------------------------------
 +INT 7F - Alloy NTNX - ATTACH/RELEASE HOST PROCESSOR
 + AH = 24h
 + CL = function
 +     02h attach host
 +     03h release host
 +Return: AX = status
 +     00h successful
 +     01h invalid request
 +     02h already attached
 +     03h not attached
 +     04h lock table full
 +Note: the host processor may be attached in order to perform I/O via the host
 +----------7F25--CL00-------------------------
 +INT 7F - Alloy ANSK, NTNX, MW386 - GET NETWORK EXECUTIVE VERSION
 + AH = 25h
 + CL = 00h
 +Return: AH = version suffix letter
 + CH = major version number
 + CL = minor version number
 +SeeAlso: AH=25h/CL=01h
 +----------7F25--CL01-------------------------
 +INT 7F - Alloy ANSK, NTNX, MW386 - GET NETWORK EXECUTIVE TYPE
 + AH = 25h
 + CL = 01h
 +Return: CL = type
 +     00h RTNX
 +     01h ATNX
 +     02h NTNX
 +     03h BTNX
 +     04h MW386
 +     05h ANSK
 +SeeAlso: AH=25h/CL=00h
 +----------7F26--CL00-------------------------
 +INT 7F - Alloy NTNX, MW386 - GET NTNX FILE MODE
 + AH = 26h
 + CL = 00h
 +Return: AX = file mode bits
 +     bit 0: directory protection enabled
 + 1: extended open enabled
 + 2: flush on every disk write
 + 3: flush on every disk write in locked interval
 + 4: flush on reads from simultaneously opened file
 +Note: MW386 does not support file modes, and always returns AX=001Fh
 +SeeAlso: AH=26h,AH=26h/CL=06h
 +----------7F26-------------------------------
 +INT 7F - Alloy NTNX - SET FILE I/O CHECKING LEVEL
 + AH = 26h
 + CL = check type to set/reset
 +     01h directory protection
 +     02h extended open
 +     03h flush on every disk write
 +     04h flush on disk write if any lock set during write
 +     05h flush on all reads if file written
 + AL = new state (00h off, 01h on)
 +SeeAlso: AH=26h/CL=00h,AH=26h/CL=06h
 +----------7F26--CL06-------------------------
 +INT 7F - Alloy NTNX - CANCEL FLUSH ON WRITE
 + AH = 26h
 + CL = 06h
 +Note: cancels flags set by AH=26h/CL=03h and AH=26h/CL=04h
 +SeeAlso: AH=26h/CL=00h
 +----------7F30-------------------------------
 +INT 7F - Alloy MW386 - GET PORT INFORMATION
 + AH = 30h
 + CX = MW386 port number
 +Return: AL = FFh if port not found
 +    else driver unit number
 +        BL = port mode
 +        BH = port type
 +    02h remote
 +        DH = owner's machine ID
 +        DL = owner's user ID
 +SeeAlso: INT 17/AH=8Bh
 +----------7F31-------------------------------
 +INT 7F - Alloy MW386 v1.x only - CHECK PORT ASSIGNMENT
 + AH = 31h
 + ???
 +Return: ???
 +----------7F37-------------------------------
 +INT 7F - Alloy NTNX (Host) - GET SEMAPHORE TABLE
 + AH = 37h
 +Return: ES:AX -> semaphore table
 +----------7F37-------------------------------
 +INT 7F - Alloy ANSK, NTNX (Slave) - DUMP STRING TO TERMINAL
 + AH = 37h
 + DS:DX -> ASCIZ string to display
 +Note: if the string is empty, a terminal update will be forced
 +----------7F38-------------------------------
 +INT 7F - Alloy NTNX (Slave), MW386 - SET NEW TERMINAL DRIVER
 + AH = 38h
 + AL = new terminal driver number
 +     FFh dummy driver
 +     FEh current driver
 +     FDh load new driver
 + DS:SI -> new driver
 +SeeAlso: AH=39h
 +----------7F39-------------------------------
 +INT 7F - Alloy MW386 - SET TERMINAL DRIVER FOR ANOTHER USER
 + AH = 39h
 + AL = new terminal driver number
 + DL = user number (FFh = caller)
 + DH = machine number if DL <> FFh
 +Return: CF set if invalid user number
 + CF clear if successful
 +Notes: only available to supervisors
 + the new driver number will not take effect until the user is rebooted
 +SeeAlso: AH=38h
 +----------7F3A-------------------------------
 +INT 7F - Alloy MW386 - GET TERMINAL PARAMETERS
 + AH = 3Ah
 + DL = user number (FFh = caller)
 + DH = machine number
 +Return: CF clear if successful
 +     AH = terminal driver number
 +     AL = baud rate (00h = 38400, 01h = 19200, etc)
 +     CL = parity (00h none, 01h even, 02h odd)
 +     CH = handshaking (00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC)
 + CF set if invalid user number
 +SeeAlso: AH=3Bh
 +----------7F3B-------------------------------
 +INT 7F - Alloy MW386 - SET TERMINAL PARAMETERS
 + AH = 3Bh
 + AL = baud rate (00h = 38400, 01h = 19200, etc)
 + CL = parity (00h none, 01h even, 02h odd)
 + CH = handshaking (00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC)
 + DL = user number (FFh = caller)
 + DH = machine number for user
 +Return: CF set if invalid user number
 +Notes: only available to supervisors
 + the new parameters will take effect immediately if the user's terminal
 +   has not been started, else AH=3Dh must be called to post the changes
 +SeeAlso: AH=3Ah,AH=3Dh
 +----------7F3C-------------------------------
 +INT 7F - Alloy MW386 - ENABLE/DISABLE AUTOBAUD DETECT
 + AH = 3Ch
 + AL = new state
 +      00h disabled, 01h enabled
 + DL = user number (FFh = caller)
 + DH = machine number for user
 +Return: CF set if invalid user number
 +Note: only available to supervisors
 +SeeAlso: AH=3Dh
 +----------7F3D-------------------------------
 +INT 7F - Alloy MW386 - POST TERMINAL CONFIGURATION CHANGES
 + AH = 3Dh
 +Note: should be called whenever a program changes the terminal type or its
 +   parameters
 +SeeAlso: AH=3Bh
 +----------7F41-------------------------------
 +INT 7F - Alloy NTNX - LOCK FILE FOR USER
 + AH = 41h
 + AL = user ID
 + DS:DX -> ASCIZ filename
 +Return: AL = status
 +     00h successful
 +     01h invalid function
 +     02h already locked
 +     03h unable to lock
 +     04h lock table full
 +Note: requests exclusive read/write access to file
 +SeeAlso: AH=00h,,AH=41h"MW386",AH=42h"NTNX"
 +----------7F41-------------------------------
 +INT 7F - Alloy MW386 - LOCK SEMAPHORE FOR USER
 + AH = 41h
 + AL = user ID
 + DS:DX -> ASCIZ semaphore name
 +Return: AL = status
 +     00h successful
 +     01h invalid function
 +     02h semaphore already locked
 +     03h unable to lock semaphore
 +     04h semaphore space exhausted
 +SeeAlso: AH=00h,AH=42h"MW386"
 +----------7F42-------------------------------
 +INT 7F - Alloy NTNX - UNLOCK FILE FOR USER
 + AH = 42h
 + AL = user ID
 + DS:DX -> ASCIZ filename
 +Return: AL = status
 +     00h successful
 +     01h invalid function
 +     02h already locked
 +     03h unable to lock
 +     04h lock table full
 +SeeAlso: AH=00h,AH=41h"NTNX",AH=42h"MW386"
 +----------7F42-------------------------------
 +INT 7F - Alloy MW386 - UNLOCK SEMAPHORE FOR USER
 + AH = 42h
 + AL = user ID
 + DS:DX -> ASCIZ semaphore name
 +Return: AL = status
 +     00h successful
 +     01h invalid function
 +     03h unable to unlock semaphore
 +SeeAlso: AH=02h,AH=41h"MW386",AH=42h"NTNX"
 +----------7F4E-------------------------------
 +INT 7F - Alloy MW386 v2+ - SET ERROR MODE
 + AH = 4Eh
 + AL = error mode flags
 +     bit 0: display critical disk errors
 + 1: display sharing errors
 + DX = 4E58h ("NX")
 +Return: AL = status
 +     00h successful
 +SeeAlso: AH=4Fh
 +----------7F4F-------------------------------
 +INT 7F - Alloy MW386 v2+ - SET FCB MODE
 + AH = 4Fh
 + AL = FCB mode
 +     02h read/write compatibility
 +     42h read/write shared
 + DX = 4E58h ("NX")
 +Return: AL = status
 +     00h successful
 +----------7F81-------------------------------
 +INT 7F - Alloy NTNX - ATTACH DEVICE FOR USER
 + AH = 81h
 + AL = user ID
 + DS:DX -> ASCIZ device name
 +SeeAlso: AH=82h
 +----------7F82-------------------------------
 +INT 7F - Alloy NTNX - RELEASE DEVICE FOR USER
 + AH = 82h
 + AL = user ID
 + DS:DX -> ASCIZ device name
 +SeeAlso: AH=81h
 +----------7FA0-------------------------------
 +INT 7F - Alloy MW386 - GET USER NAME
 + AH = A0h
 + DL = user number (FFh = caller)
 + DH = machine number for user
 + ES:DI -> 17-byte buffer for ASCIZ user name
 +Return: CF set if invalid user number
 +SeeAlso: AH=03h,AH=A1h
 +----------7FA1-------------------------------
 +INT 7F - Alloy MW386 - GET MACHINE, USER, AND PROCESS NUMBER
 + AH = A1h
 +Return: AL = process number
 + DL = user number
 + DH = machine number
 +SeeAlso: AH=03h,AH=A0h,AH=A2h
 +----------7FA2-------------------------------
 +INT 7F - Alloy MW386 - GET USER PRIVILEGE LEVEL
 + AH = A2h
 + DL = user number (FFh = caller)
 + DH = machine number for user
 +Return: CF clear if successful
 +     AL = privilege level
 + 00h supervisor
 + 01h high
 + 02h medium
 + 03h low
 + CF set if invalid user number
 +SeeAlso: AH=A1h,AH=A3h
 +----------7FA3-------------------------------
 +INT 7F - Alloy MW386 - GET USER LOGIN STATE
 + AH = A3h
 + DL = user number
 + DH = machine number for user
 +Return: CF clear if successful
 +     AL = login state
 + 00h never logged in
 + 01h currently logged out
 + 03h currently logged in
 + CF set if invalid user number or user not active
 +SeeAlso: AH=A2h
 +----------7FA4-------------------------------
 +INT 7F - Alloy MW386 - VERIFY USER PASSWORD
 + AH = A4h
 + DS:DX -> ASCIZ password (null-padded to 16 bytes)
 +Return: AL = 00h if accepted
 +    else invalid password
 +----------7FA5-------------------------------
 +INT 7F - Alloy MW386 - GET/SET USER STATUS
 + AH = A5h
 + AL = function
 +     00h get status
 + Return: BX = user flags
 +     bit 5: allow messages
 + CL = scan code for task manager hotkey
 + CH = scan code for spooler hotkey
 + DL = scan code for task swapper hotkey
 + DH = modifier key status
 +     01h set status
 + BX = user flags (see above)
 + CL = scan code for task manager hotkey
 + CH = scan code for spooler hotkey
 + DL = scan code for task swapper hotkey
 + DH = modifier key status
 + DI = machine number and user number
 +Return: CF set if invalid user number
 +Note: must have supervisor privilege to set another user's status
 +----------7FB0-------------------------------
 +INT 7F - Alloy NTNX, MW386 - RELEASE ALL SEMAPHORES FOR USER
 + AH = B0h
 + AL = user number
 + DS = code segment
 +Note: MW386 ignores AL and DS; it releases all semaphores locked using INT 67
 +   or INT 7F locking functions
 +SeeAlso: AH=B1h,AH=B2h,AH=B3h,AH=B4h
 +----------7FB1-------------------------------
 +INT 7F - Alloy NTNX, MW386 - RELEASE NORMAL SEMAPHORES FOR USER
 + AH = B1h
 + AL = (bits 7-5) 000
 +      (bits 4-0) user ID
 +Note: MW386 ignores AL; it releases all semaphores locked using INT 67 or
 +   INT 7F locking functions
 +SeeAlso: AH=B0h,AH=B2h,AH=B3h,AH=B4h
 +----------7FB2-------------------------------
 +INT 7F - Alloy NTNX - RELEASE MESSAGES FOR USER
 + AH = B2h
 + AL = (bits 7-5) 001
 +      (bits 4-0) user ID
 +SeeAlso: AH=B0h,AH=B1h,AH=B3h,AH=B4h
 +----------7FB3-------------------------------
 +INT 7F - Alloy NTNX - RELEASE FILES FOR USER
 + AH = B3h
 + AL = (bits 7-5) 010
 +      (bits 4-0) user ID
 +SeeAlso: AH=B0h,AH=B1h,AH=B2h,AH=B4h
 +----------7FB4-------------------------------
 +INT 7F - Alloy NTNX - RELEASE DEVICES FOR USER
 + AH = B4h
 + AL = user ID
 +SeeAlso: AH=B0h,AH=B1h,AH=B2h,AH=B3h
 +----------7FC3-------------------------------
 +INT 7F - Alloy MW386 - WRITE BYTE TO TERMINAL AUX PORT
 + AH = C3h
 + AL = byte to write
 +Return: CF clear if successful
 + CF set on error
 +SeeAlso: AH=C6h
 +----------7FC5-------------------------------
 +INT 7F - Alloy MW386 - CHANGE CONSOLE MODE
 + AH = C5h
 + AL = new console mode
 +     00h keyboard indirect
 +     01h keyboard direct
 +     02h data handshake enforced
 +     03h no data handshake
 +Return: CF clear if successful
 +     AL = prior console mode
 + CF set on error (caller is not remote user)
 +Note: modes 2 and 3 may be used for input through the console port; no video
 +   output should be performed in these modes
 +----------7FC6-------------------------------
 +INT 7F - Alloy MW386 - WRITE BYTE TO CONSOLE PORT
 + AH = C6h
 + AL = byte to write
 +Return: CF clear if successful
 + CF set on error (caller is not remote user)
 +Note: any terminal driver data translation will be bypassed
 +SeeAlso: AH=C3h,AH=C7h
 +----------7FC7-------------------------------
 +INT 7F - Alloy MW386 - READ CONSOLE DATA BYTE
 + AH = C7h
 +Return: CF clear if successful
 +     AL = byte read
 + CF set on error (no data available or caller is not remote user)
 +Note: used to read data after placing console in mode 2 or 3 (see AH=C5h)
 +SeeAlso: AH=C5h,AH=C6h,AH=C8h
 +----------7FC8-------------------------------
 +INT 7F - Alloy MW386 - READ CONSOLE DATA INTO BUFFER
 + AH = C8h
 + AL = maximum bytes to read
 + ES:DI -> buffer for console data
 +Return: CF clear if successful
 +     CX = number of bytes read
 + CF set on error (caller is not remote user)
 +SeeAlso: AH=C7h
 +----------7FCF-------------------------------
 +INT 7F - Alloy NTNX - REBOOT USER PROCESSOR
 + AH = CFh
 + DS:DX -> ASCIZ string containing user number to be reset
 +SeeAlso: AH=D6h
 +----------7FD6-------------------------------
 +INT 7F - Alloy MW386 - RESET NETWORK EXECUTIVE
 + AH = D6h
 + DS:DX -> reset packet (see below)
 +Return: never if succesful
 +Note: all users will be shut down immediately if successful
 +SeeAlso: AH=CFh
 +
 +Format of reset packet:
 +Offset Size Description
 + 00h DWORD reset code (60606060h)
 + 04h 16 BYTEs ASCIZ supervisor password padded with nulls
 +----------7FD7-------------------------------
 +INT 7F - Alloy MW386 - POST EVENT
 + AH = D7h
 + AL = user number (if local event)
 + DX = event number
 +----------7FD8-------------------------------
 +INT 7F - Alloy MW386 - FLUSH DISK BUFFERS
 + AH = D8h
 +Return: CF set on error
 +Note: forces all disk buffers to be written out immediately
 +SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h,INT 2F/AX=1120h
 +----------7FDB-------------------------------
 +INT 7F - Alloy MW386 v2+ - GET MW386 INVOCATION DRIVE
 + AH = DBh
 +Return: AL = drive from which MW386 was started (2=C:,3=D:,etc)
 +----------7FE0-------------------------------
 +INT 7F - Alloy MW386 - CREATE DOS TASK
 + AH = E0h
 + AL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K)
 + DS:DX -> ASCIZ task name (max 16 bytes)
 +Return: CF clear if successful
 +     AL = task create ID
 + CF set on error
 +Note: only foreground DOS tasks can use this function
 +SeeAlso: AH=E1h,AH=E2h,AH=E3h,AH=E6h,AH=E7h
 +----------7FE1-------------------------------
 +INT 7F - Alloy MW386 - GET DOS TASK PID FROM CREATE ID
 + AH = E1h
 + AL = create ID (from AH=E0h)
 +Return: AL = DOS process number
 + CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K)
 +Note: this function should not be called immediately after creating a new
 +   DOS task, since the new task is being initialized by a concurrent
 +   process
 +SeeAlso: AH=E0h,AH=E2h
 +----------7FE2-------------------------------
 +INT 7F - Alloy MW386 - SWITCH TO NEW DOS TASK
 + AH = E2h
 + AL = DOS process number (from AH=E1h)
 +Return: CF set on error (invalid process number or caller not foreground task)
 +Notes: specified task becomes the foreground task and current task is placed
 +   in the background
 + may only be called by a foreground task
 +SeeAlso: AH=E0h,AH=E1h
 +----------7FE3-------------------------------
 +INT 7F - Alloy MW386 - CHANGE NAME OF DOS TASK
 + AH = E3h
 +---v1.x---
 + AL = user number
 +---v2+---
 + BH = user number
 + BL = task number
 +---
 + DS:DX -> ASCIZ task name
 +Return: CF set on error (invalid process number)
 +SeeAlso: AH=E0h,AH=E4h,AH=E5h
 +----------7FE4-------------------------------
 +INT 7F - Alloy MW386 - GET TASK NAME FROM PROCESS NUMBER
 + AH = E4h
 +---v1.x---
 + AL = user number
 +---v2+---
 + BH = user number
 + BL = task number
 +---
 + ES:DI -> buffer for task name
 +Return: CF clear if successful
 +     CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K)
 +     DX = task flags
 + bit 7: MSDOS process
 +     ES:DI buffer filled
 + CF set on error (invalid process number)
 +SeeAlso: AH=E3h,AH=E5h
 +----------7FE5-------------------------------
 +INT 7F - Alloy MW386 - GET PROCESS NUMBER FROM TASK NAME
 + AH = E5h
 + DS:DX -> ASCIZ task name
 + BH = user number
 +Return: CF clear if successful
 +     AL = DOS process number
 +     CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K)
 + CF set on error (no match for name)
 +SeeAlso: AH=E3h,AH=E4h
 +----------7FE6-------------------------------
 +INT 7F - Alloy MW386 - GET NUMBER OF AVAILABLE USER TASKS
 + AH = E6h
 +Return: AX = number of processes available to current user
 +SeeAlso: AH=E0h
 +----------7FE7-------------------------------
 +INT 7F - Alloy MW386 - REMOVE DOS TASK
 + AH = E7h
 + AL = DOS process number
 +Return: CF set on error (invalid process number or first process)
 +Note: can only be called by a foreground task
 +SeeAlso: AH=E0h
 +----------7FE8-------------------------------
 +INT 7F - Alloy MW386 - DOS TASK DELAY
 + AH = E8h
 + CX = delay time in milliseconds
 +Note: a delay of 0 may be used to surrender the current time slice
 +SeeAlso: INT 15/AX=1000h,INT 21/AH=EEh"DoubleDOS",INT 2F/AX=1680h
 +----------7FF0-------------------------------
 +INT 7F - Alloy MW386 - RESTRICT DIRECTORY TO GROUP
 + AH = F0h
 + AL = group number
 + DS:DX -> ASCIZ directory name
 +Return: CF clear if successful
 +     AX = status
 + 0002h directory not found
 + 0003h directory not found
 + 0005h directory in use, cannot be restricted
 + 02xxh restricted to group xxh
 + CF set on error
 +Note: the restriction on the directory may be removed by calling this
 +   function with group 0, then using AH=F1h to assign the directory to
 +   group 0
 +SeeAlso: AH=F1h,AH=F2h,AH=F3h
 +----------7FF1-------------------------------
 +INT 7F - Alloy MW386 - ASSIGN DIRECTORY TO GROUP
 + AH = F1h
 + AL = group number
 + DS:DX -> ASCIZ directory name
 +Notes: performs permanent assignment to a group; no immediate action is taken
 +   unless the directory has been restricted with AH=F0h
 + may be used to restrict a nonexistent directory
 +SeeAlso: AH=F0h
 +----------7FF2-------------------------------
 +INT 7F - Alloy MW386 - READ RESTRICTED DIRECTORY ENTRY
 + AH = F2h
 + CX = entry number
 + ES:DI -> 64-byte buffer
 +Return: CF clear if successful
 +     buffer filled with 63-byte directory info and 1-byte group number
 + CF set on error (invalid entry)
 +SeeAlso: AH=F0h,AH=F3h
 +----------7FF3-------------------------------
 +INT 7F - Alloy MW386 - READ RESTRICTED DIRECTORY ENTRY FOR GROUP
 + AH = F3h
 + AL = group number
 + CX = entry number
 + ES:DI -> 64-byte buffer
 +Return: CF clear if successful
 +     CX = next entry number
 +     buffer filled with 63-byte directory info and 1-byte group number
 + CF set on error (no more matching entries)
 +Note: like AH=F2h, but only returns directories belonging to the specified
 +   group
 +SeeAlso: AH=F2h
 +----------7FF8-------------------------------
 +INT 7F - Alloy MW386 - ASSIGN USER TO GROUP
 + AH = F8h
 + AL = group number
 + DL = user number
 + DH = machine number (currently 00h)
 +Return: CF clear if successful
 + CF set on error (user already in maximum number of groups)
 +Note: each user is allowed eight group assignments
 +SeeAlso: AH=F9h,AH=FAh
 +----------7FF9-------------------------------
 +INT 7F - Alloy MW386 - REMOVE USER FROM GROUP
 + AH = F9h
 + AL = group number
 + DL = user number
 + DH = machine number (currently 00h)
 +Return: CF set if failed
 +SeeAlso: AH=F8h,AH=FAh
 +----------7FFA-------------------------------
 +INT 7F - Alloy MW386 - GET USER GROUP LIST
 + AH = FAh
 + DL = user number
 + DH = machine number (currently 00h)
 + ES:DI -> 16-byte buffer for group list
 +Return: CX = number of groups
 + ES:DI buffer filled with group numbers
 +SeeAlso: AH=F8h,AH=F9h
 +----------7FFB-------------------------------
 +INT 7F - Alloy MW386 - ASSIGN GROUP NAME
 + AH = FBh
 + CL = group number
 + ES:DI -> ASCIZ group name (max 17 bytes)
 +SeeAlso: AH=FCh
 +----------7FFC-------------------------------
 +INT 7F - Alloy MW386 - GET GROUP NAME
 + AH = FCh
 + CL = group number
 + ES:DI -> 17-byte buffer for ASCIZ name
 +Return: ES:DI buffer filled
 +Note: if the group has not been named, "(unnamed)" is returned
 +SeeAlso: AH=FBh
 +----------80---------------------------------
 +INT 80 - Q-PRO4 - ???
 +----------80---------------------------------
 +INT 80 - reserved for BASIC
 +----------80----BX0000-----------------------
 +INT 80 - SoundBlaster SBFM driver - GET VERSION
 + BX = 0000h
 +Return: ???
 +Note: SBFM installs at a free interrupt in the range 80h through BFh
 +SeeAlso: BX=0008h,INT 2F/AX=FBFBh
 +----------80----BX0001-----------------------
 +INT 80 - SoundBlaster SBFM driver - SET MUSIC STATUS BYTE ADDRESS
 + BX = 0001h
 + DX:AX -> music status byte
 +SeeAlso: BX=0000h,BX=0002h,BX=0003h
 +----------80----BX0002-----------------------
 +INT 80 - SoundBlaster SBFM driver - SET INSTRUMENT TABLE
 + BX = 0002h
 + CX = number of instruments
 + DX:AX -> instrument table
 +SeeAlso: BX=0000h,BX=0001h,BX=0005h
 +----------80----BX0003-----------------------
 +INT 80 - SoundBlaster SBFM driver - SET SYSTEM CLOCK RATE
 + BX = 0003h
 + AX = clock rate divisor (1193180 / desired frequency in Hertz)
 +     FFFFh to restore to 18.2 Hz
 +SeeAlso: BX=0000h,BX=0001h,BX=0004h
 +----------80----BX0004-----------------------
 +INT 80 - SoundBlaster SBFM driver - SET DRIVER CLOCK RATE
 + BX = 0004h
 + AX = driver clock rate divisor (1193180 / frequency in Hertz)
 +Note: default frequency is 96 Hz
 +SeeAlso: BX=0000h,BX=0003h
 +----------80----BX0005-----------------------
 +INT 80 - SoundBlaster SBFM driver - TRANSPOSE MUSIC
 + BX = 0005h
 + AX = semi-tone offset
 +SeeAlso: BX=0000h,BX=0002h,BX=0006h
 +----------80----BX0006-----------------------
 +INT 80 - SoundBlaster SBFM driver - PLAY MUSIC
 + BX = 0006h
 + DX:AX -> music block
 +Return: AX = status
 +     0000h successful
 +     0001h music already active
 +SeeAlso: BX=0000h,BX=0007h,BX=000Ah
 +----------80----BX0007-----------------------
 +INT 80 - SoundBlaster SBFM driver - STOP MUSIC
 + BX = 0007h
 +Return: AX = status
 +     0000h successful
 +     0001h music not active
 +SeeAlso: BX=0000h,BX=0006h,BX=0009h
 +----------80----BX0008-----------------------
 +INT 80 - SoundBlaster SBFM driver - RESET DRIVER
 + BX = 0008h
 +Return: AX = status
 +     0000h successful
 +     0001h music is active
 +SeeAlso: BX=0000h
 +----------80----BX0009-----------------------
 +INT 80 - SoundBlaster SBFM driver - PAUSE MUSIC
 + BX = 0009h
 +Return: AX = status
 +     0000h successful
 +     0001h no music active
 +SeeAlso: BX=0000h,BX=0007h,BX=000Ah
 +----------80----BX000A-----------------------
 +INT 80 - SoundBlaster SBFM driver - RESUME MUSIC
 + BX = 000Ah
 +Return: AX = status
 +     0000h successful
 +     0001h no music paused
 +SeeAlso: BX=0000h,BX=0006h,BX=0009h
 +----------80----BX000B-----------------------
 +INT 80 - SoundBlaster SBFM driver - SET USER-DEF TRAP FOR SYSTEM-EXCLUSIVE CMDS
 + BX = 000Bh
 + DX:AX -> trap routine
 +SeeAlso: BX=0000h
 +----------8001-------------------------------
 +INT 80 - QPC Software PKTINT.COM - INITIALIZE
 + AH = 01h
 +Return: AX = 0000h
 + CX = FFFFh
 + DX = FFFFh
 +Notes: this interrupt is the WinQVTNet protected mode interface to Windows 3.0
 + all buffer pointers are reset back to 0
 +----------8002-------------------------------
 +INT 80 - QPC Software PKTINT.COM - GET BUFFER ADDRESSES
 + AH = 02h
 + BX = extra bytes to allocate per packet
 +Return: AX = segment address of 10K buffer (for receives???)
 + BX = segment address of 2K buffer (for sends???)
 +SeeAlso: AH=05h
 +----------8003-------------------------------
 +INT 80 - QPC Software PKTINT.COM - GET ENTRY POINT
 + AH = 03h
 +Return: CX:DX -> receive call address
 +Note: the returned address can be used in the packet driver calls since it
 +   will be a valid address in all DOS boxes
 +SeeAlso: AH=06h
 +----------8004-------------------------------
 +INT 80 - QPC Software PKTINT.COM - ENABLE???
 + AH = 04h
 + BX = ???
 +Return: ???
 +----------8005-------------------------------
 +INT 80 - QPC Software PKTINT.COM - GET RECEIVE STATISTICS
 + AH = 05h
 +Return: AX = amount of buffer currently in use
 + BX = current offset in buffer
 + CX = number of times receive has been called
 +SeeAlso: AH=02h
 +----------8006-------------------------------
 +INT 80 - QPC Software PKTINT.COM - REMOVE RECEIVED PACKET
 + AH = 06h
 +Return: BX = next packet offset
 + CX = number of bytes still buffered
 + DX = size of packet released back into buffer pool
 +SeeAlso: AH=03h
 +----------81---------------------------------
 +INT 81 - reserved for BASIC
 +----------81---------------------------------
 +INT 81 - IBM TOKEN RING ADAPTER - ???
 +----------82---------------------------------
 +INT 82 - reserved for BASIC
 +----------82---------------------------------
 +INT 82 - IBM TOKEN RING ADAPTER - ???
 + AH = function
 +     00h display message???
 + DS:BX -> string
 + ???
 +Return: ???
 +----------83---------------------------------
 +INT 83 - reserved for BASIC
 +----------84---------------------------------
 +INT 84 - reserved for BASIC
 +----------85---------------------------------
 +INT 85 - reserved for BASIC
 +----------86---------------------------------
 +INT 86 - NetBIOS - ORIGINAL INT 18
 +Note: some implementations of NetBIOS reportedly relocate INT 18 here
 +SeeAlso: INT 18
 +----------86---------------------------------
 +INT 86 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------86---------------------------------
 +INT 86 - APL*PLUS/PC - Terminate APL session and return to DOS
 +----------87---------------------------------
 +INT 87 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------87---------------------------------
 +INT 87 - APL*PLUS/PC - ????
 +----------88---------------------------------
 +INT 88 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------88----AL00-------------------------
 +INT 88 - APL*PLUS/PC - CREATE OBJECT OF ARBITRARY RANK OR SHAPE
 + AL = 00h
 + BX = STPTR of the variable to be assigned
 + ES:SI -> model of type, rank, and shape (see below)
 +Return: ES:DI -> first data byte of object
 + DX:CX = number of elements in the object
 +SeeAlso: INT C8"APL"
 +
 +Format of shape model:
 +Offset Size Description
 + 00h BYTE type
 + 01h character (2-byte dimension sizes)
 + 02h integer (2-byte dimension sizes)
 + 08h floating point (2-byte dimension sizes)
 + 11h character (4-byte dimension sizes)
 + 12h integer (4-byte dimension sizes)
 + 18h floating point (4-byte dimension sizes)
 + 01h BYTE rank
 + 02h WORD/DWORD first dimension of shape
 + N WORD/DWORD second dimension of shape
 + ...
 +----------88----AL01-------------------------
 +INT 88 - APL*PLUS/PC - CREATE CHARACTER SCALAR/VECTOR/MATRIX <64K IN SIZE
 + AL = 01h
 + AH = rank
 + BX = STPTR of the variable to be assigned
 + CX = first dimension (if any)
 + DX = second dimension (if any)
 +Return: ES:DI -> object
 + CX = number of elements in the object
 +Note: each dimension must be 32767 or smaller
 +SeeAlso: AL=02h,AL=08h,INT C8"APL"
 +----------88----AL02-------------------------
 +INT 88 - APL*PLUS/PC - CREATE INTEGER SCALAR/VECTOR/MATRIX <64K IN SIZE
 + AL = 02h
 + AH = rank
 + BX = STPTR of the variable to be assigned
 + CX = first dimension (if any)
 + DX = second dimension (if any)
 +Return: ES:DI -> object
 + CX = number of elements in the object
 +Note: each dimension must be 32767 or smaller
 +SeeAlso: AL=01h,AL=08h,INT C8"APL"
 +----------88----AL08-------------------------
 +INT 88 - APL*PLUS/PC - CREATE FLOATING POINT SCALAR/VECTOR/MATRIX <64K IN SIZE
 + AL = 08h
 + AH = rank
 + BX = STPTR of the variable to be assigned
 + CX = first dimension (if any)
 + DX = second dimension (if any)
 +Return: ES:DI -> object
 + CX = number of elements in the object
 +Note: each dimension must be 32767 or smaller
 +SeeAlso: AL=01h,AL=02h,INT C8"APL"
 +----------88----ALF5-------------------------
 +INT 88 - APL*PLUS/PC - FORCE OBJECT INTO REAL WORKSPACE FROM VIRTUAL
 + AL = F5h
 + BX = STPTR of object
 +SeeAlso: INT C8"APL"
 +----------88----ALF6-------------------------
 +INT 88 - APL*PLUS/PC - MAKE NAME IMMUNE FROM OUTSWAPPING
 + AL = F6h
 + BX = STPTR of object
 +SeeAlso: AL=F7h,AL=F8h,INT C8"APL"
 +----------88----ALF7-------------------------
 +INT 88 - APL*PLUS/PC - MAKE NAME ELIGIBLE FOR OUTSWAPPING
 + AL = F7h
 + BX = STPTR of object
 +SeeAlso: AL=F6h,AL=F8h,INT C8"APL"
 +----------88----ALF8-------------------------
 +INT 88 - APL*PLUS/PC - REPORT WHETHER NAME IS ELIGIBLE FOR OUTSWAPPING
 + AL = F8h
 + BX = STPTR of object
 +Return: BX = 0000h eligible
 +       0001h not eligible
 +SeeAlso: AL=F6h,AL=F7h,INT C8"APL"
 +----------88----ALF9-------------------------
 +INT 88 - APL*PLUS/PC - DETERMINE NAME STATUS
 + AL = F9h
 + ES:SI -> name
 + CX = length of name
 +Return: CF set if name ill-formed or already in use
 +     BX = STPTR if already in symbol table
 + CF clear if name is available for use
 +     BX = 0000h
 +Note: does not force the name into the workspace
 +SeeAlso: AL=FEh,AL=FFh,INT C8"APL"
 +----------88----ALFC-------------------------
 +INT 88 - APL*PLUS/PC - DETERMINE IF MEMORY AVAIL WITHOUT GARBAGE COLLECTION
 + AL = FCh
 + BX = amount of memory needed (paragraphs)
 +Return: CF clear if memory available
 + CF set if a workspace compaction is required
 +SeeAlso: AL=FDh,INT C8"APL"
 +----------88----ALFD-------------------------
 +INT 88 - APL*PLUS/PC - PERFORM GARBAGE COLLECTION AND RETURN AVAILABLE MEMORY
 + AL = FDh
 +Return: BX = number of paragraphs available in workspace
 +SeeAlso: AL=FCh,INT C8"APL"
 +----------88----ALFE-------------------------
 +INT 88 - APL*PLUS/PC - CREATE NAME
 + AL = FEh
 + ES:SI -> name
 + CX = length of name
 +Return: BX = STPTR of name
 + DX = interpreter's data segment
 +SeeAlso: AL=F9h,AL=FFh,INT C8"APL"
 +----------88----ALFF-------------------------
 +INT 88 - APL*PLUS/PC - DETERMINE NAME STATUS
 + AL = FFh
 + ES:SI -> name
 + CX = length of name
 +Return: CF set if name ill-formed or already in use
 +     BX = STPTR if already in symbol table
 + CF clear if name is available for use
 +     BX = 0000h
 +Note: forces the name into the workspace and makes it immune from outswapping
 +SeeAlso: AL=F9h,AL=FEh,INT C8"APL"
 +----------89---------------------------------
 +INT 89 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------8A---------------------------------
 +INT 8A - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------8A---------------------------------
 +INT 8A - APL*PLUS/PC - PRINT SCREEN
 +Note: same as INT 05
 +SeeAlso: INT 05,INT 8C"APL",INT CA"APL"
 +----------8B---------------------------------
 +INT 8B - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------8B---------------------------------
 +INT 8B - APL*PLUS/PC - BEEP
 +Note: same as printing a ^G via INT 21/AH=02h
 +SeeAlso: INT 21/AH=02h,INT CB"APL"
 +----------8C---------------------------------
 +INT 8C - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------8C---------------------------------
 +INT 8C - APL*PLUS/PC - CLEAR SCREEN MEMORY
 + AX = flag
 +     0000h do not save display attributes
 +     0001h save attributes
 +SeeAlso: INT CC"APL"
 +----------8D---------------------------------
 +INT 8D - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------8E---------------------------------
 +INT 8E - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------8F---------------------------------
 +INT 8F - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------90---------------------------------
 +INT 90 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------90---------------------------------
 +INT 90 - APL*PLUS/PC - USED BY PORT 10 PRINTER DRIVER
 +----------91---------------------------------
 +INT 91 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------91---------------------------------
 +INT 91 - IBM TOKEN RING ADAPTER - ???
 +----------92---------------------------------
 +INT 92 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------92---------------------------------
 +INT 92 - Sangoma X.25 INTERFACE PROGRAM
 + BX:DX -> control block
 +SeeAlso: INT 68"Sangoma"
 +----------92E1-------------------------------
 +INT 92 - Da Vinci eMail Dispatcher INTERFACE
 + AH = E1h
 + AL = function
 + BX = stack count (number of words to push)
 + CX:DX -> stack data (in word-reversed order ready to push)
 +Return: AX = status
 +     0001h success
 +     FF97h "ERS_NOT_AVAILABLE"
 +     FF99h "ERS_TOO_MANY_NAMES"
 +     FF9Ah "ERS_BAD_NAME_PASSWORD"
 +     FFE3h "ERS_NAME_NOT_FOUND"
 +     FFF8h "ERS_USE_STRING" (call NetGetError to get error string)
 +     FFFFh "ERS_NO_SUCH_FILE"
 +Note: preserves BP, DS, SI, DI; other registers may be destroyed
 +----------92E100BX000A-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetInitStart"
 + AX = E100h
 + BX = 000Ah
 + CX:DX -> parameter block (see below)
 +Return: AX = 0001h success
 +Note: this function is used to initialize the dispatcher
 +SeeAlso: AX=E101h,AX=E103h
 +
 +Format of parameter block:
 +Offset Size Description
 + 00h WORD segment of ???
 + 02h WORD offset of ???
 + 04h WORD high part of long ???
 + 06h WORD low part of long ???
 + 08h WORD high part of long ???
 + 0Ah WORD low part of long ???
 + 0Ch WORD high part of long ???
 + 0Eh WORD low part of long ???
 + 10h WORD high part of long ???
 + 12h WORD low part of long ???
 +----------92E101BX0000-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetInitCheck"
 + AX = E101h
 + BX = 0000h
 + CX:DX ignored
 +Return: AX = 0001h success
 +SeeAlso: AX=E100h
 +----------92E102BX0000-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetCheckDriver"
 + AX = E102h
 + BX = 0000h
 + CX:DX ignored
 +Return: AX = 0001h success
 +Note: this function is used to determine if the dispatcher is loaded
 +SeeAlso: AX=E10Bh,AX=E180h
 +----------92E103BX0000-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetTerminate"
 + AX = E103h
 + BX = 0000h
 + CX:DX ignored
 +Return: AX = status (see AH=E1h)
 +SeeAlso: AX=E100h
 +----------92E104BX0006-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetWhereIs"
 + AX = E104h
 + BX = 0006h
 + CX:DX -> parameter block (see below)
 +Return: AX = status (see AH=E1h)
 +Note: this function is used to verify node address for usernames
 +
 +Format of parameter block:
 +Offset Size Description
 + 00h WORD segment of node address buffer
 + 02h WORD offset of node address buffer
 + 04h WORD segment of uppercase username
 + 06h WORD offset of uppercase username
 + 08h WORD segment of "DVSEMAIL"
 + 0Ah WORD offset of "DVSEMAIL"
 +----------92E105BX0007-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetOpen"
 + AX = E105h
 + BX = 0007h
 + CX:DX -> parameter block (see below)
 +Return: AX = 0000h Error
 + AX = handle
 +Note: this function is used to open a submission channel
 +SeeAlso: AX=E10Ah
 +
 +Format of parameter block:
 +Offset Size Description
 + 00h WORD operation (1 = read, 2 = write)
 + 02h WORD segment of uppercase To: username
 + 04h WORD offset of uppercase To: username
 + 06h WORD segment of "DVSEMAIL"
 + 08h WORD offset of "DVSEMAIL"
 + 0Ah WORD segment of node address
 + 0Ch WORD offset of node address
 +----------92E106BX0004-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetRead"
 + AX = E106h
 + BX = 0004h
 + CX:DX -> parameter block
 +Return: AX = 0001h
 +SeeAlso: AX=E108h
 +----------92E107BX0002-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetGetError"
 + AX = E107h
 + BX = 0002h
 + CX:DX -> parameter block
 +Return: AX = 0001h
 +----------92E108BX0004-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetWrite"
 + AX = E108h
 + BX = 0004h
 + CX:DX -> parameter block (see below)
 +Return: AX = amount written
 +Note: this function is used to write transactions to the dispatcher.
 +   The command block is written first and then another call is used
 +   to write the associated data.
 +SeeAlso: AX=E106h
 +
 +Format of parameter block:
 +Offset Size Description
 + 00h WORD buffer count
 + 02h WORD segment of command buffer
 + 04h WORD offset of command buffer
 + 06h WORD handle from NetOpen
 +
 +Format of command buffer:
 +Offset Size Description
 + 00h BYTE command
 + 21h '!' Protocol commands for remote control
 + 41h 'A' Authorization protocol element
 + 42h 'B' Return(back) routing information
 +     Associated data is the From: username
 + 43h 'C' Carbon Copy list
 +     Associated data is a comma delimitted list of usernames
 + 44h 'D' Distribution list
 +     Associated data is a comma delimitted list of usernames
 + 45h 'E' Mail end marker
 +     No associated data
 + 48h 'H' Mail message header
 +     Associated data is a message header buffer
 + 4Dh 'M' Mail message
 +     Associated data is the body of the message
 + 4Fh 'O' Object
 + 50h 'P' Paperclip attachment
 + 52h 'R' Routing information
 +     Associated data is the To: username
 + 53h 'S' Subject
 +     Associated data is the subject of the message
 + 54h 'T' Trail of Reply/Forwards
 + 01h BYTE subcommand
 + 02h DWORD length of associated data
 +
 +Format of message header buffer:
 +Offset Size Description
 + 00h 30 BYTEs subject line
 + 1Eh 24 BYTEs To
 + 36h 24 BYTEs From
 + 4Eh DWORD Time
 + BYTE 0
 + BYTE hour
 + BYTE minute
 + BYTE second
 + 52h DWORD Date
 + BYTE 0
 + BYTE year
 + BYTE month
 + BYTE day
 + 56h DWORD serial number (0L)
 + 5Ah WORD mail types
 + bit 7 blind carbon copy
 + bit 6 carbon copy
 + bit 5 priority
 + bit 4 confidential
 + bit 3 certified
 + bit 2 bulk
 + bits 1-0 class (first, second, third, bulk)
 + 5Ch WORD special types (0)
 +----------92E109BX0001-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetErrorFix" (UNUSED)
 + AX = E109h
 + BX = 0001h
 + CX:DX -> ???
 +Return: AX = FF97h (ERS_NOT_AVAILABLE)
 +----------92E10ABX0001-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetClose"
 + AX = E10Ah
 + BX = 0001h
 + CX:DX -> parameter block (see below)
 +Return: AX = 0001h
 +Note: this function is used to close a dispatcher handle
 +SeeAlso: AX=E105h
 +
 +Format of parameter block:
 +Offset Size Description
 + 00h WORD handle from NetOpen
 +----------92E10BBX0004-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetCheckQueue"
 + AX = E10Bh
 + BX = 0004h
 + CX:DX -> parameter block (see below)
 +Return: AX = 0001h
 +SeeAlso: AX=E102h,AX=E10Ch
 +
 +Format of parameter block:
 +Offset Size Description
 + 00h WORD segment of 24 byte username buffer
 + 02h WORD offset of 24 byte username buffer
 + 04h WORD segment of 24 byte protocol buffer
 + 06h WORD offset of 24 byte protocol buffer
 +----------92E10CBX0002-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetReadQueue"
 + AX = E10Ch
 + BX = 0002h
 + CX:DX -> parameter block (see below)
 +Return: AX = 0001h
 +SeeAlso: AX=E10Bh
 +
 +Format of parameter block:
 +Offset Size Description
 + 00h WORD Segment of 128 byte node address buffer
 + 02h WORD Offset of 128 byte node address buffer
 +----------92E10DBX0006-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetSubmitName"
 + AX = E10Dh
 + BX = 0006h
 + CX:DX -> parameter block (see below)
 +Return: AX = status (see AH=E1h)
 +Note: this function is used to verify username/password
 +SeeAlso: AX=E10Eh
 +
 +Format of parameter block:
 +Offset Size Description
 + 00h WORD segment of uppercase password string
 + 02h WORD offset of uppercase password string
 + 04h WORD segment of uppercase username string
 + 06h WORD offset of uppercase username string
 + 08h WORD segment of "DVSEMAIL"
 + 0Ah WORD offset of "DVSEMAIL"
 +----------92E10EBX0004-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetRemoveName"
 + AX = E10Eh
 + BX = 0004h
 + CX:DX -> parameter block (see below)
 +Return: AX = 0001h
 +Note: this function is used to remove a username
 +SeeAlso: AX=E10Dh
 +
 +Format of parameter block:
 +Offset Type Description
 + 00h WORD segment of uppercase username
 + 02h WORD offset of uppercase username
 + 04h WORD segment of "DVSEMAIL"
 + 06h WORD offset of "DVSEMAIL"
 +----------92E10FBX0000-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - IS ANYONE THERE? QUERY
 + AX = E10Fh
 + BX = 0000h
 + CX:DX ignored
 +Return: AX = 0001h
 +----------92E110BX0006-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetGetAltRoute"
 + AX = E110h
 + BX = 0006h
 + CX:DX -> ???
 +Return: AX = 0001h
 +SeeAlso: AX=E111h,AX=E113h
 +----------92E111BX0004-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetDeleteAltRoutes"
 + AX = E111h
 + BX = 0004h
 + CX:DX -> ???
 +Return: AX = 0001h
 +SeeAlso: AX=E110h,AX=E113h
 +----------92E112BX0008-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetChangePassword"
 + AX = E112h
 + BX = 0008h
 + CX:DX -> ???
 +Return: AX = 0001h
 +----------92E113BX0008-----------------------
 +INT 92 - Da Vinci eMail Dispatcher - "NetSetAltRoute"
 + AX = E113h
 + BX = 0008h
 + CX:DX -> ???
 +Return: AX = 0001h
 +SeeAlso: AX=E110h,AX=E111h
 +----------92E175-----------------------------
 +INT 92 - Da Vinci eMail Dispatcher - BECOME MICRO TSR
 + AX = E175h
 +Return: AX = 0012h
 + BX = PSP
 +----------92E180-----------------------------
 +INT 92 - Da Vinci eMail Dispatcher - INSTALLATION CHECK
 + AX = E180h
 +Return: AX = 0012h if installed
 + ES:DX -> '$'-terminated driver information string
 +SeeAlso: AX=E102h
 +----------93---------------------------------
 +INT 93 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------93---------------------------------
 +INT 93 - IBM TOKEN RING ADAPTER - ???
 +----------94---------------------------------
 +INT 94 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------95---------------------------------
 +INT 95 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------95---------------------------------
 +INT 95 - APL*PLUS/PC - DETERMINE R= SPACE
 +Note: use only when the R= option is invoked on entering APL
 +----------96---------------------------------
 +INT 96 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------97---------------------------------
 +INT 97 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------98---------------------------------
 +INT 98 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------99---------------------------------
 +INT 99 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------9A---------------------------------
 +INT 9A - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------9B---------------------------------
 +INT 9B - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------9C---------------------------------
 +INT 9C - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------9D---------------------------------
 +INT 9D - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------9E---------------------------------
 +INT 9E - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------9F---------------------------------
 +INT 9F - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A0---------------------------------
 +INT A0 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A0---------------------------------
 +INT A0 - APL*PLUS/PC - USED BY APL/GSS*CGI GRAPHICS INTERFACE
 +SeeAlso: INT 59
 +----------A1---------------------------------
 +INT A1 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A2---------------------------------
 +INT A2 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A3---------------------------------
 +INT A3 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A4---------------------------------
 +INT A4 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A4---------------------------------
 +INT A4 U - Right Hand Man API
 + function number in AH
 +Note: Right-Hand Man is a TSR desk-top utility, and only hooks this interrupt
 + while popped up
 +----------A5---------------------------------
 +INT A5 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A6---------------------------------
 +INT A6 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A7---------------------------------
 +INT A7 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A8---------------------------------
 +INT A8 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------A9---------------------------------
 +INT A9 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------AA---------------------------------
 +INT AA - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------AB---------------------------------
 +INT AB - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------AC---------------------------------
 +INT AC - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------AD---------------------------------
 +INT AD - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------AE---------------------------------
 +INT AE - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------AF---------------------------------
 +INT AF - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B0---------------------------------
 +INT B0 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B1---------------------------------
 +INT B1 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B2---------------------------------
 +INT B2 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B3---------------------------------
 +INT B3 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B370-------------------------------
 +INT B3 - ZIPKEY - GET VERSION
 + AH = 70h
 +Return: AH = major version
 + AL = minor version
 + CL = number of states and territories in current database
 + DH = year of current database - 1900
 + DL = month of current database's file date
 +Return: AX destroyed
 +Notes: if installed, the string "ZIPKEY" is present at offset 75h in the
 +   interrupt handler's segment, and the byte at 7Bh contains the API
 +   version number (00h for v1.x, 01h for v2.0)
 + ZIPKEY is a resident ZIPCODE database by Eric Isaacson
 +----------B371-------------------------------
 +INT B3 - ZIPKEY - CONVERT TWO-LETTER ABBREVIATION TO STATE CODE
 + AH = 71h
 + BX = abbreviation, in either case (first letter in BL)
 +Return: CF set on error
 +     AL = FFh
 + CF clear if successful
 +     AL = ZIPKEY state code
 +SeeAlso: AH=72h
 +----------B372-------------------------------
 +INT B3 - ZIPKEY - CONVERT STATE CODE TO TWO-LETTER ABBREVIATION
 + AH = 72h
 + BL = ZIPKEY state code
 +Return: CF set on error
 +     AX destroyed
 + CF clear if successful
 +     AX = abbreviation, in upper case
 +SeeAlso: AH=71h,AH=73h
 +----------B373-------------------------------
 +INT B3 - ZIPKEY - CONVERT STATE CODE TO STATE NAME
 + AH = 73h
 + BL = ZIPKEY state code
 + ES:DI -> buffer for name
 +Return: CF set on error
 +     AX destroyed
 + CF clear if successful
 +     ES:DI points one byte beyond end of name
 +SeeAlso: AH=72h
 +----------B374-------------------------------
 +INT B3 - ZIPKEY - CONVERT ZIPCODE TO ASCII DIGITS
 + AH = 74h
 + DX = zipcode region (0-999)
 + CH = last two digits of zipcode (0-99)
 + ES:DI -> buffer
 +Return: CF set on error
 +     AX destroyed
 + CF clear if successful
 +     ES:DI points one byte beyond end of digit string
 +----------B375-------------------------------
 +INT B3 - ZIPKEY - LOOK UP STATE CODE FOR ZIPCODE
 + AH = 75h
 + DX = zipcode region (0-999)
 + CH = last two digits of zipcode (0-99)
 +Return: CF set on error (zipcode not found)
 +     AL = suggested state code, FFh if none
 + CF clear if successful
 +     AL = ZIPKEY state code
 +     BX = area code (v2.0+)
 +SeeAlso: AH=76h,AH=79h
 +----------B376-------------------------------
 +INT B3 - ZIPKEY - LOOK UP CITY AND STATE FOR ZIPCODE
 + AH = 76h
 + DX = zipcode region (0-999)
 + CH = last two digits of zipcode (0-99)
 + ES:DI -> buffer for name
 +Return: CF set on error
 +     AL = suggested state code, FFh if none
 +     ES:DI buffer filled with suggested city name
 + CF clear if successful
 +     AL = ZIPKEY state code
 +     BX = area code (v2.0+)
 +     ES:DI points one byte beyond end of name
 +SeeAlso: AH=75h,AH=78h
 +----------B377-------------------------------
 +INT B3 - ZIPKEY - PLAY BACK EXIT KEY FOR ENTRY WITH GIVEN ZIPCODE
 + AH = 77h
 + DX = zipcode region (0-999)
 + CH = last two digits of zipcode (0-99)
 + BX = 16-bit BIOS keycode for a defined ZIPKEY alternate exit key
 +Return: CF set on error
 +     AX destroyed
 + CF clear if successful
 +     zipcode specification as defined by the BX keystroke is placed in
 +       keyboard buffer, as if the user had popped up ZIPKEY and exited
 +       by pressing the key specified by BX
 +----------B378-------------------------------
 +INT B3 - ZIPKEY - LOOK UP ZIPCODES FOR A GIVEN STATE AND CITY
 + AH = 78h
 + BL = ZIPKEY state code
 + DS:SI -> city name, terminated with 0Dh if complete name, 00h if prefix
 +Return: BH = number of matching entries (set to 51 if more than 50)
 + DX = zipcode region of first match (0-999)
 + CL = last two digits of first zipcode in the range (0-99)
 + CH = last two digits of last zipcode in the range (0-99)
 + AX destroyed
 +SeeAlso: AH=79h,AH=7Ah
 +----------B379-------------------------------
 +INT B3 - ZIPKEY - LOOK UP ZIPCODES FOR A GIVEN CITY
 + AH = 79h
 + BL = ZIPKEY state code of first state to search
 + DS:SI -> city name, terminated with 0Dh if complete name, 00h if prefix
 +Return: AL = ZIPKEY state code of first matching state
 + BH = number of matching entries (set to 51 if more than 50)
 + DX = zipcode region of first match (0-999)
 + CL = last two digits of first zipcode in first range (0-99)
 + CH = last two digits of last zipcode in first range (0-99)
 +Note: to find all matching cities, repeat search with BL set to one more than
 +   the returned AL
 +SeeAlso: AH=78h,AH=7Ah
 +----------B37A-------------------------------
 +INT B3 - ZIPKEY - FETCH AN ENTRY FROM A PREVIOUS LOOKUP
 + AH = 7Ah
 + BL = case number (0 to one less than value returned in BH by lookup)
 +Return: AL = ZIPKEY state code
 + DX = zipcode region (0-999)
 + CL = last two digits of first zipcode in the range (0-99)
 + CH = last two digits of last zipcode in the range (0-99)
 +SeeAlso: AH=78h,AH=79h
 +----------B37B-------------------------------
 +INT B3 - ZIPKEY - GET VALUES NEEDED TO SAVE ZIPKEY CONTEXT
 + AH = 7Bh
 +Return: BL = maximum number of characters for a city name
 + BH = ZIPKEY state code for last city-name search
 +     FFh if none
 + CX:DX = internal code identifying last city search
 + AX destroyed
 +SeeAlso: AH=7Ch
 +----------B37C-------------------------------
 +INT B3 - ZIPKEY - RESTORE ZIPKEY CONTEXT
 + AH = 7Ch
 + BL = maximum number of characters for a city name
 + BH = ZIPKEY state code for last city-name search
 +     FFh if none
 + CX:DX = internal code returned by AH=7Bh
 +Return: CF set on error
 + CF clear if successful
 + AX destroyed
 +SeeAlso: AH=7Bh
 +----------B37D-------------------------------
 +INT B3 - ZIPKEY - REQUEST POP UP
 + AH = 7Dh
 + BL = index number to simulate pressing a hotkey
 +     FFh for immediate popup with no playback on return
 +Return: CF set on error
 +     AL = FDh already busy with another request
 +        = FEh illegal function
 + CF clear if successful
 +     AX destroyed
 +     window popped up and was closed by the user
 +----------B37E-------------------------------
 +INT B3 - ZIPKEY - GET NAME OF PRIMARY CITY FOR A ZIPCODE REGION
 + AH = 7Eh
 + DX = zipcode region (0-999)
 + ES:DI -> buffer for name
 +Return: CF set on error
 +     AL = FFh region does not exist
 + CF clear if successful
 +     AL = ZIPKEY state code
 +     ES:DI points one byte beyond end of name
 +----------B37F-------------------------------
 +INT B3 - ZIPKEY - ENABLE/DISABLE HOTKEYS
 + AH = 7Fh
 + BL = function
 +     00h turn off hotkeys
 +     01h turn on hotkeys
 +     02h return hotkey status
 +     03h toggle hotkey status
 +Return: AL = hotkey status
 +     00h off
 +     01h on
 +----------B380-------------------------------
 +INT B3 - ZIPKEY v2.0+ - DETERMINE STATE FOR AREA CODE
 + AH = 80h
 + BX = telephone area code (decimal)
 +Return: CF clear if successful
 +     AL = ZIPKEY state code
 +     DX = first ZIP region for state (03E8h if Canada)
 +     CX = number of ZIP regions in state
 + CF set on error
 +     AL = FFh
 +     DX = 03E9h
 +----------B4---------------------------------
 +INT B4 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B4---------------------------------
 +INT B4 - STACKMAN - REQUEST NEW STACK
 +Return: SS:SP -> new stack
 +Note: the installation check consists of testing for the string "STACKXXX" at
 +   offset 0Ah from the interrupt handler
 +SeeAlso: INT 2F/AX=C9FFh,INT B5"STACKMAN"
 +----------B5---------------------------------
 +INT B5 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B5---------------------------------
 +INT B5 - STACKMAN - RESTORE ORIGINAL STACK
 + SS:SP -> stack returned by INT B4
 +Return: SS:SP restored to value before INT B4
 +SeeAlso: INT 2F/AX=C9FFh,INT B4"STACKMAN"
 +----------B6---------------------------------
 +INT B6 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B7---------------------------------
 +INT B7 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B8---------------------------------
 +INT B8 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------B9---------------------------------
 +INT B9 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------BA---------------------------------
 +INT BA - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------BB---------------------------------
 +INT BB - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------BC---------------------------------
 +INT BC - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------BD---------------------------------
 +INT BD - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------BE---------------------------------
 +INT BE - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------BE---------------------------------
 +INT BE - DESQview/X - ???
 +Note: points at an IRET
 +SeeAlso: INT 15/AX=BFDEh/BX=0006h,INT 63"DESQview"
 +----------BF---------------------------------
 +INT BF - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C0---------------------------------
 +INT C0 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C1---------------------------------
 +INT C1 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C2---------------------------------
 +INT C2 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C3---------------------------------
 +INT C3 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C4---------------------------------
 +INT C4 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C5---------------------------------
 +INT C5 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C6---------------------------------
 +INT C6 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C6---------------------------------
 +INT C6 - APL*PLUS/PC - IDENTICAL TO INT 86
 +Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
 +   the older interrupts
 +SeeAlso: INT 86"APL"
 +----------C7---------------------------------
 +INT C7 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C7---------------------------------
 +INT C7 - APL*PLUS/PC - ???
 +Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
 +   the older interrupts
 +SeeAlso: INT 87"APL"
 +----------C8---------------------------------
 +INT C8 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C8---------------------------------
 +INT C8 - APL*PLUS/PC - IDENTICAL TO INT 88
 +Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
 +   the older interrupts
 +SeeAlso: INT 88"APL"
 +----------C9---------------------------------
 +INT C9 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------C9---------------------------------
 +INT C9 - APL*PLUS/PC - ???
 +Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
 +   the older interrupts
 +SeeAlso: INT 89"APL"
 +----------CA---------------------------------
 +INT CA - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------CA---------------------------------
 +INT CA - APL*PLUS/PC - PRINT SCREEN
 +Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
 +   the older interrupts
 +SeeAlso: INT 8A"APL"
 +----------CB---------------------------------
 +INT CB - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------CB---------------------------------
 +INT CB - APL*PLUS/PC - BEEP
 +Notes: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
 +   the older interrupts
 + same as printing a ^G via INT 21/AH=02h
 +SeeAlso: INT 8B"APL"
 +----------CC---------------------------------
 +INT CC - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------CC---------------------------------
 +INT CC - APL*PLUS/PC - CLEAR SCREEN MEMORY
 + AX = flag
 +     0000h do not save display attributes
 +     0001h save attributes
 +Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
 +   the older interrupts
 +SeeAlso: INT 8C"APL"
 +----------CD---------------------------------
 +INT CD - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------CD---------------------------------
 +INT CD - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------CE---------------------------------
 +INT CE - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------CE---------------------------------
 +INT CE - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------CF---------------------------------
 +INT CF - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------CF---------------------------------
 +INT CF - APL*PLUS/PC - DEFAULT LOW-RESOLUTION TIMER FOR QUAD MF FUNCTION
 +SeeAlso: INT E0"APL"
 +----------D0---------------------------------
 +INT D0 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D0---------------------------------
 +INT D0 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +---------------------------------------------
 +INT D0 - [not a vector!] - NJFRERAM SIGNATURE VECTOR
 +Notes: NJFRERAM is a resident free-memory display utility by Mike "Nifty
 +   James" Blaszczak
 + if NJFRERAM is installed, this vector points at the signature "NJ"
 +----------D1---------------------------------
 +INT D1 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D1---------------------------------
 +INT D1 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------D2---------------------------------
 +INT D2 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D2---------------------------------
 +INT D2 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------D3---------------------------------
 +INT D3 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D3---------------------------------
 +INT D3 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------D4---------------------------------
 +INT D4 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D4---------------------------------
 +INT D4 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------D4---------------------------------
 +INT D4 - PC-MOS/386 - API
 +----------D5---------------------------------
 +INT D5 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D5---------------------------------
 +INT D5 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------D6---------------------------------
 +INT D6 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D6---------------------------------
 +INT D6 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------D7---------------------------------
 +INT D7 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D7---------------------------------
 +INT D7 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------D8---------------------------------
 +INT D8 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D8---------------------------------
 +INT D8 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------D9---------------------------------
 +INT D9 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------D9---------------------------------
 +INT D9 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------DA---------------------------------
 +INT DA - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------DA---------------------------------
 +INT DA - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------DB---------------------------------
 +INT DB - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------DB---------------------------------
 +INT DB - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------DC---------------------------------
 +INT DC - PC/370 v4.1- - API
 +SeeAlso: INT 60"PC/370"
 +----------DC---------------------------------
 +INT DC - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------DC---------------------------------
 +INT DC - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
 +----------DD---------------------------------
 +INT DD - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------DD---------------------------------
 +INT DD - STSC APL*PLUS/PC v9.0 - PLACE KEYSTROKE EVENTS IN INPUT BUFFER
 + BX = where to place keystrokes
 +     FFFFh insert before current buffer contents
 +     0000h replace current contents
 +     0001h insert after current contents
 + CX = number of keystroke events to insert
 + ES:SI -> data to be placed into buffer (list of WORD key codes)
 +     4000h + N = normal ASCII keystroke N (N = 00h to FFh)
 +     4100h + N = extended ASCII keystroke N (N = 03h to 84h)
 +SeeAlso: INT 16/AH=05h
 +----------DE---------------------------------
 +INT DE - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------DE---------------------------------
 +INT DE - APL*PLUS/PC - ???
 +Note: appears to be the same as INT 16
 +----------DF---------------------------------
 +INT DF - Victor 9000 - SuperBIOS
 +----------DF---------------------------------
 +INT DF - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------DF---------------------------------
 +INT DF - APL*PLUS/PC - SAME AS INT 10
 +SeeAlso: INT 10
 +----------E0---------------------------------
 +INT E0 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E0---------------------------------
 +INT E0 - APL*PLUS/PC - RESTIME HIGH-RESOLUTION TIMER FOR QUAD MF FUNCTION
 +SeeAlso: INT CF"APL"
 +----------E0---------------------------------
 +INT E0 - VIRUS - "Micro-128" - ???
 +Note: Micro-128 also overwrites the upper half of the interrupt table
 +SeeAlso: INT 70"VIRUS"
 +----------E0---------------------------------
 +INT E0 - CP/M-86, Concurrent CP/M, DR Multiuser DOS - FUNCTION CALLS
 + CL = function number
 + DS,DX = parameters
 +Return: as appropriate for function
 +Note: several functions are covered in more detail in following entries
 +SeeAlso: INT 21/AX=4459h
 +
 +Values for function number:
 + 00h terminate calling process (see also INT 21/AH=00h)
 + 02h write character to default console (see also INT 21/AH=02h)
 + 03h read character from default AUX (see also INT 21/AH=03h)
 + 05h write character to default list device (see also INT 21/AH=05h)
 + 06h perform raw I/O on default console (see also INT 21/AH=06h)
 + 07h return default AUX input status
 + 08h return default AUX output status
 + 09h write string to default console (see also INT 21/AH=09h)
 + 0Ah read string from default console (see also INT 21/AH=0Ah)
 + 0Bh return default console input status (see also INT 21/AH=0Bh)
 + 0Ch get BDOS release ID
 + 0Dh reset all disk drives (see also INT 21/AH=0Dh)
 + 0Eh set default drive (see also INT 21/AH=0Eh)
 + 0Fh open file via FCB (see also INT 21/AH=0Fh)
 + 10h close file via FCB (see also INT 21/AH=10h)
 + 11h search for first matching file with FCB (see also INT 21/AH=11h)
 + 12h search for next matching file with FCB (see also INT 21/AH=12h)
 + 13h delete file via FCB (see also INT 21/AH=13h)
 + 14h sequential read via FCB (see also INT 21/AH=14h)
 + 15h sequential write via FCB (see also INT 21/AH=15h)
 + 16h create file via FCB (see also INT 21/AH=16h)
 + 17h rename file via FCB (see also INT 21/AH=17h)
 + 18h get bit map of logged drives
 + 19h get default drive (see also INT 21/AH=19h)
 + 1Ah set DMA address offset
 + 1Bh get default disk allocation vector (see also INT 21/AH=1Bh)
 + 1Ch set default drive to read-only
 + 1Dh get bit map of read-only drives
 + 1Eh set file attributes via FCB
 + 1Fh get address of disk parameter block (see also INT 21/AH=1Fh)
 + 20h get/set default user number
 + 21h read random record via FCB (see also INT 21/AH=21h)
 + 22h write random record via FCB (see also INT 21/AH=22h)
 + 23h compute file size with FCB (see also INT 21/AH=23h)
 + 24h get FCB random record number (see also INT 21/AH=24h)
 + 25h reset specified drives
 + 26h access specified drives
 + 27h free specified drives
 + 28h write random with FCB, zero fill (see also also INT 21/AH=28h)
 + 2Ah lock records in FCB file (see also INT 21/AH=5Ch)
 + 2Bh unlock records in FCB file (see also INT 21/AH=5Ch)
 + 2Ch set BDOS multisector count
 + 2Dh set BDOS error mode
 + 2Eh get free space on disk
 + 2Fh load, initialize, and jump to process
 + 30h flush write-deferred buffers
 + 32h call BIOS character routine
 + 33h set DMA address segment
 + 34h get DMA buffer address
 + 35h CP/M-86 allocate maximum memory
 + 36h allocate maximum memory segment absolute
 + 37h CP/M-86 allocate memory segment (see also INT 21/AH=48h)
 + 38h allocate memory segment absolute
 + 39h CP/M-86 free specified memory segment (see also INT 21/AH=49h)
 + 3Ah CP/M-86 free all memory
 + 3Bh load .CMD file into memory
 + 40h (DR-NET) log on a server
 + 41h (DR-NET) log off a server
 + 42h (DR-NET) send a message
 + 43h (DR-NET) receive a message
 + 44h (DR-NET) get network status
 + 45h (DR-NET) get requestor configuration table
 + 46h (DR-NET) set compatibility attributes
 + 47h (DR-NET) get server configuration table
 + 48h (DR-NET) set network error mode
 + 49h (DR-NET) attach network
 + 4Ah (DR-NET) detach network
 + 4Bh (DR-NET) set default password
 + 4Ch (DR-NET) get-set long timeout
 + 4Dh (DR-NET) get parameter table
 + 50h (DR-NET) get network information
 + 53h get current time (see also INT 21/AH=2Ch)
 + 54h set current time (see also INT 21/AH=2Dh)
 + 55h get binary system date (see also INT 21/AH=2Ah)
 + 56h set system date (see also INT 21/AH=2Bh)
 + 57h allocate system flag
 + 58h deallocate system flag
 + 59h reserve memory in global area
 + 5Ah lock physical drive
 + 5Bh unlock physical drive
 + 5Ch search path for executable file
 + 5Dh load and execute command (see also INT 21/AH=4Bh)
 + 5Eh get/set process exit code
 + 5Fh set country information
 + 60h get country information
 + 63h truncate FCB file (see also INT 21/AH=28h)
 + 64h create/update directory label
 + 65h get directory label
 + 66h get FCB date stamp and password mode
 + 67h write extended FCB
 + 68h set system date and time
 + 69h get system date and time in binary
 + 6Ah establish password for file access
 + 6Bh get OS serial number
 + 6Dh get/set console mode
 + 6Eh get/set string delimiter
 + 6Fh write block to default console
 + 70h write block to default list device
 + 71h execute DOS-compatible function
 + 74h set FCB time and date stamps
 + 80h allocate memory
 + 82h deallocate memory
 + 83h poll I/O device
 + 84h wait on system flag
 + 85h set system flag
 + 86h create message queue
 + 87h open message queue
 + 88h delete message queue
 + 89h read from message queue
 + 8Ah conditionally read from message queue
 + 8Bh write to message queue
 + 8Ch conditionally write to message queue
 + 8Dh delay calling process
 + 8Eh call process dispatcher
 + 8Fh terminate calling process
 + 90h create a process
 + 91h set calling process' priority
 + 92h attach to default console
 + 93h detach from default console
 + 95h assign default console to process
 + 96h interpret and execute commandline
 + 97h resident procedure library
 + 98h parse ASCII string into FCB (see also INT 21/AH=29h)
 + 99h return default console
 + 9Ah get address of system data
 + 9Bh get system time and date
 + 9Ch return calling process' descriptor
 + 9Dh terminate process by name or PD address
 + 9Eh attach to default list device
 + 9Fh detach from default list device
 + A0h select default list device
 + A1h conditionally attach to default list device
 + A2h conditionally attach to default console
 + A3h get OS version number
 + A4h get default list device
 + A5h attach to default AUX
 + A6h detach from default AUX
 + A7h conditionally attach to default AUX
 + A8h set default AUX
 + A9h return default AUX
 + ACh read block from default AUX
 + B0h configure default AUX
 + B1h get/set device control parameters
 + B2h send Break through default AUX
 + B3h allocate physical memory
 + B4h free physical memory
 + B5h map physical memory
 + B6h nondestructive message queue read
 + B7h timed wait on system flag
 + B8h get/set I/O port mapping
 + B9h set list device timeout
 + BAh set AUX timeout value
 + BBh execute XIOS service
 + BDh (DR Multiuser DOS) delay
 + FFh return 80386 to native mode
 +
 +DR Multiuser DOS Error Return Codes:
 + 00h no error
 + 01h system call not implmented
 + 02h illegal system call number
 + 03h cannot find memory
 + 04h illegal flag number
 + 05h flag overrun
 + 06h flag underrun
 + 07h no unused Queue Descriptors
 + 08h no free queue buffer
 + 09h cannot find queue
 + 0Ah queue in use
 + 0Ch no free Process Descriptors
 + 0Dh no queue access
 + 0Eh empty queue
 + 0Fh full queue
 + 10h CLI queue missing
 + 11h no 8087 in system
 + 12h no unused Memory Descriptors
 + 13h illegal console number
 + 14h no Process Descriptor match
 + 15h no console match
 + 16h no CLI process
 + 17h illegal disk number
 + 18h illegal filename
 + 19h illegal filetype
 + 1Ah character not ready
 + 1Bh illegal Memory Descriptor
 + 1Ch bad return from BDOS load
 + 1Dh bad return from BDOS read
 + 1Eh bad return from BDOS open
 + 1Fh null command
 + 20h not owner of resource
 + 21h no CSEG in load file
 + 22h process Descriptor exists on Thread Root
 + 23h could not terminate process
 + 24h cannot attach to process
 + 25h illegal list device number
 + 26h illegal password
 + 28h external termination occurred
 + 29h fixup error upon load
 + 2Ah flag set ignored
 + 2Bh illegal auxilliary device number
 +----------E0----CL03-------------------------
 +INT E0 - DR Multiuser DOS - "A_READ" - READ CHARACTER FROM AUX DEVICE
 + CL = 03h
 +Return: AL = ASCII character
 +Notes: A_READ reads the next 8-bit character from the logical auxilliary
 +   input device (AUXn:); control is not returned to the calling
 +   process until a character has been read. 
 + if another process owns AUX, this call blocks until the device becomes
 +   available
 +SeeAlso: INT 21/AH=03h,INT E0/CL=04h,INT E0/CL=07h,INT E0/CL=A5h,INT E0/CL=ACh
 +----------E0----CL04-------------------------
 +INT E0 - DR Multiuser DOS - "A_WRITE" - WRITE CHARACTER TO AUX DEVICE
 + CL = 04h
 + DL = ASCII character
 +Return: nothing
 +Note: if another process owns AUX, this call blocks until the device becomes
 +   available
 +SeeAlso: INT 21/AH=04h,INT E0/CL=03h,INT E0/CL=08h,INT E0/CL=A5h,INT E0/CL=ADh
 +----------E0----CL07-------------------------
 +INT E0 - DR Multiuser DOS - "A_STATIN" - GET INPUT STATUS OF AUX DEVICE 
 + CL = 07h
 +Return: AL = status
 +     00h not ready
 +     FFh character available
 +SeeAlso: INT E0/CL=03h,INT E0/CL=08h
 +----------E0----CL08-------------------------
 +INT E0 - DR Multiuser DOS - "A_STATOUT" - GET OUTPUT STATUS OF AUX DEVICE
 + CL = 08h
 +Return: AL = status
 +     00h not ready
 +     FFh ready for output
 +SeeAlso: INT E0/CL=04h,INT E0/CL=07h
 +----------E0----CL59-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "S_MEMORY" - RESERVE MEMORY IN GLOBAL AREA
 + CL = 59h
 + DX = size in bytes
 +Return: AX = FFFFh if failed
 + AX = other if successful
 +     ES:BX -> reserved memory
 +----------E0----CL86-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "Q_MAKE" - CREATE MESSAGE QUEUE
 + CL = 86h
 + DS:DX -> queue descriptor (see below)
 +Return: AX = status
 +     0000h success
 +     FFFFh failure
 + CX = error code
 +SeeAlso: INT E0/CL=87h
 +
 +Format of queue descriptor:
 +Offset Size Description
 + 00h  2 WORDs internal use, initialize to zeros
 + 04h WORD flags
 + 06h  8 BYTEs queue name
 + 0Eh WORD length of message
 + 10h WORD number of messages
 + 12h  4 WORDs internal use, initialize to zeros
 + 1Ah WORD offset in system area of buffer for messages
 +----------E0----CL87-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "Q_OPEN" - OPEN MESSAGE QUEUE
 + CL = 87h
 + DS:DX -> queue parameter block (see below)
 +Return: AX = status
 +     0000h success
 +     FFFFh failure
 + CX = error code
 +SeeAlso: INT E0/CL=86h,INT E0/CL=89h
 +
 +Format of queue parameter block:
 +Offset Size Description
 + 00h WORD internal use, initialize to zero
 + 02h WORD queue ID (set by INT E0/CL=87h)
 + 04h WORD internal use, initialize to zero
 + 06h WORD offset of queue message buffer
 + 08h  8 BYTEs queue name
 +----------E0----CL89-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "Q_READ" - READ MESSAGE QUEUE
 + CL = 89h
 + DS:DX -> queue parameter block (see INT E0/CL=87h)
 +Return: AX = status
 +     0000h success
 +     FFFFh failure
 + CX = error code
 +SeeAlso: INT E0/CL=87h,INT E0/CL=8Ah,INT E0/CL=8Bh
 +----------E0----CL8A-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "Q_CREAD" - CONDITIONALLY READ MSG QUEUE
 + CL = 8Ah
 + DS:DX -> queue parameter block (see INT E0/CL=87h)
 +Return: AX = status
 +     0000h success
 +     FFFFh failure
 + CX = error code
 +SeeAlso: INT E0/CL=87h,INT E0/CL=89h,INT E0/CL=8Ch
 +----------E0----CL8B-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "Q_WRITE" - WRITE MESSAGE QUEUE
 + CL = 8Bh
 + DS:DX -> queue parameter block (see INT E0/CL=87h)
 +Return: AX = status
 +     0000h success
 +     FFFFh failure
 + CX = error code
 +SeeAlso: INT E0/CL=89h,INT E0/CL=8Ch
 +----------E0----CL8B-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "Q_CWRITE" - CONDITIONALLY WRITE MSG QUEUE
 + CL = 8Bh
 + DS:DX -> queue parameter block (see INT E0/CL=87h)
 +Return: AX = status
 +     0000h success
 +     FFFFh failure
 + CX = error code
 +SeeAlso: INT E0/CL=8Ah,INT E0/CL=8Bh
 +----------E0----CL8E-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "P_DISPATCH" - CALL DISPATCHER
 + CL = 8Eh
 + DX = FFFFh (optional) to force dispatch
 +Return: nothing
 +Note: if DX=FFFFh, a dispatch is forced even if no other process is ready
 +SeeAlso: INT E0/CL=91h
 +----------E0----CL91-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "P_PRIORITY" - SET PROCESS PRIORITY
 + CL = 91h
 + DL = new priority (00h highest to FFh lowest)
 +Note: sets priority of calling process; transient processes are initialized
 +   to priority C8h
 +SeeAlso: INT E0/CL=8Eh
 +----------E0----CL93-------------------------
 +INT E0 - ConcCP/M,DR Multiuser DOS - "C_DETACH" - DETACH FROM DEFAULT CONSOLE
 + CL = 93h
 +Return: AX = status
 +     0000h successfully detached
 +     FFFFh detach failed
 +----------E0----CLA5-------------------------
 +INT E0 - DR Multiuser DOS - "A_ATTACH" - ATTACH AUX DEVICE
 + CL = A5h
 +Desc: attaches the default auxiliary device to the calling process unless
 +   it is already attached to another process, in which case the call
 +   blocks until the device becomes available
 +Note: this call should be used before attempting to read or write from
 +   the AUX device; however, the I/O calls internally call this function
 +   to ensure device ownership
 +SeeAlso: INT E0/CL=03h,INT E0/CL=04h,INT E0/CL=A6h,INT E0/CL=A7h,INT E0/CL=A8h
 +SeeAlso: INT E0/CL=ACh,INT E0/CL=ADh,INT E0/CL=B0h
 +----------E0----CLA6-------------------------
 +INT E0 - DR Multiuser DOS - "A_DETACH" - DETACH FROM AUX DEVICE
 + CL = A6h
 +Return: AX = status
 +     0000h successfully detached
 +     FFFFh detach failed
 + CX = error code
 +SeeAlso: INT E0/CL=A5h,INT E0/CL=A7h
 +----------E0----CLA7-------------------------
 +INT E0 - DR Multiuser DOS - "A_CATTACH" - CONDITIONALLY ATTACH TO AUX DEVICE
 + CL = A7h
 +Return: AX = status
 +     0000h attached
 +     FFFFh unable to attach
 +Desc: attaches the default auxiliary device to the calling process if it is
 +   available
 +Note: does not block if the device is already in use
 +SeeAlso: INT E0/CL=A5h,INT E0/CL=A6h,INT E0/CL=A8h,INT E0/CL=B0h
 +----------E0----CLA8-------------------------
 +INT E0 - DR Multiuser DOS - "A_SET" - SET DEFAULT AUX DEVICE NUMBER
 + CL = A8h
 + DL = auxiliary device number
 +Return: AX = status
 +     0000h successful
 +     FFFFh failed
 + CX = error code
 +SeeAlso: INT E0/CL=A5h,INT E0/CL=A9h
 +----------E0----CLA9-------------------------
 +INT E0 - DR Multiuser DOS - "A_GET" - GET DEFAULT AUX DEVICE NUMBER
 + CL = A9h
 +Return: AL = current default auxiliary device number
 +SeeAlso: INT E0/CL=A8h
 +----------E0----CLAC-------------------------
 +INT E0 - DR Multiuser DOS - "A_READBLK" - READ STRING FROM AUX DEVICE
 + CL = ACh
 + DS:DX -> character control block (CHCB) (see below)
 +Return: AX = number of characters read
 +Desc: read characters from the default auxiliary (AUXn:) device into a buffer
 +   until the buffer is full or the device is no longer ready
 +Notes: if the device is initially not ready, blocks until at least one
 +   character has been read
 + if another process owns AUX, this call blocks until the device becomes
 +   available
 +SeeAlso: INT E0/CL=03h,INT E0/CL=A5h,INT E0/CL=ADh
 +
 +Format of character control block (CHCB):
 +Offset Size Description
 + 00h DWORD pointer to character buffer
 + 04h WORD length of character buffer
 +----------E0----CLAD-------------------------
 +INT E0 - DR Multiuser DOS - "A_WRITEBLK" - WRITE STRING TO AUX DEVICE
 + CL = ADh
 + DS:DX -> character control block (see INT E0/CL=ACh)
 +Return: AX = number of characters written
 +Note: does not return until at least one character has been written
 +SeeAlso: INT E0/CL=04h,INT E0/CL=A5h,INT E0/CL=ACh
 +----------E0----CLB0-------------------------
 +INT E0 - DR Multiuser DOS - "A_CONFIG" - GET/SET AUX DEVICE PARAMETERS
 + CL = B0h
 + DX:DX -> AUX device parameter block (see below)
 +Return: AX = status
 +     0000h successful
 +     parameter block updated
 +     FFFFh failed
 +     CX = error code
 +SeeAlso: INT E0/CL=A5h,INT E0/CL=B1h
 +
 +Format of AUX device parameter block:
 +Offset Size Description
 + 00h BYTE function (00h get, 01h set)
 + 01h BYTE baud rate (see below) FFh = don't change/unknown
 + 02h BYTE parity
 +  00h none
 + 01h odd
 + 02h none
 + 03h even
 + 04h stick parity bit
 + FFh don't change/unknown
 + 03h BYTE stop bits (00h one, 01h 1.5, 02h two, FFh unknown/don't change)
 + 04h BYTE data bits (05h-08h or FFh unknown/don't change)
 + 05h BYTE handshake (00h none, 01h DTS/DSR, 02h RTS/CTS, 04h XON/XOFF,
 +  FFh unknown/don't change)
 + 06h BYTE XON character, FFh unknown/don't change
 + 07h BYTE XOFF character, FFh unknown/don't change
 +
 +Values for baud rate:
 + 00h = 50 baud
 + 01h = 62.5 baud
 + 02h = 75 baud
 + 03h = 110 baud
 + 04h = 134.5 baud
 + 05h = 150 baud
 + 06h = 200 baud
 + 07h = 300 baud
 + 08h = 600 baud
 + 09h = 1200 baud
 + 0Ah = 1800 baud
 + 0Bh = 2000 baud
 + 0Ch = 2400 baud
 + 0Dh = 3600 baud
 + 0Eh = 4800 baud
 + 0Fh = 7200 baud
 + 10h = 9600 baud
 + 11h = 19200 baud
 + 12h = 38400 baud
 + 13h = 56000 baud
 + 14h = 76800 baud
 + 15h = 115200 baud
 +----------E0----CLB1-------------------------
 +INT E0 - DR Multiuser DOS - "A_CONTROL" - GET/SET AUX CONTROL PARAMETERS
 + CL = B1h
 + DS:DX -> AUX device control block (see below)
 +Return: AX = status
 +     0000h successful
 + control block updated
 +     FFFFh failed
 + CX = error code
 +SeeAlso: INT E0/CL=B0h,INT E0/CL=B2h
 +
 +Format of AUX device control block:
 +Offset Size Description
 + 00h BYTE function (00h get, 01h set)
 + 01h BYTE DTR state (00h low, 01h high, FFh unknown/don't change)
 + 02h BYTE RTS state (00h low, 01h high, FFh unknown/don't change)
 + 03h BYTE DSR state (00h low, 01h high, FFh unknown/don't change)
 + 04h BYTE CTS state (00h low, 01h high, FFh unknown/don't change)
 + 05h BYTE DCD state (00h low, 01h high, FFh unknown/don't change)
 + 06h BYTE RI state (00h inactive, 01h active, FFh unknown/don't change)
 +----------E0----CLB2-------------------------
 +INT E0 - DR Multiuser DOS - "A_BREAK" - SEND BREAK TO AUX DEVICE
 + CL = B2h
 + DX = duration of break in system ticks (0001h-FFFFh)
 +Return: AX = status
 +     0000h successful
 +     break signal completed
 +     FFFFh failed
 +         CX = error code
 +Note: if the AUX device is currently owned by another process, this call will
 +   block until the device becomes available
 +SeeAlso: INT E0/CL=A5h,INT E0/CL=B1h
 +----------E0----CLBD-------------------------
 +INT E0 - DR Multiuser DOS - "P_DELAY" - DELAY EXECUTION
 + CL = BDh
 + DX = delay in system ticks
 +Return: after the delay elapses
 +Notes: the length of a system tick is installation-dependent (typically
 +   1/50 or 1/60 second); the length may be determined by reading the
 +   TICKSPERSEC value from the system data segment
 + the actual delay before the process is rescheduled to run may be up to
 +   one tick longer than requested; the delay between rescheduling and
 +   actual execution cannot be predicted if higher-priority processes
 +   are awaiting a turn at the CPU
 +----------E1---------------------------------
 +INT E1 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E1---------------------------------
 +INT E1 - PC Cluster Disk Server Information
 +SeeAlso: INT E2
 +----------E2---------------------------------
 +INT E2 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E2---------------------------------
 +INT E2 - PC Cluster Program
 +----------E3---------------------------------
 +INT E3 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E40005-----------------------------
 +INT E4 - Logitech Modula v2.0 - MonitorEntry
 + AX = 0005h
 + BX = priority
 +SeeAlso: AX=0006h
 +----------E40006-----------------------------
 +INT E4 - Logitech Modula v2.0 - MonitorExit
 + AX = 0006h
 +SeeAlso: AX=0005h
 +----------E4---------------------------------
 +INT E4 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E5---------------------------------
 +INT E5 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E6---------------------------------
 +INT E6 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E7---------------------------------
 +INT E7 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E8---------------------------------
 +INT E8 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------E9---------------------------------
 +INT E9 - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------EA---------------------------------
 +INT EA - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------EB---------------------------------
 +INT EB - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------EC---------------------------------
 +INT EC - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------EC---------------------------------
 +INT EC - used by Alloy NTNX
 +----------EC---------------------------------
 +INT EC - Exact - RUNTIME INTERFACE MULTIPLEXOR
 + AX = function number (0000h to 0140h)
 + STACK: DWORD address to return to
 + any arguments required by function
 +Return: STACK: return address popped, but otherwise unchanged
 +Notes: this is the interface from applications to the runtime system by Exact
 +   Automatisering B.V. of the Netherlands.  By using this interrupt,
 +   it can provide DLL-style capabilities under MSDOS.
 + the interrupt handler removes the return address and flags placed on
 +   the stack by the INT EC, then jumps to the appropriate function
 +----------ED---------------------------------
 +INT ED - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------EE---------------------------------
 +INT EE - IBM ROM BASIC - used while in interpreter
 +Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
 + BASIC.COM/BASICA.COM do not restore vector on termination
 +----------EF---------------------------------
 +INT EF - BASIC - ORIGINAL INT 09 VECTOR
 +Note: BASIC.COM/BASICA.COM do not restore vector on termination
 +SeeAlso: INT F0"BASIC"
 +----------EF----CX0473-----------------------
 +INT EF - GEM - INTERFACE
 + CX = 0473h
 + DS:DX -> GEM parameter block
 +----------F0---------------------------------
 +INT F0 - BASICA.COM, GWBASIC, compiled BASIC - ORIGINAL INT 08 VECTOR
 +Note: BASICA.COM does not restore vector on termination
 +SeeAlso: INT EF"BASIC"
 +----------F1---------------------------------
 +INT F1 - reserved for user interrupt
 +----------F1---------------------------------
 +INT F1 - SPEECH.COM - CONVERT TEXT STRING TO SPEECH
 + DS:BX -> '$'-terminated text string
 +Note: SPEECH.COM is a resident text-to-speech converter by Douglas Sisco
 +----------F1---------------------------------
 +INT F1 - Andy C. McGuire SPEECH.COM/SAY.COM
 +SeeAlso: INT F2"SPEECH"
 +----------F1---------------------------------
 +INT F1 - AQUEDUCT, PIPELINE - GET DATA AREA ADDRESS
 +Return: AX:BX -> data area
 +Notes: AQUEDUCT and PIPELINE are TSRs by James W. Birdsall to connect COM1
 +   and COM2 in software
 + The installation check consists of testing for the following signature
 +   immediately preceding the interrupt handler: "JWBtvv" where 't' is
 +   either "A" for AQUEDUCT or "P" for PIPELINE and "vv" is a two-digit
 +   version number
 +----------F2---------------------------------
 +INT F2 - reserved for user interrupt
 +----------F2---------------------------------
 +INT F2 - Andy C. McGuire SPEECH.COM/SAY.COM
 +SeeAlso: INT F1"SPEECH"
 +----------F2---------------------------------
 +INT F2 - ICCTSR 1.0 - ImageCapture COLOR Developer's Kit - API
 + AH = function
 +     01h power up
 +     02h power down
 +     03h set controls
 +     04h capture image
 +     05h display image
 +     06h read file
 +     07h write file
 +     08h write array
 +     09h read pixel
 +     0Ah write pixel
 +     0Bh check if VGA present
 +     0Ch set video mode
 +     0Dh check for keystroke
 +     0Eh delay
 + ???
 +Return: ???
 +Note: ImageCapture is a product of International Computers
 +SeeAlso: INT F3"ICCTSR"
 +----------F3---------------------------------
 +INT F3 - reserved for user interrupt
 +----------F3---------------------------------
 +INT F3 - SoundBlaster - POINTER TO ECHO VALUE
 +Note: this is not a vector, but a pointer to a DWORD containing the echo
 +   value selected with SET-ECHO.EXE
 +SeeAlso: INT 2F/AX=FBFBh
 +----------F3---------------------------------
 +INT F3 - ICCTSR 1.0 - HANDSHAKE ID VECTOR
 +Note: ImageCapture is a product of International Computers
 +SeeAlso: INT F2"ICCTSR"
 +----------F4---------------------------------
 +INT F4 - reserved for user interrupt
 +----------F4---------------------------------
 +INT F4 - DoubleDOS - GIVE UP REST OF CURRENT CLOCK TICK AND ALL OF NEXT TICK
 +SeeAlso: INT 21/AH=EEh"DoubleDOS",INT FE"DoubleDOS"
 +----------F5---------------------------------
 +INT F5 - reserved for user interrupt
 +----------F5---------------------------------
 +INT F5 - DoubleDOS - ???
 +----------F6---------------------------------
 +INT F6 - reserved for user interrupt
 +----------F6---------------------------------
 +INT F6 - DoubleDOS - ???
 +----------F7---------------------------------
 +INT F7 - reserved for user interrupt
 +----------F7---------------------------------
 +INT F7 - DoubleDOS - ???
 +----------F700-------------------------------
 +INT F7 - FSBBS 2.0 - CONFIGURATION RECORD
 + AH = 00h
 + AL = function
 +     00h get configuration record
 + Return: DS:DX -> configuration record
 +     01h set configuration record
 +     02h get path for option
 + DS:DX -> option name
 + Return: DS:DX -> path
 +     03h determine whether configuration record set
 + Return: AX = status
 +     0000h set
 +     0001h not yet set
 +     04h get link state
 + Return: AX = state
 +     0000h unlinked
 +     0001h linked
 +Notes: this information is preliminary and still subject to change
 + all of the INT F7 calls for FSBBS are used for interprogram
 +   communication between the BBS kernel and the programs it spawns
 +SeeAlso: AH=01h
 +----------F701-------------------------------
 +INT F7 - FSBBS 2.0 - USER RECORD
 + AH = 01h
 + AL = function
 +     00h get user record for user currently online
 + Return: DS:DX -> user record
 +     01h set user record
 + DS:DX -> user record
 +SeeAlso: AH=00h,AH=02h
 +----------F702-------------------------------
 +INT F7 - FSBBS 2.0 - GET ACCOUNT NAME
 + AH = 02h
 +Return: DS:DX -> 8-character blank-padded account name
 +SeeAlso: AH=01h
 +----------F703-------------------------------
 +INT F7 - FSBBS 2.0 - TERMINAL NUMBER
 + AH = 03h
 + AL = function
 +     00h get terminal index number
 + Return: DX = index number
 +     01h set terminal index number
 + DX = terminal index
 +----------F704-------------------------------
 +INT F7 - FSBBS 2.0 - PASSDATA BUFFER
 + AH = 04h
 + AL = function
 +     00h get PassData buffer contents
 + DS:DX -> buffer for PassData contents
 +     01h set PassData contents
 + DS:DX -> buffer containing new PassData
 + CH = length of data in buffer
 +----------F705-------------------------------
 +INT F7 - FSBBS 2.0 - TIMER FUNCTIONS
 + AH = 05h
 + AL = function
 +     00h get time remaining
 + Return: DX = number of minutes remaining
 +     01h get current time
 + Return: DS:DX -> 8-character time string
 +     02h increment time
 + DX = number of additional minutes
 +     03h decrement time
 + DX = number of minutes
 +SeeAlso: AH=06h
 +----------F706-------------------------------
 +INT F7 - FSBBS 2.0 - FUNCTION AVAILABILITY
 + AH = 06h
 + AL = function
 +     00h determine whether function is available
 + DX = index of function
 +     01h set function availability
 + DX = index of function
 + ???
 +SeeAlso: AH=05h,AH=07h
 +----------F707-------------------------------
 +INT F7 - FSBBS 2.0 - DUMP FUNCTIONS
 + AH = 07h
 + AL = function
 +     00h get current dump mode
 + Return: DL = mode
 +     01h set dump mode
 + DL = mode
 +SeeAlso: AH=06h
 +----------F8---------------------------------
 +INT F8 - TANDY??? - 100 HZ INTERRUPT
 +SeeAlso: INT FA"USART"
 +----------F8---------------------------------
 +INT F8 - DoubleDOS - ???
 +----------F9---------------------------------
 +INT F9 - reserved for user interrupt
 +----------F9---------------------------------
 +INT F9 - DoubleDOS - ???
 +----------FA---------------------------------
 +INT FA - TANDY??? - SERIAL PORT USART INTERRUPT
 +SeeAlso: INT F8"100 HZ",INT FB"USART"
 +----------FA---------------------------------
 +INT FA - DoubleDOS - TURN OFF TIMESHARING
 +SeeAlso: INT 21/AH=EAh"DoubleDOS",INT FB"DoubleDOS"
 +----------FB---------------------------------
 +INT FB - TANDY??? - KEYBOARD USART RECEIVE INTERRUPT
 +SeeAlso: INT FA"USART"
 +----------FB---------------------------------
 +INT FB - DoubleDOS - TURN ON TIMESHARING
 +SeeAlso: INT 21/AH=EBh"DoubleDOS",INT FA"DoubleDOS"
 +----------FC---------------------------------
 +INT FC - reserved for user interrupt
 +----------FC---------------------------------
 +INT FC - DoubleDOS - GET CURRENT SCREEN BUFFER ADDRESS
 +Return: ES = segment of display buffer
 +Note: the display buffer may be moved if multitasking is enabled
 +SeeAlso: INT 21/AH=ECh"DoubleDOS",INT FB"DoubleDOS"
 +----------FD---------------------------------
 +INT FD - reserved for user interrupt
 +----------FD---------------------------------
 +INT FD - DoubleDOS - ???
 +----------FE---------------------------------
 +INT FE - AT/XT286/PS50+ - destroyed by return from protected mode
 +SeeAlso: INT FF"XT286"
 +----------FE---------------------------------
 +INT FE - DoubleDOS - GIVE UP TIME
 + AL = number of 55ms time slices to give away
 +SeeAlso: INT 21/AH=EEh"DoubleDOS",INT F4"DoubleDOS"
 +----------FE---------------------------------
 +INT FE - Turbo Debugger 8086 v2.5+ - OVERLAY MANAGER
 +SeeAlso: INT 3F
 +----------FF---------------------------------
 +INT FF - AT/XT286/PS50+ - destroyed by return from protected mode
 +SeeAlso: INT FE"XT286"
 +----------FF---------------------------------
 +INT FF - Z100 - WARM BOOT
 +SeeAlso: INT 40"Z100"
 +---------------------------------------------