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

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

Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - RELEASE PHYSICAL RECORD SET
	AH = C3h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - CLEAR PHYSICAL RECORD SET
	AH = C4h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - SEMAPHORES
	AH = C5h
	AL = subfunction
	    00h open semaphore
		DS:DX -> semaphore name
		CL = initial value
	    01h examine semaphore
		Return: CX = semaphore value (sign extended)
			DL = open count
	    02h wait on semaphore
		BP = timeout in timer ticks (1/18 sec)
	    03h signal semaphore
	    04h close semaphore
	CX:DX = semaphore handle (except function 00h)
Return: AL = error code
	if function 00h
	   CX:DX = semaphore handle
	   BL = open count
---------------------------------------------
INT 21 - Novell NetWare 4.6 - GET OR SET LOCK MODE
	AH = C6h
	AL = subfunction
	    00h set old "compatibility" mode
	    01h set new extended locks mode 
	    02h get lock mode
Return: AL = current lock mode
---------------------------------------------
INT 21 - Novell NetWare 4.0 - TTS
	AH = C7h
	AL = subfunction
	    00h begin transaction (NetWare SFT level II)
		Return: AL = error code
	    01h end transaction (NetWare SFT level II)
		Return: AL = error code
			CX:DX = transaction reference number
	    02h TTS available (NetWare SFT level II)
		Return: AL = completion code
			    00h TTS not available
			    01h TTS available
			    FDh TTS available but disabled
	    03h abort transaction (NetWare SFT level II)
		Return: AL = error code
	    04h transaction status
	    05h get application thresholds
	    06h set application thresholds
	    07h get workstation thresholds
	    08h set workstation thresholds
Return: ???
---------------------------------------------
INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING
	AH = C8h
	if function C6h lock mode 00h:
	    DL = mode
		00h no wait
		01h wait
	if function C6h lock mode 01h:
	    BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
	AH = C9h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - LOG PERSONAL FILE (FCB)
	AH = CAh
	DS:DX -> FCB
	if function C6h lock mode 01h:
	    AL = log and lock flag
		00h log file only
		01h lock as well as log file
	    BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - LOCK FILE SET
	AH = CBh
	if function C6h lock mode 00h:
	    DL = mode
		00h no wait
		01h wait
	if function C6h lock mode 01h:
	    BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - RELEASE FILE (FCB)
	AH = CCh
	DS:DX -> FCB
Return: none
---------------------------------------------
INT 21 - Novell NetWare 4.0 - RELEASE FILE SET
	AH = CDh
Return: none
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CLEAR FILE (FCB)
	AH = CEh
	DS:DX -> FCB
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CLEAR FILE SET
	AH = CFh
Return: AL = 00h
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOG LOGICAL RECORD
	AH = D0h
	DS:DX -> record string
	if function C6h lock mode 01h:
	    AL = flags
		bit 0: lock as well as log the record
		bit 1: non-exclusive lock
	    BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOCK LOGICAL RECORD SET
	AH = D1h
	if function C6h lock mode 00h:
	    DL = mode
		00h no wait
		01h wait
	if function C6h lock mode 01h:
	   BP = timeout in timer ticks (1/18 sec)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - RELEASE LOGICAL RECORD
	AH = D2h
	DS:DX -> record string
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - RELEASE LOGICAL RECORD SET
	AH = D3h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CLEAR LOGICAL RECORD
	AH = D4h
	DS:DX -> record string
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CLEAR LOGICAL RECORD SET
	AH = D5h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - END OF JOB
	AH = D6h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SYSTEM LOGOUT
	AH = D7h
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - GET VOLUME STATISTICS
	AH = DAh
	DL = volume number
	ES:DI -> reply buffer
Return: AL = 00h
	    reply buffer
		WORD  sectors/block
		WORD  total blocks
		WORD  unused blocks
		WORD  total directory entries
		WORD  unused directory entries
	     16 BYTEs volume name, null padded
		WORD  removable flag, 0 = not removable
---------------------------------------------
INT 21 - Novell NetWare 4.0 - GET NUMBER OF LOCAL DRIVES
	AH = DBh
Return: AL = number of local disks
---------------------------------------------
INT 21 - Novell NetWare 4.0 - GET STATION NUMBER
	AH = DCh
Return: AL = station number
	    0 if NetWare not loaded or this machine is a non-dedicated server
	CX = station number in ASCII
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SET ERROR MODE
	AH = DDh
	DL = error mode
	    00h display critical I/O errors
	    01h extended errors for all I/O in AL
	    02h extended errors for critical I/O in AL
Return: AL = previous error mode
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SET BROADCAST MODE
	AH = DEh
	AL = broadcast mode
	    00h receive console and workstation broadcasts
	    01h receive console broadcasts only
	    02h receive no broadcasts
	    03h store all broadcasts for retrieval
	    04h get broadcast mode
	    05h disable shell tiemr interrupt checks
	    06h enable shell timer interrupt checks
