[comp.sys.ibm.pc] Interrupt List 88.9, file INTERRUP.LST 06/07

ralf@b.gp.cs.cmu.edu (Ralf Brown) (12/18/88)

---------------------------------------------
INT 2F - Multiplexor - CDROM 2.00 - GET DIRECTORY ENTRY
	AX = 150Fh
	CX = drive number (0=A:)
	ES:BX -> ASCIZ path name
	SI:DI -> 255-byte buffer for directory entry
Return: CF set on error
	    AX = error code
	CF clear if succesful
	    AX = disk format (0=High Sierra,1=ISO 9660)

directory entry
	BYTE  length of directory entry
	BYTE  length of XAR in LBN's (don't ask me what that means...)
	DWORD LBN of data, Intel (little-endian) format
	DWORD LBN of data, Motorola (big-endian) format
	DWORD length of file, Intal format
	DWORD length of file, Motorola format
---High Sierra---
      6 BYTEs date and time
	BYTE  bit flags
	BYTE  reserved
---ISO 9660---
      7 BYTEs data and time
	BYTE  bit flags
---both formats---
	BYTE  interleave size
	BYTE  interleave skip factor
	WORD  volume set sequence number, Intel format
	WORD  volume set sequence number, Motorola format
	BYTE  length of file name
      N BYTEs file name
	BYTE (optional) padding if filename is odd length
      N BYTEs system data
---------------------------------------------
INT 2F - Multiplexor - XMS - INSTALLATION CHECK
	AX = 4300h
Return: AL = 80h XMS driver installed
	AL <> 80h no driver
Note: XMS gives access to extended memory and noncontiguous/nonEMS memory
      above 640K
---------------------------------------------
INT 2F - Multiplexor - XMS - GET DRIVER ADDRESS
	AX = 4310h
Return: ES:BX -> driver entry point

Perform a FAR call to the driver entry point with AH set to the function code
	AH	function
	00h  Get XMS version number
	     Return: AX = XMS version (in BCD)
		     BX = internal revision number
		     DX = 1 if HMA (1M to 1M + 64K) exists
			  0 if HMA does not exist
	01h  Request High Memory Area (1M to 1M + 64K)
	     DX = memory in bytes (for TSR or device drivers)
		  FFFFh if application program
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	02h  Release High Memory Area
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	03h  Global enable A20, for using the HMA
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	04h  Global disable A20
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	05h  Local enable A20, for direct access to extended memory
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	06h  Local disable A20
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	07h  Query A20
	     Return: AX = 1 enabled
			= 0 disabled
		     BL = error code (0 = successful)
	08h  Query free extended memory, not counting HMA
	     Return: AX = size of largest extended memory block in K
		     DX = total extended memory in K
		     BL = error code
	09h  Allocate extended memory block
	     DX = Kbytes needed
	     Return: AX = 1 success
			   DX = handle for memory block
			= 0 failure
			   BL = error code
	0Ah  Free extended memory block
	     DX = handle of block to free
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	0Bh  Move extended memory block
	     DS:SI -> EMM structure
			DWORD number of bytes to move (must be even)
			WORD source handle
			DWORD offset into source block
			WORD destination handle
			DWORD offset into destination block
	     Note: if either handle is 0000h, the corresponding offset is
		   considered to be an absolute Segment:Offset address in
		   directly addressable memory
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	0Ch  Lock extended memory block
	     DX = handle of block to lock
	     Return: AX = 1 success
			   DX:BX = 32-bit linear address of locked block
			= 0 failure
			   BL = error code
	0Dh  Unlock extended memory block
	     DX = handle of block to unlock
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	0Eh  Get handle information
	     DX = handle for which to get info
	     Return: AX = 1 success
			   BH = block's lock count
			   BL = number of free handles left
			   DX = block size in K
			= 0 failure
			   BL = error code
	0Fh  Reallocate extended memory block
	     DX = handle of block
	     BX = new size of block in K
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
	10h  Request upper memory block (nonEMS memory above 640K)
	     DX = size of block in paragraphs
	     Return: AX = 1 success
			   BX = segment address of UMB
			   DX = actual size of block
			= 0 failure
			   BL = error code
			   DX = largest available block
	11h  Release upper memory block
	     DX = segment address of UMB to release
	     Return: AX = 1 success
			= 0 failure
			   BL = error code
Note: HIMEM.SYS requires at least 256 bytes stack