Return: AL = old broadcast mode
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CAPTURE
	AH = DFh
	AL = subfunction
	    00h start LPT capture
	    01h end LPT capture
	    02h cancel LPT capture
	    03h flush LPT capture
	    04h start specific capture
	    05h end specific capture
	    06h cancel specific capture
	    07h flush specific capture
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - PRINT SPOOLING
	AH = E0h
	DS:SI -> request buffer
	ES:DI -> reply buffer
	subfunction in third byte of request buffer
	    00h spool data to a capture file
	    01h close and queue capture file
	    02h set spool flags
	    03h spool existing file
	    04h get spool queue entry
	    05h remove entry from spool queue
	    06h get printer status
	    09h create a disk capture file
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - BROADCAST MESSAGES
	AH = E1h
	DS:SI -> request buffer
	ES:DI -> reply buffer
	subfunction in third byte of request buffer
	    00h send broadcast message
	    01h get broadcase message
	    02h disable station broadcasts
	    03h enable station broadcasts
	    04h send personal message
	    05h get personal message
	    06h open message pipe
	    07h close message pipe
	    08h check pipe status
	    09h broadcast to console
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - DIRECTORY FUNCTIONS
	AH = E2h
	DS:SI -> request buffer
	ES:DI -> reply buffer
	subfunction in third byte of request buffer
	    00h set directory handle
	    01h get directory path
	    02h scan directory information
	    03h get effective directory rights
	    04h modify maximum rights mask
	    05h get volume number
	    06h get volume name
	    0Ah create directory
	    0Bh delete directory
	    0Ch scan directory for trustees
	    0Dh add trustee to directory
	    0Eh delete trustee from directory
	    0Fh rename directory
	    10h purge erased files
	    11h restore erased file
	    12h allocate permanent directory handle
	    13h allocate temporary directory handle
	    14h deallocate directory handle
	    15h get volume info with handle
	    16h allocate special temporary directory handle
	    17h retrieve a short base handle (Advanced NetWare 2.0)
	    18h restore a short base handle (Advanced NetWare 2.0)
	    19h set directory information
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - CONNECTION CONTROL
	AH = E3h
	DS:SI -> requst buffer
	ES:DI -> reply buffer
	subfunction in third byte of request buffer
	    00h login
	    01h change password
	    02h map user to station set
	    03h map object to number
	    04h map number to object
	    05h get station's logged information
	    06h get station's root mask (obsolete)
	    07h map group name to number
	    08h map number to group name
	    09h get memberset M of group G
	    0Ah enter login area
	    0Bh 
	    0Ch
	    0Dh log network message
	    0Eh get disk utilization (Advanced NetWare 1.0)
	    0Fh scan file information (Advanced NetWare 1.0)
	    10h set file information (Advanced NetWare 1.0)
	    11h get file server information (Advanced NetWare 1.0)
	    12h
	    13h get internet address (Advanced NetWare 1.02)
	    14h login to file server (Advanced NetWare 2.0)
	    15h get object connection numbers (Advanced NetWare 2.0)
	    16h get connection information (Advanced NetWare 1.0)
	    32h create object (Advanced NetWare 1.0)
	    33h delete object (Advanced NetWare 1.0)
	    34h rename object (Advanced NetWare 1.0)
	    35h get object ID (Advanced NetWare 1.0)
	    36h get object name (Advanced NetWare 1.0)
	    37h scan object (Advanced NetWare 1.0)
	    38h change object security (Advanced NetWare 1.0)
	    39h create propery (Advanced NetWare 1.0)
	    3Ah delete property (Advanced NetWare 1.0)
	    3Bh change property security (Advanced NetWare 1.0)
	    3Ch scan property (Advanced NetWare 1.0)
	    3Dh read property value (Advanced NetWare 1.0)
	    3Eh write property value (Advanced NetWare 1.0)
	    3Fh verify object password (Advanced NetWare 1.0)
	    40h change object password (Advanced NetWare 1.0)
	    41h add object to set (Advanced NetWare 1.0)
	    42h delete object from set (Advanced NetWare 1.0)
	    43h is object in set? (Advanced NetWare 1.0)
	    44h close bindery (Advanced NetWare 1.0)
	    45h open bindery (Advanced NetWare 1.0)
	    46h get bindery access level (Advanced NetWare 1.0)
	    47h scan object trustee paths (Advanced NetWare 1.0)
	    C8h check console priviledges
	    C9h get file server description strings
	    CAh set file server date and time
	    CBh disable file server login
	    CCh enable file server login
	    CDh get file server login status
	    CEh purge all erased files
	    CFh disable transaction tracking
	    D0h enable transaction tracking
	    D1h send console broadcast
	    D2h clear connection number
	    D3h down file server
	    D4h get file system statistics
	    D5h get transaction tracking statistics
	    D6h read disk cache statistics
	    D7h get drive mapping table
	    D8h read physical disk statistics
	    D9h get disk channel statistics
	    DAh get connection's task information
	    DBh get list of connection's open files
	    DCh get list of connections using a file
	    DDh get physical record locks by connection and file
	    DEh get physical record locks by file
	    DFh get logical records by connection
	    E0h get logical record information
	    E1h get connection's semaphores
	    E2h get semaphore information
	    E3h get LAN driver's configuration information
	    E5h get connection's usage statistics
	    E6h get object's remaining disk space
	    E7h get server LAN I/O statistics
	    E8h get server miscellaneous information
	    E9h get volume information
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB)
	AH = E4h
	CL = file attributes
	    bit 0: read only
		1: hidden
		2: system
		7: shareable
	DX:DX -> FCB
Return: AL = error code
---------------------------------------------
INT 21 - DoubleDos - INSTALLATION CHECK
	AX = E400h
Return: AL <> 0 if DoubleDos is active
---------------------------------------------
INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB)
	AH = E5h
	DS:DX -> FCB
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB)
	AH = E6h
	CX:DX = number of bytes to copy
	DS:SI -> source FCB
	ES:DI -> destination FCB
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.0 - GET FILE SERVER DATE AND TIME
	AH = E7h
	DS:DX -> reply buffer
		BYTE  year - 1900
		BYTE  month
		BYTE  day
		BYTE  hours
		BYTE  minutes
		BYTE  seconds
		BYTE  day of week (0 = Sunday)
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - SET FCB RE-OPEN MODE
	AH = E8h
	DL = mode
	    00h no automatic re-open
	    01h auto re-open
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - SHELL'S "GET BASE STATUS"
	AH = E9h
	AL = subfunction
	    00h get directory handle
	DX = drive number to check (0 = A:)
Return: AL = network pathbase
	AH = base flags
	    00h drive not currently mapped to a base
	    01h drive is mapped to a permanent base
	    02h drive is mapped to a temporary base
	    03h drive exists locally
---------------------------------------------
INT 21 - Novell NetWare 4.6 - RETURN SHELL VERSION
	AH = EAh
	AL = subfunction
	    00h return code in AL
		Return: AL = hardware type
			    00h IBM PC
			    01h Victor 9000
	    01h get workstation environment string
		ES:DI -> 40-byte buffer
		Return: buffer filled with three null-terminated entries:
			major operating system
			version
			hardware type
Return: AH = 0 if DOS
---------------------------------------------
INT 21 - DoubleDos - TURN OFF TASK SWITCHING
	AH = EAh
Return: task switching turned off
---------------------------------------------
INT 21 - Novell NetWare 4.6 - LOG FILE
	AH = EBh
	DS:DX -> ASCIZ filename
	if function C6h lock mode 01h:
	    AL = flags
		00h log file only
		01h lock as well as log file
	    BP = timeout in timer ticks (1/18 second)
Return: AL = error code
---------------------------------------------
INT 21 - DoubleDos - TURN ON TASK SWITCHING
	AH = EBh
Return: task switching turned on
---------------------------------------------
INT 21 - Novell NetWare 4.6 - RELEASE FILE
	AH = ECh
	DS:DX -> ASCIZ filename
Return: none
---------------------------------------------
INT 21 - DoubleDos - GET VIRTUAL SCREEN ADDRESS
	AH = ECh
Return: ES = segment of virtual screen
Note: Screen address can change if task-switching is on!!
---------------------------------------------
INT 21 - Novell NetWare - CLEAR FILE
	AH = EDh
	DS:DX -> ASCIZ filename
Return: AL = error code
---------------------------------------------
INT 21 - Novell NetWare 4.6 - GET PHYSICAL STATION NUMBER
	AH = EEh
Return: CX:BX:AX = six-byte address
---------------------------------------------
INT 21 - DoubleDos - GIVE AWAY TIME TO OTHER TASKS
	AH = EEh
	AL = number of 55ms time slices to give away
Return: returns after giving away time slices
---------------------------------------------
INT 21 - Novell Advanced NetWare 1.0+ - GET DRIVE INFO
	AH = EFh
	AL = subfunction
	    00h get drive handle table
	    01h get drive flag table
	    02h get drive connection ID table
	    03h get connection ID table
	    04h get file server name table
Return: ES:DI -> shell status table
---------------------------------------------
INT 21 - Novell Advanced NetWare 1.0+ - CONNECTION ID
	AH = F0h
	AL = subfunction
	    00h set preferred connection ID
	    01h get preferred connection ID
	    02h get default connection ID
	    03h LPT capture active
	    04h set primary connection ID
	    05h get primary connection ID
	DL = preferred file server
Return: AL = selected file server
---------------------------------------------
INT 21 - Novell Advanced NetWare 1.0+ - FILE SERVER CONNECTION
	AH = F1h
	AL = subfunction
	    00h attach to file server
		DL = preferred file server
	    01h detach from file server
	    02h logout from file server
Return: AL = completion code
---------------------------------------------
INT 21 - Novell NetWare - ???
	AH = F2h
	???
Return: ???
---------------------------------------------
INT 21 - Novell Advanced NetWare 2.0+ - FILE SERVER FILE COPY
	AH = F3h
	ES:DI -> request string
		WORD  source file handle
		WORD  destination file handle
		DWORD starting offset in source
		DWORD starting offset in destination
		DWORD number of bytes to copy