Error codes returned in BL:
	80h Function not implemented
	81h Vdisk was detected
	82h An A20 error occurred
	8Eh a general driver error
	8Fh unrecoverable driver error
	90h HMA does not exist
	91h HMA is already in use
	92h DX is less than the /HMAMIN= parameter
	93h HMA is not allocated
	94h A20 line still enabled
	A0h all extended memory is allocated
	A1h all available extended memory handles are allocated
	A2h Invalid handle
	A3h Source handle is invalid
	A4h Source offset is invalid
	A5h Destination handle is invalid
	A6h Destination offset is invalid
	A7h Length is invalid
	A8h Move has an invalid overlap
	A9h Parity error occurred
	AAh Block is not locked
	ABh Block is locked
	ACh Block lock count overflowed
	ADh Lock failed
	B0h Only a smaller UMB is available
	B1h No UMB's are available
	B2h UMB segment number is invalid
---------------------------------------------
INT 2F - Multiplexor - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
	AX = 5453h
	BX = subfunction
	    00h installation check
		DS:SI -> 8-char blank-padded name
		Return: AX = FFFFh installed
				CX = ID number of already-installed copy
			   = anything else, not installed
				CX = ID number for TSR when installed
	    01h get user parameters
		CX = TSR ID number
		Return: AX = 0 successful
			   ES:BX -> user parameter block
			      8 BYTEs blank-padded TSR name
				WORD  TSR ID number
				DWORD bitmap of supported functions
				BYTE  scan code of primary hotkey
				      00h = pop up when shift states match
				      FFh = no popup (if shift state also FFh)
				BYTE  shift state of primary hotkey
				      FFh = no popup (if scan code also FFh)
				BYTE  number of secondary hotkeys
				DWORD pointer to extra hotkeys set by func 05h
				WORD  current TSR status flags
				WORD  PSP segment of TSR
				DWORD DTA for TSR
				WORD  default DS for TSR
				DWORD stack at popup
				DWORD stack at background invocation
			   = nonzero failed
	    02h check if hotkey in use
		CL = scan code of hot key
		Return: AX = FFFFh hot key conflicts with another TSR
			     otherwise safe to use the hotkey
	    03h replace default critical error handler
		CX = TSR ID number
		DS:SI -> new routine for INT 24h
		Return: AX = nonzero, unable to install new handler
	    04h get internal data area
		CX = TSR ID number
		Return: AX = 0
			    ES:BX -> TSR's internal data area
				BYTE  revision level of TesSeRact library
				BYTE  type of popup in effect
				BYTE  INT 08 occurred since last invocation
				BYTE  INT 13 occurred since last invocation
				BYTE  active interrupts
				BYTE  active soft interrupts
				BYTE  DOS major version
				BYTE  how long to wait before popping up
				DWORD pointer to INDOS flag
				DWORD pointer to DOS critical error flag
				WORD  PSP segment of interrupted program
				WORD  PSP segment of prog interrupted by INT 28
				DWORD DTA of interrupted program
				DWORD DTA of program interrupted by INT 28
				WORD  SS of interrupted program
				WORD  SP of interrupted program
				WORD  SS of program interrupted by INT 28
				WORD  SP of program interrupted by INT 28
				DWORD INT 24 of interrupted program
			      3 WORDs DOS 3.x extended error info
				BYTE  old BREAK setting
				BYTE  old VERIFY setting
				BYTE  were running MS WORD 4.0 before popup
				BYTE  MS WORD 4.0 special popup flag
				BYTE  enhanced keyboard call in use
				BYTE  delay for MS WORD 4.0
			     11 times:
				DWORD old interrupt vector
				BYTE  interrupt number
				DWORD new interrupt vector
			   = nonzero, TSR not found
	    05h set multiple hot keys
		CX = TSR ID number
		DL = number of additional hot keys to allocate
		DS:SI -> table of hot keys
			BYTE  hotkey scan code
			BYTE  hotkey shift state
			BYTE  flag value to pass to TSR (nonzero)
		Return: AX = nonzero, unable to install hot keys
	    06h - 0Fh reserved
	    10h enable TSR
		CX = TSR ID number
		Return: AX = nonzero, unable to enable
	    11h disable TSR
		CX = TSR ID number
		Return: AX = nonzero, unable to disable
	    12h unload TSR
		CX = TSR ID number
		Return: AX = nonzero, invalid TSR number
		Note: if any interrupts used by TSR have been grabbed by
			another TSR, the TesSeRact routines will wait until
			it is safe to remove the indicated TSR from memory
	    13h restart TSR
		CX = TSR ID number of TSR which was unloaded but is still in
		     memory
		Return: AX = nonzero, unable to restart TSR
	    14h get status word
		CX = TSR ID number
		Return: AX = FFFFh invalid ID number
			   = other, successful
				BX = bit flags
	    15h set status word
		CX = TSR ID number
		DX = new bit flags
		Return: AX = nonzero, unable to set status word
	    16h get INDOS state at popup
		CX = TSR ID number
		Return: AX = 0 successful
			    BX = value of INDOS flag
	    17h - 1Fh reserved
	    20h call user procedure
		CX = TSR ID number
		ES:DI -> user-defined data
		Return: AX = 0 successful
	    21h stuff keystrokes into keyboard buffer
		CX = TSR ID number
		DL = speed
		    00h stuff keystrokes only when buffer is empty
		    01h stuff up to four keystrokes per clock tick
		    02h stuff up to 15 keystrokes per clock tick
		DH = scan code flag
		    if zeor, buffer contains alternating ASCII and scan codes
		    if nonzero, buffer contains only ASCII codes
		SI = number of keystrokes
		ES:DI -> buffer to stuff
		Return: AX = 0	   success
			     F0F0h user aborted with ^C or ^Break
			     other unable to stuff keystrokes
	    22h - 2Fh reserved