Return: AL = status/error code
	CX:DX = number of bytes copied
---------------------------------------------
INT 21 - CED - INSTALLABLE COMMANDS
	AH = FFh
	   AL = 0 add installable command
	     BL = mode - bit 0 = 1 callable from DOS prompt
			 bit 1 = 1 callable from application
	     DS:SI -> CR-terminated command name
	     ES:DI -> FAR routine entry point
	   AL = 1 remove installable command
	     DS:SI -> CR-terminated command name
	   AL = 2 reserved, may be used to test for CED installation
Return: CF set on error
	    AX = 01h invalid function
		 02h command not found (subfunction 1 only)
		 08h insufficient memory (subfunction 0 only)
		 0Eh bad data (subfunction 0 only)
	AH = 0FFh if CED not installed
---------------------------------------------
INT 22 - DOS - TERMINATE ADDRESS
   FAR (DWORD) address of routine to be executed when program "returns to DOS".
   Should NEVER be called directly.
---------------------------------------------
INT 23 - DOS - CONTROL "C" EXIT ADDRESS
   Automatically called from keyboard scanner when CTRL-C or CTRL-BREAK is
   detected. Normally aborts program and returns to DOS, but may be changed.
---------------------------------------------
INT 24 - DOS - FATAL ERROR HANDLER ADDRESS
   Automatically called upon detection of unrecoverable I/O error.
   Normally points to routine in resident part of COMMAND.COM that prints
   "Abort, Retry, Ignore?" message and takes the reply, but may be overridden
   if desired.

Provides the following values in registers on entry to interrupt handler:
	AH: bit 7 = 0 disk I/O error
		  = 1 other error -- if block device, bad FAT
				  -- if char device, code in DI
	    bit 6  unused
	    bit 5 = 1 if Ignore allowed, 0 if not (DOS 3.x)
	    bit 4 = 1 if Retry allowed, 0 if not (DOS 3.x)
	    bit 3 = 1 if Fail allowed, 0 if not (DOS 3.x)
	    bit 2 \ disk area of error	00 = DOS area  01 = FAT
	    bit 1 /			10 = root dir  11 = data area
	    bit 0 = 1 if write, 0 if read
	AL = drive number if AH bit 7 = 1, otherwise undefined
	BP:SI = address of device header for which error occurred
	    block device if high bit of BP:[SI+4] set
	low byte of DI:
	   00h write-protect error
	   01h unknown unit
	   02h drive not ready
	   03h unknown command
	   04h data error (bad CRC)
	   05h bad request structure length
	   06h seek error
	   07h unknown media type
	   08h sector not found
	   09h printer out of paper
	   0Ah write fault
	   0Bh read fault
	   0Ch general failure
	   0Dh (DOS 3.x) sharing violation
	   0Eh (DOS 3.x) lock violation
	   0Fh (DOS 3.x) invalid disk change
	   10h (DOS 3.x) FCB unavailable
	   11h (DOS 3.x) sharing buffer overflow
Handler must return
	AL = 00 ignore error
	   = 01 retry operation
	   = 02 terminate program through INT 22h
	   = 03 fail system call in progress (DOS 3.x)
---------------------------------------------
INT 25 - DOS - ABSOLUTE DISK READ (except DOS 4.0/COMPAQ DOS 3.31 >32M partitn)
	AL = Drive number (0=A, 1=B, etc)
	DS:BX = Disk Transfer Address (buffer)
	CX = Number of sectors to read
	DX = First relative sector to read
Return: CF set on error
	    AL = error code issued to INT 24h in low half of DI
	    AH = 80h if attachment failed to respond
		 40h if seek operation failed
		 20h if controller failed
		 10h if data error (bad CRC)
		 08h if DMA failure
		 04h if requested sector not found
		 03h if write-protected disk
		 02h if bad address mark
		 01h if bad command
Note: ORIGINAL FLAGS ON STACK!	May destroy all registers except segment regs
---------------------------------------------
INT 25 - DOS 4.0/COMPAQ DOS 3.31 - ABSOLUTE DISK READ (>32M hard-disk partitn)
	AL = Drive number (0=A, 1=B, etc)
	CX = FFFFh
	DS:BX = Packet address
		  DWORD sector number
		  WORD	number of sectors to read
		  DWORD transfer address
Return: same as above???
Note: partition is potentially >32M (and requires this form of the call) if
      bit 1 of device attribute word in device driver is set
---------------------------------------------
INT 26 - DOS - ABSOLUTE DISK WRITE (except DOS 4.0/COMPAQ DOS 3.31 >32M partn)
	AL = Drive number (0=A, 1=B, etc)
	DS:BX = Disk Transfer Address (buffer)
	CX = Number of sectors to write
	DX = First relative sector to write
Return: CF set on error
	    AL = error code issued to INT 24h in low half of DI
	    AH = same error codes as for INT 25h
Note: ORIGINAL FLAGS ON STACK!
---------------------------------------------
INT 26 - DOS 4.0/COMPAQ DOS 3.31 - ABSOLUTE DISK WRITE (>32M hard-disk partitn)
	AL = Drive number (0=A, 1=B, etc)
	CX = FFFFh
	DS:BX = Packet address
		  DWORD sector number
		  WORD	number of sectors to write
		  DWORD transfer address
Return: same as above???
Note: partition is potentially >32M (and requires this form of the call) if
      bit 1 of device attribute word in device driver is set
---------------------------------------------
INT 27 - DOS - TERMINATE BUT STAY RESIDENT
	CS = current program segment
	DX = last program byte + 1
Return: never
---------------------------------------------
INT 28 - DOS 2+ internal - KEYBOARD BUSY LOOP
   This interrupt is called from inside the "get input from keyboard" routine
   in DOS, if and only if it is safe to use INT 21 to access the disk at that
   time.  It is used primarily by the PRINT.COM routines and TSR programs, but
   any number of other routines could be chained to it by saving the original
   vector, and calling it with a FAR call (or just JMPing to it) at the end of
   the new routine.

   The INT 28h handler may invoke any INT 21h function except functions 00h
   through 0Ch (and 50h/51h under DOS 2.xx unless DOS CritErr flag is set).

   Until some program installs its own routine, this interrupt vector simply
   points to an IRET opcode.
---------------------------------------------
INT 29 - DOS 2+ internal - FAST PUTCHAR
   This interrupt is called from the DOS output routines if output is going to
   a device rather than a file, and the device driver's attribute word has
   bit 3 (04h) set to "1".
---------------------------------------------
INT 2A - Microsoft Networks - NETWORK INSTALLATION CHECK
	AH = 00h
Return: AH <> 0 if installed
---------------------------------------------
INT 2A - Microsoft Networks - CHECK DIRECT I/O
	AX = 0300h
	DS:SI -> ASCIZ disk device name
Return: CF clear if allowed
---------------------------------------------
INT 2A - Microsoft Networks - EXECUTE NETBIOS
	AH = 04h
	AL = 0 for error retry, 1 for no retry
	ES:BX -> NCB
Return: AX = 0 for no error
	AH = 1, AL = error code
---------------------------------------------
INT 2A - Microsoft Networks - GET NETWORK RESOURCE INFORMATION
	AX = 0500h
Return: AX = reserved
	BX = number of network names
	CX = number of commands
	DX = number of sessions
---------------------------------------------
INT 2A - NETBIOS 1.10 - NETWORK PRINT-STREAM CONTROL
	AH = 06h
	???
Return: ???
---------------------------------------------
INT 2A - ???
	AX = 2001h
	???
Return: ???
Note: intercepted by DESQview 2.x
---------------------------------------------
INT 2A - Microsoft Networks - BEGIN DOS CRITICAL SECTION
	AH = 80h
	AL = 1 to 6
---------------------------------------------
INT 2A - Microsoft Networks - END DOS CRITICAL SECTION
	AH = 81h
	AL = 1 to 6
---------------------------------------------
INT 2A - Microsoft Networks - SERVER HOOK
	AH = 82h
	STACK: AX from call to INT 21
Return: stack unchanged
Note: called by the INT 21h function dispatcher for function 0 and functions
      greater than 0Ch except 59h
---------------------------------------------
INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP
	AH = 84h
Note: similar to DOS's INT 28h
---------------------------------------------
INT 2B - Internal routine for MSDOS (IRET)
---------------------------------------------
INT 2C - Internal routine for MSDOS (IRET)
---------------------------------------------
INT 2D - Internal routine for MSDOS (IRET)
---------------------------------------------
INT 2E - DOS 2+ internal - EXECUTE COMMAND
	DS:SI -> counted CR-terminated command string

The top-level command.com executes the command; all registers are destroyed
as in EXEC (INT 21/AH=4Bh).
---------------------------------------------
INT 2F - notes
	AH identifies which program is to handle the interrupt
	   00h-7Fh reserved for DOS
	   C0h-FFh reserved for applications
	AL is the function code