Note:	Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
	fully supports the TesSeRact API
---------------------------------------------
INT 2F - Multiplexor - SCRNSAV2.COM - INSTALLATION CHECK
	AX = 6400h
Return: AL = 00h not installed
	     FFh installed
Note: SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
---------------------------------------------
INT 2F - Multiplexor - Novell NetWare - INSTALLATION CHECK
	AX = 7A00h
Return: AL = 00h not installed
	   = FFh installed
		ES:DI -> FAR entry point for routines otherwise accessed
			 through INT 21h
---------------------------------------------
INT 2F - Multiplexor - VIDCLOCK.COM - INSTALLATION CHECK
	AX = AA00h
Return: AL = 00h not installed
	     FFh installed
Note: VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
---------------------------------------------
INT 2F - Multiplexor - GRAFTABL.COM or DISPLAY.SYS
	AH = B0h
	???
---------------------------------------------
INT 2F - Multiplexor - APPEND - INSTALLATION CHECK
	AX = B700h
Return: AH <> 0 if installed
---------------------------------------------
INT 2F - Multiplexor - APPEND - ???
	AX = B701h
	???
---------------------------------------------
INT 2F - Multiplexor - APPEND - VERSION CHECK
	AX = B702h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - Network - INSTALLATION CHECK
	AX = B800h
Return: AH = 0	not installed
	   <> 0 installed
	      BX = installed component flags (test in this order!)
		   bit 6   server
		   bit 2   messenger
		   bit 7   receiver
		   bit 3   redirector
---------------------------------------------
INT 2F - Multiplexor - Network - GET CURRENT POST ADDRESS
	AX = B803h
Return: ES:BX = post address
---------------------------------------------
INT 2F - Multiplexor - Network - SET NEW POST ADDRESS
	AX = B804h
	ES:BX = new post address
---------------------------------------------
INT 2F - Multiplexor - Network - VERSION CHECK
	AX = B809h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - ANARKEY.COM - INSTALLATION CHECK
	AX = E300h
Return: AL = 00h not installed
	     FFh installed
Notes: ANARKEY.COM is a commandline recall program by Steven Calwas
       E3h is the default function number, but can be set to any value from
       C0h to FFh.
---------------------------------------------
INT 2F - Multiplexor - AUTOPARK.COM - INSTALLATION CHECK
	AX = F700h
Return: AL = 00h not installed
	     FFh installed
Note: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
---------------------------------------------
INT 2F - Multiplexor - AUTOPARK.COM - SET PARKING DELAY
	AX = F701h
	BX:CX = 32 bit count of 55ms timer ticks
---------------------------------------------
INT 30 - (NOT A VECTOR!) FAR JuMP instruction for CP/M-style calls
	 the CALL 5 entry point does a FAR jump to here
---------------------------------------------
INT 31 - overwritten by CP/M jump instruction in INT 30h
---------------------------------------------
INT 32 - reserved
---------------------------------------------
INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
	AX = 0000h
Return: AX = status
	    0  hardware/driver not installed
	    -1 hardware/driver installed
	BX = number of buttons
	    -1 two buttons
	    0  other than two
	    3  Mouse Systems mouse