This is a general mechanism for verifying the presence of a TSR and 
communicating with it.
---------------------------------------------
INT 2F - BMB Compuscience Canada Utilities Interface
	AH = xx (dynamically assigned based upon a search for a multiplex
		 number which doesn't answer installed)
	AL = 00h install check
	ES:DI = EBEB:BEBE
Return: AL = 00h - not installed
	     01h - not installed, no ok to install
	     FFh - installed and is ES:DI=EBEB:BEBE then ES:DI will point
		   to a string 'BMB xxxx' where xxxx is a product name and
		   version
---------------------------------------------
INT 2F - Multiplexor - PRINT - INSTALLATION CHECK
	AX = 0100h
Return: AL =
	    00h not installed, OK to install
	    01h not installed, not OK to install
	    FFh installed
---------------------------------------------
INT 2F - Multiplexor - PRINT - SUBMIT FILE
	AX = 0101h
	DS:DX -> packet
	       BYTE level (must be 0)
	       DWORD pointer to ASCIZ filename (no wildcards)
Return: CF set on error
	    AX = error code
---------------------------------------------
INT 2F - Multiplexor - PRINT - REMOVE FILE
	AX = 0102h
	DS:DX -> ASCIZ file name (wildcards allowed)
Return: CF set on error
	    AX = error code
---------------------------------------------
INT 2F - Multiplexor - PRINT - REMOVE ALL FILES
	AX = 0103h
Return: CF set on error
	    AX = error code
---------------------------------------------
INT 2F - Multiplexor - PRINT - HOLD QUEUE/GET STATUS
	AX = 0104h
Return: CF set on error
	    AX = error code
		01h function invalid
		02h file not found
		03h path not found
		04h too many open files
		05h access denied
		08h queue full
		09h spooler busy
		0Ch name too long
		0Fh drive invalid
	DX = error count
	DS:SI -> print queue (null-string terminated
		 list of 64-byte ASCIZ file names)
---------------------------------------------
INT 2F - Multiplexor - PRINT - RESTART QUEUE
	AX = 0105h
Return: CF set on error
	   AX = error code
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x CRITICAL ERROR HANDLER - INSTALLATION CHECK
	AX = 0500h
Return: AL = 00h not installed, OK to install
	     01h not installed, can't install
	     FFh installed
Note: this set of functions allows a user program to partially or completely
      override the default critical error handler in COMMAND.COM
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x CRITICAL ERROR HANDLER - HANDLE ERROR
	AH = 05h
	AL = extended error code (not zero)
Return: CF clear
	    ES:DI -> ASCIZ error message
	    AL = ???
	CF set: use default error handler
---------------------------------------------
INT 2F - Multiplexor - ASSIGN - INSTALLATION CHECK
	AX = 0600h
Return: AH <> 0 if installed
---------------------------------------------
INT 2F - Multiplexor - ASSIGN - GET MEMORY SEGMENT
	AX = 0601h
Return: ES = segment of ASSIGN work area
---------------------------------------------
INT 2F - Multiplexor - DRIVER.SYS - INSTALLATION CHECK
	AX = 0800h
Return:	AL = 00h not installed, OK to install
	     01h not installed, not OK to install
	     FFh installed
---------------------------------------------
INT 2F - Multiplexor - DRIVER.SYS - ???
	AX = 0801h
	DS:DI -> ???
Note: moves down list of drivers???, copying and modifying word at offset 29h
---------------------------------------------
INT 2F - Multiplexor - DRIVER.SYS - SET
	AX = 0802h
	ES:BX -> ???
Return: nothing
---------------------------------------------
INT 2F - Multiplexor - SHARE - INSTALLATION CHECK
	AX = 1000h
Return: AL = 00h  not installed, OK to install
	     01h  not installed, not OK to install
	     FFh  installed
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - INSTALLATION CHECK
	AX = 1100h
Return: AL = 00h  not installed, OK to install
	     01h  not installed, not OK to install
	     FFh  installed
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1101h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1103h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1105h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - CLOSE REMOTE FILE
	AX = 1106h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1107h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1108h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1109h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 110Ah
	STACK: WORD ???
Return: CF set on error
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 110Bh
	STACK: WORD ???
Return: CF set on error???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 110Ch
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 110Eh
	STACK: WORD ???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 110Fh
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - RENAME FILE???
	AX = 1111h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1113h
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1116h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1117h
	STACK: WORD ???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1118h
	STACK: WORD ???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1119h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 111Bh
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 111Ch
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 111Dh
	DS???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - DO REDIRECTION
	AX = 111Eh
	STACK: WORD function to execute
Return: CF set on error
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - PRINTER SETUP
	AX = 111Fh
	STACK: WORD function???
Return: CF set on error???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1120h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1121h
	???
Return: CF set on error???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1122h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1123h
	???
Return: CF set on error???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1124h
	???
Return: ???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1125h
	STACK: WORD ???
Return: ???
	CF set on error???
---------------------------------------------
INT 2F - Multiplexor - NETWORK REDIRECTOR - ???
	AX = 1126h
	???
Return: CF set on error???
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - INSTALLATION CHECK
	AX = 1200h
Return: AL = FFh (for compatibility with other INT 2F functions)
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - CLOSE FILE???
	AX = 1201h
	STACK: WORD ???
Return: BX???
	CX???
	ES:DI -> ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET INTERRUPT ADDRESS
	AX = 1202h
	STACK: WORD vector number
Return: ES:BX -> interrupt vector
	Stack unchanged
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET DOS DATA SEGMENT
	AX = 1203h
Return: DS = segment of IBMDOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - NORMALIZE PATH SEPARATOR
	AX = 1204h
	STACK: WORD character to normalize
Return: AL = normalized character (forward slash turned to backslash)
	Stack unchanged
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - OUTPUT CHARACTER
	AX = 1205h
	STACK: WORD character to output
Return: Stack unchanged
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - INVOKE CRITICAL ERROR
	AX = 1206h
Return: AL = 0-3 for Abort, Retry, Ignore, Fail
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - MOVE DISK BUFFER???
	AX = 1207h
	DS:DI -> disk buffer
Return: buffer moved to end of buffer list
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - DECREMENT WORD
	AX = 1208h
	ES:DI -> word to decrement
Return: AX = new value of word
	word pointed to by ES:DI decremented, skipping zero
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 1209h
	DS:DI -> disk buffer???
Return: ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 120Ah
	???
Return: ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 120Bh
	ES:DI -> system file table entry???
	???
Return: AX = ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 120Ch
	???
Return: ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET DATE AND TIME
	AX = 120Dh
Return: AX = current date in packed format
	DX = current time in packed format
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ??? ALL DISK BUFFERS
	AX = 120Eh
Return: DS:DI -> first disk buffer
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 120Fh
	DS:DI -> ???
Return: DS:DI -> ???
Note: can be called only from within DOS
      calls on function 1207h
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - FIND DIRTY BUFFER
	AX = 1210h
	DS:DI -> first disk buffer
Return: DS:DI -> first disk buffer which has clean flag clear
	ZF clear if found, set if not found
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - NORMALIZE ASCIZ FILENAME
	AX = 1211h
	DS:SI -> ASCIZ filename to normalize
	ES:DI -> buffer for normalized filename
Return: destination buffer filled with uppercase filename, with slashes turned
	to backslashes
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET LENGTH OF ASCIZ STRING
	AX = 1212h
	ES:DI -> ASCIZ string
Return: CX = length of string
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - UPPERCASE CHARACTER
	AX = 1213h
	STACK: WORD character to convert to uppercase
Return: AL = uppercase character
	Stack unchanged
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - COMPARE FAR POINTERS
	AX = 1214h
	DS:SI = first pointer
	ES:DI = second pointer
Return: ZF set if pointers are equal, ZF clear if not equal
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 1215h
	DS:DI -> disk buffer
	STACK: WORD ???
Return: Stack unchanged
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET ADDRESS OF SYSTEM FCB
	AX = 1216h
	BX = system file table entry number
Return: ES:DI -> system file table entry
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - SET DEFAULT DRIVE ???
	AX = 1217h
	STACK: WORD drive (0 = A:, 1 = B:, etc)
Return: DS:SI -> drive data block for specified drive
	Stack unchanged
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET ???
	AX = 1218h
Return: DS:SI -> ???
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 1219h
	STACK: WORD drive (0 = default, 1 = A:, etc)
Return: ???
	Stack unchanged
Note: can be called only from within DOS
	calls function 1217h
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET FILE'S DRIVE
	AX = 121Ah
	DS:SI -> filename
Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - SET ???
	AX = 121Bh
	CL = ???
Return: AL = ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - CHECKSUM MEMORY
	AX = 121Ch
	DS:SI -> start of memory to checksum
	CX = number of bytes
	DX = initial checksum
Return: DX = checksum
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 121Dh
	DS:SI -> ???
	CX = ???
	DX = ???
Return: AX = ???
	CX = ???
	DX = ???
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - COMPARE FILENAMES
	AX = 121Eh
	DS:SI -> first ASCIZ filename
	ES:DI -> second ASCIZ filename
Return: ZF set if filenames equivalent, ZF clear if not
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - BUILD DRIVE INFO BLOCK
	AX = 121Fh
	STACK: WORD drive letter
Return: ES:DI -> drive info block (will be overwritten by next call)
	Stack unchanged
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET SYSTEM FILE TABLE NUMBER
	AX = 1220h
	BX = file handle
Return: CF set on error
	    AL = 6 (invalid file handle)
	CF clear if successful
	    BYTE ES:[DI] = system file table entry number for file handle
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 1221h
	DS:SI -> ???
Return: ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - ???
	AX = 1222h
	SS:SI -> ???
Return: nothing???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - CHECK IF CHARACTER DEVICE???
	AX = 1223h
	???
Return: DS:SI -> device driver with same name as ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - DELAY
	AX = 1224h
Return: after delay of ??? ms
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.x internal services - GET LENGTH OF ASCIZ STRING
	AX = 1225h
	DS:SI -> ASCIZ string
Return: CX = length of string
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 internal services - ???
	AX = 1226h
	CL = ???
Return: ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 internal services - ???
	AX = 1227h
	BX = file handle
Return: AL = 6 invalid file handle
	???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 internal services - ???
	AX = 1228h
	BP = ???
Return: ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 internal services - ???
	AX = 1229h
	???
Return: ???
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 internal services - SET ???
	AX = 122Ah
	DS:SI -> FAR procedure for ???
Return: CF set if pointer already set
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 internal services - ???
	AX = 122Bh
	DS:SI -> ???
	STACK: WORD ???
Return: ???
	STACK unchanged
Note: can be called only from within DOS
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 internal services - ???
	AX = 122Ch
Return: BX:AX -> header of second device driver (NUL is first) in driver chain
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 internal services - ???
	AX = 122Dh
Return: AX = ??? (value of some flag or counter)
---------------------------------------------
INT 2F - Multiplexor - DOS 3.3 - ???
	AH = 13h
	DS:DX -> ???
	ES:BX -> ???
Return: DS:DX from previous invocation of this function
	ES:BX from previous invocation of this function
---------------------------------------------
INT 2F - Multiplexor - NLSFUNC.COM - INSTALLATION CHECK
	AX = 1400h
Return: AL = 00h not installed, OK to install
	     01h not installed, not OK
	     FFh installed
---------------------------------------------
INT 2F - Multiplexor - CDROM - INSTALLATION CHECK
	AX = 1500h
	BX = 0
Return: BX = number of CDROM drive letters used
	CX = strating drive letter (0=A:)
Note: this installation check DOES NOT follow the format used by other software
---------------------------------------------
INT 2F - Multiplexor - CDROM - GET DRIVE DEVICE LIST
	AX = 1501h
	ES:BX -> bufer to hold drive letter list (5 bytes per drive letter)
Return: buffer filled, for each drive letter
	  BYTE	subunit number in driver
	  DWORD address of device driver header
---------------------------------------------
INT 2F - Multiplexor - CDROM - GET COPYRIGHT FILE NAME
	AX = 1502h
	ES:BX -> 38-byte buffer for name of copyright file
	CX = drive number (0=A:)
Return: CF set if drive is not a CDROM drive
	    AX = 15 (invalid drive)
---------------------------------------------
INT 2F - Multiplexor - CDROM - GET ABSTRACT FILE NAME
	AX = 1503h
	ES:BX -> 38-byte buffer for name of abstract file
	CX = drive number (0=A:)
Return: CF set if drive is not a CDROM drive
	    AX = 15 (invalid drive)
---------------------------------------------
INT 2F - Multiplexor - CDROM - GET BIBLIOGRAPHIC DOC FILE NAME
	AX = 1504h
	ES:BX -> 38-byte buffer for name of bibliographic documentation file
	CX = drive number (0=A:)
Return: CF set if drive is not a CDROM drive
	    AX = 15 (invalid drive)
---------------------------------------------
INT 2F - Multiplexor - CDROM - READ VTOC
	AX = 1505h
	ES:BX -> 2048-byte buffer
	CX = drive number (0=A:)
	DX = sector index (0=first volume descriptor,1=second,...)
Return: CF set on error
	    AX = error code (15=invalid drive,21=not ready)
	CF clear if successful
	    AX = volume descriptor type (1=standard,FFh=terminator,0=other)
---------------------------------------------
INT 2F - Multiplexor - CDROM - TURN DEBUGGING ON
	AX = 1506h
	BX = debugging function to enable
Note: reserved for development
---------------------------------------------
INT 2F - Multiplexor - CDROM - TURN DEBUGGING OFF
	AX = 1507h
	BX = debugging function to disable
Note: reserved for development
---------------------------------------------
INT 2F - Multiplexor - CDROM - ABSOLUTE DISK READ
	AX = 1508h
	ES:BX -> buffer
	CX = drive number (0=A:)
	SI:DI = starting sector number
	DX = number of sectors to read
Return: CF set on error
	    AL = error code (15=invalid drive,21=not ready)
---------------------------------------------
INT 2F - Multiplexor - CDROM - ABSOLUTE DISK WRITE
	AX = 1509h
	ES:BX -> buffer
	CX = drive number (0=A:)
	SI:DI = starting sector number
	DX = number of sectors to write
Note: corresponds to INT 26h and is currently reserved and nonfunctional
---------------------------------------------
INT 2F - Multiplexor - CDROM - RESERVED
	AX = 150Ah
---------------------------------------------
INT 2F - Multiplexor - CDROM 2.00 - DRIVE CHECK
	AX = 150Bh
	CX = drive number (0=A:)
Return: BX = ADADh if MSCDEX.EXE installed
	    AX = 0 if drive not supported
	       <> 0 if supported
---------------------------------------------
INT 2F - Multiplexor - CDROM 2.00 - GET MSCDEX.EXE VERSION
	AX = 150Ch
Return: BH = major version
	BL = minor version
Note: MSCDEX.EXE versions prior to 1.02 return BX=0
---------------------------------------------
INT 2F - Multiplexor - CDROM 2.00 - GET CDROM DRIVE LETTERS
	AX = 150Dh
	ES:BX -> buffer for drive letter list (1 byte per drive)
Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
	to the drive in the same position for function 1501h
---------------------------------------------
INT 2F - Multiplexor - CDROM 2.00 - GET/SET VOLUME DESCRIPTOR PREFERENCE
	AX = 150Eh
	BX = subfunction
	    00h get preference
		DX = 0
		Return: DX = preference settings
	    01h set preference
		DH = volume descriptor preference
		    1 = primary volume descriptor
		    2 = supplementary volume descriptor
		DL = supplementary volume descriptor preference
		    1 = shift-Kanji
	CX = drive number (0=A:)
Return: CF set on error
	    AX = error code (15=invalid drive,1=invalid function)
--