---------------------------------------------
INT 33 - MS MOUSE - SHOW MOUSE CURSOR
	AX = 0001h
---------------------------------------------
INT 33 - MS MOUSE - HIDE MOUSE CURSOR
	AX = 0002h
Note: multiple calls to hide the cursor will require multiple calls to
      function 01h to unhide it.
---------------------------------------------
INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
	AX = 0003h
Return: BX = button status
	   bit 0  left button pressed if 1
	   bit 1  right button pressed if 1
	   bit 2  middle button pressed if 1 (Mouse Systems mouse)
	CX = column
	DX = row
---------------------------------------------
INT 33 - MS MOUSE - POSITION MOUSE CURSOR
	AX = 0004h
	CX = column
	DX = row
---------------------------------------------
INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
	AX = 0005h
	BX = button
	    0 left
	    1 right
	    2 middle (Mouse Systems mouse)
Return: AX = button states
	    bit 0 left button pressed if 1
	    bit 1 right button pressed if 1
	    bit 2 middle button pressed if 1 (Mouse Systems mouse)
	BX = number of times specified button has been pressed since last call
	CX = column at time specified button was last pressed
	DX = row at time specified button was last pressed
---------------------------------------------
INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
	AX = 0006h
	BX = button
	    0 left
	    1 right
	    2 middle (Mouse Systems mouse)
Return: AX = button states
	    bit 0 left button pressed if 1
	    bit 1 right button pressed if 1
	    bit 2 middle button pressed if 1 (Mouse Systems mouse)
	BX = number of times specified button has been released since last call
	CX = column at time specified button was last released
	DX = row at time specified button was last released
---------------------------------------------
INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
	AX = 0007h
	CX = minimum column
	DX = maximum column
---------------------------------------------
INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
	AX = 0008h
	CX = minimum row
	DX = maximum row
---------------------------------------------
INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
	AX = 0009h
	BX = column of cursor hot spot in bitmap (-16 to 16)
	CX = row of cursor hot spot (-16 to 16)
	ES:DX -> bitmap
		16 words screen mask
		16 words cursor mask
		    each word defines the sixteen pixels of a row, low bit
		    rightmost
---------------------------------------------
INT 33 - MS MOUSE - DEFINE TEXT CURSOR
	AX = 000Ah
	BX = hardware/software text cursor
	    0 software
		CX = screen mask
		DX = cursor mask
	    1 hardware
		CX = start scan line
		DX = end scan line
Note: when the software cursor is selected, the char/attribute data at the
      current screen position is ANDed with the screen mask and then XORed
      with the cursor mask
---------------------------------------------
INT 33 - MS MOUSE - READ MOTION COUNTERS
	AX = 000Bh
Return: CX = number of mickeys mouse moved horizontally since last call
	DX = number of mickeys mouse moved vertically
Notes: a mickey is the smallest increment the mouse can sense
       positive values indicate up/right
---------------------------------------------
INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
	AX = 000Ch
	CX = call mask
	     bit 0 call if mouse moves
	     bit 1 call if left button pressed
	     bit 2 call if left button released
	     bit 3 call if right button pressed
	     bit 4 call if right button released
	     bit 5 call if middle button pressed (Mouse Systems mouse)
	     bit 6 call if middle button released (Mouse Systems mouse)
	ES:DX = address of FAR routine
Note: when the subroutine is called, it is passed the following values:
	AX = condition mask (same bit assignments as call mask)
	BX = button state
	CX = cursor column
	DX = cursor row
	DI = horizontal mickey count
	SI = vertical mickey count
---------------------------------------------
INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
	AX = 000Dh
---------------------------------------------
INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
	AX = 000Eh
---------------------------------------------
INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
	AX = 000Fh
	CX = number of mickeys per 8 pixels horizontally
	DX = number of mickeys per 8 pixels vertically
---------------------------------------------
INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
	AX = 0010h
	CX,DX = X,Y coordinates of upper left corner
	SI,DI = X,Y coordinates of lower right corner
Note: mouse cursor is hidden during updating, and needs to be explicitly turned
	on again
---------------------------------------------
INT 33 - PCMOUSE - SET LARGE GRAPHICS CURSOR BLOCK
	AX = 0012h
	BH = cursor width in words
	CH = rows in cursor
	BL = horizontal hot spot (-16 to 16)
	CL = vertical hot spot (-16 to 16)
	ES:DX -> bit map of screen and cursor maps
Return: AX = -1 if successful
---------------------------------------------
INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
	AX = 0013h
	DX = threshold speed in mickeys/second, 0 = default of 64/second
Note:	if speed exceeds threshold, the cursor's on-screen motion is doubled
---------------------------------------------
INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
	AX = 0014h
	???
---------------------------------------------
INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
	AX = 0015h
Return: BX = size of buffer needed to store driver state
---------------------------------------------
INT 33 - MS MOUSE - SAVE DRIVER STATE
	AX = 0016h
	ES:DX -> buffer for driver state
---------------------------------------------
INT 33 - MS MOUSE - RESTORE DRIVER STATE
	AX = 0017h
	ES:DX -> buffer containing saved state
---------------------------------------------
INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
	AX = 001Dh
	???
---------------------------------------------
INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
	AX = 001Eh
Return: ???
---------------------------------------------
INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
	AX = 0042h
Return: AX = FFFFh successful
	    BX = buffer size in bytes for functions 50h and 52h
	   = 0	 MSMOUSE not installed
	   = 42h functions 42h, 50h, and 52h not supported
---------------------------------------------
INT 33 - PCMOUSE - SAVE MSMOUSE STATE
	AX = 0050h
	BX = buffer size
	ES:DX -> buffer
Return: AX = FFFFh if successful
---------------------------------------------
INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
	AX = 0052h
	BX = buffer size
	ES:DX -> buffer
Return: AX = FFFFh if successful
---------------------------------------------
INT 34 - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates opcode D8h
---------------------------------------------
INT 35 - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates opcode D9h
---------------------------------------------
INT 36 - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates opcode DAh
---------------------------------------------
INT 37 - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates opcode DBh
---------------------------------------------
INT 38 - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates opcode DCh
---------------------------------------------
INT 39 - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates opcode DDh
---------------------------------------------
INT 3A - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates opcode DEh
---------------------------------------------
INT 3B - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates opcode DFh
---------------------------------------------
INT 3C - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates instructions with an ES segment override
---------------------------------------------
INT 3D - Turbo C/Microsoft languages - Floating Point emulation
	This interrupt emulates a standalone FWAIT instruction
---------------------------------------------
INT 3E - Turbo C/Microsoft languages - Floating Point emulation
---------------------------------------------
INT 3F - Overlay manager interrupt (Microsoft LINK.EXE)
---------------------------------------------
INT 40 - Hard disk - Relocated Floppy Handler (original INT 13h)
---------------------------------------------
INT 41 - FIXED DISK PARAMETERS (XT,AT,XT2,XT286,PS except ESDI disks)
	WORD	cylinders
	BYTE	heads
	WORD	starting reduced write current cylinder (XT only, 0 for others)
	WORD	starting write pre-comp cylinder
	BYTE	maximum ECC burst length
	BYTE	control byte
		   bits 0-2: drive option (XT only, 0 for others)
		   bit 3:    set if more than 8 heads
		   bit 4:    always 0
		   bit 5:    set if manufacturer's defect map on max cylinder+1
		   bit 6:    disable ECC retries
		   bit 7:    disable access retries
	BYTE	standard timeout (XT only, 0 for others)
	BYTE	formatting timeout (XT only, 0 for others)
	BYTE	timeout for checking drive (XT only, 0 for others)
	WORD	landing zone (AT/PS2)
	BYTE	sectors/track (AT/PS2)
	BYTE	0
---------------------------------------------
INT 42 - EGA/VGA/PS - Relocated (by EGA) Video Handler (original INT 10h)
---------------------------------------------
INT 42 - Z100 - ???
---------------------------------------------
INT 43 - EGA/VGA/PS - User font table
---------------------------------------------
INT 44 - EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh
---------------------------------------------
INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
---------------------------------------------
INT 44 - Z100 - ???
---------------------------------------------
INT 45 - Z100 - ???
---------------------------------------------
INT 46 - Secondary Fixed Disk Params (see INT 41h) (AT,XT286,PS except ESDI)
---------------------------------------------
INT 46 - Z100 - ???
---------------------------------------------
INT 47 - reserved
---------------------------------------------
INT 48 - PCjr - Cordless Keyboard Translation
---------------------------------------------
INT 49 - PCjr - Non-keyboard Scan Code Translation Table
---------------------------------------------
INT 4A - AT/CONV/PS - User Alarm
	Invoked by BIOS when real-time clock alarm occurs
---------------------------------------------
INT 4B - reserved
---------------------------------------------
INT 4C - reserved
---------------------------------------------
INT 4D - reserved
---------------------------------------------
INT 4E - reserved
---------------------------------------------
INT 4F - reserved
---------------------------------------------
INT 50 to 57 - IRQ0-IRQ7 relocated by DESQview
---------------------------------------------
INT 50 to 57 - IRQ0-IRQ7 relocated by IBM 3278 emulation control program	 
---------------------------------------------
INT 58 - reserved
---------------------------------------------
INT 59 - GSS Computer Graphics Interface (GSS*CGI)
	DS:DX -> block of 5 array pointers
Return:	CF set on error
	    AX = error code
	CF clear if successful
	    AX = return code
Note: INT 59 is the means by which GSS*CGI language bindings communicate with
      GSS*CGI device drivers and the GSS*CGI device driver controller.	also
      used by the IBM Graphic Development Toolkit
---------------------------------------------
INT 5A - Cluster adapter BIOS entry address
	???
---------------------------------------------
INT 5B - Used by cluster adapter
---------------------------------------------
INT 5C - NETBIOS INTERFACE
	ES:BX -> Network Control Block
	Subfunction in first NCB field (or with 80h for non-waiting call)
	    10h start session with NCB_NAME name (call)
	    11h listen for call
	    12h end session with NCB_NAME name (hangup)
	    14h send data via NCB_LSN
	    15h receive data from a session
	    16h receive data from any session
	    17h send multiple data buffers
	    20h send unACKed message (datagram)
	    21h receive datagram
	    22h send broadcast datagram
	    23h receive broadcast datagram
	    30h add name to name table
	    31h delete name from name table
	    32h reset adapter card and tables
	    33h	get adapter status
	    34h status of all sessions for name
	    35h cancel
	    36h add group name to name table
	    70h unlink from IBM remote program (no F0h function)
	    71h send data without ACK
	    72h send multiple buffers without ACK
	    78h find name
	    79h token-ring protocol trace
Return: AL = status
	    00h successful
	    01h bad buffer size
	    03h invalid NETBIOS command
	    05h timeout
	    06h receive buffer too small
	    08h bad session number
	    09h LAN card out of memory
	    0Ah session closed
	    0Bh command has been cancelled
	    0Dh name already exists
	    0Eh local name table full
	    0Fh name still in use, can't delete
	    11h local session table full
	    12h remote PC not listening
	    13h bad NCB_NUM field
	    14h no answer to CALL or no such remote
	    15h name not in local name table
	    16h duplicate name
	    17h bad delete
	    18h abnormal end
	    19h name error, multiple identical names in use
	    1Ah bad packet
	    21h network card busy
	    22h too many commands queued
	    23h bad LAN card number
	    24h command finished while cancelling
	    26h command can't be cancelled
	    FFh NETBIOS busy

Structure of Network Control Block:
	BYTE  ncb_command
	BYTE  ncb_retcode
	BYTE  ncb_lsn
	BYTE  ncb_num
	DWORD -> ncb_buffer
	WORD  ncb_length
     16 BYTEs ncb_callname
     16 BYTEs ncb_name
	BYTE  ncb_rto
	BYTE  ncb_sto
	DWORD -> ncb_post  	/* int (far *ncb_post)(); */
	BYTE  ncb_lana_num
	BYTE  ncb_cmd_cplt
     14 BYTEs ncb_reserve

Structure name:
     16 BYTEs nm_name
	BYTE  nm_num
	BYTE  nm_status

Structure astatus:
      6 BYTEs as_id
	BYTE  as_jumpers
	BYTE  as_post
	BYTE  as_major
	BYTE  as_minor
	WORD  as_interval
	WORD  as_crcerr
	WORD  as_algerr
	WORD  as_colerr
	WORD  as_abterr
	DWORD as_tcount
	DWORD as_rcount
	WORD  as_retran
	WORD  as_xresrc
      8 BYTEs as_res0
	WORD  as_ncbfree
	WORD  as_ncbmax
	WORD  as_ncbx
      4 BYTEs as_res1
	WORD  as_sespend
	WORD  as_msp
	WORD  as_sesmax
	WORD  as_bufsize
	WORD  as_names
     16 name structures  as_name

Note: Sytek PCnet card uses DMA 3.
---------------------------------------------
INT 5C - TOPS INTERFACE
	ES:BX -> Network Control Block
Note: TOPS card uses DMA 1, 3 or none.
---------------------------------------------
INT 5D - reserved
---------------------------------------------
INT 5E - reserved
---------------------------------------------
INT 5F - reserved
---------------------------------------------
INT 60 - reserved for user interrupt
---------------------------------------------
INT 60 - FTP Driver - PC/TCP Packet Driver Specification
   The handler for the interrupt will start with a 3-byte jump instruction, 
   followed by the ASCIZ string "PKT DRVR".  To find the interrupt being used
   by the driver, an application should scan through interrupt vectors 60h to
   80h until it finds one with the "PKT DRVR" string.

Network Interface classes/types:
    Class 01h  Ethernet/IEEE 802.3	 
	01h 3COM 3C500/3C501
	02h 3COM 3C505
	03h MICOM-Interlan NI5010
	04h BICC Data Networks 4110
	05h BICC Data Networks 4117
	06h MICOM-Interlan NP600
	08h Ungermann-Bass PC-NIC
	09h Univation NC-516
	0Ah TRW PC-2000	
	0Bh MICOM-Interlan NI5210
	0Ch 3COM 3C503
	0Dh 3COM 3C523
	0Eh Western Digital WD8003
	0Fh Spider Systems S4
    Class 02h  ProNET-10
	01h Proteon p1300
    Class 03h  IEEE 802.5/ProNet-4
	01h IBM Token-Ring Adapter
	02h Proteon p1340
	03h Proteon p1344
    Class 04h  Omninet
    Class 05h  Appletalk
    Class 06h  Serial Line
    Class 07h  StarLAN
    Class 08h  ARCnet
	01h Datapoint RIM	
---------------------------------------------
INT 60 - FTP Driver - DRIVER INFO
	AX = 01FFh
	BX = handler returned by function 02h
Return: CF set on error
	    DH = error code
		01h invalid handle number
		02h no interfaces of the specified class found
		03h no interfaces of the specified type found
		04h no interfaces of the specified number found
		05h bad packet type
		06h interface does not support multicast messages
		07h this packet driver cannot terminate
		08h invalid receiver mode
		09h insufficient space
		0Ah type accessed but never released
		0Bh bad command
		0Ch packet could not be sent
	CF clear if successful
	    BX = version
	    CH = class	    	
	    DX = type
	    CL = number
	    DS:SI -> name
	    AL = driver type
		01h basic
		02h extended
		FFh not installed
---------------------------------------------
INT 60 - FTP Driver - ACCESS TYPE
	AH = 02h
	AL = interface class
	BX = interface type
	DL = interface number
	DS:SI -> type
	CX = length of type
	ES:DI -> receiver
Return: CF set on error
	    DH = error code (see above)
	CF clear if successful
	    AX = handle	    	

Receiver called with
	AX = subfunction
	    00h application to return pointer to buffer in ES:DI
		ES:DI = 0:0 means throw away packet
	    01h copy to DS:SI buffer completed
	BX = handle
	CX = buffer length
when a packet is received
---------------------------------------------
INT 60 - FTP Driver - RELEASE TYPE
	AH = 03h
	BX = handle
Return: CF set on error
	   DH = error code (see above)
	CF clear if successful	
---------------------------------------------
INT 60 - FTP Driver - SEND PACKET
	AH = 04h
	DS:SI -> buffer
	CX = length
Return: CF set on error
	    DH = error code (see above)
---------------------------------------------
INT 60 - FTP Driver - TERMINATE DRIVER FOR HANDLE
	AH = 05h
	BX = handle
Return: CF set on error
	   DH = error code (see above)
---------------------------------------------
INT 60 - FTP Driver - GET ADDRESS
	AH = 06h
	BX = handle
	ES:DI -> buffer
	CX = length
Return: CF set on error
	    DH = error code (see above)
	CF clear if successful
	    CX = length	
Note: copies the local net address associated with the handle into the buffer	    
---------------------------------------------
INT 60 - FTP Driver - RESET INTERFACE
	AH = 07h
	BX = handle
Return: CF set on error
	    DH = error code (see above)
---------------------------------------------
INT 60 - 10-NET - LOCK AND WAIT
	AH = 11h
	AL = drive number or 0
	DX = number of seconds to wait
	ES:SI = Ethernet address or 0
	DS:BX -> 31-byte ASCIZ semaphore name
Return: AL = status
	    0 successful
	    1 timeout
	    2 server not responding
	    3 invalid semaphore name
	    4 semaphore list is full
	    5 invalid drive ID
	    6 invalid Ethernet address
	    7 not logged in
	    8 write to network failed
	    9 semaphore already logged for this CPU
---------------------------------------------
INT 60 - 10-NET - LOCK
	AH = 12h
	AL = drive number or 0
	ES:SI = Ethernet address or 0
	DS:BX -> 31-byte ASCIZ semaphore name
Return: AL = status (see function 11h)
	    1 semaphore currently logged
Note: unlike function 11h, this function returns immediately
---------------------------------------------
INT 60 - 10-NET - UNLOCK
	AH = 13h
	AL = drive number or 0
	ES:SI = Ethernet address or 0
	DS:BX -> 31-byte ASCIZ semaphore name
Return: AL = status (see function 11h)
	    1 semaphore not logged
---------------------------------------------
INT 60 - FTP Driver - SET RECEIVE MODE
	AH = 20h
	BX = handle
	CX = mode
	    01h turn off receiver
	    02h receive only packets sent to this interface
	    03h mode 2 plus broadcast packets
	    04h mode 3 plus limited multicast packets
	    05h mode 3 plus all multicast packets
	    06h all packets
Return: CF set on error
	   DH = error code
	   	
---------------------------------------------
INT 60 - FTP Driver - GET RECEIVE MODE
	AH = 21h
	BX = handle
Return: CF set on error
	    DH = error code (see function 01h above)
	CF clear if successful
	    AX = mode	
---------------------------------------------
INT 60 - FTP Driver - GET STATISTICS
	AH = 24h
	BX = handle
Return: CF set on error
	    DH = error code
	CF clear if successful
	    DS:SI -> statistics
		DWORD packets in
		DWORD packets out
		DWORD bytes in
		DWORD bytes out
		DWORD errors in
		DWORD errors out
		DWORD packets dropped	
---------------------------------------------
INT 61 - reserved for user interrupt
---------------------------------------------
INT 62 - reserved for user interrupt
---------------------------------------------
INT 63 - reserved for user interrupt
---------------------------------------------
INT 64 - reserved for user interrupt
---------------------------------------------
INT 65 - reserved for user interrupt
---------------------------------------------
INT 66 - reserved for user interrupt
---------------------------------------------
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
---------------------------------------------
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 above)
---------------------------------------------
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 above)
---------------------------------------------
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
---------------------------------------------
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
---------------------------------------------
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
---------------------------------------------
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
---------------------------------------------
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
---------------------------------------------
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
---------------------------------------------
INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES
	AH = 49h
Note: defined in EMS 3.0, but undocumented in EMS 3.2
---------------------------------------------
INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY
	AH = 4Ah
Note: defined in EMS 3.0, but undocumented in EMS 3.2
---------------------------------------------
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
---------------------------------------------
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
---------------------------------------------
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
---------------------------------------------
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 (subfunction 03h only)
		array pointed to by ES:DI receives mapping info (AL=00/02)
	    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.
---------------------------------------------
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
---------------------------------------------
INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES
	AH = 50h
	AL = subfunction
	    00h
	    01h
	DX = handle
	CX = number of entries in array
	DS:SI -> mapping array
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
---------------------------------------------
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
---------------------------------------------
INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES
	AH = 52h
	AL = subfunction
	    00h get handle attributes
	    01h set handle attributes
	       BL = new attribute (see returned AL)
	    02h get attribute capability
	DX = handle
Return: AL = attribute (for subfunction 00h)
	    00h handle is volatile
	    01h handle is nonvolatile
	AL = attribute capability (for subfunction 02h)
	    00h only volatile handles supported
	    01h both volatile and non-volatile supported
	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
---------------------------------------------
INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME
	AH = 53h
	AL = subfunction
	    00h get handle name
	       ES:DI -> 8-byte handle name array
	    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
---------------------------------------------
INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY
	AH = 54h
	AL = subfunction
	    00h get handle directory
	       ES:DI -> buffer for handle directory
	    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
---------------------------------------------
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
---------------------------------------------
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: (if successful, the target address is called.  Use a RETF to return and
	 restore mapping context)
	BX = stack space required (subfunction 02h)
	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 undefined subfunction
---------------------------------------------
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
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
---------------------------------------------
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
---------------------------------------------
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
	    01h get unallocated raw page count
Return: BX = unallocated raw pages (subfunction 01h)
	DX = total raw pages (subfunction 01h)
	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
---------------------------------------------
INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES
	AH = 5Ah
--