MSDOS - Interrupt List 22h-30h

———-22——————————— INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS

 specifies the address of the routine which is to be given control after
 a program is terminated; should never be called directly, since it does not
 point at an interrupt handler

Notes: this vector is restored from the DWORD at offset 0Ah in the PSP during

  termination, and then a FAR JMP is performed to the address in INT 22
normally points at the instruction immediately following INT 21/AH=4Bh
  call which loaded the current program

SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch ———-23——————————— INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER

 invoked whenever DOS detects a ^C or ^Break; should never be called directly

—DOS 1.x— Return: AH = 00h abort program

if all registers preserved, restart DOS call

—DOS 2+— Return: all registers preserved

return via RETF or RETF 2 with CF set
    DOS will abort program with errorlevel 0
else (RETF/RETF 2 with CF clear or IRET)
    interrupted DOS call is restarted

Notes: MSDOS 1.25 also invokes INT 23 on a divide overflow (INT 00)

any DOS call may safely be made within the INT 23 handler, although
  the handler must to check for a recursive invocation if it does
  call DOS

SeeAlso: INT 1B ———-24——————————— INT 24 - DOS 1+ - CRITICAL ERROR HANDLER

 invoked when a critical (usually hardware) error is encountered; should
 never be called directly

Critical error handler is invoked with:

AH = type and processing flags
    bit 7 clear = disk I/O error
	  set	= -- if block device, bad FAT image in memory
		  -- if char device, error code in DI
    bit 6  unused
    bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
    bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
    bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
    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 clear
BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
DI low byte contains error code if AH bit 7 set
   00h write-protection violation attempted
   01h unknown unit for driver
   02h drive not ready
   03h unknown command given to driver
   04h data error (bad CRC)
   05h bad device driver 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+) sharing violation
   0Eh (DOS 3+) lock violation
   0Fh invalid disk change
   10h (DOS 3+) FCB unavailable
   11h (DOS 3+) sharing buffer overflow
   12h (DOS 4+) code page mismatch
   13h (DOS 4+) out of input
   14h (DOS 4+) insufficient disk space
STACK:	DWORD	return address for INT 24 call
	WORD	flags pushed by INT 24
	WORD	original AX on entry to INT 21
	WORD	BX
	WORD	CX
	WORD	DX
	WORD	SI
	WORD	DI
	WORD	BP
	WORD	DS
	WORD	ES
	DWORD	return address for INT 21 call
	WORD	flags pushed by INT 21

Handler must return:

AL = action code
    00h ignore error and continue processing request
    01h retry operation
    02h terminate program through the equivalent of INT 21/AH=4Ch
		(INT 20h for DOS 1.x)
    03h fail system call in progress
SS,SP,DS,ES,BX,CX,DX preserved

Notes: the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h

if the handler returns to the application by popping the stack, DOS
  will be in an unstable state until the first call with AH > 0Ch
for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  critical errors
if IGNORE specified but not allowed, it is turned into FAIL
if RETRY specified but not allowed, it is turned into FAIL
if FAIL specified but not allowed, it is turned into ABORT
(DOS 3+) if a critical error occurs inside the critical error handler,
  the DOS call is automatically failed

———-25——————————— INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)

AL = drive number (00h = A:, 01h = B:, etc)
CX = number of sectors to read
DX = starting logical sector number (0000h - highest sector on drive) 
DS:BX -> buffer for data

Return: CF clear if successful

CF set on error
    AH = status
	 80h device failed to respond (timeout)
	 40h seek operation failed
	 20h controller failed
	 10h data error (bad CRC)
	 08h DMA failure
	 04h requested sector not found
	 03h write-protected disk (INT 26 only)
	 02h bad address mark
	 01h bad command
    AL = error code (same as passed to INT 24 in DI)
may destroy all other registers except segment registers

Notes: original flags are left on stack, and must be popped by caller

this call bypasses the DOS filesystem

BUG: DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an

invalid drive number

SeeAlso: INT 13/AH=02h,INT 26 ———-25——————————— INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)

AL = drive number (0=A, 1=B, etc)
CX = FFFFh
DS:BX -> disk read packet (see below)

Return: same as above Notes: partition is potentially >32M (and requires this form of the call) if

  bit 1 of device attribute word in device driver is set
original flags are left on stack, and must be removed by caller
this call bypasses the DOS filesystem

SeeAlso: INT 13/AH=02h,INT 26

Format of disk read packet: Offset Size Description 00h DWORD sector number 04h WORD number of sectors to read 06h DWORD transfer address ———-25CDCD—————————– INT 25 - Stacker - GET DEVICE DRIVER ADDRESS

AX = CDCDh
DS:BX -> buffer for address (see below)
CX = 0001h
DX = 0000h

Return: AX = CDCDh if Stacker installed

    DS:BX buffer filled

Format of driver address buffer: Offset Size Description 00h WORD signature CDCDh 02h WORD ??? 0001h 04h DWORD pointer to start of Stacker device driver

Format of device driver: Offset Size Description 00h WORD signature A55Ah 02h WORD Stacker version * 64h 04h WORD offset of volume-specific information offset table

	(list of WORDs, one per drive, containing offsets to various
	information)

06h 56 BYTEs n/a 3Eh BYTE volume number, set after INT 21/AX=4404h

	(use to index into volume-specific info offset table)

3Fh 19 BYTEs n/a 52h 4 BYTEs ASCII string “SWAP” 56h 26 BYTEs drive mapping table (one byte for each drive A: through Z:)

Format of Stacker boot record: Offset Size Description 1F0h 8 BYTEs Stacker signature (first byte is CDh) 1F8h DWORD pointer to start of Stacker device driver 1FCh WORD Stacker volume number 1FEh WORD ??? ———-25—-ALFF————————- INT 25 - PC-CACHE.SYS - INSTALLATION CHECK

AL = FFh
SI = 4358h

Return: SI = 6378h if installed

    CX = segment of device driver PC-CACHE.SYS
    DX = version (major in DH, minor in DL)

Note: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain

  access to certain disk drivers for devices such as Bernoulli drives

SeeAlso: INT 13/AH=A0h ———-26——————————— INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)

AL = drive number (00h = A:, 01h = B:, etc)
CX = number of sectors to write
DX = starting logical sector number (0000h - highest sector on drive) 
DS:BX -> data to write

Return: CF clear if successful

CF set on error
    AH = status
	 80h device failed to respond (timeout)
	 40h seek operation failed
	 20h controller failed
	 10h data error (bad CRC)
	 08h DMA failure
	 04h requested sector not found
	 03h write-protected disk (INT 26 only)
	 02h bad address mark
	 01h bad command
    AL = error code (same as passed to INT 24 in DI)
may destroy all other registers except segment registers

Notes: original flags are left on stack, and must be popped by caller

this call bypasses the DOS filesystem

BUG: DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an

invalid drive number

SeeAlso: INT 13/AH=03h,INT 25 ———-26——————————— INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)

AL = drive number (0=A, 1=B, etc)
CX = FFFFh
DS:BX -> disk write packet (see below)

Return: same as above Notes: partition is potentially >32M (and requires this form of the call) if

  bit 1 of device attribute word in device driver is set
original flags are left on stack, and must be removed by caller
this call bypasses the DOS filesystem

SeeAlso: INT 13/AH=03h,INT 25

Format of disk write packet: Offset Size Description 00h DWORD sector number 04h WORD number of sectors to read 06h DWORD transfer address ———-27——————————— INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT

DX = number of bytes to keep resident (max FFF0h)
CS = segment of PSP

Return: never Notes: this is an obsolete call

INT 22, INT 23, and INT 24 are restored from the PSP
does not close any open files
the minimum number of bytes which will remain resident is 110h for
  DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
  implements this service in COMMAND.COM rather than the DOS kernel

SeeAlso: INT 21/AH=31h ———-28——————————— INT 28 - DOS 2+ - DOS IDLE INTERRUPT

 Invoked each time one of the DOS character input functions loops while
 waiting for input.  Since a DOS call is in progress even though DOS is
 actually idle during such input waits, hooking this function is necessary
 to allow a TSR to perform DOS calls while the foreground program is
 waiting for user input.  The INT 28h handler may invoke any INT 21 function
 except functions 00h through 0Ch.  Under DOS 2.x, the critical error flag
 (the byte immediately after the InDOS flag) must be set in order to call
 DOS functions 50h/51h without destroying the DOS stacks.

Notes: calls to INT 21/AH=3Fh,40h may not use a handle which refers to CON

at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  set to 01h; if larger, DOS is truly busy and should not be reentered
the default handler is an IRET instruction
supported in OS/2 compatibility box

SeeAlso: INT 21/AH=34h,INT 2A/AH=84h ———-29——————————— INT 29 - DOS 2+ - FAST CONSOLE OUTPUT

AL = character to display

Return: nothing Notes: automatically called when writing to a device with bit 4 of its device

  driver header set (see also INT 21/AH=52h)
COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  vector and assume that ANSI.SYS is installed if the segment is larger
the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
the default handler under DESQview 2.2 understands the <Esc>[2J
  screen-clearing sequence, calls INT 10/AH=0Eh for all others

SeeAlso: INT 79 ———-2A00——————————- INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK

AH = 00h

Return: AH <> 00h if installed SeeAlso: INT 5C ———-2A0000—————————– INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK

AX = 0000h

Return: AH = DDh SeeAlso: INT 5B ———-2A01——————————- INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY

AH = 01h
ES:BX -> NCB (see INT 5C)

Return: AL = NetBIOS error code

AH = 00h if no error
   = 01h on error

SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C“NetBIOS” ———-2A02——————————- INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE

AH = 02h
???

Return: ??? ———-2A0300—————————– INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O

AX = 0300h
DS:SI -> ASCIZ device name (may be full path or only drive specifier--
	must include the colon)

Return: CF clear if direct physical addressing (INT 13,INT 25) permissible

CF set if access via files only

Notes: do not use direct disk accesses if this function returns CF set or the

  device is redirected (INT 21/AX=5F02h)
may take some time to execute
called by DOS kernel on INT 25 and INT 26

SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h ———-2A04——————————- INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST

AH = 04h
AL = error retry
    00h automatically retry request on errors 09h, 12h, and 21h
    01h no retry
ES:BX -> Network Control Block (see INT 5C"NetBIOS")

Return: AX = 0000h if successful

AH = 01h on error
    AL = error code

Note: invokes either INT 5B or INT 5C as appropriate SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C“NetBIOS” ———-2A0500—————————– INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY

AX = 0500h

Return: AX reserved

BX = number of network names available
CX = number of network control blocks available
DX = number of network sessions available

SeeAlso: AH=01h,AH=04h,INT 5C“NetBIOS” ———-2A06——————————- INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL

AH = 06h
AL = 01h set concatenation mode (all printer output put in one job)
     02h set truncation mode (default)
	 printer open/close starts new print job
     03h flush printer output and start new print job

Return: CF set on error

    AX = error code
CF clear if successful

Notes: subfunction 03h is equivalent to Ctrl/Alt/keypad-*

LANtastic v4.x no longer supports this call

SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h ———-2A2001—————————– INT 2A - MS Networks or NETBIOS - ???

AX = 2001h
???

Return: ??? Note: intercepted by DESQview 2.x ———-2A2002—————————– INT 2A - NETWORK - ???

AX = 2002h
???

Return: ??? Note: called by MSDOS 3.30-5.00 APPEND ———-2A2003—————————– INT 2A - NETWORK - ???

AX = 2003h
???

Return: ??? Note: called by MSDOS 3.30-5.00 APPEND ———-2A7802—————————– INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME

AX = 7802h
ES:DI -> 8-byte buffer to be filled

Return: AL = 00h if no user logged on to Extended Services

AL <> 00h if user logged on to Extended Services
    buffer at ES:DI filled with name, padded to 8 chars with blanks.

———-2A80——————————- INT 2A - NETWORK - BEGIN DOS CRITICAL SECTION

AH = 80h
AL = critical section number (00h-0Fh)
    01h DOS kernel, SHARE.EXE
	apparently for maintaining the integrity of DOS/SHARE/NET
	  data structures
    02h DOS kernel
	ensures that no multitasking occurs while DOS is calling an
	  installable device driver
    05h DOS 4.x only IFSFUNC
    06h DOS 4.x only IFSFUNC
    08h ASSIGN.COM
    0Ah MSCDEX

Notes: normally hooked to avoid interrupting a critical section, rather than

  called
the handler should ensure that none of the critical sections are
  reentered, usually by suspending a task which attempts to reenter
  an active critical section
the DOS kernel does not invoke critical sections 01h and 02h unless it
  is patched.  DOS 3.1 through 3.31 contain a zero-terminated list of
  words beginning at offset 02C3h in the IBMDOS segment; each word
  contains the offset within the IBMDOS segment of a byte which must
  be changed from C3h to 50h to enable use of critical sections.

SeeAlso: AH=81h,AH=82h,AH=87h,INT 21/AX=5D06h,INT 21/AX=5D0Bh ———-2A81——————————- INT 2A - NETWORK - END DOS CRITICAL SECTION

AH = 81h
AL = critical section number (00h-0Fh) (see AH=80h)

Notes: normally hooked rather than called

the handler should reawaken any tasks which were suspended due to an
  attempt to enter the specified critical section

SeeAlso: AH=80h,AH=82h,AH=87h ———-2A82——————————- INT 2A - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7

AH = 82h

Notes: called by the INT 21h function dispatcher for function 0 and functions

  greater than 0Ch except 59h, and on process termination
the handler should reawaken any tasks which were suspended due to an
  attempt to enter one of the critical sections 0 through 7

SeeAlso: AH=81h ———-2A84——————————- INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP

AH = 84h

Note: similar to DOS's INT 28h, called from inside the DOS keyboard input

  loop to allow network to process requests

SeeAlso: INT 28 ———-2A87——————————- INT 2A - PRINT??? - CRITICAL SECTION

AH = 87h
AL = start/end
    00h start
    01h end

Note: called by PRINT.COM SeeAlso: AH=80h,AH=81h ———-2A89——————————- INT 2A - Network - ???

AH = 89h
AL = ???  (ASSIGN uses 08h)
???

Return: ??? ———-2A90——————————- INT 2A - IBM PC 3270 EMULATION PROGRAM - ???

AH = 90h
???

Return: ??? Note: the LANtastic redirector and SERVER.EXE use this function with AL=01h,

  03h-07h,0Ch-11h

———-2AC2——————————- INT 2A - Network - ???

AH = C2h
AL = subfunction
    07h ???
    08h ???
BX = 0001h
???

Return: ??? Note: called by DOS 3.30-5.00 APPEND ———-2AFF90—————————– INT 2A - PC/TCP PREDIR.EXE - ???

AX = FF90h

Return: AX = ??? Note: PREDIR.EXE is the network printer redirector included as part of the

  PC/TCP system by FTP Software, Inc.

———-2AFF91—————————– INT 2A - PC/TCP PREDIR.EXE - ???

AX = FF91h
BX = ???

Return: AX = status??? ———-2AFF92—————————– INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK

AX = FF92h

Return: AX = 0000h if installed

   BX = redirected printer port (FFFFh if no printers redirected)
   CX = version (CH = major, CL = minor)

Note: PREDIR.EXE is the network printer redirector included as part of the

  PC/TCP system by FTP Software, Inc.

———-2AFF93—————————– INT 2A - PC/TCP PREDIR.EXE - ???

AX = FF93h

Return: AX = ??? ———-2AFF94—————————– INT 2A - PC/TCP PREDIR.EXE - ???

AX = FF94h
BX = ???
CX = ???
DX = ???

Return: AX = ??? Note: PREDIR.EXE is the network printer redirector included as part of the

  PC/TCP system by FTP Software, Inc.

———-2AFF95—————————– INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS

AX = FF95h
CX = what to get
    0000h ??? (returned pointer to "C:\COMMAND.COM")
    0001h spooling program
    0002h ???
    0003h spool file name
    0004h swap file name

Return: AX = status

    0000h successful
BX:DX -> ASCIZ configuration string

———-2AFF96—————————– INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION

AX = FF96h
CX = what to set
    0000h ???
    0001h print-on-hotkey state
    0002h print-on-exit state
    0003h print job timeout in clock ticks
    0004h print-on-EOF state
BX = new value (0000h disabled, 0001h enabled except for timeout)

Return: AX = ??? SeeAlso: AX=FF97h Note: PREDIR.EXE is the network printer redirector included as part of the

  PC/TCP system by FTP Software, Inc.

———-2AFF97—————————– INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION

AX = FF97h
CX = what to get
    0000h ???
    0001h print-on-hotkey state
    0002h print-on-exit state
    0003h print job timeout in clock ticks
    0004h print-on-EOF state

Return: AX = status

    0000h successful
BX = old value (0000h disabled, 0001 enabled except for timeout)

SeeAlso: AX=FF96h ———-2B——————————— INT 2B - DOS 2+ - RESERVED Note: this vector is not used in DOS versions ⇐ 5.00, and points at an IRET ———-2C——————————— INT 2C - DOS 2+ - RESERVED Note: this vector is not used in DOS versions ⇐ 5.00, and points at an IRET ———-2C——————————— INT 2C - STARLITE architecture - KERNEL API Note: STARLITE is an architecture by General Software for a series of MS-DOS

  compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  be released in 1991.	The interrupt number is subject to change
  before the actual release.

———-2D——————————— INT 2D - DOS 2+ - RESERVED Note: this vector is not used in DOS versions ⇐ 5.00, and points at an IRET ———-2D——————————— INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [proposal v3.4]

AH = multiplex number
AL = function
    00h installation check
	Return: AL = FFh if multiplex number in use
		    CX = version number (CH = major, CL = minor)
		    DX:DI -> signature string (see below) identifying
			    the program using the multiplex number
		AL = 00h if free
    01h get entry point
	Return: AL = FFh if entry point supported
		    DX:BX -> entry point for bypassing interrupt chain
		AL = 00h if all API calls via INT 2D
    02h uninstall
    	DX:BX = return address for successful uninstall (may be
		ignored by TSR)
	Return: AL = status
		    00h not implemented
		    01h unsuccessful
		    02h can not uninstall yet, will do so when able
		    03h safe to remove, but no resident uninstaller
		    	(TSR still enabled)
		    	BX = segment of memory block with resident code
		    04h safe to remove, but no resident uninstaller
		    	(TSR now disabled)
		    	BX = segment of memory block with resident code
		    05h not safe to remove now, try again later
		    FFh successful
		return at DX:BX with AX destroyed if successful and
		  TSR honors specific return address
    03h request pop-up
	Return: AL = status
		    00h not implemented or TSR is not a pop-up
		    01h can not pop up at this time, try again later
		    02h can not pop up yet, will do so when able
		    03h already popped up
		    04h unable to pop up, user intervention required
		    	BX = standard reason code
			    0000h unknown failure 
			    0001h interrupt chain passes through memory
			    	  which must be swapped out to pop up
			    0002h swap-in failed
			CX = application's reason code if nonzero
		    FFh TSR popped up and was exited by user
			BX = return value
			    0000h no return value
			    0001h TSR unloaded
			    0002h-00FFh reserved
			    0100h-FFFFh application-dependent
    04h determine chained interrupts
    	BL = interrupt number (except 2Dh)
	Return: AL = status
		    00h not implemented
		    01h unable to determine
		    02h interrupt hooked
		    03h interrupt hooked, address returned
		    	DX:BX -> TSR's interrupt BL handler
		    04h list of hooked interrupts returned
		    	DX:BX -> interrupt hook list (see below)
		    FFh interrupt not hooked
	Notes:	since INT 2D is known to be hooked, the resident code
		  need not test for BL=2Dh (to minimize its size), and
		  the return value is therefore undefined in that case.
		BL is ignored if the TSR returns AL=04h; in that case,
		  the caller needs to scan the return list rather than
		  making additional calls to this function.  If the
		  return is not 00h or 04h, then the caller must cycle
		  through the remaining interrupt numbers it wishes to
		  check.
		return values 01h thru 03h are disparaged and may be
		  removed from future versions of the specification;
		  they are included for compatibility with version 3.3
    05h-0Fh reserved for future enhancements
	Return: AL = 00h (not implemented)
    other  application-dependent

Notes: programs should not use fixed multiplex numbers; rather, a program

  should scan all multiplex numbers from 00h to FFh, remembering the
  first unused multiplex in case the program is not yet installed.
  For multiplex numbers which are in use, the program should compare
  the first 16 bytes of the signature string to determine whether it
  is already installed on that multiplex number.  If not previously
  installed, it should use the first free multiplex number.
functions other than 00h are not valid unless a program is installed
  on the selected multiplex number
to be considered fully compliant with version 3.4 of the specification,
  programs must implement at least functions 00h, 02h (no resident
  uninstall code required), and 04h (return value 04h).  The absolute
  minimum implementation has an overhead of 64 bytes plus 22 bytes per
  hooked interrupt (for the interrupt sharing protocol header and hook
  list entry).
the signature string and description may be used by memory mappers
  to display the installed programs
users of this proposal should adhere to the IBM interrupt sharing
  protocol (see below), which will permit removal of TSRs in
  arbitrary order and interrupt handler reordering.  All TSRs
  following this proposal should be removable, though they need not
  keep the code for removing themselves resident; it is acceptable
  for a separate program to perform the removal.
A sample implementation including example TSRs and utility programs
  may be found in a separate package distributed as AMISLnnn.ZIP
  (AMISL081.ZIP as of this writing).
Please let me know if you choose to follow this proposal.  A list of
  the private API calls you use would be appreciated, as well.

SeeAlso: INT 2F

Format of signature string: Offset Size Description 00h 8 BYTEs blank-padded manufacturer's name (possibly abbreviated) 08h 8 BYTEs blank-padded product name 10h 64 BYTEs ASCIZ product description (optional, may be a single 00h) Note: it is not necessary to reserve a full 64 bytes for the description,

  just enough to store the actual ASCIZ string

Format of interrupt hook list [array]: Offset Size Description 00h BYTE interrupt number (last entry in array is 2Dh) 01h WORD offset within hook list's segment of the interrupt handler this will point at the initial short jump of the interrupt

	sharing protocol header (see below)

Format of interrupt sharing protocol interrupt handler entry point: Offset Size Description 00h 2 BYTEs short jump to actual start of interrupt handler, immediately

	following this data block (EBh 10h)

02h DWORD address of next handler in chain 06h WORD signature 424Bh 08h BYTE EOI flag

	00h software interrupt or secondary hardware interrupt handler
	80h primary hardware interrupt handler (will issue EOI)

09h 2 BYTEs short jump to hardware reset routine

	must point at a valid FAR procedure (may be just RETF)

0Bh 7 BYTEs reserved (0)

Signatures known to be in use: 'Crynwr ' 'SPELLER ' TSR spelling-checker 'heathh ' 'Monitor ' 'Ralf B ' 'FASTMOUS' example TSR included with sample AMIS library code 'Ralf B ' 'NOLPT n ' example TSR – turn LPTn into bit-bucket 'Ralf B ' 'NOTE ' example TSR – popup note-taker 'Ralf B ' 'SWITCHAR' example TSR – add switchar() support removed from DOS5 'Ralf B ' 'VGABLANK' example TSR – VGA-only screen blanker 'TifaWARE' 'EATMEM ' George A. Theall's public domain memory restrictor for testing programs (v1.1+)

    'RECALL  '	public domain commandline editor and history (v1.2+)

———-2E——————————— INT 2E - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION

DS:SI -> commandline to execute (see below)

Return: all registers except CS:IP destroyed

AX = status (4DOS v4.0)
   0000h successful
   FFFFh error before processing command (not enough memory, etc)
   other error number returned by command

Notes: this call allows execution of arbitrary commands (including COMMAND.COM

  internal commands) without loading another copy of COMMAND.COM
if COMMAND.COM is the user's command interpreter, the primary copy
  executes the command; this allows the master environment to be
  modified by issuing a "SET" command, but changes in the master
  environment will not become effective until all programs descended
  from the primary COMMAND.COM terminate
since COMMAND.COM processes the string as if typed from the keyboard,
  the transient portion needs to be present, and the calling program
  must ensure that sufficient memory to load the transient portion can
  be allocated by DOS if necessary
results are unpredictable if invoked by a program run from a batch file
  because this call is not reentrant and COMMAND.COM uses the same
  internal variables when processing a batch file
hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  has been loaded

Format of commandline: Offset Size Description 00h BYTE length of command string, not counting trailing CR 01h var command string

N	BYTE	0Dh (CR)

———-2E—-BXE22E———————– INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL

BX = E22Eh
DS:SI -> zero byte

Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch ———-2F——————————— INT 2F - Multiplex - NOTES

AH = identifier of program which 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.  When searching for a free identifier code for AH
 using the installation check (AL=00h), the calling program should set
 BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
 and SS:SP to be valid on return, since numerous programs now use additional
 registers on input and/or output for the installation check.

Note: Since the multiplex chain is growing so long, and beginning to

  experience multiplex number collisions, I am proposing an alternate
  multiplex interrupt on INT 2D.  If you decide to use the alternate
  multiplex, please let me know.

SeeAlso: INT 2D ———-2F——————————— 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 installation check
ES:DI = EBEBh:BEBEh

Return: AL = 00h not installed

     01h not installed, not OK to install
     FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
	 to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
	 short form of the manufacturer's name, PPPPPPPP is a product
	 name and NNNN is the product's version number

———-2F——————————— INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY

AH = programmer-selected multiplex number
AL = function
    00h installation check
	Return: AL = FFh if installed
    01h get TSR interrupt vectors
	Return: DX:AX -> vector table (see below)
    02h get TSR code segment
	Return: AX = code segment for all interrupt handlers
    03h call user exit routine and release TSR's memory
    04h get signature string
	Return: DX:AX -> counted string containing signature
    05h get TSR's INT 2F handler
	Return: DX:AX -> INT 2F handler
    06h enable/disable TSR
	BL = new state (00h disabled, 01h enabled)
    07h activate TSR (popup if not disabled)
    08h get hotkeys
	BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
	Return: AX = hotkey (AH = keyflags, AL = scancode)
    09h set hotkey
	BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
	CX = new hotkey (CH = keyflags, CL = scancode)
    0Ah-1Fh reserved

Format of vector table entry: Offset Size Description 00h BYTE vector number (00h = end of table) 01h DWORD original vector 05h WORD offset of interrupt handler in TSR's code segment ———-2F——————————— INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface

AH = xx (dynamically assigned based upon a search for a multiplex
	 number from C0h to FFh which doesn't answer installed)
AL = 00h installation check
ES:DI = 1492h:1992h

Return: AL = 00h not installed

     01h not installed, not OK to install
     FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
	 point to author_name_ver table (see below)
AH = FFh

Note: this interface permits advanced communication with TSRs: it is possible

  to make a generic unistall utility, advanced TSR relocator programs
  in order to fit fragmented memory areas, etc.

See also: INT 2D“AMIS”,INT 2F“Compuscience”

Format of author_name_ver table: Offset Size Description -16 WORD segment in which really begins the TSR code (CS in programs

	with PSP, XMS upper memory segment if installed as UMB...)

-14 WORD offset in which really begins the TSR code (frecuently 100h

	in *.COM programs and 0 in upper memory TSR's).

-12 WORD memory used by TSR (in paragraphs). Knowing the memory area

	used by TSR is possible to determine if hooked vectors are
	still pointing it (and if it is safe the unistall process).

-10 BYTE characteristics byte

	bits 0-2: 000 normal program (with PSP)
		  001 upper XMS memory block (needed HIMEM.SYS function
		      to free memory when unistalling)
		  010 device driver (*.SYS)
		  011 device driver in EXE format
		  1xx others (reserved)
	bits 3-6 reserved
	bit 7 set if extra_table defined and supported

-9 BYTE number of multiplex entry used (redefinition available). Note

	that the TSR must be use THIS variable in it's INT 2Fh handler.

-8 WORD offset to vector_area table (see bellow) -6 WORD offset to extra_area table (see bit 7 in offset -10 and bellow) -4 4 BYTEs “*##*” (to insure that the TSR verify this agreement) 00h var “AUTHOR:PROGRAM_NAME:VERSION”,0 (variable length, this area

	is used in order to determine if the TSR is already resident
	and it's version code; the ':' char is used as delimiter)

Format of vector_area table: Offset Size Description -1 BYTE number of vectors intercepted by TSR 00h BYTE first vector number 01h DWORD first vector pointer before installing the TSR 05h BYTE second vector number 06h DWORD second vector pointer before installing the TSR

.	  .	(and so on) Note that the TSR must be use THIS variables to
	invoke previous interrupt handler routines.

Format of extra_area table (needed only to improve relocation feature): Offset Size Description 00h WORD offset to external_ctrl table (0 if not supported) 02h WORD reserved for future use (0)

Format of external_ctrl table: Offset Size Description 00h BYTE bit 0: TSR is relocatable (no absolute segment references) 01h WORD offset to a variable which can activate/inhibit the TSR —And if bit 0 in offset 00h is off: 03h DWORD pointer to ASCIIZ with pathname to executable file which

	supports /SR parameter (silent installation & inhibit)

07h DWORD pointer to first variable to initialize on the copy reloaded

	from the previous TSR still resident

0Bh DWORD pointer to last variable (all variables packed in one block) ———-2F00——————————- INT 2F U - DOS 2.x PRINT.COM - ???

AH = 00h
???

Return: ??? Notes: DOS 2.x PRINT.COM does not chain to previous INT 2F handler

values in AH other than 00h or 01h cause PRINT to return the number of
  files in the queue in AH

SeeAlso: AH=01h ———-2F0080—————————– INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE

AX = 0080h

Return: after PRINT executes ———-2F01——————————- INT 2F U - DOS 2.x PRINT.COM - ???

AH = 01h
???

Return: ??? Notes: DOS 2.x PRINT.COM does not chain to previous INT 2F handler

values in AH other than 00h or 01h cause PRINT to return the number of
  files in the queue in AH

SeeAlso: AH=00h ———-2F0100—————————– INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK

AX = 0100h

Return: AL = status

    00h not installed
    01h not installed, but not OK to install
    FFh installed

SeeAlso: AX=0101h ———-2F0101—————————– INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING

AX = 0101h
DS:DX -> submit packet (see below)

Return: CF clear if successful

    AL = 01h added to queue
	 9Eh now printing
CF set on error
    AX = error code (see also INT 21/AH=59h)
	01h invalid function
	02h file not found
	03h path not found
	04h out of file handles
	05h access denied
	08h print queue full
	09h spooler busy
	0Ch name too long
	0Fh invalid drive

SeeAlso: AX=0102h

Format of submit packet: Offset Size Description 00h BYTE level (must be 00h) 01h DWORD pointer to ASCIZ filename (no wildcards) ———-2F0102—————————– INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE

AX = 0102h
DS:DX -> ASCIZ filename (wildcards allowed)

Return: CF clear if successful

CF set on error
    AX = error code (see AX=0101h)

SeeAlso: AX=0101h,AX=0103h ———-2F0103—————————– INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE

AX = 0103h

Return: CF clear if successful

CF set on error
    AX = error code (see AX=0101h)

SeeAlso: AX=0102h ———-2F0104—————————– INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS

AX = 0104h

Return: CF clear if successful

    DX = error count
    DS:SI -> print queue
CF set on error
    AX = error code (see AX=0101h)

Notes: the print queue is an array of 64-byte ASCIZ filenames terminated by

  an empty filename; the first name is the file currently being printed
printing is stopped until AX=0105h is called to prevent the queue
  from changing while the filenames are being read

SeeAlso: AX=0101h,AX=0105h ———-2F0105—————————– INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ

AX = 0105h

Return: CF clear if successful

CF set on error
    AX = error code (see AX=0101h)

SeeAlso: AX=0104h ———-2F0106—————————– INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE

AX = 0106h

Return: CF set if files in print queue

    AX = error code 0008h (queue full)
    DS:SI -> device driver header
CF clear if print queue empty
    AX = 0000h

Note: documented for DOS 5+, but not documented for prior versions SeeAlso: AX=0104h ———-2F0200—————————– INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK

AX = 0200h

Return: AL = FFh if installed ———-2F0201—————————– INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???

AX = 0201h

Return: nothing??? Notes: called by DOS 3.3+ PRINT.COM

AX=0202h appears to be the opposite function

SeeAlso: AX=0202h ———-2F0202—————————– INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???

AX = 0202h
???

Return: nothing??? Note: called by DOS 3.3+ PRINT.COM SeeAlso: AX=0201h ———-2F0203—————————– INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???

AX = 0203h

Return: nothing??? Notes: called by DOS 3.3+ PRINT.COM

AX=0204h appears to be the opposite function

SeeAlso: AX=0204h ———-2F0204—————————– INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???

AX = 0204h
???

Return: nothing??? Note: called by DOS 3.3 PRINT.COM ———-2F——————————— INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???

AX = 02xxh
???

Return: ??? ———-2F0500—————————– INT 2F U - DOS 3+ 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's message in COMMAND.COM

SeeAlso: AH=05h,INT 24 ———-2F05——————————- INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING

AH = 05h

—DOS 3.x—

AL = extended error code (not zero)

—DOS 4+ —

AL = error type
    01h DOS extended error code
    02h parameter error
BX = error code

Return: CF clear if successful

    ES:DI -> ASCIZ error message (read-only)
    AL = ???
CF set if error code can't be converted to string

Notes: called at start of COMMAND.COM's default critical error handler if

  installed by a user program, allowing partial or complete overriding
  of the default error message
subfunction 02h called by many DOS 4 external programs

SeeAlso: AX=122Eh,INT 24 ———-2F0600—————————– INT 2F - DOS v3.0+ ASSIGN - INSTALLATION CHECK

AX = 0600h

Return: AL = status

    00h not installed
    01h not installed, but not OK to install
    FFh installed

Note: ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST

  (see INT 21/AX=2152h)

SeeAlso: AX=0601h,INT 21/AX=2152h ———-2F0601—————————– INT 2F U - DOS v3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE

AX = 0601h

Return: ES = segment of ASSIGN work area and assignment table Note: under DOS 3+, the 26 bytes starting at ES:0103h specify which drive

  each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....

SeeAlso: AX=0600h ———-2F0800—————————– INT 2F U - DRIVER.SYS support - INSTALLATION CHECK

AX = 0800h

Return: AL = 00h not installed, OK to install

     01h not installed, not OK to install
     FFh installed

Note: supported by DR-DOS 5.0 ———-2F0801—————————– INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE

AX = 0801h
DS:DI -> drive data table (see AX=0803h)

Notes: moves down internal list of drive data tables, copying and modifying

  the drive description flags word for tables referencing same physical
  drive
data table appended to chain of tables
supported by DR-DOS 5.0

SeeAlso: AX=0803h ———-2F0802—————————– INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST

AX = 0802h
ES:BX -> device driver request header (see below)

Return: request header updated as per requested operation Notes: supported by DR-DOS 5.0

DOS 3.2 executes this function on any AL value from 02h through F7h

Format of device driver request header: Offset Size Description 00h BYTE length of request header 01h BYTE subunit within device driver 02h BYTE command code (see below) 03h WORD status (filled in by device driver)

	bit 15: error
	bits 14-11: reserved
	bit 10: ??? set by DOS kernel on entry to some driver calls
	bit 9: busy
	bit 8: done
	bits 7-0: error code if bit 15 set (see below)

—DOS— 05h 8 BYTEs reserved (unused in DOS 2.x and 3.x) —STARLITE architecture— 05h DWORD pointer to next request header 09h 4 BYTEs reserved —command code 00h— 0Dh BYTE number of units (set by driver) 0Eh DWORD address of first free byte following driver (set by driver) 12h DWORD pointer to BPB array (set by block drivers only) 16h BYTE (DOS 3+) drive number for first unit of block driver (0=A) —command code 01h— 0Dh BYTE media descriptor 0Eh BYTE returned status

	00h don't know
	01h media has not changed
	FFh media has been changed

0Fh DWORD (DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM bit in

	  device header set and disk changed (set by driver)

—command code 02h— 0Dh BYTE media descriptor 0Eh DWORD transfer address

  1. > scratch sector if NON-IBM FORMAT bit in device header set
  2. > first FAT sector otherwise

12h DWORD pointer to BPB (set by driver) —command codes 03h,0Ch— (see also INT 21/AX=4402h,INT 21/AX=4403h) 0Dh BYTE media descriptor (block devices only) 0Eh DWORD transfer address 12h WORD byte count (character devices) or sector count (block devices) 14h WORD starting sector number (block devices only) 16h DWORD (DOS 3+) pointer to volume label if error 0Fh (set by driver) —command codes 04h,08h,09h— 0Dh BYTE media descriptor (block devices only) 0Eh DWORD transfer address 12h WORD byte count (character devices) or sector count (block devices) 14h WORD starting sector number (block devices only) 16h DWORD (DOS 3+) pointer to volume ID if error 0Fh returned 1Ah DWORD (DOS 4+) 32-bit starting sector number (block devices with

	device attribute word bit 1 set only) (see INT 21/AH=52h)

—command code 05h— 0Dh BYTE byte read from device if BUSY bit clear on return —command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh,85h,88h— no further fields —command code 10h— 0Dh BYTE unused 0Eh DWORD transfer address 12h WORD byte count —command codes 13h,19h— 0Dh BYTE category code

	00h unknown
	01h COMn:
	03h CON
	05h LPTn:
	08h disk
	9Eh (STARLITE) Media Access Control driver

0Eh BYTE function code

	00h (STARLITE) MAC Bind request

0Fh WORD copy of DS at time of IOCTL call (apparently unused in DOS 3.3) 11h WORD offset of device driver header 13h DWORD pointer to parameter block from INT 21/AX=440Ch or AX=440Dh —command codes 80h,82h— 0Dh BYTE addressing mode

	00h HSG (default)
	01h Phillips/Sony Red Book

0Eh DWORD transfer address (ignored for command 82h) 12h WORD number of sectors to read

	(if 0 for command 82h, request is an advisory seek)

14h DWORD starting sector number

	logical sector number in HSG mode
	frame/second/minute/unused in Red Book mode
	(HSG sector = minute * 4500 + second * 75 + frame - 150)

18h BYTE data read mode

	00h cooked (2048 bytes per frame)
	01h raw (2352 bytes per frame, including EDC/ECC)

19h BYTE interleave size (number of sectors stored consecutively) 1Ah BYTE interleave skip factor (# sectors between consec portions) —command code 83h— 0Dh BYTE addressing mode (see above) 0Eh DWORD transfer address (ignored) 12h WORD number of sectors to read (ignored) 14h DWORD starting sector number (see also above) —command code 84h— 0Dh BYTE addressing mode (see above) 0Eh DWORD starting sector number (see also above) 12h DWORD number of sectors to play —command codes 86h,87h— 0Dh BYTE addressing mode (see above) 0Eh DWORD transfer address (ignored in write mode 0) 12h WORD number of sectors to write 14h DWORD starting sector number (see also above) 18h BYTE write mode

	00h mode 0 (write all zeros)
	01h mode 1 (default) (2048 bytes per sector)
	02h mode 2 form 1 (2048 bytes per sector)
	03h mode 2 form 2 (2336 bytes per sector)

19h BYTE interleave size (number of sectors stored consecutively) 1Ah BYTE interleave skip factor (# sectors between consec portions)

Values for command code:

00h INIT
01h MEDIA CHECK (block devices)
02h BUILD BPB (block devices)
03h IOCTL INPUT
04h INPUT
05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
06h INPUT STATUS (character devices)
07h INPUT FLUSH (character devices)
08h OUTPUT
09h OUTPUT WITH VERIFY
0Ah OUTPUT STATUS (character devices)
0Bh OUTPUT FLUSH (character devices)
0Ch IOCTL OUTPUT
0Dh (DOS 3+) DEVICE OPEN
0Eh (DOS 3+) DEVICE CLOSE
0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
11h unused
12h unused
13h (DOS 3.2+) GENERIC IOCTL
14h unused
15h unused
16h unused
17h (DOS 3.2+) GET LOGICAL DEVICE
18h (DOS 3.2+) SET LOGICAL DEVICE
19h (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
80h (CD-ROM) READ LONG
81h (CD-ROM) reserved
82h (CD-ROM) READ LONG PREFETCH
83h (CD-ROM) SEEK
84h (CD-ROM) PLAY AUDIO
85h (CD-ROM) STOP AUDIO
86h (CD-ROM) WRITE LONG
87h (CD-ROM) WRITE LONG VERIFY
88h (CD-ROM) RESUME AUDIO

Values for error code:

00h write-protect violation
01h unknown unit
02h drive not ready
03h unknown command
04h CRC error
05h bad drive request structure length
06h seek error
07h unknown media
08h sector not found
09h printer out of paper
0Ah write fault
0Bh read fault
0Ch general failure
0Dh reserved
0Eh (CD-ROM) media unavailable
0Fh invalid disk change

———-2F0803—————————– INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST

AX = 0803h

Return: DS:DI → first drive data table in list Note: not available under DR-DOS 5.0 SeeAlso: AX=0801h

Format of DOS 3.30 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 19 BYTEs BIOS Parameter Block (see also INT 21/AH=53h)

	Offset	Size	Description
	 00h	WORD	bytes per sector
	 02h	BYTE	sectors per cluster, FFh if unknown
	 03h	WORD	number of reserved sectors
	 05h	BYTE	number of FATs
	 06h	WORD	number of root dir entries
	 08h	WORD	total sectors
	 0Ah	BYTE	media descriptor, 00h if unknown
	 0Bh	WORD	sectors per FAT
	 0Dh	WORD	sectors per track
	 0Fh	WORD	number of heads
	 11h	WORD	number of hidden sectors

19h BYTE flags

	bit 6: 16-bit FAT instead of 12-bit FAT

1Ah WORD number of DEVICE OPEN calls without corresponding DEVICE CLOSE 1Ch 11 BYTEs volume label or “NO NAME ” if none (always “NO NAME” for

	fixed media)

27h BYTE terminating null for volume label??? 28h BYTE device type (see INT 21/AX=440Dh) 29h WORD bit flags describing drive

	bit 0: fixed media
	bit 1: door lock supported
	bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh)
	bit 3: all sectors in a track are the same size
	bit 4: physical drive has multiple logical units
	bit 5: current logical drive for physical drive
	bit 6: ???
	bit 7: ???
	bit 8: ??? (related to disk change detection)

2Bh WORD number of cylinders 2Dh 19 BYTEs BIOS Parameter Block for highest capacity supported 40h 3 BYTEs ??? 43h 9 BYTEs filesystem type???, default = “NO NAME ”

	(apparently only MSDOS 3.30 fixed media, nulls for removable
	media and PCDOS 3.30)

4Ch BYTE least-significant byte of last-accessed cylinder number —removable media— 4Dh DWORD time of last access in clock ticks (FFFFFFFFh if never) —fixed media— 4Dh WORD partition (FFFFh = primary, 0001h = extended) 4Fh WORD absolute cylinder number of partition's start on physical

	drive (always FFFFh if primary partition)

Format of COMPAQ DOS 3.31 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 25 BYTEs BIOS Parameter Block (see DOS 4.01 drive data table below) 1Fh 6 BYTEs ??? apparently always zeros 25h BYTE flags

	bit 6: 16-bit FAT instead of 12-bit FAT
	    5: large volume???

26h WORD device-open count??? 28h 11 BYTEs volume label or “NO NAME ” if none (always “NO NAME” for

	fixed media)

33h BYTE terminating null for volume label 34h BYTE device type (see INT 21/AX=440Dh) 35h WORD bit flags describing drive 37h WORD number of cylinders 39h 25 BYTEs BIOS parameter block for highest capacity drive supports 52h 6 BYTEs ??? apparently always zeros 58h BYTE least-significant byte of last-accessed cylinder number —removable media— 59h DWORD time of last access in clock ticks (FFFFFFFFh if never) —fixed media— 59h WORD partition (FFFFh = primary, 0001h = extended) 5Bh WORD absolute cylinder number of partition's start on physical

	drive (always FFFFh if primary partition)

Format of DOS 4.0-5.0 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 25 BYTEs BIOS Parameter Block (see also INT 21/AH=53h)

	Offset	Size	Description
	 00h	WORD	bytes per sector
	 02h	BYTE	sectors per cluster, FFh if unknown
	 03h	WORD	number of reserved sectors
	 05h	BYTE	number of FATs
	 06h	WORD	number of root dir entries
	 08h	WORD	total sectors (see offset 15h if zero)
	 0Ah	BYTE	media descriptor, 00h if unknown
	 0Bh	WORD	sectors per FAT
	 0Dh	WORD	sectors per track
	 0Fh	WORD	number of heads
	 11h	DWORD	number of hidden sectors
	 15h	DWORD	total sectors if WORD at 08h is zero

1Fh BYTE flags

	bit 6: 16-bit FAT instead of 12-bit

20h 2 BYTEs ??? 22h BYTE device type (see INT 21/AX=440Dh) 23h WORD bit flags describing drive

	bit 0: fixed media
	bit 1: door lock supported
	bit 2: ???
	bit 3: all sectors in a track are the same size
	bit 4: physical drive has multiple logical units
	bit 5: current logical drive for physical drive
	bit 6: ???
	bit 7: ???
	bit 8: ???

25h WORD number of cylinders 27h 25 BYTEs BIOS Parameter Block for highest capacity supported 40h 7 BYTEs ??? —removable media— 47h DWORD time of last access in clock ticks (FFFFFFFFh if never) —fixed media, DOS 4.x— 47h WORD partition (FFFFh = primary, 0001h = extended) 49h WORD absolute cylinder number of partition's start on phys drive

	(FFFFh if primary partition)

—fixed media, DOS 5.0— 47h WORD ??? apparently always 0001h 49h WORD absolute cylinder number of partition's start on phys drive


4Bh 11 BYTEs volume label or “NO NAME ” if none (apparently taken from

	extended boot record rather than root directory)

56h BYTE terminating null for volume label??? 57h DWORD serial number 5Bh 8 BYTEs filesystem type (“FAT12 ” or “FAT16 ”) 63h BYTE terminating null for filesystem type??? ———-2F0C00—————————– INT 2F - AD-DOS - INSTALLATION CHECK

AX = 0C00h

Return: AL = FF if installed

    BX = 4144H	('AD')
    CX = 2D44H	('-D')
    DX = 4F53H	('OS')

Notes: AD-DOS is the DOS version of the After Dark screen blanker for

  MS Windows
AH=0Ch is the default multiplex number

SeeAlso: AX=0C01h ———-2F0C01ES0000———————– INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT

AX = 0C01h
ES = 0000h

Return: CF clear succesful

    ES = AD-DOS TSR Code Segment
CF set if failed

SeeAlso: AX=0C00h ———-2F0C02—————————– INT 2F - AD-DOS - CHECK FOR NEW INPUT

AX = 0C02h

Return: BX = status

    0000h no input since last check
    0001h new input available

Note: this call also resets the new-input flag ———-2F0C03—————————– INT 2F - AD-DOS - SET MINUTES TO WAIT

AX = 0C03h
BX = minutes to wait before blanking screen
CF set

Return: n/a??? Notes: AD-DOS is the DOS version of the After Dark screen blanker

AH=0Ch is the default multiplex number

SeeAlso: AX=0C04h ———-2F0C04—————————– INT 2F - AD-DOS - GET MINUTES TO WAIT

AX = 0C04h
CF set

Return: BX = minutes to wait before blanking screen

???

SeeAlso: AX=0C03h ———-2F0C05—————————– INT 2F - AD-DOS - SET ENABLE??? FLAG

AX = 0C05h
BX = new state (0000h or 0001h) (default 0001h)
CF set

Return: n/a??? SeeAlso: AX=0C06h ———-2F0C06—————————– INT 2F - AD-DOS - GET ENABLE??? FLAG

AX = 0C06h
Carry Set

Return: BX = current state of ??? flag (0000h or 0001h)

???

Notes: AD-DOS is the DOS version of the After Dark screen blanker

AH=0Ch is the default multiplex number

SeeAlso: AX=0C05h ———-2F0C07—————————– INT 2F - AD-DOS - SET HOT KEY

AX = 0C07h
BX = hot key
CL = hot key shift status
CF set

Return: n/a??? SeeAlso: AX=0C08h ———-2F0C08—————————– INT 2F - AD-DOS - GET CURRENT HOT KEY

AX = 0C08h
CF set

Return: AX = status

    0000h successful
	BX = Hot Key
	CL = Hot Key Shift Status
    0008h otherwise

SeeAlso: AX=0C07h ———-2F0C09—————————– INT 2F - AD-DOS - ???

AX = 0C09h
Carry Set

Return: AX = status

    0000h successful
	???
    0009h otherwise

Notes: AD-DOS is the DOS version of the After Dark screen blanker

AH=0Ch is the default multiplex number

———-2F0C0A—————————– INT 2F - AD-DOS - ???

AX = 0C0Ah
CF set

Return: AX = status

    0000h successful
	BH = ??
	BL = ??
    000Ah failed

———-2F0C0B—————————– INT 2F - AD-DOS - ???

AX = 0C0Bh
CF set

Return: AX = status

    0000h successful
    000Bh failed

———-2F0C0C—————————– INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h

AX = 0C0Ch
CF set

Return: AX = status

    0000h successful
    000Ch failed

Notes: AD-DOS is the DOS version of the After Dark screen blanker

AH=0Ch is the default multiplex number

———-2F0C20—————————– INT 2F - AD-DOS - GET AND RESET VxD API STATUS

AX = 0C20h
CF set

Return: AX = status

    0000h successful
	BX = VxD API Status
	    0000h no error
	    0001h error
	    0100h neither Windows 3.X enhanced mode nor
			Windows/386 2.x is running
	    0200h VM API entry point found
    0020h otherwise

Note: this call resets the VxD API Status to zero SeeAlso: AX=1602h,AX=1607h ———-2F1000—————————– INT 2F - SHARE - INSTALLATION CHECK

AX = 1000h

Return: AL = 00h not installed, OK to install

     01h  not installed, not OK to install
     FFh  installed

BUGS: values of AL other than 00h put DOS 3.x SHARE into an infinite loop

  (08E9: OR  AL,AL
   08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
values of AL other than described here put PCDOS 4.00 into the same
  loop (the buggy instructions are the same)

Notes: supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh

if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  inactive state (due to the undocumented /NC flag used by the autoload
  code) until this call is made
DOS 5.0 chains to the previous handler if AL <> 00h on entry

SeeAlso: AX=1080h,INT 21/AH=52h ———-2F1040—————————– INT 2F U - DOS 4 only SHARE internal - ???

AX = 1040h
???

Return: AL = FFh??? SeeAlso: AX=1000h ———-2F1080—————————– INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS

AX = 1080h

Return: AL = status

    F0h successful
    FFh checking was already on

Note: DOS 4.x SHARE has dual functions: FCB support for large (>32M) media

  and file sharing checks.  The undocumented commandline flag /NC can
  be used to disable the sharing code.

SeeAlso: AX=1000h,AX=1081h ———-2F1081—————————– INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS

AX = 1081h

Return: AL = status

    F0h successful
    FFh checking was already off

Note: (see AX=1080h) SeeAlso: AX=1000h,AX=1080h ———-2F10FF—————————– INT 2F U - Multiplex - DR-DOS 5.0 - ???

AX = 10FFh
ES:BX -> ???

Note: sets pointer in kernel ———-2F1100—————————– INT 2F - NETWORK REDIRECTOR - INSTALLATION CHECK

AX = 1100h

Return: AL = 00h not installed, OK to install

     01h  not installed, not OK to install
     FFh  installed

Notes: called by DOS 3.1+ kernel

In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  PC LAN Program redirector; DOS 5.0 moves the calls back into the
  redirector

———-2F1100—————————– INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK

AX = 1100h
STACK: WORD DADAh

Return: AL = 00h not installed, OK to install

	STACK unchanged
   = 01h not installed, not OK to install
	STACK unchanged
   = FFh installed
	STACK: WORD ADADh

———-2F1101—————————– INT 2F U - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY

AX = 1101h
SS = DOS DS
SDA first filename pointer -> fully-qualified directory name
SDA CDS pointer -> current directory structure for drive with dir

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful

Note: called by DOS 3.1+ kernel SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h ———-2F1102—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY

AX = 1102h
SS = DOS DS
SDA first filename pointer -> fully-qualified directory name
SDA CDS pointer -> current directory structure for drive with dir

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful

Note: appears to be identical to AX=1101h SeeAlso: AX=1101h ———-2F1103—————————– INT 2F U - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY

AX = 1103h
SS = DOS DS
SDA first filename pointer -> fully-qualified directory name
SDA CDS pointer -> current directory structure for drive with dir

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful

Note: called by DOS 3.1+ kernel SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h ———-2F1104—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY

AX = 1104h
SS = DOS DS
SDA first filename pointer -> fully-qualified directory name
SDA CDS pointer -> current directory structure for drive with dir

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful

Note: appears to be identical to AX=1103h SeeAlso: AX=1103h ———-2F1105—————————– INT 2F U - NETWORK REDIRECTOR - CHDIR

AX = 1105h
SS = DOS DS
SDA first filename pointer -> fully-qualified directory name
SDA CDS pointer -> current directory structure for drive with dir

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    CDS updated with new path

Notes: called by DOS 3.1+ kernel

directory string in CDS should not have a terminating backslash unless
  the current directory is the root

SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h ———-2F1106—————————– INT 2F U - NETWORK REDIRECTOR - CLOSE REMOTE FILE

AX = 1106h
ES:DI -> SFT
    SFT DPB field -> DPB of drive containing file

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    SFT updated (except handle count, which DOS manages itself)

Note: called by DOS 3.1+ kernel SeeAlso: AX=1201h,AX=1227h,INT 21/AH=3Eh ———-2F1107—————————– INT 2F U - NETWORK REDIRECTOR - COMMIT REMOTE FILE

AX = 1107h
ES:DI -> SFT
    SFT DPB field -> DPB of drive containing file

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    all buffers for file flushed
    directory entry updated

Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h ———-2F1108—————————– INT 2F U - NETWORK REDIRECTOR - READ FROM REMOTE FILE

AX = 1108h
ES:DI -> SFT
    SFT DPB field -> DPB of drive containing file
CX = number of bytes
SS = DOS DS
SDA DTA field -> user buffer

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    CX = number of bytes read (0000h = end of file)
    SFT updated

Note: called by DOS 3.1+ kernel SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h ———-2F1109—————————– INT 2F U - NETWORK REDIRECTOR - WRITE TO REMOTE FILE

AX = 1109h
ES:DI -> SFT
    SFT DPB field -> DPB of drive containing file
CX = number of bytes
SS = DOS DS
SDA DTA field -> user buffer

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    CX = number of bytes written
    SFT updated

Note: called by DOS 3.1+ kernel SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h ———-2F110A—————————– INT 2F U - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE

AX = 110Ah
BX = file handle
CX:DX = starting offset
SI = high word of size
STACK: WORD low word of size
ES:DI -> SFT
    SFT DPB field -> DPB of drive containing file
SS = DOS DS

Return: CF set on error

   AL = DOS error code (see INT 21/AH=59h)
STACK unchanged

Notes: called by DOS 3.10-3.31 kernel

the redirector is expected to resolve lock conflicts

SeeAlso: AX=110Bh,INT 21/AH=5Ch ———-2F110A—————————– INT 2F U - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE

AX = 110Ah
BL = function
    00h lock
    01h unlock
DS:DX -> parameter block (see below)
ES:DI -> SFT
    SFT DPB field -> DPB of drive containing file
SS = DOS DS

Return: CF set on error

   AL = DOS error code (see INT 21/AH=59h)

Notes: called by DOS 4.0+ kernel

the redirector is expected to resolve lock conflicts

SeeAlso: AX=110Bh,INT 21/AH=5Ch

Format of parameter block: Offset Size Description 00h DWORD start offset 04h DWORD size of region ———-2F110B—————————– INT 2F U - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE

AX = 110Bh
BX = file handle
CX:DX = starting offset
SI = high word of size
STACK: WORD low word of size
ES:DI -> SFT for file
    SFT DPB field -> DPB of drive containing file

Return: CF set on error

   AL = DOS error code (see INT 21/AH=59h)
STACK unchanged

Note: called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead SeeAlso: AX=110Ah,INT 21/AH=5Ch ———-2F110C—————————– INT 2F U - NETWORK REDIRECTOR - GET DISK SPACE

AX = 110Ch
ES:DI -> current directory structure for desired drive

Return: AL = sectors per cluster

AH = media ID byte
BX = total clusters
CX = bytes per sector
DX = number of available clusters

Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=36h ———-2F110D—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 110Dh
SDA first filename pointer -> name of file
???

Return: ??? Note: appears to be similar to AX=110Fh SeeAlso: AX=110Fh ———-2F110E—————————– INT 2F U - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES

AX = 110Eh
SS = DOS DS
SDA first filename pointer -> fully-qualified name of file
SDA CDS pointer -> current directory structure for drive with file
STACK: WORD new file attributes

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
STACK unchanged

Note: called by DOS 3.1+ kernel SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h ———-2F110F—————————– INT 2F U - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE

AX = 110Fh
SS = DOS DS
SDA first filename pointer -> fully-qualified name of file
SDA CDS pointer -> current directory structure for drive with file

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    AX = file attributes
    BX:DI = file size

Note: called by DOS 3.1+ kernel SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h ———-2F1110—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 1110h
SDA first filename pointer -> name of file
???

Return: ??? Note: appears to be similar to AX=110Eh SeeAlso: AX=110Eh ———-2F1111—————————– INT 2F U - NETWORK REDIRECTOR - RENAME REMOTE FILE

AX = 1111h
SS = DS = DOS DS
SDA first filename pointer = offset of fully-qualified old name
SDA second filename pointer = offset of fully-qualified new name
SDA CDS pointer -> current directory structure for drive with file

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful

Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=56h,INT 21/AH=60h ———-2F1112—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 1112h
SS = DS = DOS DS
SDA first filename pointer -> name of file
???

Return: ??? SeeAlso: AX=1111h ———-2F1113—————————– INT 2F U - NETWORK REDIRECTOR - DELETE REMOTE FILE

AX = 1113h
SS = DS = DOS DS
SDA first filename pointer -> fully-qualified filename in DOS DS
SDA CDS pointer -> current directory structure for drive with file

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful

Notes: called by DOS 3.1+ kernel

the filespec may contain wildcards

SeeAlso: INT 21/AH=41h,INT 21/AH=60h ———-2F1114—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 1114h
SDA first filename pointer -> name of file
???

Return: ??? SeeAlso: AX=1113h ———-2F1115—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 1115h
SS = DOS DS
ES:DI -> SFT ???
???

Return: ??? SeeAlso: AX=112Eh ———-2F1116—————————– INT 2F U - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE

AX = 1116h
ES:DI -> uninitialized SFT
SS = DOS DS
SDA first filename pointer -> fully-qualified name of file to open
STACK: WORD file open mode (see INT 21/AH=3Dh)

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    SFT filled (except handle count, which DOS manages itself)
STACK unchanged

Note: called by DOS 3.1+ kernel SeeAlso: AX=1106h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh,INT 21/AH=60h ———-2F1117—————————– INT 2F U - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE

AX = 1117h
ES:DI -> uninitialized SFT
SS = DOS DS
SDA first filename pointer -> fully-qualified name of file to open
SDA CDS pointer -> current directory structure for drive with file
STACK: WORD file creation mode
		low byte = file attributes
		high byte = 00h normal create, 01h create new file

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    SFT filled (except handle count, which DOS manages itself)
STACK unchanged

Note: called by DOS 3.1+ kernel SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h ———-2F1118—————————– INT 2F U - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS

AX = 1118h
ES:DI -> uninitialized SFT
SS = DOS DS
SDA first filename pointer -> fully-qualified name of file
STACK: WORD file creation mode
		low byte = file attributes
		high byte = 00h normal create, 01h create new file

Return: ???

STACK unchanged

Note: called by DOS 3.1+ kernel when creating a file on a drive for which the

  SDA CDS pointer has offset FFFFh

SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h ———-2F1119—————————– INT 2F U - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS

AX = 1119h
SS = DS = DOS DS
[DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
SDA first filename pointer -> fully-qualified search template
SDA search attribute = attribute mask for search

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    [DTA] = updated findfirst search data
	    (bit 7 of first byte must be set)
    [DTA+15h] = standard directory entry for file

Notes: called by DOS 3.1+ kernel

DOS 4.x IFSFUNC returns CF set, AX=0003h	

———-2F111A—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 111Ah
???

Return: CF set

    AX = error code (03h for DOS 4.01 IFSFUNC)

———-2F111B—————————– INT 2F U - NETWORK REDIRECTOR - FINDFIRST

AX = 111Bh
SS = DS = DOS DS
[DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
SDA first filename pointer -> fully-qualified search template
SDA CDS pointer -> current directory structure for drive with file
SDA search attribute = attribute mask for search

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    [DTA] = updated findfirst search data
	    (bit 7 of first byte must be set)
    [DTA+15h] = standard directory entry for file

Note: called by DOS 3.1+ kernel SeeAlso: AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h ———-2F111C—————————– INT 2F U - NETWORK REDIRECTOR - FINDNEXT

AX = 111Ch
SS = DS = DOS DS
[DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful
    [DTA] = updated findfirst search data
	    (bit 7 of first byte must be set)
    [DTA+15h] = standard directory entry for file

Note: called by DOS 3.1+ kernel SeeAlso: AX=111Bh,INT 21/AH=4Fh ———-2F111D—————————– INT 2F U - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS

AX = 111Dh
DS???
SS = DOS DS

Return: ??? Notes: called by DOS 3.1+ kernel

closes all FCBs opened by process

———-2F111E—————————– INT 2F U - NETWORK REDIRECTOR - DO REDIRECTION

AX = 111Eh
SS = DOS DS
STACK: WORD function to execute
	5F00h  get redirection mode
		BL = type (03h printer, 04h disk)
		Return: BH = state (00h off, 01h on)
	5F01h  set redirection mode
		BL = type (03h printer, 04h disk)
		BH = state (00h off, 01h on)
	5F02h  get redirection list entry
		BX = redirection list index
		DS:SI -> 16-byte local device name buffer
		ES:DI -> 128-byte network name buffer
		Return: must set user's BX to device type and CX to
			stored parameter value, using AX=1218h to get
			stack frame address
	5F03h  redirect device
		BL = device type (see INT 21/AX=5F03h)
		CX = stored parameter value
		DS:SI -> ASCIZ source device name
		ES:DI -> destination ASCIZ network path + ASCIZ passwd
	5F04h  cancel redirection
		DS:SI -> ASCIZ device name or network path
	5F05h  get redirection list extended entry
		BX = redirection list index
		DS:SI -> buffer for ASCIZ source device name
		ES:DI -> buffer for destination ASCIZ network path
		Return: BH = status flag
			BL = type (03h printer, 04h disk)
			CX = stored parameter value
			BP = NETBIOS local session number
	5F06h  similar to 5F05h???

Return: CF set on error

    AX = error code (see INT 21/AH=59h)
STACK unchanged

Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h ———-2F111F—————————– INT 2F U - NETWORK REDIRECTOR - PRINTER SETUP

AX = 111Fh
STACK: WORD function
	5E02h  set printer setup
	5E03h  get printer setup
	5E04h  set printer mode
	5E05h  get printer mode

Return: CF set on error

    AX = error code (see INT 21/AH=59h)
STACK unchanged

Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h ———-2F1120—————————– INT 2F U - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS

AX = 1120h
DS = DOS DS
???

Return: CF clear (successful) Notes: called by DOS 3.1+ kernel

uses CDS array pointer and LASTDRIVE= entries in DOS list of lists

SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h ———-2F1121—————————– INT 2F U - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE

AX = 1121h
CX:DX = offset (in bytes) from end
ES:DI -> SFT
    SFT DPB field -> DPB of drive with file
SS = DOS DS

Return: CF set on error

    AL = DOS error code (see INT 21/AH=59h)
CF clear if successful
    DX:AX = new file position

Note: called by DOS 3.1+ kernel SeeAlso: AX=1228h,INT 21/AH=42h ———-2F1122—————————– INT 2F U - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK

AX = 1122h
SS = DOS DS
???

Return: ??? Note: called by DOS 3.1+ kernel ———-2F1123—————————– INT 2F U - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME

AX = 1123h
DS:SI -> ASCIZ filename to canonicalize
ES:DI -> 128-byte buffer for qualified name

Return: CF set if not resolved Notes: called by MSDOS 3.1+ kernel, but not called by DRDOS 5.0 unless the

  filename matches the name of a character device
called first when DOS attempts to resolve a filename (unless inside an
  AX=5D00h server call); if this fails, DOS resolves the name locally

SeeAlso: AX=1221h,INT 21/AH=60h ———-2F1124—————————– INT 2F U - NETWORK REDIRECTOR - PRINTER OFF???

AX = 1124h
ES:DI -> SFT
SS = DOS DS
???

Return: CX = ??? Note: called by DOS 3.1+ kernel if AX=1126h returns CF set SeeAlso: AX=1126h ———-2F1125—————————– INT 2F U - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE

AX = 1125h
STACK: WORD subfunction
	5D07h get print stream state
		Return: DL = current state
	5D08h set print stream state
		DL = new state
	5D09h finish print job

Return: CF set on error

    AX = error code (see INT 21/AH=59h)
STACK unchanged

Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h ———-2F1126—————————– INT 2F U - NETWORK REDIRECTOR - PRINTER ON/OFF???

AX = 1126h
ES:DI -> SFT for file handle 4???
SS = DOS DS???
???

Return: CF set on error Notes: called by DOS 3.1+ kernel

called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  bit 11 of the device information word in the SFT set

SeeAlso: AX=1124h ———-2F1127—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED

AX = 1127h

Return: CF set

    AX = 0001h (invalid function) (see INT 21/AH=59h)

———-2F1128—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED

AX = 1128h

Return: CF set

    AX = 0001h (invalid function) (see INT 21/AH=59h)

———-2F1129—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED

AX = 1129h

Return: CF set

    AX = 0001h (invalid function) (see INT 21/AH=59h)

———-2F112A—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 112Ah
DS = DOS DS
???

Return: ??? Note: does something to each IFS driver ———-2F112B—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL???

AX = 112Bh
SS = DOS DS
CX = function/category
DS:DX -> parameter block
STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
???

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful

Note: called by DOS 4.0 kernel ———-2F112C—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 112Ch
SS = DOS DS
SDA current SFT pointer -> SFT for file
???

Return: CF set on error ———-2F112D—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 112Dh
BL = subfunction (value of AL on INT 21)
    04h truncate open file to zero length
	ES:DI -> SFT for file
	Return: CF clear
    else ???
	Return: CX = ??? (00h or 02h for DOS 4.01)
ES:DI -> SFT
SS = DOS DS

Return: DS = DOS DS Note: called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,

  INT 21/AX=5704h

———-2F112E—————————– INT 2F U - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE

AX = 112Eh
SS = DS = DOS DS
ES:DI -> uninitialized SFT for file
STACK: WORD file attribute for created/truncated file
		low byte = file attributes
		high byte = 00h normal create/open, 01h create new file
SDA first filename pointer -> fully-qualified filename
SDA extended file open action = action code (see INT 21/AX=6C00h)
SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)

Return: CF set on error

    AX = error code
CF clear if successful
    CX = result code
	01h file opened
	02h file created
	03h file replaced (truncated)
    SFT initialized (except handle count, which DOS manages itself)

Note: called by DOS 4.0 kernel SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h ———-2F112F—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???

AX = 112Fh
SS = DOS DS
STACK: WORD function in low byte
	00h ???
	    DS:SI -> Current Directory Structure???
	    CL = drive (1=A:)
	01h ???
	    DS:SI -> ???
	    CL = file handle???
	02h ???
	    DS:SI -> Current Directory Structure???
	    DI = ???
	    CX = drive (1=A:)
???

Return: CF set on error

    AX = DOS error code (see INT 21/AH=59h)
CF clear if successful

Note: called by DOS 4.0 kernel SeeAlso: INT 21/AH=6Bh ———-2F1130—————————– INT 2F U - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT

AX = 1130h

Return: ES = CS of resident IFSFUNC ———-2F1186—————————– INT 2F - LAN Manager Enhanced DOS API - DosReadAsynchNmPipe

AX = 1186h
???

Return: ??? Note: LAN Manager enhance mode adds features beyond the standard redirector

  file/printer services

SeeAlso: AX=118Fh,INT 21/AX=5F39h ———-2F118A—————————– INT 2F - LAN Manager 2.0 DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE

AX = 118Ah
???

Return: ??? SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh ———-2F118F—————————– INT 2F - LAN Manager Enhanced DOS API - DosWriteAsynchNmPipe

AX = 118Fh
???

Return: ??? SeeAlso: AX=1186h,INT 21/AX=5F3Ah ———-2F1200—————————– INT 2F U - DOS 3+ internal - INSTALLATION CHECK

AX = 1200h

Return: AL = FFh (for compatibility with other INT 2F functions) ———-2F1201—————————– INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE

AX = 1201h
SS = DOS DS
SDA current SFT pointer -> SFT of file to close

Return: CF set on error

BX???
CX new reference count of SFT
ES:DI -> SFT for file

SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh ———-2F1202—————————– INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS

AX = 1202h
STACK: WORD vector number

Return: ES:BX → interrupt vector

STACK unchanged

———-2F1203—————————– INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT

AX = 1203h

Return: DS = segment of IBMDOS.COM/MSDOS.SYS ———-2F1204—————————– INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR

AX = 1204h
STACK: WORD character to normalize

Return: AL = normalized character (forward slash turned to backslash, all

	others unchanged)
ZF set if path separator
STACK unchanged

———-2F1205—————————– INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT

AX = 1205h
STACK: WORD character to output

Return: STACK unchanged Note: can be called only from within DOS ———-2F1206—————————– INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR

AX = 1206h
DI = error code
BP:SI -> device driver header
SS = DOS DS
STACK: WORD value to be passed to INT 24 in AX

Return: AL = 0-3 for Abort, Retry, Ignore, Fail

STACK unchanged

SeeAlso: INT 24 ———-2F1207—————————– INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED

AX = 1207h
DS:DI -> disk buffer

Return: nothing Notes: can be called only from within DOS

buffer is moved to end of buffer list (least-recently used is first)

SeeAlso: AX=120Fh ———-2F1208—————————– INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT

AX = 1208h
ES:DI -> SFT

Return: AX = original value of reference count Note: if the reference count was 1, it is set to FFFFh (since 0 indicates

  that the SFT is not in use).	It is the caller's responsibility to
  set the reference count to zero after cleaning up.

———-2F1209—————————– INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER

AX = 1209h
DS:DI -> disk buffer

Return: disk buffer marked unused, contents written to disk if buffer dirty Note: can be called only from within DOS SeeAlso: AX=120Eh,AX=1215h ———-2F120A—————————– INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT

AX = 120Ah
DS = SS = DOS DS
STACK: WORD extended error code

Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)

CF clear if retry, set otherwise
STACK unchanged

Notes: can only be called during a DOS function call, as it uses various

  fields in the SDA to set up the registers for the INT 24
reportedly sets current DPB's first root directory sector to 1

SeeAlso: INT 24 ———-2F120B—————————– INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER

AX = 120Bh
ES:DI -> system file table entry for previous open of file
STACK: WORD extended error code (should be 20h--sharing violation)

Return: CF clear if operation should be retried

CF set if operation should not be retried
    AX = error code (20h) (see INT 21/AH=59h)
STACK unchanged

Notes: can only be called during a DOS function call

should only be called if an attempt was made to open an already-open
  file contrary to the sharing rules
invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  inheritance allowed

———-2F120C—————————– INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER???

AX = 120Ch
SDA current SFT pointer -> SFT for file
DS = SS = DOS DS

Return: ES, DI, AX destroyed Notes: invoked “device open” call on device driver for SFT

changes owner of last-accessed SFT to calling process if it was opened
  via FCB
called by network redirectors

———-2F120D—————————– INT 2F U - DOS 3+ internal - GET DATE AND TIME

AX = 120Dh
SS = DOS DS

Return: AX = current date in packed format (see INT 21/AX=5700h)

DX = current time in packed format (see INT 21/AX=5700h)

SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch ———-2F120E—————————– INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED

AX = 120Eh
SS = DOS DS

Return: DS:DI → first disk buffer Note: clears “referenced” flag on all disk buffers SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh ———-2F120F—————————– INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED

AX = 120Fh
DS:DI -> disk buffer
SS = DOS DS

Return: DS:DI → next buffer in buffer list Note: indicated buffer moved to end of chain SeeAlso: AX=1207h ———-2F1210—————————– INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER

AX = 1210h
DS:DI -> first disk buffer to check

Return: ZF clear if found

    DS:DI -> first unreferenced disk buffer
ZF set if not found

SeeAlso: AX=120Eh ———-2F1211—————————– INT 2F U - DOS 3+ internal - 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

SeeAlso: AX=121Eh,AX=1221h ———-2F1212—————————– INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING

AX = 1212h
ES:DI -> ASCIZ string

Return: CX = length of string SeeAlso: AX=1225h ———-2F1213—————————– INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER

AX = 1213h
STACK: WORD character to convert to uppercase

Return: AL = uppercase character

STACK unchanged

———-2F1214—————————– INT 2F U - DOS 3+ internal - 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 ———-2F1215—————————– INT 2F U - DOS 3+ internal - FLUSH BUFFER

AX = 1215h
DS:DI -> disk buffer
SS = DOS DS
STACK: WORD drives for which to skip buffer
	ignore buffer if drive same as high byte, or bytes differ and
	the buffer is for a drive OTHER than that given in low byte

Return: STACK unchanged Note: can be called only from within DOS SeeAlso: AX=1209h ———-2F1216—————————– INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE

AX = 1216h
BX = system file table entry number

Return: CF clear if successful

    ES:DI -> system file table entry
CF set if BX greater than FILES=

SeeAlso: AX=1220h ———-2F1217—————————– INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE

AX = 1217h
SS = DOS DS
STACK: WORD drive (0 = A:, 1 = B:, etc)

Return: CF set on error

    (drive > LASTDRIVE)
CF clear if successful
    DS:SI -> current directory structure for specified drive
STACK unchanged

SeeAlso: AX=1219h ———-2F1218—————————– INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS

AX = 1218h

Return: DS:SI → saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack) Note: only valid while within DOS ———-2F1219—————————– INT 2F U - DOS 3+ internal - SET DRIVE???

AX = 1219h
SS = DOS DS
STACK: WORD drive (0 = default, 1 = A:, etc)

Return: ???

STACK unchanged

Notes: calls AX=1217h

builds a current directory structure if inside server call
  (INT 21/AX=5D00h)

SeeAlso: AX=1217h,AX=121Fh ———-2F121A—————————– INT 2F U - DOS 3+ internal - GET FILE'S DRIVE

AX = 121Ah
DS:SI -> filename

Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)

DS:SI -> filename without leading X: (if present)

SeeAlso: INT 21/AH=19h,INT 21/AH=60h ———-2F121B—————————– INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY

AX = 121Bh
CL = year - 1980

Return: AL = number of days in February Note: requires DS to be set to the DOS code segment SeeAlso: INT 21/AH=2Bh ———-2F121C—————————– INT 2F U - DOS 3+ internal - CHECKSUM MEMORY

AX = 121Ch
DS:SI -> start of memory to checksum
CX = number of bytes
DX = initial checksum
SS = DOS DS

Return: AX, CX destroyed

DX = checksum
DS:SI -> first byte after checksummed range

Note: used by DOS to determine day count since 1/1/80 given a date SeeAlso: AX=121Dh ———-2F121D—————————– INT 2F U - DOS 3+ internal - SUM MEMORY

AX = 121Dh
DS:SI -> memory to add up
CX = 0000h
DX = limit

Return: AL = byte which exceeded limit

CX = number of bytes before limit exceeded
DX = remainder after adding first CX bytes
DS:SI -> byte beyond the one which exceeded the limit

Note: used by DOS to determine year or month given day count since 1/1/80 SeeAlso: AX=121Ch ———-2F121E—————————– INT 2F U - DOS 3+ internal - COMPARE FILENAMES

AX = 121Eh
DS:SI -> first ASCIZ filename
ES:DI -> second ASCIZ filename

Return: ZF set if filenames equivalent, ZF clear if not SeeAlso: AX=1211h,AX=1221h ———-2F121F—————————– INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE

AX = 121Fh
SS = DOS DS
STACK: WORD drive letter

Return: ES:DI → current directory structure (will be overwritten by next call)

STACK unchanged

———-2F1220—————————– INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY

AX = 1220h
BX = file handle

Return: CF set on error

    AL = 6 (invalid file handle)
CF clear if successful
    ES:DI -> JFT entry for file handle in current process

Note: the byte pointed at by ES:DI contains the number of the SFT for the

  file handle, or FFh if the handle is not open

SeeAlso: AX=1216h,AX=1229h ———-2F1221—————————– INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME

AX = 1221h
DS:SI -> file name to be fully qualified
ES:DI -> 128-byte buffer for resulting canonical file name
SS = DOS DS

Return: (see INT 21/AH=60h) Note: identical to INT 21/AH=60h SeeAlso: AX=1123h,INT 21/AH=60h ———-2F1222—————————– INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO

AX = 1222h
SS = DOS data segment
SS:SI -> 4-byte records
	BYTE	error code, FFh = last record
	BYTE	error class, FFh = don't change
	BYTE	suggested action, FFh = don't change
	BYTE	error locus, FFh = don't change
SDA error code set

Return: SI destroyed

SDA error class, error locus, and suggested action fields set

Note: can be called only from within DOS SeeAlso: AX=122Dh,INT 21/AH=59h ———-2F1223—————————– INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE

AX = 1223h
SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
SDA+22Bh (DOS 4.0x) = eight-character blank-padded name

Return: CF set if no character device by that name found

CF clear if found
    BH = low byte of device attribute word

Note: can only be called from within DOS (assumes DS=SS=DOS DS) SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh ———-2F1224—————————– INT 2F U - DOS 3+ internal - DELAY

AX = 1224h
SS = DOS DS

Return: after delay set by INT 21/AX=440Bh, unless in server call

  (INT 21/AX=5D00h)

Note: delay is dependent on the processor speed, and is skipped entirely if

  inside a server call

SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h ———-2F1225—————————– INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING

AX = 1225h
DS:SI -> ASCIZ string

Return: CX = length of string SeeAlso: AX=1212h ———-2F1226—————————– INT 2F U - DOS 3.3+ internal - OPEN FILE

AX = 1226h
CL = access mode
DS:DX -> ASCIZ filename

Return: CF set on error

    AL = error code (see INT 21/AH=59h)
CF clear if successful
    AX = file handle

Notes: can only be called from within DOS (assumes SS=DOS DS)

equivalent to INT 21/AH=3Dh	

SeeAlso: AX=1227h,INT 21/AH=3Dh ———-2F1227—————————– INT 2F U - DOS 3.3+ internal - CLOSE FILE

AX = 1227h
BX = file handle

Return: CF set on error

    AL = 06h invalid file handle
CF clear if successful

Notes: can only be called from within DOS (assumes SS=DOS DS)

equivalent to INT 21/AH=3Eh

SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh ———-2F1228BP4200———————– INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER

AX = 1228h
BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
BX = file handle
CX:DX = offset in bytes
SS = DOS DS

Return: as for INT 21/AH=42h Notes: equivalent to INT 21/AH=42h, but may only be called from inside a DOS

  function call
sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  LSEEK, and restores frame pointer

SeeAlso: INT 21/AH=42h ———-2F1229—————————– INT 2F U - DOS 3.3+ internal - READ FROM FILE

AX = 1229h
BX = file handle
CX = number of bytes to read
DS:DX -> buffer
SS = DOS DS

Return: as for INT 21/AH=3Fh Note: equivalent to INT 21/AH=3Fh, but may only be called when already inside

  a DOS function call

SeeAlso: AX=1226h,INT 21/AH=3Fh ———-2F122A—————————– INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT

AX = 122Ah
BX = entry point to set (0001h or 0002h)
DS:SI -> FASTOPEN entry point
	(entry point not set if SI = FFFFh for DOS 4+)

Return: CF set if specified entry point already set Notes: entry point in BX is ignored under DOS 3.30

both entry points set to same handler by DOS 4.01

DOS 3.30+ FASTOPEN is called with:

AL = 01h  ???
    CX = ??? seems to be offset
    DI = ??? seems to be offset
    SI = offset in DOS DS of filename
AL = 02h  ???
AL = 03h  open file???
    SI = offset in DOS DS of filename
AL = 04h  ???
    AH = subfunction (00h,01h,02h)
    ES:DI -> ???
    CX = ??? (subfunctions 01h and 02h only)

Returns: CF set on error or not installed Note: function 03h calls function 01h first

PCDOS 4.01 FASTOPEN is additionally called with:

AL = 04h ???
    AH = 03h
    ???
AL = 05h ???
AL = 0Bh ???
AL = 0Ch ???
AL = 0Dh ???
AL = 0Eh ???
AL = 0Fh ???
AL = 10h ???

MSDOS 5.0 FASTOPEN is additionally called with:

AL = 04h ???
    AH = 03h
    ???
AL = 05h ???
    DL = drive (00h = A:)
    ???
AL = 06h ???

———-2F122B—————————– INT 2F U - DOS 3.3+ internal - IOCTL

AX = 122Bh
BP = 44xxh
SS = DOS DS
additional registers as appropriate for INT 21/AX=44xxh

Return: as for INT 21/AH=44h Notes: equivalent to INT 21/AH=44h, but may only be called when already inside

  a DOS function call
sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  IOCTL, and restores frame pointer

SeeAlso: INT 21/AH=44h ———-2F122C—————————– INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN

AX = 122Ch

Return: BX:AX → header of second device driver (NUL is first) in driver chain SeeAlso: INT 21/AH=52h ———-2F122D—————————– INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE

AX = 122Dh

Return: AX = current extended error code SeeAlso: AX=1222h,INT 21/AH=59h ———-2F122E—————————– INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES

AX = 122Eh
DL = subfunction
    00h get standard DOS error table (errors 00h-12h,50h-5Bh)
	Return: ES:DI -> error table
    01h set standard DOS error table
	ES:DI -> error table
    02h get parameter error table (errors 00h-0Ah)
	Return: ES:DI -> error table
    03h set parameter error table
	ES:DI -> error table
    04h get critical/SHARE error table (errors 13h-2Bh)
	Return: ES:DI -> error table
    05h set critical/SHARE error table
	ES:DI -> error table
    06h get ??? error table
	Return: ES:DI -> error table or 0000h:0000h
    07h set ??? error table
	ES:DI -> error table
    08h get error message retriever (see below)
	Return: ES:DI -> FAR procedure to fetch error message 
    09h set ??? error table
	ES:DI -> error table

Notes: if the returned segment on a “get” is 0001h, then the offset specifies

  the offset of the error message table within COMMAND.COM, and the
  procedure returned by DL=08h should be called
DOS 5.0 COMMAND.COM does not allow setting any of the addresses; they
  are always returned with segment 0001h

SeeAlso: AX=0500h,INT 21/AH=59h

Format of DOS 4.x error table: Offset Size Description 00h BYTE FFh 01h 2 BYTEs 04h,00h (DOS version???) 03h BYTE number of error headers following 04h 2N WORDs table of all error headers for table

	Offset	Size	Description
	 00h	WORD	error message number
	 02h	WORD	offset of error message from start of header
			error messages are count byte followed by msg

Note: DOS 5 error tables consist of one word per error number; each word

  contains either the offset of a counted string or 0000h

Call error retrieval function with:

AX = error number
DI = offset of error table

Return: ES:DI → error message (counted string) Notes: this function needs to access COMMAND.COM if the messages were not

  loaded into memory permanently with /MSG; the caller should assume
  that the returned message will be overwritten by the next call of
  the function
supported by DR-DOS 5.0

———-2F122F—————————– INT 2F U - DOS 4+ internal - SET DOS VERSION NUMBER TO RETURN

AX = 122Fh
DX = DOS version number (0000h = return true DOS version)

Note: not available under DR-DOS 5.0 SeeAlso: INT 21/AH=30h ———-2F13——————————- INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER

AH = 13h
DS:DX -> interrupt handler disk driver calls on read/write
ES:BX = address to restore INT 13 to on system halt (exit from root
	 shell) or warm boot (INT 19)

Return: DS:DX from previous invocation of this function

ES:BX from previous invocation of this function

Notes: IO.SYS hooks INT 13 and inserts one or more filters ahead of the

  original INT 13 handler.  The first is for disk change detection
  on floppy drives, the second is for tracking formatting calls and
  correcting DMA boundary errors, the third is for working around
  problems in a particular version of IBM's ROM BIOS
before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  also points there unless IO.SYS has installed a special filter for
  hard disk reads (on systems with model byte FCh and BIOS date
  "01/10/84" only), in which case it points at the special filter
most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  functions are still invoked via an INT 13 instruction
this is a dangerous security loophole for any virus-monitoring software
  which does not trap this call (many Bulgarian viruses are known to
  use it to get the original ROM entry point)

SeeAlso: INT 13/AH=01h,INT 19 ———-2F1400—————————– INT 2F - NLSFUNC.COM - INSTALLATION CHECK

AX = 1400h

Return: AL = 00h not installed, OK to install

     01h not installed, not OK
     FFh installed

Notes: called by DOS v3.3+ kernel

supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
supported by DR-DOS 5.0
documented for MS-DOS 5.0, but undocumented in prior versions

———-2F1401—————————– INT 2F U - NLSFUNC.COM - CHANGE CODE PAGE

AX = 1401h
DS:SI -> internal code page structure (see below)
BX = new code page
DX = country code???

Return: AL = status

     00h successful
     else DOS error code

Note: called by DOS v3.3+ kernel SeeAlso: INT 21/AH=66h

Format of DOS 3.30 internal code page structure: Offset Size Description 00h 8 BYTEs ??? 08h 64 BYTEs name of country information file 48h WORD system code page 4Ah WORD number of supported subfunctions 4Ch 5 BYTEs data to return for INT 21/AX=6502h 51h 5 BYTEs data to return for INT 21/AX=6504h 56h 5 BYTEs data to return for INT 21/AX=6505h 5Bh 5 BYTEs data to return for INT 21/AX=6506h 60h 41 BYTEs data to return for INT 21/AX=6501h ———-2F1402—————————– INT 2F U - NLSFUNC.COM - GET COUNTRY INFO

AX = 1402h
BP = subfunction (same as AL for INT 21/AH=65h)
BX = code page
DX = country code
DS:SI -> internal code page structure (see AX=1401h)
ES:DI -> user buffer
CX = size of user buffer

Return: AL = status

    00h successful
    else DOS error code

Notes: called by DOS v3.3+ kernel on INT 21/AH=65h

code page structure apparently only needed for COUNTRY.SYS pathname

SeeAlso: AX=1403h,AX=1404h,INT 21/AH=65h ———-2F1403—————————– INT 2F U - NLSFUNC.COM - SET COUNTRY INFO

AX = 1403h
DS:SI -> internal code page structure (see AX=1401h)
BX = code page
DX = country code

Return: AL = status

     ???

Note: called by DOS v3.3+ kernel on INT 21/AH=38h SeeAlso: AX=1402h,AX=1404h,INT 21/AH=38h“SET” ———-2F1404—————————– INT 2F U - NLSFUNC.COM - GET COUNTRY INFO

AX = 1404h
BX = code page
DX = country code
DS:SI -> internal code page structure (see AX=1401h)
ES:DI -> user buffer

Return: AL = status

     ???

Notes: called by DOS v3.3+ kernel on INT 21/AH=38h

code page structure apparently only needed for COUNTRY.SYS pathname

SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h“GET” ———-2F14FE—————————– INT 2F U - DR-DOS 5.0 NLSFUNC - ???

AX = 14FEh
DI = ???
???

Return: ??? Note: DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,

  or FFh on entry.

SeeAlso: AX=14FFh ———-2F14FF—————————– INT 2F U - DR-DOS 5.0 NLSFUNC - ???

AX = 14FFh
???

Return: ??? Note: DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,

  or FFh on entry.

SeeAlso: AX=14FEh ———-2F1500—————————– INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK

AX = 1500h

Return: AX = FFFFh

ES:DI -> ??? (graphics data?)

Note: this installation check conflicts with the CD-ROM Extensions

  installation check; moved to AX=AC00h in later versions

SeeAlso: AX=AC00h ———-2F1500BX0000———————– INT 2F - CD-ROM - INSTALLATION CHECK

AX = 1500h
BX = 0000h

Return: BX = number of CD-ROM drive letters used

CX = starting drive letter (0=A:)

Notes: this installation check DOES NOT follow the format used by other

  software
this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  installation check

SeeAlso: INT 2F/AX=D000h“Lotus” ———-2F1501—————————– INT 2F - CD-ROM - GET DRIVE DEVICE LIST

AX = 1501h
ES:BX -> buffer 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

———-2F1502—————————– INT 2F - CD-ROM - 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 CD-ROM drive

    AX = 15 (invalid drive)
CF clear if successful

SeeAlso: AX=1503h ———-2F1503—————————– INT 2F - CD-ROM - 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 CD-ROM drive

    AX = 15 (invalid drive)
CF clear if successful

SeeAlso: AX=1502h ———-2F1504—————————– INT 2F - CD-ROM - 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 CD-ROM drive

    AX = 15 (invalid drive)
CF clear if successful

———-2F1505—————————– INT 2F - CD-ROM - 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)

———-2F1506—————————– INT 2F - CD-ROM - TURN DEBUGGING ON

AX = 1506h
BX = debugging function to enable

Note: reserved for development SeeAlso: AX=1507h ———-2F1507—————————– INT 2F - CD-ROM - TURN DEBUGGING OFF

AX = 1507h
BX = debugging function to disable

Note: reserved for development SeeAlso: AX=1506h ———-2F1508—————————– INT 2F - CD-ROM - 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)
CF clear if successful

SeeAlso: AX=1509h

INT 2F - CD-ROM - 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 SeeAlso: AX=1508h ———-2F150A—————————– INT 2F - CD-ROM - RESERVED

AX = 150Ah

———-2F150B—————————– INT 2F - CD-ROM v2.00+ - DRIVE CHECK

AX = 150Bh
CX = drive number (0=A:)

Return: BX = ADADh if MSCDEX.EXE installed

    AX = 0000h if drive not supported
	nonzero if supported

SeeAlso: AX=150Dh ———-2F150C—————————– INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION

AX = 150Ch

Return: BH = major version

BL = minor version

Note: MSCDEX.EXE versions prior to 2.00 return BX=0 ———-2F150D—————————– INT 2F - CD-ROM v2.00+ - GET CD-ROM 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

SeeAlso: AX=150Bh ———-2F150E—————————– INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE

AX = 150Eh
BX = subfunction
    00h get preference
	DX = 0000h
	Return: DX = preference settings
    01h set preference
	DH = volume descriptor preference
	    01h = primary volume descriptor
	    02h = supplementary volume descriptor
	DL = supplementary volume descriptor preference
	    01h = shift-Kanji
CX = drive number (0=A:)

Return: CF set on error

    AX = error code (15=invalid drive,1=invalid function)
CF clear if successful

———-2F150F—————————– INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY

AX = 150Fh
CL = drive number (0=A:)
CH bit 0 = copy flag
	clear if direct copy
	set if copy to structure which removed ISO/High Sierra diffs
ES:BX -> ASCIZ path name
SI:DI -> buffer for directory entry (see below)
	 minimum 255 bytes for direct copy

Return: CF set on error

    AX = error code
CF clear if succesful
    AX = disk format (0=High Sierra,1=ISO 9660)

Format of directory entry (direct copy): Offset Size Description 00h BYTE length of directory entry 01h BYTE length of XAR in Logical Block Numbers 02h DWORD LBN of data, Intel (little-endian) format 06h DWORD LBN of data, Motorola (big-endian) format 0Ah DWORD length of file, Intel format 0Eh DWORD length of file, Motorola format —High Sierra— 12h 6 BYTEs date and time 18h BYTE bit flags 19h BYTE reserved —ISO 9660— 12h 7 BYTEs date and time 19h BYTE bit flags —both formats— 1Ah BYTE interleave size 1Bh BYTE interleave skip factor 1Ch WORD volume set sequence number, Intel format 1Eh WORD volume set sequence number, Motorola format 20h BYTE length of file name 21h N BYTEs file name

BYTE (optional) padding if filename is odd length
    N BYTEs system data

Format of directory entry (canonicalized): Offset Size Description 00h BYTE length of XAR in Logical Block Numbers 01h DWORD Logical Block Number of file start 05h WORD size of disk in logical blocks 07h DWORD file length in bytes 0Bh 7 BYTEs date and time 12h BYTE bit flags 13h BYTE interleave size 14h BYTE interleave skip factor 15h WORD volume set sequence number 17h BYTE length of file name 18h 38 BYTEs ASCIZ filename 3Eh WORD file version number 40h BYTE number of bytes of system use data 41h 220 BYTEs system use data ———-2F1510—————————– INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST

AX = 1510h
CX = CD-ROM drive letter (0 = A, 1 = B, etc)
ES:BX -> CD-ROM device driver request header (see AX=0802h)

———-2F1600—————————– INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INSTALLATION CHECK

AX = 1600h

Return: AL = 00h if Windows 3.x enhanced mode or Windows/386 2.x not running

AL = 80h if Windows 3.x enhanced mode or Windows/386 2.x not running
AL = 01h if Windows/386 2.x running
AL = FFh if Windows/386 2.x running
AL = anything else
    AL = Windows major version number >= 3
    AH = Windows minor version number

Note: INT 2F/AH=16h comprises an API for non-Windows programs (DOS device

  drivers, TSRs, and applications) to cooperate with multitasking
  Windows/386 2.x and Windows 3.x and higher enhanced mode.
certain calls are also supported in the Microsoft 80286 DOS extender in
  Windows standard mode

SeeAlso: AX=4680h ———-2F1602—————————– INT 2F - MS WINDOWS/386 2.x - GET API ENTRY POINT

AX = 1602h

Return: ES:DI → Windows/386 2.x API procedure entry point Notes: this interface is supported in Windows 3.x only for 2.x compatibility

to get the current virtual machine (VM) ID in Windows/386 2.x:
    AX = 0000h
    ES:DI -> return address
    JUMP to address returned from INT 2F/AX=1602h
After JUMP, at return address:
    BX = current VM ID.

SeeAlso: AX=0C20h ———-2F1603—————————– INT 2F - RM Nimbus MSDOS 3.3 - ???

AX = 1603h

Return: AX = 5248h ('RH')

DS:SI -> first byte after INT 2F handler in IBMBIO.COM

———-2F1605—————————– INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST

AX = 1605h
ES:BX = 0000h:0000h
DS:SI = 0000h:0000h
CX = 0000h
DX = flags
    bit 0 = 0 if Windows enhanced-mode initialization
    bit 0 = 1 if Microsoft 286 DOS extender initialization
    bits 1-15 reserved (undefined)
DI = version number (major in upper byte, minor in lower)

Return: CX = 0000h if okay for Windows to load

CX <> 0 if Windows should not load
ES:BX -> startup info structure (see below)
DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h

Notes: the Windows enhanced mode loader and Microsoft 286 DOS extender will

  broadcast an INT 2F/AX=1605h call when initializing.	Any DOS device
  driver or TSR can watch for this broadcast and return the appropriate
  values.  If the driver or TSR returns CX <> 0, it is also its
  responsibility to display an error message.
each handler must first chain to the prior INT 2F handler with
  registers unchanged before processing the call
if the handler requires local data on a per-VM basis, it must store the
  returned ES:BX in the "next" field of a startup info structure and
  return a pointer to that structure in ES:BX
a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  already nonzero, the TSR must fail the initialization by setting CX
  nonzero

SeeAlso: AX=1606h,AX=1608h,AX=4B05h

Format of Startup Information Structure: Offset Size Description 00h 2 BYTEs major, minor version of info structure 02h DWORD pointer to next startup info structure or 0000h:0000h 06h DWORD pointer to ASCIZ name of virtual device file or 0000h:0000h 0Ah DWORD virtual device reference data (only used if above nonzero) 0Eh DWORD pointer to instance data records or 0000h:0000h

Format of one Instance Item in array: Offset Size Description 00h DWORD address of instance data (end of array if 0000h:0000h) 04h WORD size of instance data

Virtual mode enable/disable procedure called with:

AX = 0000h disable V86 mode
AX = 0001h enable V86 mode
interrupts disabled

Return: CF set on error

CF clear if successful
interrupts disabled

———-2F1606—————————– INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST

AX = 1606h
DX = flags
    bit 0 = 0 if Windows enhanced-mode exit
    bit 0 = 1 if Microsoft 286 DOS extender exit
    bits 1-15 reserved (undefined)

Notes: if the init broadcast fails (AX=1605h returned CX <> 0), then this

  broadcast will be issued immediately.
this call will be issued in real mode

SeeAlso: AX=1605h,AX=1609h ———-2F1607—————————– INT 2F - MS WINDOWS - VIRTUAL DEVICE CALL OUT API

AX = 1607h
BX = virtual device ID (see INT 2F/AX=1684h)

Notes: more of a convention than an API, this call specifies a standard

  mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  to DOS device drivers and TSRs
VNETBIOS calls this function and then checks ES:DI to determine whether
  the NetBIOS has any extensions Windows should know about
VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  nonzero; if yes, it will not automatically virtualize the mouse
  driver.  This would be used if MOUSE.COM already virtualizes
  itself using the Windows API.

SeeAlso: AX=0C20h,AX=1605h,AX=1684h ———-2F1607BX0015———————– INT 2F - DOS 5.0 kernel - “DOSMGR” VIRTUAL DEVICE SUPPORT

AX = 1607h
BX = 0015h (VxD identifier of "DOSMGR")
CX = function
    0000h ???
    	Return: CX = 0001h
		ES:BX -> ??? data
    0001h ???
    	DX = ???
	Return: AX = B97Ch
		BX = value of DX on call
		DX = A2ABh
    0002h NOP
    0003h ???
    	DX = ??? (bit 0 significant)
	Return: if DX bit 0 set:
			AX = B97Ch
			CX = ??? (0058h)
			DX = A2ABh
		if DX bit 0 clear:
			all registers preserved
    0004h ???
    	Return: DX = 0000h
    0005h get device driver size
    	ES = segment of device driver
	Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
		DX:AX = A2ABh:B97Ch if successful
		    BX:CX = size of device driver in bytes

———-2F1608—————————– INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST

AX = 1608h

Notes: called after all installable devices have been initialized

real-mode software may be called between the Windows enhanced-mode init
  call (AX=1605h) and this call; the software must detect this
  situation

SeeAlso: AX=1605h,AX=1609h ———-2F1609—————————– INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST

AX = 1609h

Note: called at the beginning of a normal exit sequence; not made in the

  event of a fatal system crash

SeeAlso: AX=1606h,AX=1608h ———-2F160A—————————– INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE

AX = 160Ah
???

Return: ??? ———-2F160B—————————– INT 2F - MS Windows 3.1 - IDENTIFY TSRs

AX = 160Bh
???

Return: ???

Format of TSR-to-Windows communication structure: Offset Size Description 00h DWORD pointer to next structure 04h WORD PSP segment 06h WORD API version ID (0100h) 08h WORD EXEC flags bit 0: “WINEXEC”

	bit 1: "LOADLIBRARY"
	bit 2: "OPENDRIVER"

0Ah WORD “exec_cmd_show” 0Ch DWORD “exec_cmd” 10h 4 BYTEs reserved (0) 14h DWORD TSR ID block 18h DWORD TSR data block ———-2F160C—————————– INT 2F - MS Windows 3.1 - DETECT ROMs

AX = 160Ch
???

Return: ??? Note: used by ROM Windows ———-2F1680—————————– INT 2F - MS WINDOWS, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE

AX = 1680h

Return: AL = 00h if the call is supported

AL = 80h (unchanged) if the call is not supported

Notes: programs can use this function in idle loops to enhance performance

  under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  applications
does not block the program; it just gives up the remainder of the time
  slice
should not be used by Windows-specific programs

SeeAlso: INT 15/AX=1000h ———-2F1681—————————– INT 2F - MS WINDOWS 3+ - BEGIN CRITICAL SECTION

AX = 1681h

Notes: used to prevent a task switch from occurring

should be followed by an INT 2F/AX=1682h call as soon as possible
nested calls are allowed, and must be followed by an appropriate number
  of "end critical section" calls
not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  and increment by hand.

SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h ———-2F1682—————————– INT 2F - MS WINDOWS 3+ - END CRITICAL SECTION

AX = 1682h

Notes: not supported in Windows/386 2.x. Get InDOS flag with INT 21/AH=34h

  and decrement by hand, taking care not to decrement InDOS flag
  through zero

SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h ———-2F1683—————————– INT 2F - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID

AX = 1683h

Return: BX = current virtual machine (VM) ID Notes: Windows itself currently runs in VM 1, but this can't be relied upon

VM IDs are reused when VMs are destroyed
an ID of 0 will never be returned

SeeAlso: AX=1684h,AX=1685h,AX=168Bh ———-2F1684—————————– INT 2F - MS WINDOWS - GET DEVICE API ENTRY POINT

AX = 1684h
BX = virtual device (VxD) ID (see below)
ES:DI = 0000h:0000h

Return: ES:DI → VxD API entry point, or 0:0 if the VxD does not support an API Note: some Windows enhanced-mode virtual devices provide services that

  applications can access.  For example, the Virtual Display Device
  (VDD) provides an API used in turn by WINOLDAP.

SeeAlso: AX=1683h

Values for VxD ID: 01h VMM Virtual Machine Manager 02h Debug 03h VPICD Virtual Prog. Interrupt Controller (PIC) Device 04h VDMAD Virtual Direct Memory Access (DMA) Device 05h VTD Virtual Timer Device 06h V86MMGR Virtual 8086 Mode Device 07h PAGESWAP Paging Device 08h Parity 09h Reboot 0Ah VDD Virtual Display Device (GRABBER) 0Bh VSD Virtual Sound Device 0Ch VMD Virtual Mouse Device 0Dh VKD Virtual Keyboard Device 0Eh VCD Virtual COMM Device 0Fh VPD Virtual Printer Device 10h VHD Virtual Hard Disk Device 11h VMCPD 12h EBIOS Reserve EBIOS page (e.g., on PS/2) 13h BIOSXLAT Map ROM BIOS API between prot & V86 mode 14h VNETBIOS Virtual NetBIOS Device 15h DOSMGR 16h WINLOAD 17h SHELL 18h VMPoll 19h VPROD 1Ah DOSNET assures network integrity across VMs 1Bh VFD Virtual Floppy Device 1Ch VDD2 Secondary display adapter 1Dh WINDEBUG 1Eh TSRLoad TSR instance utility Note: The high bit of the VxD ID is reserved for future use. The

next 10 bits are the OEM # which is assigned by Microsoft. The
low 5 bits are the device number. 

Call VTD.386 entry point with:

AX = 0000h get VTD version number
    Return: AH = major version
    	    AL = minor version
AX = 0100h get current clock tick time
    Return: EDX:EAX = clock tick time in 840ns units since Windows was
    			started
AX = 0101h get current system time in milliseconds
    Return: EAX = time in milliseconds that Windows has been running
AX = 0102h get current virtual machine time
    Return: EAX = cumulative amount of time the virtual machine has
    		been active, in milliseconds

Note: should only be called directly when TOOLHELP.DLL TimerCount() cannot

  be called

———-2F1685—————————– INT 2F - MS WINDOWS - SWITCH VMs AND CALLBACK

AX = 1685h
BX = VM ID of virtual machine to switch to
CX = flags
	bit 0 wait until interrupts enabled
	bit 1 wait until critical section unowned
	bits 2-15 reserved (zero)
DX:SI = priority boost (see VMM.INC)
ES:DI -> FAR procedure to callback

Return: CF set on error

    AX = error code
	01h invalid VM ID
	02h invalid priority boost
	03h invalid flags
CF clear if successful
    event will be or has been called

Notes: some DOS devices, such as networks, need to call functions in a

  specific VM. This call forces the appropriate VM to be installed.
the callback procedure must preserve all registers and return with IRET

SeeAlso: AX=1683h,INT 15/AX=1117h ———-2F1686—————————– INT 2F - DOS Protected-Mode Interface - DETECT MODE

AX = 1686h

Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)

AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)

SeeAlso: AX=1687h ———-2F1687—————————– INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK

AX = 1687h

Return: AX = 0000h if installed

    BX = flags
	bit 0: 32-bit programs supported
    CL = processor type (02h=80286, 03h=80386, 04h=80486)
    DH = DPMI major version
    DL = two-digit DPMI minor version
    SI = number of paragraphs of DOS extender private data
    ES:DI -> DPMI mode-switch entry point
AX nonzero if not installed

SeeAlso: AX=1686h

Call mode switch entry point with:

AX = flags
    bit 0: set if 32-bit program
ES = real mode segment of buffer for DPMI private data (ignored if
	SI was zero)

Return: CF set on error

    program still in real mode
    AX = error code (DPMI 1.0+)
       8011h unable to allocate all necessary descriptors
       8021h 32-bit program specified, but 16-bit DPMI host
CF clear if successful
    CS = 16-bit selector corresponding to real-mode CS
    SS = selector corresponding to real-mode SS (64K limit)
    DS = selector corresponding to real-mode DS (64K limit)
    ES = selector to program's PSP (100h byte limit)
    FS = GS = 0
    high word of ESP = 0 if 32-bit program
    program now in protected mode

Note: this entry point is only called for the initial switch to protected

  mode

———-2F1688—————————– INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT

AX = 1688h

Return: AX = status??? (0000h for 386MAX)

BX = selector for ???

———-2F1689—————————– INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL

AX = 1689h
???

Return: ??? ———-2F168A—————————– INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT

AX = 168Ah
DS:(E)SI = selector:offset of ASCIZ vendor name

Return: AL = status

    00h successful
       ES:(E)DI -> extended API entry point
    8Ah unsuccessful

Notes: the vendor name is used to determine which entry point to return; it is

  case-sensitive
available in protected mode only
32-bit applications use ESI and EDI, 16-bit applications use SI and DI
this call is present but not documented for DPMI 0.9

SeeAlso: INT 31/AX=0A00h

Vendor names: “MS-DOS” ??? and 386MAX v6.00+ “386MAX” 386MAX v6.00+ ———-2F168B—————————– INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE

AX = 168Bh
???

Return: ??? SeeAlso: AX=1683h ———-2F168C—————————– INT 2F - MS Windows 3.1 - RESTART COMMAND

AX = 168Ch
???

Return: ??? Note: WIN.COM executes specified application ———-2F1700—————————– INT 2F - MS WINDOWS “WINOLDAP” - IDENTIFY WinOldAp VERSION

AX = 1700h

Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard

AX <> 1700h
	AL = WINOLDAP major version
	AH = WINOLDAP minor version

Notes: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting

  "old" (character-mode) application access to Dynamic Data Exchange,
  menus, and the Windows clipboard.
this installation check DOES NOT follow the format used by other
  software

———-2F1701—————————– INT 2F - MS WINDOWS “WINOLDAP” - OPEN CLIPBOARD

AX = 1701h

Return: AX <> 0 success

AX = 0	 clipboard is already open

———-2F1702—————————– INT 2F - MS WINDOWS “WINOLDAP” - EMPTY CLIPBOARD

AX = 1702h

Return: AX <> 0 clipboard has been emptied

AX = 0	 failure

———-2F1703—————————– INT 2F - MS WINDOWS “WINOLDAP” - SET CLIPBOARD DATA

AX = 1703h
DX = clipboard format supported by WinOldAp:
	01h text
	02h bitmap
	03h metafile picture
	04h SYLK
	05h DIF
	06h TIFF
	07h OEM text
ES:BX -> data (see below for formats)
SI:CX = size of data

Return: AX <> 0 data copied into the Clipboard

AX = 0 failure

Format of bitmap: Offset Size Description 00h WORD type (0000h) 02h WORD width of bitmap in pixels 04h WORD height of bitmap in pixels 06h WORD bytes per line 08h BYTE number of color planes 09h BYTE number of adjacent color bits in pixel 0Ah DWORD pointer to start of data 0Eh WORD width in 0.1mm units 10h WORD height in 0.1mm units 12h N BYTEs bitmap data

Format of metafile picture: Offset Size Description 00h WORD mapping mode 02h WORD X extent 04h WORD Y extent 06h WORD picture data ———-2F1704—————————– INT 2F - MS WINDOWS “WINOLDAP” - GET CLIPBOARD DATA SIZE

AX = 1704h
DX = clipboard format supported by WinOldAp (see AX=1703h)

Return: DX:AX = size of data in bytes, including any headers Failure: DX:AX = 0 no data in this format in the Clipboard ———-2F1705—————————– INT 2F - MS WINDOWS “WINOLDAP” - GET CLIPBOARD DATA

AX = 1705h
DX = clipboard format supported by WinOldAp (see AX=1703h)
ES:BX -> buffer

Return: AX <> 0 success

AX = 0	 error, or no data in this format in Clipboard

———-2F1708—————————– INT 2F - MS WINDOWS “WINOLDAP” - CloseClipboard

AX = 1708h

Return: AX <> 0 success

AX = 0 failure

———-2F1709—————————– INT 2F - MS WINDOWS “WINOLDAP” - COMPACT CLIPBOARD

AX = 1709h
SI:CX = desired size in bytes

Return: DX:AX = number of bytes in largest block of free memory Note: WinOldAp is responsible for including the size of any headers ———-2F170A—————————– INT 2F - MS WINDOWS “WINOLDAP” - GET DEVICE CAPABILITIES

AX = 170Ah
DX = GDI information index
    00h device driver version
    02h device classification
    04h width in mm
    06h height in mm
    08h width in pixels
    0Ah height in pixels
    0Ch bits per pixel
    0Eh number of bit planes
    10h number of brushes supported by device
    12h number of pens supported by device
    14h number of markers supported by device
    16h number of fonts supported by device
    18h number of colors
    1Ah size required for device descriptor
    1Ch curve capabilities
    1Eh line capabilities
    20h polygon capabilities
    22h text capabilities
    24h clipping capabilities
    26h bitblt capabilities
    28h X aspect
    2Ah Y aspect
    2Ch length of hypotenuse of aspect
    58h logical pixels per inch of width
    5Ah logical pixels per inch of height

Return: AX = integer value of the desired item

	device classification
	    00h vector plotter
	    01h raster display
	    02h raster printer
	    03h raster camera
	    04h character-stream, PLP
	    05h Metafile, VDM
	    06h display-file
	curve capabilities
	    bit 0  circles
	    bit 1  pie wedges
	    bit 2  chord arcs
	    bit 3  ellipses
	    bit 4  wide lines
	    bit 5  styled lines
	    bit 6  wide styled lines
	    bit 7  interiors
	line capabilities
	    bit 1  polylines
	    bit 2  markers
	    bit 3  polymarkers
	    bit 4  wide lines
	    bit 5  styled lines
	    bit 6  wide styled lines
	    bit 7  interiors
	polygon capabilities
	    bit 0  polygons
	    bit 1  rectangles
	    bit 2  trapezoids
	    bit 3  scanlines
	    bit 4  wide borders
	    bit 5  styled borders
	    bit 6  wide styled borders
	    bit 7  interiors
	text capabilities
	    bit 0  output precision character
	    bit 1  output precision stroke
	    bit 2  clippping precision stroke
	    bit 3  90-degree character rotation
	    bit 4  arbitrary character rotation
	    bit 5  independent X and Y scaling
	    bit 6  double-size
	    bit 7  integer scaling
	    bit 8  continuous scaling
	    bit 9  bold
	    bit 10 italic
	    bit 11 underline
	    bit 12 strikeout
	    bit 13 raster fonts
	    bit 14 vector fonts
	    bit 15 reserved
	clipping capabilities
	    00h none
	    01h clipping to rectangles
	raster capabilities
	    bit 0  simple bitBLT
	    bit 1  device requires banding support
	    bit 2  device requires scaling support
	    bit 3  supports >64K bitmap

Note: This function returns the device-capability bits for the given display ———-2F1900—————————– INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK

AX = 1900h

Return: AL = 00h not installed

     FFh  installed

———-2F1901BL00————————- INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE

AX = 1901h
BL = 00h if SHELLC transient
     01h if SHELLC resident
DS:DX -> far call entry point for resident SHELLC.EXE

Return: ES:DI → SHELLC.EXE workspace within SHELLB.COM Note: SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell ———-2F1902—————————– INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE

AX = 1902h
ES:DI -> ASCIZ full filename of current batch file, with at least the
	 final filename element uppercased
DS:DX -> buffer for results

Return: AL = 00h failed, either

	  (a) final filename element quoted at ES:DI does not match
	      identity of shell batch file quoted as parameter of most
	      recent call of SHELLB command, or
	  (b) no more Program Start Commands available.
AL= FFh	 success, then:
	memory at DS:[DX+1] onwards filled as:
	DX+1:	BYTE	count of bytes of PSC
	DX+2: N BYTEs	Program Start Command text
		BYTE	0Dh terminator 

Explanation: COMMAND.COM executes the result of this call in preference to

reading a command from a batch file. Thus the batch file does not
advance in execution for so long as SHELLB provides PSCs from its
workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
menu interface. The final PSC of a sequence is finished with a 
GOTO COMMON, which causes a loop back in the batch file which called
SHELLC so as to execute SHELLC again. The check on batch file name
permits PSCs to CALL nested batch files while PSCs are still stacked
up for subsequent execution.

———-2F1903—————————– INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface

AX = 1903h
ES:DI -> ASCIZ batch file name as for AX=1902h

Return: AL = FFh if quoted batch file name matches last SHELLB parameter

AL = 00h if it does not

———-2F1904—————————– INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface

AX = 1904h

Return: ES:DI → name of current shell batch file:

	WORD	number of bytes of name following
	BYTEs	(8 max) uppercase name of shell batch file

———-2F1A00—————————– INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK

AX = 1A00h

Return: AL = FFh if installed Notes: AVATAR.SYS also responds to this call

documented for DOS 5+, but undocumented for DOS 4.x

———-2F1A00BX4156———————– INT 2F - AVATAR.SYS - INSTALLATION CHECK

AX = 1A00h
BX = 4156h ('AV')
CX = 4154h ('AT')
DX = 4152h ('AR')

Return: AL = FFh if installed

    CF clear
    BX = AVATAR protocol level supported
    CX = driver type
	0000h AVATAR.SYS
	4456h DVAVATAR.COM inside DESQview window
    DX = 0016h

Notes: AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from

  the magic values
AVATAR.SYS is a CON replacement by George Adam Stanislav which
  interprets AVATAR command codes in the same way that ANSI interprets
  ANSI command codes

———-2F1A01—————————– INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION

AX = 1A01h
CL = function
    7Fh for GET
    5Fh for SET
DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively

Return: CF set on error

    AX = error code (many non-standard)
CF clear if successful
    AX destroyed

Note: presumably this is the DOS IOCTL interface to ANSI.SYS SeeAlso: AX=1A02h,INT 21/AX=440Ch ———-2F1A02—————————– INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS

AX = 1A02h
DS:DX -> parameter block (see below)

Note: DOS 5.0 chains to previous handler if AL > 02h on call SeeAlso: AX=1A01h

Format of parameter block: Offset Size Description 00h BYTE subfunction

	00h set/reset interlock
	01h get /L flag

01h BYTE interlock state

	00h=reset, 01h=set
	  This interlock prevents some of the ANSI.SYS post-processing
	  in its hook onto INT 10, AH=00h mode set

02h BYTE (returned)

	00h if /L not in effect
	01h if /L in effect

———-2F1A21—————————– INT 2F - AVATAR.SYS - SET DRIVER STATE

AX = 1A21h (AL='!')
DS:SI -> command string with one or more state characters
CX = length of command string

Return: CF set on error (invalid subfunction)

CF clear if successful

Note: the characters in the state string are interpreted left to right, and

  need not be in any particular order

SeeAlso: AX=1A3Fh

Values of state characters: 'a' activate driver 'd' disable driver 'f' use fast screen output 'g' always convert gray keys (+ and -) to function keys 'G' never convert gray keys 'l' convert gray keys only when ScrollLock active 's' use slow screen output 't' Tandy 1000 keyboard (not yet implemented) ———-2F1A3C—————————– INT 2F U - AVATAR.SYS v0.11 - ???

AX = 1A3Ch
???

Return: CX = 0000h ———-2F1A3E—————————– INT 2F U - AVATAR.SYS v0.11 - ???

AX = 1A3Eh
CL = ???
CH = ???
DL = ???
DH = ???

Return: CL = ???

CH = ???
DL = ???
DH = ???

———-2F1A3F—————————– INT 2F - AVATAR.SYS - QUERY DRIVER STATE

AX = 1A3Fh (AL='?')
ES:DI -> buffer
CX = length of buffer in bytes

Return: CF clear

CX = actual size of returned info

Note: the returned information consists of multiple letters whose meanings

  are described under AX=1A21h

SeeAlso: AX=1A21h ———-2F1A42BX4156———————– INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER

AX = 1A42h
BX = 4156h ('AV')
ES:DI -> FAR handler for serial port using IRQ3
DS = data segment needed by handler

Return: AX = 1A42h if ASD not installed

   = 0000h if no more room
   else handle to use when uninstalling

Notes: the handler need not save/restore registers or signal EOI to the

  interrupt controller
the handler should return AX=0000h if the interrupt was meant for it,
  and either leave AX unchanged or return a non-zero value otherwise
the most recently installed handler will be called first, continuing
  to earlier handlers until one returns AX=0000h

SeeAlso: AX=1A43h,AX=1A62h ———-2F1A43BX4156———————– INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER

AX = 1A43h
BX = 4156h ('AV')
ES:DI -> FAR handler for serial port using IRQ4
DS = data segment needed by handler

Return: AX = 1A43h if ASD not installed

   = 0000h if no more room
   else handle to use when uninstalling

Notes: (see AX=1A42h) SeeAlso: AX=1A42h,AX=1A63h ———-2F1A44BX4156———————– INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT

AX = 1A44h
BX = 4156h ('AV')

Return: AX = 0000h

DS = data segment
CX = size of data segment

Note: AVATAR.SYS calls this function whenever it is invoked. If each

  process under a multitasker hooks this function and provides a
  separate data segment, AVATAR.SYS becomes fully reentrant.

SeeAlso: AX=1A21h,AX=1A3Fh ———-2F1A52—————————– INT 2F U - AVATAR.SYS v0.11 - GET ???

AX = 1A52h
CX = size of buffer
ES:DI -> buffer

Return: ??? copied into user buffer Note: the maximum size of the data which may be copied is returned by

  AX=1A72h

SeeAlso: AX=1A72h ———-2F1A53—————————– INT 2F U - AVATAR.SYS v0.11 - ???

AX = 1A53h
CL = ??? (00h-05h)
???

Return: ??? ———-2F1A62BX4156———————– INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER

AX = 1A62h
BX = 4156h ('AV')
CX = handle for IRQ routine returned by AX=1A42h

SeeAlso: AX=1A42h,AX=1A63h ———-2F1A63BX4156———————– INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER

AX = 1A63h
BX = 4156h ('AV')
CX = handle for IRQ routine returned by AX=1A43h

SeeAlso: AX=1A43h,AX=1A62h ———-2F1A72—————————– INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE

AX = 1A72h

Return: CX = maximum size of ??? SeeAlso: AX=1A52h ———-2F1A7B—————————– INT 2F U - AVATAR.SYS v0.11 - ???

AX = 1A7Bh

Return: AX = 0000h

CX = 0000h

———-2F1A7D—————————– INT 2F U - AVATAR.SYS v0.11 - ???

AX = 1A7Dh

Return: AX = ??? ———-2F1AADDX0000———————– INT 2F U - AVATAR.SYS v0.11 - ???

AX = 1AADh
DX = 0000h
CX = subfunction (00h-0Ch)
???

Return: AX = 0000h if DX was nonzero

???

———-2F1B00—————————– INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK

AX = 1B00h

Return: AL = FFh if installed Note: XMA2EMS.SYS extension is only installed if DOS has page frames to hide.

This extension hooks onto INT 67/AH=58h and returns from that call data
  which excludes the physical pages being used by DOS.

SeeAlso: AH=1Bh“FRAME INFO” ———-2F1B——————————- INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION

AH = 1Bh
AL <> 00h
DI = hidden physical page number

Return: AX = FFFFh if failed (no such hidden page)

AX = 0000h if OK, then
     ES = segment of page frame
     DI = physical page number

Notes: this corresponds to the data edited out of the INT 67/AH=58h call

FASTOPEN makes this call with AL = FFh

SeeAlso: AX=1B00h ———-2F2300—————————– INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK

AX = 2300h

Return: AH = FFh Note: this installation check does not follow the usual format SeeAlso: AH=23h ———-2F23——————————- INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA

AH = 23h
AL nonzero

Return: AH = FFh

ES:BX -> graphics data

SeeAlso: AX=2300h ———-2F2700—————————– INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK

AX = 2700h

Return: AL = 00h not installed

   = FFh installed

———-2F2701—————————– INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS

AX = 2701h

Return: AX = maximum simultaneous tasks

BX = index into TASK_IDS of current foreground task
CX = currently-active tasks
DX = version number (DR-DOS 6.0 = 0001h)
ES:SI -> TASK_IDS
ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)

Notes: do not attempt to create a new task if CX == AX

the task's index is its position on the task menu, while its ID is the
  position within the internal task name table

SeeAlso: AX=2714h,AX=2716h ———-2F2702—————————– INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT

AX = 2702h

Return: DX = maximum pages INT 67/AH=42h will report available Note: TaskMAX does not limit EMS allocations other than by limiting the

  amount which is reported as being available at a given time

SeeAlso: AX=2703h,INT 67/AH=42h ———-2F2703—————————– INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT

AX = 2703h
DX = maximum pages INT 67/AH=42h should report available

Return: DX = new maximum for reporting SeeAlso: AX=2702h,INT 67/AH=42h ———-2F2704—————————– INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER

AX = 2704h
DL = subfunction
    00h unregister task manager
    01h register task manager

Return: DL = status

    00h registered
    01h unregistered

Notes: a task manager replaces TaskMAX's menu system with its own user

  interface; while one is registered, the TaskMAX hotkeys and
  Ctrl-Alt-Del invoke the manager rather than the built-in menu system
unregister the task manager before terminating it

SeeAlso: AX=2705h ———-2F2705—————————– INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING

AX = 2705h
DL = subfunction
    00h disable keystrokes for switching to next/prev/specified task
    01h enable

Return: nothing Note: should only be called by a registered task manager (see AX=2704h) SeeAlso: AX=2704h,AX=2706h ———-2F2706—————————– INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK

AX = 2706h
DX = task index (see AX=2701h) of task to be activated

Return: DX = task index of previously-active task SeeAlso: AX=2705h,AX=2707h,AX=2715h ———-2F2707—————————– INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK

AX = 2707h
DS:DX -> ASCIZ pathname of executable
ES:BX -> parameter block (see below)
CX = number of ticks before automatic return to task manager
	(0000h = run until termination or explicitly switched)

Return: DX = new task's task index (FFFFh if task terminated) SeeAlso: AX=2706h,AX=2708h

Format of parameter block: Offset Size Description 00h WORD reserved, should be 0000h 02h DWORD pointer to command tail to be copied into child's PSP 06h DWORD pointer to first FCB to be copied into child's PSP 0Ah DWORD pointer to second FCB to be copied into child's PSP ———-2F2708—————————– INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK

AX = 2708h
DX = task index

Return: DX = FFFFh (task deleted) Notes: this call should only be used for abnormal task termination, after

  first checking for open files with AX=270Ch; should not be used
  with programs that allocate EMS or XMS memory
switches to specified task first

SeeAlso: AX=2707h ———-2F2709—————————– INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK

AX = 2709h
DX = task index
DS:SI -> 8-byte name (8 NULs = remove name)

Return: AL = task flags

    00h ID unused or task terminated
    01h ID in use, task name table entry valid
    81h ID in use, task name fixed
BX = task ID
ES:DI -> name in task name table (see AX=2701h)

Note: the task retains the given name until it terminates or the name is

  removed by specifying a name of 8 NULs.

SeeAlso: AX=2701h,AX=2707h ———-2F270A—————————– INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID

AX = 270Ah
DX = task index

Return: DX = task ID (FFFFh if index invalid) Note: task IDs stay constant, while indexes can change when other tasks are

  deleted

SeeAlso: AX=2701h,AX=270Bh ———-2F270B—————————– INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX

AX = 270Bh
DX = task ID

Return: DX = task index (FFFFh if task not active) SeeAlso: AX=270Ah ———-2F270C—————————– INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES

AX = 270Ch
DX = task index

Return: AX = number of files currently open for specified task SeeAlso: AX=2708h ———-2F270D—————————– INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER

AX = 270Dh
DX = task index

Return: DX = status

    0000h if primary command interpreter (COMMAND.COM, etc.) running
    0001h if not in root shell for task

Note: TaskMAX will return 0001h if the specified task has spawned another

  command interpreter with AX=2707h

SeeAlso: AX=2707h,AX=270Ch ———-2F270E—————————– INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN

AX = 270Eh
CX = length of string (max 15 keystrokes, 0000h to get current string)
DS:SI -> pasting lead-in string (character/scan-code pairs)

Return: ES:DI → current lead-in string Note: the specified sequence of keystrokes is sent to the application before

  every line of a text-mode spreadsheet paste

SeeAlso: AX=270Fh,AX=2710h,AX=2713h ———-2F270F—————————– INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN

AX = 270Fh
CX = length of string (max 15 keystrokes, 0000h to get current string)
DS:SI -> pasting lead-in string (character/scan-code pairs)

Return: ES:DI → current lead-in string Note: the specified sequence of keystrokes is sent to the application before

  every number in a numeric-mode spreadsheet paste

SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h ———-2F2710—————————– INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING

AX = 2710h
CX = length of string (max 15 keystrokes, 0000h to get current string)
DS:SI -> pasting lead-in string (character/scan-code pairs)

Return: ES:DI → current lead-in string Note: the specified sequence of keystrokes is sent to the application after

  every line of a spreadsheet paste operation

SeeAlso: AX=270Eh,AX=270Fh,AX=2713h ———-2F2711—————————– INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT

AX = 2711h
DX = ASCII code for separator (FFFFh to get current)

Return: DL = current separator character SeeAlso: AX=270Fh ———-2F2712—————————– INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA

AX = 2712h
DX = task index

———-2F2713—————————– INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION

AX = 2713h
DX = task index
CX = past mode
    0000h alphanumeric
    0001h numeric
    0002h text

SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h ———-2F2714—————————– INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO

AX = 2714h

Return: CX = total KB of swap space

DX = available KB of swap space

SeeAlso: AX=2701h ———-2F2715—————————– INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER

AX = 2715h

Return: only after calling task is again selected SeeAlso: AX=2706h ———-2F2716—————————– INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS

AX = 2716h

Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported

    CX = bytes in paste buffer
    DX = current generation number (updated after every copy operation)

SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h ———-2F2717—————————– INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER

AX = 2717h
CX = bytes in destination buffer
ES:DI -> destination buffer

Return: AX = 0000h if function supported

    CX = bytes actually copied (FFFFh if buffer too small)
    DX = current generation number for paste buffer

Note: the destination buffer may be too small if another task adds more data

  to the paste buffer after the AX=2716h call but before this call

SeeAlso: AX=2713h,AX=2716h,AX=2718h ———-2F2718—————————– INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER

AX = 2718h
CX = bytes in source buffer
DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)

Return: AX = 0000h if function supported

    CX = bytes actually copied
    DX = current generation number for paste buffer

SeeAlso: AX=2712h,AX=2716h,AX=2717h ———-2F2A——————————- INT 2F - Gammafax DOS Dispatcher INTERFACE

AH = 2Ah

Note: details not available at this time SeeAlso: AX=8000h“FaxBIOS”,AX=CB00h,AX=CBDDh,INT 66“BitFax” ———-2F3900—————————– INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE

AX = 3900h

Return: AL = status

    00h not installed
    FFh one or more TSRs using this interface is installed

Note: this function is provided to that the multiplex number will appear used

  to other programs

SeeAlso: AH=39h/BL=00h ———-2F39–BL00————————- INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK

AH = 39h
BL = 00h
AL = TSR ID number (01h-FFh, currently only 01h-0Eh used) (see below)

Return: AL = status

    00h not installed
    FFh installed
	DX = segment address of resident module

Note: All of Kingswood Software's TSRs use this interface. Usually the

  resident module is installed by allocating a block of upper memory,
  setting its owner ID to 0008h (DOS data), and filling the MCB name
  field with the TSR's name.

SeeAlso: AX=3900h,AH=39h/BL=01h

Values for TSR ID number: 01h TSR Windows 02h NOBUSY 03h CD STACK 04h DISK WATCH 05h PUSHBP 06h ALIAS 07h KEYMACRO 08h SLOWDOWN 09h ANSIGRAB 0Ah TEE 0Bh FASTMOUS 0Ch EXTWILD 0Dh BREAKOUT 0Eh STOPDISK

Format of TSR modules: Offset Size Description 00h 4 BYTEs signature “FTSR” 04h WORD segment address of this module 06h WORD number of words to skip (usually 0000h if no PSP present) 08h N WORDs module-defined data that must be at a fixed segment offset

	(usually only a PSP if file access is required)
   5N BYTEs	interrupt list (see below)
BYTE	FFh terminator

Format of interrupt list entry: Offset Size Description 00h BYTE interrupt number (00h-FEh) 01h WORD offset within segment of DWORD pointer to previous interrupt 03h WORD offset within segment of begin of interrupt handler code ———-2F39–BL01————————- INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK

AH = 39h
BL = 01h
AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)

Return: AL = status

    00h not ready to be removed
    FFh resident module may be removed by deassigning the interrupts
	hooked by the TSR and deallocating the TSR's memory block
AH,BX,CX,DX,ES may be destroyed

SeeAlso: AX=3900h,AH=39h/BL=00h ———-2F39——————————- INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS

AH = 39h
BL = function number (02h-FFh)
AL = TSR ID number (01h-FFh)
CX,DX,SI,DI,DS,ES may contain parameters

Return: as appropriate for the called function SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h ———-2F3901BL02————————- INT 2F - Kingswood TSR Windows - OPEN WINDOW

AX = 3901h
BL = 02h

Return: AX = error code (0000h if successful) Notes: opens the next TSR window on top of any others. Only three

  TSR windows can be opened at any one time.  The three windows
  are all 40x11 characters, partly overlapping.

SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h ———-2F3901BL03————————- INT 2F - Kingswood TSR Windows - HIDE WINDOWS

AX = 3901h
BL = 03h

Return: AX = error code (0000h if successful) Notes: Hide any visible TSR windows from view. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h ———-2F3901BL04————————- INT 2F - Kingswood TSR Windows - SHOW WINDOWS

AX = 3901h
BL = 04h

Return: AX = error code (0000h if successful) Notes: Re-display all TSR windows after a HIDE WINDOWS call. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h ———-2F3901BL05————————- INT 2F - Kingswood TSR Windows - CLOSE WINDOW

AX = 3901h
BL = 05h

Return: AX = error code (0000h if successful) Notes: Close the last opened TSR window. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ———-2F3901BL06————————- INT 2F - Kingswood TSR Windows - SET WINDOW TITLE

AX = 3901h
BL = 06h
DS:SI -> title string

Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ———-2F3901BL07————————- INT 2F - Kingswood TSR Windows - POSITION CURSOR

AX = 3901h
BL = 07h
CH = Y coordinate (0-10)
CL = X coordinate (0-39)

Return: AX = error code (0000h if successful) Note: the hardware cursor is always disabled when a TSR window is opened;

  this call only sets a text position

SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h ———-2F3901BL08————————- INT 2F - Kingswood TSR Windows - DISPLAY STRING

AX = 3901h
BL = 08h
DS:SI -> string

Return: AX = error code (0000h if successful) Notes: The text is not clipped.

This routine understands Tab, NewLine and Carriage Return

SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h ———-2F3901BL09————————- INT 2F - Kingswood TSR Windows - SCROLL WINDOW

AX = 3901h
BL = 09h
CL = scroll direction: 00h up, FFh down, 00h clear window

Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h ———-2F3901BL0A————————- INT 2F - Kingswood TSR Windows - SOUND BEEPER

AX = 3901h
BL = 0Ah
DX = sound divisor, or 0 for silence.
     (divide 1843200 by required frequency to get value for DX)
CL = sound length in 18.2 Hz clock ticks

Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h ———-2F3901BL0B————————- INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER

AX = 3901h
BL = 0Bh
CL = number of users increment: +1 if adding a new user
				-1 if removing a user

Return: AX = error code (0000h if successful) Note: the TSR windows resident module may only be removed when the internal

  user count is zero

SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ———-2F4000—————————– INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES

AX = 4000h

Return: AL = 01h does not virtualize video access

     02h virtualizes the video when in text mode
     03h virtualizes the video when in text mode or single plane
	 graphics modes
     04h virtualizes the video when in text mode, single plane
	 graphics modes, and VGA multiplane modes
     FFh virtualizes the video fully

Note: this function is used by display drivers to find out what capabilities

  exist for the VDD driver and also trigger then VDD driver to call
  functions 4005h and 4006h.  This function also gives the Video Driver
  hardware access to the video registers.

———-2F4001—————————– INT 2F - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND

AX = 4001h

Note: called by OS/2 when the DOS box is about to be placed in the background

  and the video driver should save any necessary state

SeeAlso: AX=4002h,AX=4005h ———-2F4002—————————– INT 2F - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND

AX = 4002h

Note: called by OS/2 when the DOS box is about to be placed in the foreground

  and the video driver should restore the previously-saved state

SeeAlso: AX=4001h,AX=4006h ———-2F4003—————————– INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION

AX = 4003h

Note: This critical section must be exited within 1 second. SeeAlso: AX=4004h ———-2F4004—————————– INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION

AX = 4004h

SeeAlso: AX=4003h ———-2F4005—————————– INT 2F - Windows 3.x - SWITCHING DOS TO BACKGROUND

AX = 4005h

Note: called by Windows when the DOS box is about to be placed in the

  background and the video driver should save any necessary state
  information

SeeAlso: AX=4001h,AX=4006h ———-2F4006—————————– INT 2F - Windows 3.x - SWITCHING DOS TO FOREGROUND

AX = 4006h

Note: called by Windows when the DOS box is about to be placed in the

  foreground and the video driver should restore any necessary state
  information

SeeAlso: AX=4002h,AX=4005h ———-2F4007—————————– INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS

AX = 4007h

———-2F41——————————- INT 2F - LAN Manager 2.0 DOS Enhanced NETPOPUP.EXE - NETWORK POP-UP SERVICE

AH = 41h
???

Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector

  file/printer services

SeeAlso: AX=118Ah,AH=42h,AH=4Bh ———-2F42——————————- INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE

AH = 42h
???

Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector

  file/printer services

SeeAlso: AX=118Ah,AH=41h,AH=4Bh ———-2F4300—————————– INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - INSTALLATION CHECK

AX = 4300h

Return: AL = 80h XMS driver installed

AL <> 80h no driver

Notes: XMS gives access to extended memory and noncontiguous/nonEMS memory

  above 640K
this installation check DOES NOT follow the format used by other
  software

SeeAlso: AX=4310h ———-2F4310—————————– INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - GET DRIVER ADDRESS

AX = 4310h

Return: ES:BX → driver entry point Note: HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h SeeAlso: AX=4300h

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, AH=major, AL=minor)
	     BX = internal revision number
	     DX = 0001h if HMA (1M to 1M + 64K) exists
		  0000h 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 = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,90h,91h,92h) (see below)
02h  Release High Memory Area
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,90h,93h) (see below)
03h  Global enable A20, for using the HMA
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,82h) (see below)
04h  Global disable A20
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,82h,94h) (see below)
05h  Local enable A20, for direct access to extended memory
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,82h) (see below)
06h  Local disable A20
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,82h,94h) (see below)
07h  Query A20 state
     Return: AX = 0001h enabled
		= 0000h disabled
	     BL = error code (00h,80h,81h) (see below)
08h  Query free extended memory, not counting HMA
     BL = 00h (some implementations leave BL unchanged on success)
     Return: AX = size of largest extended memory block in K
	     DX = total extended memory in K
	     BL = error code (00h,80h,81h,A0h) (see below)
09h  Allocate extended memory block
     DX = Kbytes needed
     Return: AX = 0001h success
		   DX = handle for memory block
		= 0000h failure
		   BL = error code (80h,81h,A0h) (see below)
0Ah  Free extended memory block
     DX = handle of block to free
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,A2h,ABh) (see below)
0Bh  Move extended memory block
     DS:SI -> EMM structure (see below)
     Note: if either handle is 0000h, the corresponding offset is
	   considered to be an absolute segment:offset address in
	   directly addressable memory
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h-82h,A3h-A9h) (see below)
0Ch  Lock extended memory block
     DX = handle of block to lock
     Return: AX = 0001h success
		   DX:BX = 32-bit linear address of locked block
		= 0000h failure
		   BL = error code (80h,81h,A2h,ACh,ADh) (see below)
0Dh  Unlock extended memory block
     DX = handle of block to unlock
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,A2h,AAh) (see below)
0Eh  Get handle information
     DX = handle for which to get info
     Return: AX = 0001h success
		   BH = block's lock count
		   BL = number of free handles left
		   DX = block size in K
		= 0000h failure
		   BL = error code (80h,81h,A2h) (see below)
0Fh  Reallocate extended memory block
     DX = handle of block
     BX = new size of block in K
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,81h,A0h-A2h,ABh) (see below)
10h  Request upper memory block (nonEMS memory above 640K)
     DX = size of block in paragraphs
     Return: AX = 0001h success
		   BX = segment address of UMB
		   DX = actual size of block
		= 0000h failure
		   BL = error code (80h,B0h,B1h) (see below)
		   DX = largest available block
11h  Release upper memory block
     DX = segment address of UMB to release
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,B2h) (see below)
12h  (XMS v3.0) Reallocate upper memory block
     DX = segment address of UMB to resize
     BX = new size of block in paragraphs
     Return: AX = 0001h success
		= 0000h failure
		   BL = error code (80h,B0h,B2h) (see below)
34h  (QEMM 5.11 only, undocumented) ???
44h  (QEMM 5.11 only, undocumented) ???
88h  (XMS v3.0) Query free extended memory
     Return: EAX = largest block of extended memory, in K
	     BL = status
	         00h success
		 80h not implemented (i.e. on a 286 system)
		 81h VDISK detected
		 A0h all extended memory allocated
     	     ECX = physical address of highest byte of memory
	     		(valid even on error codes 81h and A0h)
	     EDX = total Kbytes of extended memory (0 if status A0h)
89h  (XMS v3.0) Allocate any extended memory
     EDX = Kbytes needed
     Return: AX = 0001h success
     		    DX = handle for allocated block (free with AH=0Ah)
		= 0000h failure
		    BL = status (80h,81h,A0h,A1h,A2h) (see below)
8Eh  (XMS v3.0) Get extended EMB handle information
     DX = handle
     Return: AX = 0001h success
     		    BH = block's lock count
		    CX = number of free handles left
		    EDX = block size in K
     		= 0000h failure
     		    BL = status (80h,81h,A2h) (see below)
8Fh  (XMS v3.0) Reallocate any extended memory block
     DX = unlocked handle
     EBX = new size in K
     Return: AX = 0001h success
     		= 0000h failure
		    BL = status (80h,81h,A0h-A2h,ABh) (see below)

Notes: HIMEM.SYS requires at least 256 bytes free stack space

the XMS driver need not implement functions 10h through 12h to be
  considered compliant with the standard

Format of EMM structure: Offset Size Description 00h DWORD number of bytes to move (must be even) 04h WORD source handle 06h DWORD offset into source block 0Ah WORD destination handle 0Ch DWORD offset into destination block Notes: if source and destination overlap, only forward moves (source base

  less than destination base) are guaranteed to work properly
if either handle is zero, the corresponding offset is interpreted
  as a real-mode address referring to memory directly addressable
  by the processor

Error codes returned in BL:

00h successful
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

———-2F44——————————- INT 2F U - ???

AH = 44h
AL = function (at least 0Bh, 15h, 17h)
???

Return: ??? Note: called by Codeview for Windows SeeAlso: AH=86h ———-2F4500—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK

AX = 4500h

Return: AL = 01h if PROF.COM installed

AL = 02h if VPROD.386 installed

SeeAlso: AX=4501h,AX=4502h ———-2F4501—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER

AX = 4501h
BX = CSIPS buffer size in KB (first parameter for ProfSetup)
CX = output limit in KB (second parameter for ProfSetup)

Note: this call is not supported by PROF.COM SeeAlso: AX=4502h,AX=4503h ———-2F4502—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE

AX = 4502h
BL = sampling rate for PROF.COM (0 < BL <= 13)
    (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
CX = sampling rate for VPROD.386

Note: for PROF.COM, this programs the CMOS clock by setting BL+2 as the

  low four bits of CMOS register 0Ah.  The interruption rate is
  1 SHL (15 - BL) per second.

SeeAlso: AX=4501h,AX=4503h ———-2F4503—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING

AX = 4503h

Notes: Profiling is also turned on by the key combinations

  LeftShift + RightShift + Alt
  LeftShift + RightShift + Ctrl
for PROF.COM, this call programs the CMOS clock by reading register
  0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  is unmasked

SeeAlso: AX=4504h ———-2F4504—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING

AX = 4504h

Notes: profiling is also turned off by the key combination

  LeftShift + RightShift
for PROF.COM, this programs the CMOS clock by reading register 0Ch
  and clearing bit 6 of register 0Bh.  It then masks IRQ8.

SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h ———-2F4505—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA

AX = 4505h

SeeAlso: AX=4503h,AX=4504h,AX=4506h ———-2F4506—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - “ProfFlush”

AX = 4506h

SeeAlso: AX=4505h,AX=4507h ———-2F4507—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - “ProfFinish”

AX = 4507h

Note: this call is essentially a “ProfStop” (AX=4504h) followed by

  "ProfFlush" (AX=4506h)

SeeAlso: AX=4504h,AX=4505h,AX=4506h ———-2F4508—————————– INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE

AX = 4508h
BX = ordinal (or 0000h)
CX = segment
DX = instance (or 0000h)
SI = type (or 0000h)
ES:DI -> ASCIZ module name

Notes: this call is an alternate entry to the profiler's SEGDEBUG

  interface, but only to function 0, for notifying the profiler of
  each new segment loaded.  The SHOWHITS utility then examines the
  profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  with symbol files to provide information in a useful form.
this call does not have a corresponding Windows function

SeeAlso: AX=4500h ———-2F4601—————————– INT 2F U - DOS 5.0 kernel - ???

AX = 4601h

Return: ??? Note: copies the MCB following the caller's PSP memory block into DOS data

  segment

SeeAlso: AX=4602h ———-2F4602—————————– INT 2F U - DOS 5.0 kernel - ???

AX = 4602h

Return: ??? Note: copies previously copied MCB from DOS data segment into MCB following

  caller's PSP memory block

SeeAlso: AX=4601h ———-2F46——————————- INT 2F U - ???

AH = 46h
AL = subfunction (03h,04h)

Return: ??? Note: these two subfunctions are called by MS Windows 3.0 ———-2F4653CX0002———————– INT 2F - F-PROT v1.x only - F-LOCK.EXE

AX = 4653h
CX = 0002h
BX = subfunction
    0000h  installation check
	Return: AX = FFFFh
    0001h  uninstall
	Return: AX,BX,ES destroyed
    0002h  disable (v1.08 and below only)
    0003h  enable (v1.08 and below only)

Note: F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik

  Skulason

SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh ———-2F4653CX0003———————– INT 2F - F-PROT v1.x only - F-XCHK.EXE

AX = 4653h
CX = 0003h
BX = subfunction
    0000h  installation check
	Return: AX = FFFFh
    0001h  uninstall
	Return: AX,BX,ES destroyed

Note: F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik

  Skulason

SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h ———-2F4653CX0004———————– INT 2F - F-PROT v1.x only - F-POPUP.EXE

AX = 4653h
CX = 0004h
BX = subfunction
    0000h  installation check
	Return: AX = FFFFh
    0001h  uninstall
	Return: AX,BX,ES destroyed
    0002h  disable (v1.08 and below only)
	   display message (v1.14+)
		other registers: ???
    0003h  enable (v1.08 and below only)
	   display message (v1.14+)
		other registers: ???
		Return: AX = key pressed by user

Note: F-POPUP is part of the F-PROT virus/trojan protection package by

  Fridrik Skulason

SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h ———-2F4653CX0005———————– INT 2F - F-PROT v1.x only - F-DLOCK.EXE

AX = 4653h
CX = 0005h
BX = subfunction
    0000h installation check
	Return: AX = FFFFh
    0001h uninstall
	Return: AX,BX,ES destroyed

Note: F-DLOCK is part of the F-PROT virus/trojan protection package by

  Fridrik Skulason

SeeAlso: AX=4653h/CX=0004h,AX=CA00h ———-2F4680—————————– INT 2F - MS Windows v3.0 - INSTALLATION CHECK

AX = 4680h

Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,

	   or DOS 5 DOSSHELL active
   nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
	    mode

Note: not officially documented, but Microsoft has indicated that they

  intend to provide an installation check which works in all modes

SeeAlso: AX=1600h ———-2F4800—————————– INT 2F - DOS v5.0 DOSKEY - INSTALLATION CHECK

AX = 4800h

Return: AL = nonzero if installed SeeAlso: AX=4810h ———-2F4810—————————– INT 2F - DOS v5.0 DOSKEY - READ INPUT LINE FROM CONSOLE

AX = 4810h
DS:DX -> line buffer (see INT 21/AH=0Ah)

Return: AX = 0000h if successful Notes: the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to

  the previous handler
if the user's input is a macro name, no text is placed in the buffer
  even though AX=0000h on return; the program must immediately issue
  this call again to retrieve the expansion of the macro.  Similarly,
  if the user enters a special parameter such as $*, this call must
  be repeated to retrieve the expansion; on the second call, DOSKEY
  overwrites the macro name on the screen with its expansion.

SeeAlso: AX=4800h,INT 21/AH=0Ah ———-2F4A00CX0000———————– INT 2F U - DOS v5.0 - SINGLE-FLOPPY LOGICAL DRIVE CHANGE NOTIFICATION

AX = 4A00h
CX = 0000h
DH = new drive number
DL = current drive number

Return: CX = FFFFh to skip “Insert diskette for drive X:” message Note: called by MSDOS 5.00 IO.SYS just before displaying the message

  "Insert diskette for drive X:" on single-floppy systems

———-2F4A01—————————– INT 2F - DOS v5.0 - QUERY FREE HMA SPACE

AX = 4A01h

Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)

ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)

SeeAlso: AX=4310h,AX=4A02h ———-2F4A02—————————– INT 2F - DOS v5.0 - ALLOCATE HMA SPACE

AX = 4A02h
BX = number of bytes

Return: ES:DI → start of allocated HMA block or FFFFh:FFFFh

BX destroyed

Note: this call is not valid unless DOS is loaded in the HMA (DOS=HIGH) SeeAlso: AX=4A01h ———-2F4A05—————————– INT 2F U - DOS v5.0 DOSSHELL - ???

AX = 4A05h
SI = function
    0000h reset???
    0001h ???
    0002h ???
    0003h ???
    0004h ???
	BL = ???
    0005h ???
    0006h get ???
	Return: ES:DI -> ???
    0007h get ???
	Return: AX = ???
    0008h get ???
	Return: DX:AX -> ???
    0009h get ???
	Return: ES = ???
    000Ah ???
	BL = ???
	ES:DI -> ???
    000Bh get ???
	Return: AX = ???
    000Ch ???
	BL = ???
	Return: DX:AX -> ???

Notes: DOSSHELL chains to the previous handler if SI is not one of the values

  listed above
the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch

SeeAlso: AX=4B01h ———-2F4A06—————————– INT 2F U - ??? - GET MEMORY SIZE

AX = 4A06h
DX = segment following last byte of conventional memory

Return: DX = segment following last byte of memory available for use by DOS Note: called by MSDOS 5.00 IO.SYS startup code if the signature “RPL” is

  present three bytes beyond the INT 2F handler; this call overrides
  the value returned by INT 12

SeeAlso: INT 12 ———-2F4A10—————————– INT 2F - SMARTDRV v4.00+ - API

      AX = 4A10h
      BX = command
          0000h installation check and hit ratios
              Return: AX = BABEh if installed
                          DX:BX = cache hits
                          DI:SI = cache misses
                          CX = ???
                          BP = version (4.00 = 0400h)
          0001h reset cache
          0002h flush buffers
          0003h status
              BP = drive # (0=A, 1=B, etc.)
              DL = subfunction
	    00h only get information
                  01h turn on read cache
	    02h turn off read cache
	    03h turn on write cache
	    04h turn off write cache
    	Return: AX = BABEh if OK
                     	DL = status
                          bit 7  not cached
		    bit 6  write-through
		    bit 5  ???
		    bits 0-4 drive # (0=A, 1=B...)
                      DL = FFh if drive does not exist
              Note:	If the read cache is off, reads will not be cached,
		  but writes will continue to be cached if the write-
		  cache is enabled.
          0004h cache size
              Return: AX = ???
                      BX = largest number of elements
                      CX = size of elements in bytes
                      DX = number of elements under Windows
          0005h double-buffer status
              BP = drive # (0=A, 1=B...)
              Return: AX = BABEh if double-buffered
          0007h ???
              Return: DI = random number???
          000Ah get table pointer???
              Return: ES:BX -> table of about 10 bytes or 5 words. Seems to
			be words pointing to memory addresses 
			containing info??? (see below)
          1234h signal serious error
              pops up a message box saying that a serious error occurred and
                to hit R to retry.

SeeAlso: INT 21/AX=4402h“SMARTDRV”,INT 21/AX=4403h“SMARTDRV”

Format of data table: Offset Size Description 00h 8 BYTEs ??? 08h WORD offset of WORD containing number of elements in cache ———-2F4B——————————- INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR

AH = 4Bh
???

Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector

  file/printer services

SeeAlso: AX=118Ah,AH=41h,AH=42h ———-2F4B01—————————– INT 2F - DOS v5.0 TASK SWITCHER - BUILD CALLOUT CHAIN

AX = 4B01h
CX:DX -> task switcher entry point (see AX=4B02h)
ES:BX = 0000h:0000h

Return: ES:BX → callback info structure (see below) or 0000h:0000h Notes: called by the task switcher

this function is hooked by clients which require notification of task
  switcher activities; the call must first be passed on to the prior
  handler with registers unchanged using a simulated interrupt.	 On
  return, the client must build a callback info structure and store
  the returned ES:BX in the "next" field, then return the address of
  its own callback info structure.
a client program must add itself to the notification chain if it
  provides services to other programs; before terminating, it must
  remove itself from the chain by calling the task switcher's entry
  point with AX=0005h (see AX=4B02h)
the task switcher entry point should not be saved, as it is subject to
  change and will be provided on any notification call
the Windows 3.1 Standard Mode supports this API

SeeAlso: AX=4B02h

Format of callback info structure: Offset Size Description 00h DWORD pointer to next callback info structure 04h DWORD pointer to notification function (see below) 08h DWORD reserved 0Ch DWORD address of zero-terminated list of API info structures

	(see AX=4B02h)

Notification function is called with:

AX = function
    0000h switcher initialization
	Return: AX = 0000h if OK to load
		   = nonzero to abort task switcher
    0001h query suspend
	BX = session ID
	Return: AX = 0000h if OK to switch session
		   = 0001h if not
    0002h suspend session
	BX = session ID
	interrupts disabled
	Return: AX = 0000h if OK to switch session
		   = 0001h if not
    0003h activate session
	BX = session ID
	CX = session status flags
		bit 0: set if first activation of session
		bits 1-15: reserved (0)
	interrupts disabled
	Return: AX = 0000h
    0004h session active
	BX = session ID
	CX = session status flags
		bit 0: set if first activation of session
		bits 1-15: reserved (0)
	Return: AX = 0000h
    0005h create session
	BX = session ID
	Return: AX = 0000h if OK to create session
		   = 0001h if not
    0006h destroy session
	BX = session ID
	Return: AX = 0000h
    0007h switcher termination
	BX = flags
	    bit 0: set if calling switcher is only switcher loaded
	    bits 1-15: reserved (0)
	Return: AX = 0000h
ES:DI -> task switcher entry point (see AX=4B02h)

Notes: function 0000h is generally called by the program which controls or

  invokes the task switcher, rather than by the task switcher itself;
  the entry point supplied to this function is not necessarily the
  entry point to the task switcher itself, and may be 0000h:0000h.  If
  any client indicates that loading is not possible, all clients will
  be called with function 0007h; thus it is possible for a client to
  receive a termination notice without a corresponding initialization
  notice.
except for functions 0002h and 0003h, the notification handler is
  called with interrupts enabled and may make any INT 21h function
  call; interrupts must not be enabled in functions 0002h and 0003h
function 0007h may be called with ES:DI = 0000h:0000h if the entry
  point is no longer valid

———-2F4B02BX0000———————– INT 2F - DOS v5.0 TASK SWITCHER - INSTALLATION CHECK

AX = 4B02h
BX = 0000h
ES:DI = 0000h:0000h

Return: ES:DI = 0000h:0000h if task switcher not loaded

ES:DI -> task switcher entry point (see below) if loaded
    AX = 0000h

Note: the returned entry point is that for the most-recently loaded task

  switcher; the entry points for prior task switchers may be determined
  with the "get version" call (see below)

SeeAlso: AX=4A05h,AX=4B03h

Call task switcher entry point with:

AX = 0000h get version
	Return: CF clear if successful
		    AX = 0000h
		    ES:BX -> task switcher version struct (see below)
		CF set if unsupported function
AX = 0001h test memory region
	ES:DI -> first byte to be tested
	CX = size of region to test
	Return: CF clear if successful
		    AX = memory type of tested region
			0000h global
			0001h global and local
			0002h local (replaced on session switch)
		CF set if unsupported function
AX = 0002h suspend switcher
	ES:DI -> new task switcher's entry point
	Return: CF clear if successful
		    AX = state
			0000h switcher has been suspended
			0001h switcher not suspended, new switcher must
				abort
			0002h switcher not suspended, but new switcher
				may run anyway
		CF set if unsupported function
AX = 0003h resume switcher
	ES:DI -> new task switcher's entry point
	Return: CF clear if successful
		    AX = 0000h
		CF set if unsupported function
AX = 0004h hook notification chain
	ES:DI -> callback info structure to be added to chain
		(see AX=4B01h)
	Return: CF clear if successful
		    AX = 0000h
		CF set if unsupported function
AX = 0005h unhook notification chain
	ES:DI -> callback info structure to be removed from chain
		(see AX=4B01h)
	Return: CF clear if successful
		    AX = 0000h
		CF set if unsupported function
AX = 0006h query API support
	BX = asynchronous API identifier
	Return: CF clear if successful
		    AX = 0000h
		    ES:BX -> API info structure (see below) for the
				client which provides the highest
				level of 
		CF set if unsupported function

Format of task switcher version structure: Offset Size Description 00h WORD major version of supported protocol (current protocol is 1.0) 02h WORD minor version of supported protocol 04h WORD major version of task switcher 06h WORD minor version of task switcher 08h WORD task switcher ID (see AX=4B03h) 0Ah WORD operation flags

	bit 0: set if task switcher disabled
	bits 1-15: reserved (0)

0Ch DWORD pointer to ASCIZ task switcher name

	("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)

10h DWORD pointer to previous task switcher's entry point or 0000h:0000h

Format of API info structure: Offset Size Description 00h WORD size of structure in bytes (000Ah) 02h WORD API identifier

	0001h NetBIOS
	0002h 802.2
	0003h TCP/IP
	0004h LAN Manager named pipes
	0005h Novell NetWare IPX

04h WORD major version \ of highest version of API for which the support 06h WORD minor version / level specified in the next field is provided 08h WORD support level

	0001h minimal support
	0002h API-level support
	0003h switcher compatibility
	0004h seamless compatibility

———-2F4B03—————————– INT 2F - DOS v5.0 TASK SWITCHER - ALLOCATE SWITCHER ID

AX = 4B03h
ES:DI -> task switcher entry point (see AX=4B02h)

Return: AX = 0000h

BX = switcher ID (0001h-000Fh), or 0000h if no more available

Notes: if a task switcher has determined that it is the first to be loaded, it

  must allocate an identifier for itself and provide this function to
  all subsequent task switchers; if it is not the first to be loaded,
  it must call this function to allocate an ID.	 The switcher ID is
  used as the high four bits of all session identifiers to ensure
  unique session IDs.
if no more switcher IDs are available, the new task switcher making the
  call must terminate or disable itself
the task switcher providing the identifiers may call the new task
  switcher's entry point as needed
this call is available from within DOSSHELL even if the task switcher
  is not installed

SeeAlso: AX=4B02h,AX=4B04h ———-2F4B04—————————– INT 2F - DOS v5.0 TASK SWITCHER - FREE SWITCHER ID

AX = 4B04h
BX = switcher ID
ES:DI -> task switcher entry point (see AX=4B02h)

Return: AX = 0000h

BX = status
    0000h successful
    other error (invalid ID or ID not allocated)

Notes: called by a task switcher when it exits, unless it was the first loaded

  and is providing the support for AX=4B03h and AX=4B04h
the task switcher providing the identifiers may call the terminating
  task switcher's entry point as needed
this call is available from within DOSSHELL even if the task switcher
  is not installed

SeeAlso: AX=4B02h,AX=4B03h ———-2F4B05—————————– INT 2F - DOS v5.0 DOSSHELL TASK SWITCHER - IDENTIFY INSTANCE DATA

AX = 4B05h
ES:BX = 0000h:0000h
CX:DX -> task switcher entry point (see AX=4B02h)

Return: ES:BX → startup info structure (see below) or 0000h:0000h Notes: called by task switcher

clients with instance data should hook this call, pass it through to
  the previous handler with unchanged registers using a simulated
  interrupt.  On return, the client should create a startup info
  structure (see below), store the returned ES:BX in the "next"
  field, and return the address of the created structure in ES:BX
all MSDOS function calls are available from within this call

SeeAlso: AX=1605h,AX=4B02h

Format of startup info structure: Offset Size Description 00h 2 BYTEs major, minor version of info structure (03h,00h) 02h DWORD pointer to next startup info structure or 0000h:0000h 06h DWORD 0000h:0000h (ignored) 0Ah DWORD ignored 0Eh DWORD pointer to instance data records

Format of one instance data record in array: Offset Size Description 00h DWORD address of instance data (end of array if 0000h:0000h) 04h WORD size of instance data ———-2F53——————————- INT 2F U - ???

AH = 53h
AL = subfunction (0Bh, maybe others???)

Return: ??? Note: called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+ SeeAlso: AH=54h,INT 33/AX=002Fh ———-2F54——————————- INT 2F U - ???

AH = 54h
AL = subfunction (00h, 01h, maybe others???)

Return: ??? Note: called by MS Windows 3.1 POWER.DRV SeeAlso: AH=53h ———-2F5453—————————– INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE

AX = 5453h
BX = subfunction
    00h installation check
	CX = 0000h
	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 = 0000h successful
		   ES:BX -> user parameter block (see below)
		   = 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 = 0000h
		    ES:BX -> TSR's internal data area (see below)
		   = 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 = 0000h successful
		    BX = value of INDOS flag
    17h - 1Fh reserved
    20h call user procedure
	CX = TSR ID number
	ES:DI -> user-defined data
	Return: AX = 0000h 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 zero, 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 = 0000h success
		     F0F0h user aborted with ^C or ^Break
		     other unable to stuff keystrokes
    22h (v1.10) trigger popup
	CX = TSR ID number
	Return: AX = 0000h success, TSR will either pop up or beep to
			   indicate that it is unable to pop up
		     nonzero invalid ID number
    23h (v1.10) invoke TSR's background function
	CX = TSR ID number
	Return: AX = 0000h success
		     FFFFh not safe to call background function
		     nonzero invalid ID number
    24h - 2Fh reserved

Notes: Borland's THELP.COM popup help system for Turbo Pascal and Turbo C

  (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  do the SWAP?? programs by Innovative Data Concepts.
AVATAR.SYS supports functions 00h and 01h (only the first three fields
  of the user parameter block) using the name "AVATAR  "

SeeAlso: AX=CAFEh

Format of User Parameter Block: Offset Size Description 00h 8 BYTEs blank-padded TSR name 08h WORD TSR ID number 0Ah DWORD bitmap of supported functions 0Eh BYTE scan code of primary hotkey

	    00h = pop up when shift states match
	    FFh = no popup (if shift state also FFh)

0Fh BYTE shift state of primary hotkey

	    FFh = no popup (if scan code also FFh)

10h BYTE number of secondary hotkeys 11h DWORD pointer to extra hotkeys set by func 05h 15h WORD current TSR status flags 17h WORD PSP segment of TSR 19h DWORD DTA for TSR 1Dh WORD default DS for TSR 1Fh DWORD stack at popup 23h DWORD stack at background invocation

Format of TSR internal data area: Offset Size Description 00h BYTE revision level of TesSeRact library 01h BYTE type of popup in effect 02h BYTE INT 08 occurred since last invocation 03h BYTE INT 13 occurred since last invocation 04h BYTE active interrupts 05h BYTE active soft interrupts 06h BYTE DOS major version 07h BYTE how long to wait before popping up 08h DWORD pointer to INDOS flag 0CH DWORD pointer to DOS critical error flag 10h WORD PSP segment of interrupted program 12h WORD PSP segment of prog interrupted by INT 28 14h DWORD DTA of interrupted program 18h DWORD DTA of program interrupted by INT 28 1Ch WORD SS of interrupted program 1Eh WORD SP of interrupted program 20h WORD SS of program interrupted by INT 28 22h WORD SP of program interrupted by INT 28 24h DWORD INT 24 of interrupted program 28h 3 WORDs DOS 3+ extended error info 2Eh BYTE old BREAK setting 2Fh BYTE old VERIFY setting 30h BYTE were running MS WORD 4.0 before popup 31h BYTE MS WORD 4.0 special popup flag 32h BYTE enhanced keyboard call in use 33h BYTE delay for MS WORD 4.0 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):

DWORD	old interrupt vector
BYTE	interrupt number
WORD	offset in TesSeRact code segment of new interrupt handler

———-2F5500—————————– INT 2F U - DOS v5.0 - COMMAND.COM INTERFACE

AX = 5500h

Return: AX = 0000h

DS:SI -> entry point table

Notes: used to access the shareable portion of COMMAND.COM, which may have

  been moved into the HMA; only the primary COMMAND.COM retains this
  portion
procedures called from a dispatcher in COMMAND's resident portion;
  most assume that the segment address of the resident portion is on
  the stack and are thus not of general use

———-2F6282—————————– INT 2F U - PC Tools v7.0+ VDEFEND, DATAMON - SET ??? ADDRESS

AX = 6282h
CX:DX -> ??? or 0000h:0000h
DI = 0000h ???
     FFFFh ???
     other segment of ???

Return: BX = 0062h Note: if CX:DX = 0000h:0000h on entry, the ??? address is not changed

  (DATAMON only)

SeeAlso: INT 21/AH=FAh“VDEFEND” ———-2F6284BX0000———————– INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK

AX = 6284h
BX = 0000h
CX = 0000h

Return: AX = segment of resident code

BX = 5555h
CX = 5555h

———-2F6284BX0001———————– INT 2F U - PC Tools v7.0+ DATAMON - GET ???

AX = 6284h
BX = 0001h
CX = 0001h

Return: AX:BX → ???

CX = BX

———-2F6284BX0002———————– INT 2F U - PC Tools v7.0+ DATAMON - GET ???

AX = 6284h
BX = 0002h
CX = 0002h

Return: AX = ???

BX = ???
CX = AX
DX = BX

———-2F6284BX0003———————– INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS

AX = 6284h
BX = 0003h
CX = flags
    bit 12: ???
	10: ???
	 5: ???
	 3: ???
DX = flags
    bit 15: ???

———-2F6400—————————– INT 2F - 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 SeeAlso: INT 10/AX=5555h ———-2F7200—————————– INT 2F - SRDISK v1.30 - INSTALLATION CHECK

AX = 7200h

Return: AL = FFh if installed

    ES = segment of device driver header (see below)

Note: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala

Format of device driver header: Offset Size Description 00h 10 BYTEs same as standard device driver header (see INT 21/AH=52h) 0Ah BYTE number of subunits (drives) supported by driver 0Bh 3 BYTEs signature “SRD” 0Eh 4 BYTEs memory type string (currently only “XMS ”) 12h 4 BYTEs ASCII driver version string “N.NN” 16h BYTE 00h 17h BYTE configuration format version (currently 00h) 18h WORD offset of drive configuration data ———-2F7A00—————————– INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK

AX = 7A00h

Return: AL = 00h not installed

   = FFh installed
	ES:DI -> FAR entry point for routines accessed exclusively
		through INT 7A in NetWare versions through 2.0a.  Call
		with same values as INT 7A

SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64“Novell”,INT 7A“Novell” ———-2F7A10—————————– INT 2F - Novell NetWare - TBMI v2.0 - GET TBMI STATUS

AX = 7A10h

Return: DH = major TBMI version number

DL = minor TBMI version number
CX = segment address of TBMI resident part
BX = status word of TBMI
	bit 0: INT2F intercepted by TBMI
	bit 1: INT7A intercepted by TBMI
	bit 2: INT64 intercepted by TBMI
	bits 3-14: reserved or unused ???
	bit 15: outstanding task ID was detected

Note: TBMI is the Task-Switched Buffer Manager Interface SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h ———-2F7A11—————————– INT 2F - Novell NetWare - TBMI v2.0 - GET INT2F HANDLERS

AX = 7A11h

Return: ES:BX → old INT 2F handler

DS:DX -> TBMI INT 2F handler

SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h ———-2F7A12—————————– INT 2F - Novell NetWare - TBMI v2.0 - GET INT64 HANDLERS

AX = 7A12h

Return: ES:BX → old INT 64 handler

DS:DX -> TBMI INT 64 handler

SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h ———-2F7A13—————————– INT 2F - Novell NetWare - TBMI v2.0 - GET INT7A HANDLERS

AX = 7A13h

Return: ES:BX = old INT 7A handler

DS:DX = TBMI INT 7A handler

SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h ———-2F7A14—————————– INT 2F - Novell NetWare - TBMI v2.0 - GET STATISTICS

AX = 7A14h
CX = statistic to retrieve
    0000h available diagnostic functions???
	Return: CX = maximum available function??? (000Ch for v2.0)
    0001h buffers in use
	Return: CX = TBMI buffers currently in use
    0002h maximum buffers used
	Return: CX = maximum number of buffers ever in use
    0003h unavailable buffers
	Return: CX = count of unavailable TBMI buffers
    0004h old interrupt usage
	Return: CX = TBMI accesses to intercepted old vectors INT 2F,
			INT 64, and INT 7A
    0005h far call usage
	Return: CX = TBMI accesses to IPX/SPX far call handler (not
			including internal accesses)
    0006h task buffering
	Return: CX = TBMI task buffering status (enabled/disabled or
			disable/enable switch count???)
    0007h current task ID
	Return: CX = TBMI current task ID number (0000h if ???)
    0008h outstanding ID count
	Return: CX = number of outstanding TBMI IDs
    0009h configured ECBs
	Return: CX = number of TBMI Event Control Blocks configured
    000Ah configured data ECBs
	Return: CX = number of TBMI data ECBs configured
    000Bh configured sockets
	Return: CX = number of TBMI sockets configured (from NETCFG)
    000Ch current sockets
	Return: CX = number of TBMI sockets currently in use

SeeAlso: AX=7A10h ———-2F7A1B—————————– INT 2F - Novell NetWare - TBMI v2.0 - RESERVED???

AX = 7A1Bh

Note: this call merely performs an IRET ———-2F7A80—————————– INT 2F - Novell NetWare - shell 3.01d - ???

AX = 7A80h

Return: nothing Note: apparently called on abnormal exit of the shell ———-2F7A81—————————– INT 2F - Novell NetWare - shell 3.01d - ???

AX = 7A81h
CX:DX -> ??? in shell's CS (may be callback address or data structure)

Return: nothing??? ———-2F7A85—————————– INT 2F - Novell NetWare - shell 3.01 - BROADCAST INFORM

AX = 7A85h
CX = broadcast server number

Return: CX = 0000h if broadcast message handled by another program

CX unchanged if broadcast not handled

———-2F7AFE—————————– INT 2F - Novell NetWare - shell 3.01d - ???

AX = 7AFEh

Return: AL = FFh ???

     other ???

———-2F7AFFBX0000———————– INT 2F - Novell NetWare - TBMI v2.0 - INSTALLATION CHECK???

AX = 7AFFh
BX = 0000h
CX = 4E65h ("Ne")
DX = 7457h ("tW")
ES:DI -> IPX/SPX special handler (XMS/EMS ???)

Return: AL = FFh if installed

    CX = configured sockets (14h)
    DS:SI -> data table ???
    ES:DI -> IPX far call handler

Note: for IPX/SPX this call reportedly returns DS:DI pointing to the table

  of pointers to service events queue head and tail

SeeAlso: AX=7AFFh/BX=0001h ———-2F7AFFBX0001———————– INT 2F - Novell NetWare - TBMI v2.0, shell v3.01d - INSTALLATION CHECK???

AX = 7AFFh
BX = 0001h
CX = 4E65h ("Ne")
DX = 7457h ("tW")

Return: AL = FFh if installed

    CX = ???  (8000h)
    SI = ??? (or -> ???) (0002h)
    ES:DI -> IPX far call handler
    ES:DX -> 6-byte data area ???

SeeAlso: AX=7AFFh/BX=0000h ———-2F7F24—————————– INT 2F - Multiplex - ???

AX = 7F24h
???

Return: ??? Note: called by PC/370, an IBM 370 emulator by Donald S. Higgins ———-2F7F26—————————– INT 2F - Multiplex - ???

AX = 7F26h
???

Return: ??? Note: called by PC/370, an IBM 370 emulator by Donald S. Higgins


Interrupt List, part 5 of 7 This compilation is Copyright © 1989,1990,1991,1992 Ralf Brown ———-2F8000—————————– INT 2F - EASY-NET - INSTALLATION CHECK

AX = 8000h

Return: AL = 00h not installed

     FFh installed

Note: EASY-NET is a shareware two-machine serial-port network ———-2F8000—————————– INT 2F - Nanosoft, Inc. TurboNET server - INSTALLATION CHECK

AX = 8000h

Return: AL = FFh if installed

    BX = CS of resident code
    CX = ??? (03FCh)

Note: TurboNET is a NetBIOS-based file redirector and server; a demonstration

  version may be downloaded from Nanosoft's BBS

SeeAlso: AX=8100h ———-2F8000DX0000———————– INT 2F - FaxBIOS interface - INSTALLATION CHECK

AX = 8000h
DX = 0000h
DI = 0000h

Return: AL = FFh if installed

DX:DI -> signature "FaxBiosjpc"

Note: FaxBIOS may use any multiplex number from 80h through FFh; to determine

  whether it is installed, it is necessary to poll all multiplex
  numbers for one which returns the above signature

SeeAlso: AH=2Ah,AX=80FBh ———-2F8001—————————– INT 2F - Nanosoft, Inc. TurboNET server - ???

AX = 8001h
DS:SI -> 16-byte buffer for ???

Return: AH = status

    00h successful
    01h error

Note: makes NetBIOS calls ———-2F80FB—————————– INT 2F - FaxBIOS interface - COMMAND SUBMISSION

AX = 80FBh
BX = function number (see below)
DX:DI -> command buffer (see below)

Return: AL = FFh if submitted OK

CX = result code (see below)

Note: FaxBIOS may use any multiplex number from 80h through FFh SeeAlso: AX=8000h“FaxBIOS”,AX=CBDDh

Values for function number: 0001h SYS_LOGIN 0002h SYS_LOGOUT 0003h SYS_GET_FAXAPP_INFO 0004h STAT_IO_GET 0005h STAT_FAXBIOS_GET 0006h PDIR_OPEN 0007h PDIR_CLOSE 0008h PDIR_READ_PERSON 0009h PDIR_PARTIAL_READ 000Ah PDIR_READ_GROUP 000Bh PDIR_READ_MEMBER_LIST 000Ch PDIR_WRITE_PERSON 000Dh PDIR_WRITE_GROUP 000Eh PDIR_DELETE_PERSON 000Fh PDIR_DELETE_GROUP 0010h PDIR_READ_GROUP_LIST 0011h PDIR_IN_GROUP 0012h PDIR_OUT_GROUP 0013h SCHED_OPEN 0014h SCHED_ADD_DEST 0015h SCHED_ADD_FILE 0016h SCHED_SET_PARAMS 0017h SCHED_CANCEL 0018h SCHED_CLOSE 0019h SLOG_OPEN 001Ah SLOG_CLOSE 001Bh SLOG_SHORT_ENV_STAT 001Ch SLOG_LONG_ENV_STAT 001Dh SLOG_DEST_STAT 001Eh SLOG_FILE_STAT 001Fh SLOG_CANCEL_ENV 0020h RLOG_OPEN 0021h RLOG_CLOSE 0022h RLOG_READ 0023h GRAPH_GET_FILE_TYPE 0024h GRAPH_EXPORT_FILE 0025h GRAPH_GET_LAYOUT_INFO 0026h GRAPH_CREATE_FILE 0027h GRAPH_CLOSE_FILE 0028h GRAPH_CREATE_PAGE 0029h GRAPH_WRITE 002Ah GRAPH_END_PAGE 002Bh GRAPH_OPEN_FILE 002Ch GRAPH_GOTO_PAGE 002Dh GRAPH_READ 002Eh IOCTL_GET 002Fh IOCTL_SET 0030h IOCTL_ANSWER_FAX 0031h IOCTL_DIAL

Values for result code: 0000h successful 0001h not prepared or servicing another client (busy) 0002h call failed due to sharing (LOCKED) 0003h logged-in client limit reached (FULL) 0004h transport denied (TRANSPORT_DENIED) 0005h not implemented (NOT_IMPLEMENTED) 0006h aborted while in progress (ABORTED) 0007h permissions denied (PERMISSION_DENIED) 0008h requested data is no longer valid (NO_LONGER_VALID) 0080h unspecified system error occurred 0081h an internal file was not found 0082h an internal file could not be created 0083h an internal file could not be opened 0084h an internal file could not be closed 0085h error occurred writing to an internal file 0086h error occurred reading from an internal file 0087h bad or corrupted file encountered 0088h an access violation occurred 0089h an internal file is empty 008Ah insufficient memory to process request 008Bh FaxBIOS was unable to issue a handle 008Ch an error internal to FaxBIOS occurred 008Dh no room on disk 0100h unspecified error accessing client file 0101h file not found 0102h creation fault 0103h open fault 0104h close fault 0105h write fault 0106h read fault 0107h file corrupted 0108h access violation 0109h empty file 0200h unspecified argument error 0201h bad function 0202h bad option 0203h bad structure size 0204h bad buffer size 0205h bad client ID 0300h unspecified error with token 0301h cover sheet token was invalid 0302h logo token was invalid 0303h signature token was invalid 0304h font token was invalid 0305h phone directory token was invalid 0306h outbound route token was invalid 0307h priority token was invalid 0308h sort token was invalid 0309h billing token was invalid 0400h unspecified handle error 0401h bad Phone Directory handle 0402h bad scheduling handle 0403h bad read send log handle 0404h bad read receive log handle 0405h bad graphics handle 0500h data passed in structure was invalid 0501h name field given is invalid 0502h phone number given is invalid 0503h poll code submitted is invalid 0504h file type constant was invalid 0505h BFT constant not defined or supported 0506h resolution not defined or supported 0507h page length not defined or supported 0508h page width not defined or supported 0509h date & time requested are ridiculous 050Ah Subject text was not an ASCIIZ string 050Bh From text was not an ASCIIZ string 050Ch requested envelope ID was not found 050Dh requested envelope ID is not valid 050Eh envelope requested was not found 050Fh destination index is out of range 0510h file index is out of range 0511h index into receive log is out of range 0512h file name specified was incomplete or invalid 0513h page selected was out of range 0514h bit width more than byte width 0515h mode for open is not defined 0516h person index is out of range 0517h person ID is out of range 0518h group index out of range or invalid 0519h group ID out of range or invalid 051Ah range of indices to read is invalid 051Bh group name given is invalid 051Ch field_to_use is badly specified 051Dh predicate invalid for field specified 0600h unspecified client procedure error 0601h device of interest is not present 0602h device of interest has been removed 0603h device of interest is not responding 0604h device of interest is disabled 0605h could not dial because device was in use 0606h maximum destination limit exceeded 0607h maximum file limit exceeded 0608h scheduling closed with no destination 0609h scheduling closed with no files or poll 060Ah scheduling closed with no parameters specified 060Bh file type specified does not match file 060Ch file type specified is not supported 060Dh file submitted is not exportable 060Eh file type specified is not imageable 060Fh error converting file 0610h envelope could not be cancelled 0611h Phone Directory is full 0612h record is already in the Phone Directory 0613h selected group in Phone Directory is full 0614h person is already in the group 0615h person is not in the group & cannot be removed 0616h a graphics file to be created already exists 0617h a grphics file to be read is empty 0618h GRAPH_CREATE_PAGE called before GRAPH_END_PAGE 0619h graph read or write attempted without goto or create 061Ah graph page contains no data 061Bh Phone Directory is already open for this client 061Ch schedule log is already open for this client 061Dh receive log is aready open for this client 061Eh Phone Directory function requires write mode 0800h denied exclusive use of the API

Format of SYS_LOGIN command buffer: Offset Size Description 00h WORD structure size 02h WORD function number 04h WORD return code 06h WORD client ID 08h WORD API Major Version 0Ah WORD API Minor Version 0Ch DWORD reserved for manufacturer's use 10h 22 BYTEs manufacturer's ID 26h WORD highest possible device number 28h WORD maximum destinations per envelope 2Ah WORD maximum files per envelope 2Ch WORD FaxBIOS capabilities bitmap bit 0: transmit supported

	bit 1: receive supported
	bit 2: IOCTL supported
	bit 3: IOCTL_DIAL supported
	bit 4: IOCTL_ANSWER_FAX supported
	bit 5: manual transmit supported
	bit 6: optional phone services supported
	bit 7: canonical phone objects
	bit 8: seam with next supported

2Eh DWORD T.30 capabilities bitmap bit 0: low vertical resolution (minimum)

	bit 1:  high vertical resolution
	bit 2:  page width 107mm (4.21 in)
	bit 3:  page width 151mm (5.91 in)
	bit 4:  page width 215mm (8.46 in) (minimum)
	bit 5:  page width 255mm (10.04 in)
	bit 6:  page width 303mm (11.93 in)
	bit 7:  unused
	bit 8:  page length 297mm (11.69 in) (minimum)
	bit 9:  page length 364mm (14.33 in)
	bit 10: page length 279mm (11 in)
	bit 11: page length unlimited
	bit 12: Group 4 resolution 300x300
	bit 13: Group 4 resolution 400x400
	bit 14: able to respond to poll from remote
	bit 15: able to poll remote
	bit 16: binary file transfer supported

32h WORD IPC handle 34h DWORD amount of memory needed to load 38h WORD scope (00h for public, nonzero for private) 3Ah 6 BYTEs future expansion 40h WORD structure size

Format of SYS_LOGOUT command buffer: Offset Size Description 00h WORD structure size 02h WORD function number 04h WORD return code 06h WORD client ID 08h DWORD client tag (for client's internal use) 0Ch 6 BYTEs future expansion 12h WORD structure size

Format of SYS_GET_FAXAPP_INFO command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs FaxBIOS data 5Ch 80 BYTEs default cover ACh 80 BYTEs default logo FCh 80 BYTEs default signature 14Ch 80 BYTEs default font 10 19Ch 80 BYTEs default font 165 1ECh 80 BYTEs default user font 23Ch 80 BYTEs default Pdir 28Ch 80 BYTEs default sort 2DCh 10 BYTEs default bill 2E6h 10 BYTEs default route 2F0h 40 BYTEs default cover sheet form 318h 34 BYTEs valid dial characters 33Ah 6 BYTEs local country code 340h 6 BYTEs local city or area code 346h 6 BYTEs future expansion 34Ch WORD structure size

Format of STAT_IO_GET command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh WORD current activity 10h WORD number of rings (if ringing) 12h WORD number of fascimiles transmitted 14h WORD number of fascimiles received 16h WORD status of last transmission 18h WORD envelope number of last transmission 1Ah WORD index of last destination in envelope 1Ch WORD status of last reception 1Eh WORD current page (if session in progress) 20h 80 BYTEs current file 70h104 BYTEs remote number D8h 20 BYTEs last name ECh 20 BYTEs first name 100h 32 BYTEs company name 120h 32 BYTEs notes 140h WORD current envelope ID (if sending) 142h WORD total pages in transmission (if sending) 144h 6 BYTEs future expansion 14h WORD structure size

Format of STAT_FAXBIOS_GET command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD status ID 0Eh WORD currenty FaxBIOS function number 10h WORD current Client ID being serviced 12h WORD number of things to do 14h WORD number of them done 16h WORD number of pages to do (if any) 18h WORD number of them done 1Ah WORD number of files to do 1Ch WORD number of them done 1Eh 80 BYTEs current File 6Eh WORD 0 if all devices are idle 70h WORD number of fascimiles transmitted 72h WORD number of fascimiles received 74h WORD status of last transmission in system 76h WORD envelope ID of last transmission 78h WORD index of last destination in envelope 7Ah WORD status of last reception in system 7Ch DWORD time of next transmission 80h 6 BYTEs future expansion 86h WORD structure size

Format of PDIR_OPEN command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs Phone Directory token 5Ch 80 BYTEs sort order token ACh WORD open Mode (0 = read, 1 = write) AEh WORD Phone Directory handle B0h WORD number of people B2h WORD number of groups B4h WORD bitmap of fields supported by partial read B6h 6 BYTEs future expansion BCh WORD structure size

Format of PDIR_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD Phone Directory handle 0Eh 6 BYTEs future expansion 14h WORD structure size

Format of PDIR_READ_PERSON command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD Phone Directory handle 0Eh WORD retrieve by index 10h WORD person ID or index 12h WORD how many groups person is in 14h WORD person ID 16h 20 BYTEs last name 2Ah 20 BYTEs first name 3Eh 32 BYTEs company 5Eh 32 BYTEs notes 7Eh 6 BYTEs FAX country code 84h 6 BYTEs FAX city/area code 8Ah 14 BYTEs FAX local number 98h 14 BYTEs FAX extension A6h 24 BYTEs reserved BEh 6 BYTEs voice country code C4h 6 BYTEs voice city/area code CAh 14 BYTEs voice local number D8h 14 BYTEs voice extension E6h 24 BYTEs reserved FEh 10 BYTEs outbound routing information 108h 10 BYTEs billing information, credit card etc 112h DWORD remote FAX capabilities 116h 21 BYTEs T.30 poll code of FAX number 12Bh 15 BYTEs reserved 13Ah 6 BYTEs future expansion 140h WORD structure size

Format of SCHED_OPEN, SCHED_CANCEL command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh 6 BYTEs future expansion 14h WORD structure size

Format of SCHED_ADD_DEST command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD schedule handle 0Eh WORD device number if manual send wanted 10h WORD non-zero if poll desired 12h WORD person ID 14h 20 BYTEs last name 28h 20 BYTEs first name 3Ch 32 BYTEs company 5Ch 32 BYTEs notes 7Ch 6 BYTEs FAX country code 82h 6 BYTEs FAX city/area code 88h 14 BYTEs FAX local number 96h 14 BYTEs FAX extension A4h 24 BYTEs reserved BCh 6 BYTEs voice country code C2h 6 BYTEs voice city/area code C8h 14 BYTEs voice local number D6h 14 BYTEs voice extension E4h 24 BYTEs reserved FCh 10 BYTEs outbound routing information 106h 10 BYTEs billing information, credit card etc 110h DWORD remote FAX capabilities 114h 21 BYTEs T.30 poll code of FAX number 129h 15 BYTEs reserved 138h 6 BYTEs future expansion 13Eh WORD structure size

Format of SCHED_ADD_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD schedule handle 0Eh WORD file type

	0000h unidentified
	0001h native file format
	0002h ASCII
	0003h FaxBIOS Tiff Class F

10h 80 BYTEs file name 60h 80 BYTEs font token B0h WORD conversion options bitmap B2h WORD resolution

	0000h standard 98 lines per inch, 204 dpi
	0001h fine 196 lines per inch, 204 dpi
	0002h Group4 300 dpi
	0003h Group4 400 dpi

B4h WORD page length

	0000h 279 mm (11 in)
	0001h 297 mm (11.69 in)
	0002h 364 mm (14.33 in)
	0003h unlimited

B6h WORD page width

	0000h 215 mm (8.46 in)
	0001h 255 mm (10.04 in)
	0002h 303 mm (11.93 in)
	0003h 151 mm (5.91 in)
	0004h 107 mm (4.21 in)

B8h WORD binary file transfer specification

	0000h only as FAX
	0001h only as file (for non-faxable files)
	0002h as file when possible else FAX

BAh WORD seam flag (nonzero for seam with next) BCh WORD delete flag (nonzero to delete when done) BEh 6 BYTEs future expansion C4h WORD structure size

Format of SCHED_SET_PARAMS command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh DWORD time to send 10h 10 BYTEs priority token 1Ch 80 BYTEs logo file token 6Ch 80 BYTEs signature file token BCh 80 BYTEs cover page token 10Ch 40 BYTEs Subject text 134h 40 BYTEs From text 15Ch WORD user ID 15Eh 6 BYTEs future expansion 164h WORD structure size

Format of SCHED_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh WORD envelope ID generated 10h 6 BYTEs future expansion 16h WORD structure size

Format of SLOG_OPEN, SLOG_CLOSE, RLOG_OPEN, RLOG_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD log handle 0Eh WORD number of entries 10h 6 BYTEs future expansion 16h WORD structure size

Format of GRAPH_GET_FILE_TYPE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD file type

	0000h unidentified
	0001h native file format
	0002h ASCII
	0003h FaxBIOS Tiff Class F

5Eh WORD bitmap of supported capabilities 60h 6 BYTEs future expansion 66h WORD structure size

Format of GRAPH_CREATE_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD graph handle 5Eh 6 BYTEs future expansion 64h WORD structure size

Format of GRAPH_CLOSE_FILE, GRAPH_END_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh 6 BYTEs future expansion 14h WORD structure size

Format of GRAPH_CREATE_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh WORD resolution 10h WORD page width 12h 6 BYTEs future expansion 18h WORD structure size

Format of GRAPH_WRITE_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh DWORD pointer to storage for image 12h WORD band height in lines 14h WORD width of page image in bytes 16h WORD facsimile page width constant 18h WORD width of page image in bits 1Ah WORD number of bytes actually processed 1Ch 6 BYTEs future expansion 22h WORD structure size

Format of GRAPH_OPEN_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD file type 5Eh WORD graph handle 60h WORD number of pages 62h 6 BYTEs future expansion 68h WORD structure size

Format of GRAPH_GOTO_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh WORD page number 10h WORD vertical resolution 12h WORD page width 14h DWORD page length 18h 6 BYTEs future expansion 1Eh WORD structure size

Format of GRAPH_READ_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh DWORD pointer to storage for image 12h WORD band height in lines 14h WORD width of page image in bytes 16h WORD facsimile page width constant 18h WORD width of page image in bits 1Ah WORD number of bytes actually processed 1Ch 6 BYTEs future expansion 22h WORD structure size

Format of IOCTL_ANSWER_FAX command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh 6 BYTEs future expansion 14h WORD structure size

Format of IOCTL_DIAL command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh 6 BYTEs country code 14h 6 BYTEs city or area code 1Ah 14 BYTEs local number 28h 14 BYTEs extension 36h 14 BYTEs reserved 4Eh 6 BYTEs future expansion 54h WORD structure size ———-2F8100—————————– INT 2F U - Nanosoft, Inc. TurboNET redirector - INSTALLATION CHECK

AX = 8100h

Return: AL = FFh if installed Note: TurboNET is a NetBIOS-based file redirector and server; a demonstration

  version may be downloaded from Nanosoft's BBS

SeeAlso: AX=8000h“TurboNET” ———-2F8101—————————– INT 2F U - Nanosoft, Inc. TurboNET redirector - ???

AX = 8101h

Return: AL = ???

DL = ???

———-2F8102—————————– INT 2F U - Nanosoft, Inc. TurboNET redirector - ???

AX = 8102h

Return: AL = ???

DL = ???

———-2F8103—————————– INT 2F U - Nanosoft, Inc. TurboNET redirector - GET MACHINE NAME???

AX = 8103h
ES:DI -> 17-byte buffer

Return: buffer filled ———-2F8104—————————– INT 2F U - Nanosoft, Inc. TurboNET redirector - ???

AX = 8104h
BL = ???
BH = ???
CX = ???
DX = ???
DS:SI -> 16-byte buffer containing ???

Return: AL = 00h ??? ———-2F8105—————————– INT 2F U - Nanosoft, Inc. TurboNET redirector - ???

AX = 8105h
CX = ??? (don't change current value if 0000h)
DX = ??? (don't change current value if 0000h)

Return: AL = 00h successful ———-2F82——————————- INT 2F U - Nanosoft, Inc. TurboNET - ???

AH = 82h
???

Return: ??? Note: called by TNR.EXE, the TurboNET redirector configuration program SeeAlso: AX=8100h ———-2F8200—————————– INT 2F - RESPLAY - SAMPLE/PLAYBACK

AX = 8200h
DX:DI -> start of sample space
CX:BX = length in bytes

Return: AX = status

    1000h successful
    2000h not initialized (see AX=8210h)
    other RESPLAY not installed

Note: RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox SeeAlso: AX=8201h,AX=8210h ———-2F8201—————————– INT 2F - RESPLAY - INSTALLATION CHECK

AX = 8201h

Return: AX = 7746h if installed SeeAlso: AX=8202h ———-2F8202—————————– INT 2F - RESPLAY - UNINSTALL

AX = 8202h

Return: AX = status

    1000h successful

SeeAlso: AX=8201h ———-2F8210—————————– INT 2F - RESPLAY - INITIALIZE

AX = 8210h
BL = sound device
    00h printer port LPT1
    01h printer port LPT2
    02h prototype board at I/O address 0300h
    03h printer port (alternative LPT1)
    04h internal speaker
BH = sample rate in multiples of 250 Hz (14h to A0h)
CL = direction
    00h playback
    01h sample

Return: AX = status

    1000h successful
    2000h parameter out of range
    other RESPLAY not installed

SeeAlso: AX=8200h ———-2F86——————————- INT 2F U - ???

AH = 86h
AL = function (at least 06h and 07h)
???

Return: ??? Note: called by Codeview for Windows SeeAlso: AH=44h ———-2F8900—————————– INT 2F - WHOA!.COM - INSTALLATION CHECK

AX = 8900h

Return: AL = 00h not installed

   = FFh installed

Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8901h,AX=8902h ———-2F8901—————————– INT 2F - WHOA!.COM - UNINSTALL

AX = 8901h

Return: AL = FDh successful

   = FEh error

Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8900h ———-2F8902—————————– INT 2F - WHOA!.COM - SET DELAY COUNT

AX = 8902h
BX = delay count (larger values slow system down more)

Return: AL = FDh successful

   = FEh error

Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8900h ———-2F9000—————————– INT 2F U - RAID - INSTALLATION CHECK

AX = 9000h

Return: AL = FFh if installed Note: RAID (Resident AID) is a TSR utility program by Ross Neilson Wentworth

  that resides mostly in EMS

———-2F9001—————————– INT 2F U - RAID - GET ???

AX = 9001h

Return: DX:AX → ??? SeeAlso: AX=9000h ———-2F9002—————————– INT 2F U - RAID - GET RESIDENT SEGMENT

AX = 9002h

Return: AX = segment of resident (conventional memory) portion SeeAlso: AX=9000h ———-2F9003—————————– INT 2F U - RAID - UNINSTALL

AX = 9003h

Return: ??? SeeAlso: AX=9000h ———-2F9004—————————– INT 2F U - RAID - GET ???

AX = 9004h

Return: AX = first available paragraph past end of resident portion???

CX destroyed

SeeAlso: AX=9000h ———-2F92——————————- INT 2F - Couriers LAN E-Mail - API

AH = 92h
AL = function
    00h installation check
    01h uninstall
    02h pop down MICRO.EXE notification window
    03h ???
    04h ???
    05h ???

Return: ??? SeeAlso: AH=9Ch ———-2F93——————————- INT 2F - InnerMission v1.7+ - INSTALLATION CHECK

AH = 93h
BX = CX = AX

Return: AL = FFh if installed and BX=CX=AX on entry

    BX = segment of resident code
   = 01h if installed but BX or CX differ from AX

Note: InnerMission is a shareware graphical screen blanker by Kevin Stokes ———-2F9C——————————- INT 2F - Couriers LAN E-Mail OPERATOR.EXE - API

AH = 9Ch
AL = subfunction
    01h uninstall

Return: ??? SeeAlso: AH=92h ———-2FA1–BX0081———————– INT 2F - Ergo DOS extenders - INSTALLATION CHECK

AH = A1h
BX = 0081h
AL = which
    FEh OS/286,OS/386
    FFh HummingBoard DOS extender
ES:DI -> 16-byte buffer

Return: if installed, first four bytes of ES:DI buffer are “IABH” Note: since TKERNEL is a licensed version, it is likely that subfunctions

  BX=0082h and BX=0084h are present and function identically to the
  AX=FBA1h/BX=008xh calls

SeeAlso: AX=ED00h,AX=FBA1h,INT 15/AX=BF02h ———-2FA189—————————– INT 2F U - Biologic HRAMDEV.SYS - API

AX = A189h
BX = subfunction
    0000h set ???
    0001h remove ???
    0002h get status ???
    0003h enable ???
    0004h disable ???
    0005h set ??? flag
    0006h clear ??? flag
    0007h set ??? flag
    0008h clear ??? flag
    0009h set ???
ES:DI -> function-specific arguments
	if func 0000h: 20-byte buffer containing ???
	if func 0001h: 20-byte buffer for returned ???
	if func 0002h: 16-byte buffer for returned ???
	if func 0009h: WORD containing ???

Return: BX = A189h if installed

AH = status
    00h successful
    FFh failed or invalid function number

Notes: HRAMDEV.SYS is a part of the shareware package HRAM by Biologic which

  provides improved high memory access under MSDOS 5.0
functions 00h and 01h use a stack of four entries; function 01h always
  removes the values stored with the most recent function 00h call
  which has not yet been matched with a function 01h call.

———-2FA900—————————– INT 2F - METZTSR.COM - INSTALLATION CHECK

AX = A900h
CF set

Return: CF clear if resident

    AX = 97FFh
CF set if not present

Notes: METZTSR.COM prevents METZ applications (such as the MAGIC screen

  saver) inactivity timeout while running a DOSapp under MS Windows.
the default multiplex number is A9h, but may be set to any value from
  80h to FFh with a commandline switch

SeeAlso: AX=A901h,AX=A902h ———-2FA901—————————– INT 2F - METZTSR.COM - GET TIME OF LAST KEYBOARD ACTIVITY

AX = A901h
CF set

Return: CF clear if successful

    AX:DX = BIOS time at which INT 09 was last invoked
CF set if not present

SeeAlso: INT 09,INT 1A/AH=00h ———-2FA902—————————– INT 2F - METZTSR.COM - SET METZ Ctrl-Alt-Del FLAG

AX = A902h
BL = new value
    00h Ctrl-Alt-Del not allowed
    else Ctrl-Alt-Del allowed (startup default is 01h)
CF set

Return: CF clear if successful

    AX = 97FFh
CF set if not resident

SeeAlso: AX=A903h ———-2FA903—————————– INT 2F - METZTSR.COM - GET METZ Ctrl-Alt-Del FLAG

AX = A903h
CF set

Return: CF clear if successful

    AX = 97FFh if Ctrl-Alt-Del allowed
    AX = 0000h if Ctrl-Alt-Del not allowed
CF set if not resident

SeeAlso: AX=A902h ———-2FAA00—————————– INT 2F - 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 ———-2FAB00—————————– INT 2F - Btrieve Multi-User - INSTALLATION CHECK

AX = AB00h

Return: AL = 4Dh if installed SeeAlso: AX=AB01h,AX=AB02h,INT 21/AX=3000h“Btrieve”,INT 7B“Btrieve” ———-2FAB01—————————– INT 2F - Btrieve Multi-User - EXECUTE Btrieve OPERATION

AX = AB01h
BX = process ID
DS:DX -> 38-byte parameter record (see INT 7B"Btrieve")

Return: AL = 00h OK

   = other retry after calling INT 7F/AX=0200h

SeeAlso: AX=AB00h,AX=AB02h,INT 7B“Btrieve”,INT 7F/AX=0200h ———-2FAB02—————————– INT 2F - Btrieve Multi-User - GET NEW PROCESS ID

AX = AB02h

Return: AL = 00h succesful

    BX = process ID
AL > 00h failed, retry after calling INT 7F/AX=0200h

SeeAlso: AX=AB00h,AX=AB01h,INT 7B“Btrieve”,INT 7F/AX=0200h ———-2FAC00—————————– INT 2F - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK

AX = AC00h

Return: AX = FFFFh

ES:DI -> ??? (graphics data?) (not documented)

Note: this installation check was moved here to avoid the conflict with the

  CD-ROM extensions that occurred in DOS 4.00

SeeAlso: AX=1500h“GRAPHICS” ———-2FAD00—————————– INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK

AX = AD00h

Return: AL = FFh if installed

    BX = ??? (0100h in MS-DOS 3.30, PCDOS 4.01)

Note: DOS 5.0 DISPLAY.SYS chains to previous handler if AL is not one of the

  subfunctions listed here

———-2FAD01—————————– INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ???

AX = AD01h
BX = ???

Return: ???

CF set on error

———-2FAD02—————————– INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ???

AX = AD02h

Return: BX = ??? (value set with AX=AD01h) ———-2FAD03—————————– INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ???

AX = AD03h
ES:DI -> user buffer
CX = size of buffer

Return: CF set if buffer too small

CF clear if successful

———-2FAD04—————————– INT 2F U - DOS 4.x only DISPLAY.SYS internal - ???

AX = AD04h
???

Return: ??? ———-2FAD10—————————– INT 2F U - DOS 4+ DISPLAY.SYS internal - INSTALLATION CHECK???

AX = AD10h
???

Return: AX = FFFFh

BX = ??? (0100h in PCDOS 4.01)

———-2FAD40—————————– INT 2F - DOS 4.0 - ???

AX = AD40h
DX = ???
???

Return: ??? Note: called by PCDOS 4.01 PRINT.COM ———-2FAD80—————————– INT 2F - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK

AX = AD80h

Return: AL = FFh if installed

    BX = version number (BH = major, BL = minor)
    ES:DI -> internal data (see below)

Note: MSDOS 3.30, PCDOS 4.01, and MSDOS 5.00 all report version 1.00.

Format of KEYB internal data: Offset Size Description 00h DWORD original INT 09 04h DWORD original INT 2F 08h 6 BYTEs ??? 0Eh WORD flags 10h BYTE ??? 11h BYTE ??? 12h 4 BYTEs ??? 16h 2 BYTEs country ID letters 18h WORD current code page —DOS 3.3— 1Ah WORD pointer to first item in list of code page tables??? 1Ch WORD pointer to ??? item in list of code page tables 1Eh 2 BYTEs ??? 20h WORD pointer to key translation data 22h WORD pointer to last item in code page table list (see below) 24h 9 BYTEs ??? —DOS 4.01— 1Ah 2 BYTEs ??? 1Ch WORD pointer to first item in list of code page tables??? 1Eh WORD pointer to ??? item in list of code page tables 20h 2 BYTEs ??? 22h WORD pointer to key translation data 24h WORD pointer to last item in code page table list (see below) 26h 9 BYTEs ???

Format of code page table list entries: Offset Size Description 00h WORD pointer to next item, FFFFh = last 02h WORD code page 04h 2 BYTEs ???

Format of translation data: Offset Size Description 00h WORD size of data in bytes, including this word 02h N-2 BYTEs ??? ———-2FAD81—————————– INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE

AX = AD81h
BX = code page (see INT 21/AX=6601h)

Return: CF set on error

    AX = 0001h (code page not available)
CF clear if successful

Notes: called by DISPLAY.SYS

documented for DOS 5+, but undocumented for earlier versions

SeeAlso: AX=AD82h ———-2FAD82—————————– INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING

AX = AD82h
BL = new state
    00h US keyboard (Control-Alt-F1)
    FFh foreign keyboard (Control-Alt-F2)

Return: CF set on error (BL not 00h or FFh)

CF clear if successful

Note: documented for DOS 5+, but undocumented for earlier versions SeeAlso: AX=AD81h,AX=AD83h ———-2FAD83—————————– INT 2F - DOS 5.0 KEYB.COM - GET KEYBOARD MAPPING

AX = AD83h

Return: BL = current state

    00h US keyboard
    FFh foreign keyboard

SeeAlso: AX=AD82h ———-2FAE00DXFFFF———————– INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK

AX = AE00h
DX = FFFFh
CH = FFh
CL = length of command line tail (4DOS v4.0)
DS:BX -> command line buffer (see below)
DS:SI -> command name buffer (see below)
DI = 0000h (4DOS v4.0)

Return: AL = FFh if this command is a TSR extension to COMMAND.COM

AL = 00h if the command should be executed as usual

Notes: This call provides a mechanism for TSRs to install permanent

  extensions to the command repertoire of COMMAND.COM.	It appears
  that COMMAND.COM makes this call before executing the current
  command line, and does not execute it itself if the return is FFh.
APPEND hooks this call, to allow subsequent APPEND commands to
  execute without re-running APPEND

Format of command line buffer: Offset Size Description 00h BYTE max length of command line, as in INT 21/AH=0Ah 01h BYTE count of bytes to follow, excluding terminating 0Dh

    N BYTEs	command line text, terminated by 0Dh

Format of command name buffer: Offset Size Description 00h BYTE length of command name 01h N BYTEs uppercased command name (blank-padded to 11 chars by 4DOS v4) ———-2FAE01DXFFFF———————– INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE

AX = AE01h
DX = FFFFh
CH = 00h
CL = length of command name (4DOS v4.0)
DS:SI -> command name buffer (see AX=AE00h)
DS:BX -> command line buffer (see AX=AE00h)

Return: DS:SI buffer updated

  if length byte is nonzero, the following bytes contain the uppercase
  internal command to execute and the command line buffer contains the
  command's parameters (the first DS:[SI] bytes are ignored)

Notes: this call requests execution of the command which a previous call to

  AX=AE00h indicated was resident
APPEND hooks this call

———-2FB000—————————– INT 2F - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK

AX = B000h

Return: AL = 00h not installed, OK to install

   = 01h not installed, not OK to install
   = FFh installed

Notes: called by DISPLAY.SYS

documented for DOS 5.0, but undocumented in prior versions

SeeAlso: AX=B001h ———-2FB001—————————– INT 2F - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE

AX = B001h
DS:BX -> DWORD buffer for address of 8x8 font table

Return: buffer filled

AL = FFh

Note: PCDOS 3.30/4.01 set the font table offset to 0130h, MSDOS 3.30 to 0030h SeeAlso: AX=B000h ———-2FB400—————————– INT 2F - IBM PC3270 EMULATION PROG v3 - INSTALLATION CHECK

AX = B400h

Return: AL = FFh if installed ———-2FB401—————————– INT 2F - IBM PC3270 EMULATION PROG v3 - GET HOST BUFFER ADDRESS

AX = B401h

Return: ES → host screen buffer (PC ASCII format)

ES unchanged if communications not started

———-2FB402—————————– INT 2F - IBM PC3270 EMULATION PROG v3 - ???

AX = B402h
BX = ???

Return: ??? ———-2FB403—————————– INT 2F - IBM PC3270 EMULATION PROG v3 - ???

AX = B403h
???

Return: ??? ———-2FB404—————————– INT 2F - IBM PC3270 EMULATION PROG v3 - ???

AX = B404h
???

Return: ??? ———-2FB405—————————– INT 2F - IBM PC3270 EMULATION PROG v3 - ???

AX = B405h
???

Return: ??? ———-2FB700—————————– INT 2F - APPEND - INSTALLATION CHECK

AX = B700h

Return: AL = status

    00h not installed
    FFh installed

Note: MSDOS 3.30 APPEND refuses to install itself when run inside TopView or

  a TopView-compatible environment

———-2FB701—————————– INT 2F U - APPEND - ???

AX = B701h
???

Return: ??? Note: MSDOS 3.30 APPEND displays “Incorrect APPEND Version” and aborts caller ———-2FB702—————————– INT 2F - APPEND - VERSION CHECK

AX = B702h

Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND)

AL = major version number
AH = minor version number, otherwise

SeeAlso: AX=B710h ———-2FB703—————————– INT 2F U - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21

AX = B703h
ES:DI -> INT 21 handler APPEND should chain to

Return: ES:DI → APPEND's INT 21 handler Note: each invocation of this function toggles a flag which APPEND uses to

  determine whether to chain to the user handler or the original
  INT 21

———-2FB704—————————– INT 2F - DOS 3.3+ APPEND - GET APPEND PATH

AX = B704h

Return: ES:DI → active APPEND path (128 bytes max) ———-2FB706—————————– INT 2F - DOS 4+ APPEND - GET APPEND FUNCTION STATE

AX = B706h

Return: BX = APPEND state

    bit 0: set if APPEND enabled
    bits 1-11 reserved
    bit 12: (DOS 5.0) set if APPEND applies directory search even if a
		drive has been specified
    bit 13: set if /PATH flag active
    bit 14: set if /E flag active (environment var APPEND exists)
    bit 15: set if /X flag active

———-2FB707—————————– INT 2F - DOS 4+ APPEND - SET APPEND FUNCTION STATE

AX = B707h
BX = APPEND state bits (see AX=B706h)

———-2FB710—————————– INT 2F U - DOS 3.3+ APPEND - GET VERSION INFO

AX = B710h

Return: AX = current APPEND state (see AX=B706h)

BX = ??? (0000h in MSDOS 3.30 and 5.00)
CX = ??? (0000h in MSDOS 3.30 and 5.00)
DL = major version
DH = minor version

SeeAlso: AX=B702h ———-2FB711—————————– INT 2F - DOS 4+ APPEND - SET RETURN FOUND NAME STATE

AX = B711h

Note: if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or

6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename is
written over top of the filename passed to the INT 21h call.  The
application must provide a sufficiently large buffer.  This state is
reset after the next INT 21h call processed by APPEND.

BUG: DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for

  INT 21/AH=6Ch

SeeAlso: INT 21/AH=4Eh ———-2FB800—————————– INT 2F - network - INSTALLATION CHECK

AX = B800h

Return: AL = status

    00h	    not installed
    nonzero installed
      BX = installed component flags (test in this order!)
	   bit 6   server
	   bit 2   messenger
	   bit 7   receiver
	   bit 3   redirector

———-2FB803—————————– INT 2F - network - GET NETWORK EVENT POST HANDLER

AX = B803h

Return: ES:BX → event post handler (see AX=B804h) SeeAlso: AX=B804h,AX=B903h ———-2FB804—————————– INT 2F - network - SET NETWORK EVENT POST HANDLER

AX = B804h
ES:BX -> new event post handler

Notes: used in conjunction with AX=B803h to hook into the network event post

  routine
The specified handler is called on any network event.  Two events are
  defined: message received and critical network error.

SeeAlso: AX=B803h,AX=B904h

Values post routine is called with:

AX = 0000h single block message
    DS:SI -> ASCIZ originator name
    DS:DI -> ASCIZ destination name
    ES:BX -> text header (see below)
AX = 0001h start multiple message block
    CX = block group ID
    DS:SI -> ASCIZ originator name
    DS:DI -> ASCIZ destination name
AX = 0002h multiple block text
    CX = block group ID
    ES:BX -> text header (see below)
AX = 0003h end multiple block message
    CX = block group ID
AX = 0004h message aborted due to error
    CX = block group ID
AX = 0101h server received badly formatted network request
    Return: AX = FFFFh (PC LAN will process error)
AX = 0102h unexpected network error
    ES:BX -> NCB (see INT 5C)
AX = 0103h server received INT 24 error
    other registers as for INT 24, except AH is in BH
    Return: as below, but only 0000h and FFFFh allowed

Return: AX = response code

    0000h user post routine processed message
    0001h PC LAN will process message, but message window not displayed
    FFFFh PC LAN will process message

Format of text header: Offset Size Description 00h WORD length of text (maximum 512 bytes) 02h N BYTEs text of message Note: all CRLF sequences in message text are replaced by 14h ———-2FB807—————————– INT 2F - Network - GET NetBIOS NAME NUMBER OF MACHINE NAME

AX = B807h

Return: CH = NetBIOS name number of the machine name SeeAlso: INT 21/AX=5E00h ———-2FB808—————————– INT 2F U - Network - RELINK KEYBOARD HANDLER

AX = B908h
ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09

Notes: this call replaces the address to which RECEIVER.COM chains on an

  INT 09 without preserving the original value.	 This allows a prior
  handler to unlink, but does not allow a new handler to be added
  such that RECEIVER gets the INT 09 first unless it completely takes
  over INT 09 and never chains.
called by DOS 3.2 KEYBxx.COM

SeeAlso: AX=B908h ———-2FB809—————————– INT 2F - LANtastic Network, NetWare Lite - VERSION CHECK

AX = B809h

Return: AH = major version

AL = minor version (decimal)

———-2FB900—————————– INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK

AX = B900h

Return: AL = 00h if not installed

     FFh if installed

———-2FB901—————————– INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS

AX = B901h

Return: AL = ???

ES:BX -> RECEIVER.COM INT 2F handler

Note: allows more efficient execution by letting the caller bypass any other

  INT 2F handlers which have been added since RECEIVER.COM was
  installed

———-2FB903—————————– INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS

AX = B903h

Return: ES:BX → POST handler SeeAlso: AX=B803h,AX=B904h ———-2FB904—————————– INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS

AX = B904h
ES:BX -> new POST handler

SeeAlso: AX=B804h,AX=B903h ———-2FB905—————————– INT 2F - PC Network RECEIVER.COM - GET FILENAME

AX = B905h
DS:BX -> 128-byte buffer for filename 1
DS:DX -> 128-byte buffer for filename 2

Return: buffers filled from RECEIVER.COM internal buffers Note: use of filenames is unknown, but one appears to be for storing messages SeeAlso: AX=B906h ———-2FB906—————————– INT 2F - PC Network RECEIVER.COM - SET FILENAME

AX = B906h
DS:BX -> 128-byte buffer for filename 1
DS:DX -> 128-byte buffer for filename 2

Return: RECEIVER.COM internal buffers filled from user buffers Note: use of filenames is unknown, but one appears to be for storing messages SeeAlso: AX=B905h ———-2FB908—————————– INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER

AX = B908h
ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09

Note: this call replaces the address to which RECEIVER.COM chains on an

  INT 09 without preserving the original value.	 This allows a prior
  handler to unlink, but does not allow a new handler to be added
  such that RECEIVER gets the INT 09 first.

SeeAlso: AX=B808h ———-2FBC00—————————– INT 2F - Windows 3.0, DOS 5.0 EGA.SYS - INSTALLATION CHECK

AX = BC00h

Return: AL = 00h not installed, OK to install

   = 01h not installed, not OK to install
   = FFh installed
	BX = 5456h ("TV")

Note: AH=BCh is the default value, which may be changed by a command line

  parameter to any value between 80h and FFh

SeeAlso: AX=BC06h,INT 10/AH=FAh“EGA” ———-2FBC06—————————– INT 2F U - MS Windows 3.0, DOS 5.0 EGA.SYS - GET VERSION INFO

AX = BC06h

Return: BX = 5456h (“TV”)

CH = major version
CL = minor version
DL = revision

SeeAlso: AX=BC00h,INT 10/AH=FAh“EGA” ———-2FBE00—————————– INT 2F - REDVIEW - INSTALLATION CHECK

AX = BE00h

Return: AL = FFh if installed Note: REDVIEW is a public-domain TSR by Alexandr Novy and Petr Horak which

  copies data sent to standard output to standard error when the
  former has been redirected to a file, thus allowing the data to
  be seen on the screen at the same time it is captured in a file

———-2FBF00—————————– INT 2F - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK

AX = BF00h

Return: AL = FFh if installed ———-2FBF01—————————– INT 2F U - PC LAN PROGRAM REDIRIFS.EXE internal - ???

AX = BF01h
???

Return: ??? ———-2FBF80—————————– INT 2F - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT

AX = BF80h
ES:DI -> FAR entry point to IFS handler in REDIRIFS

Return: AL = FFh if installed

    ES:DI -> internal workspace

Note: all future IFS calls to REDIR.SYS are passed to the ES:DI entry point ———-2FC000—————————– INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK

AX = C000h

Return: AL = FFh

ES:BX -> call entry point
ES:SI -> signature string "LINKSUP$"

Note: LSL.COM may use any multiplex number between C0h and FFh; it searches

  for itself in that range, and installs using the first free multiplex
  number in the range if not already loaded.

———-2FC050—————————– INT 2F U - Explosiv 2.00 - INSTALLATION CHECK

AX = C050h

Return: AL = 51h if installed Notes: Explosiv is a shareware animated screen blanker for DOS and Windows 3

  by Reidar Gresseth and Chris Hook
AH=C0h is the default multiplex number, but may be reconfigured to
  any value from C0h to C9h

SeeAlso: AX=C051h ———-2FC052—————————– INT 2F U - Explosiv 2.00 - UNINSTALL

AX = C052h
DX:BX = address to return to on successful uninstall

Return: at specified address if successful

AL = 53h on error

Note: specified return address must have the segment of the caller's PSP SeeAlso: AX=C050h ———-2FC054—————————– INT 2F U - Explosiv 2.00 - GET ???

AX = C054h

Return: AL = ??? Note: returns value set by AX=C057h SeeAlso: AX=C057h ———-2FC055—————————– INT 2F U - Explosiv 2.00 - SET BLANKING INTERVAL

AX = C055h
BX = new interval in clock ticks

———-2FC056—————————– INT 2F U - Explosiv 2.00 - SET ???

AX = C056h
BL = ???

———-2FC057—————————– INT 2F U - Explosiv 2.00 - SET ???

AX = C057h
BL = ???

SeeAlso: AX=C054h ———-2FC058—————————– INT 2F U - Explosiv 2.00 - SET ???

AX = C058h
BL = ???

———-2FC059—————————– INT 2F U - Explosiv 2.00 - CLEAR ???

AX = C059h

Note: clears flag set by AX=C05Ah SeeAlso: AX=C05Ah ———-2FC05A—————————– INT 2F U - Explosiv 2.00 - SET ???

AX = C05Ah
BL = ???

Note: sets flag cleared by AX=C059h then stores BL SeeAlso: AX=C059h ———-2FC05B—————————– INT 2F U - Explosiv 2.00 - SET ???

AX = C05Bh
BL = ???

———-2FC05C—————————– INT 2F U - Explosiv 2.00 - SET ???

AX = C05Ch
BL = ???

———-2FC900BP0000———————– INT 2F U - ThunderByte??? - INSTALLATION CHECK

AX = C900h
BP = 0000h

Return: AL = FFh if installed

    BP >= 0014h

Note: called by TBSCANX SeeAlso: AX=C987h,AX=CA00h ———-2FC987—————————– INT 2F U - ThunderByte??? - DISINFECT FILE???

AX = C987h
BX:DX -> filename
BX:CX -> virus name

Return: AX = status

    0000h successful???

Note: called by TBSCANX SeeAlso: AX=CA00h ———-2FC9FF—————————– INT 2F - STACKMAN - INSTALLATION BROADCAST

AX = C9FFh
BL = BCD version number
CX = number of stacks
DX = stack size in bytes

Notes: called by STACKMAN when it goes resident to inform interested TSRs that

  its API is available
the installation check consists of testing for the string "STACKXXX" at
  offset 0Ah from the INT B4 handler

SeeAlso: INT B4“STACKMAN”,INT B5“STACKMAN” ———-2FCA00BX5442———————– INT 2F - TBSCANX - INSTALLATION CHECK

AX = CA00h
BX = 5442h ('TB')

Return: AL = 00h not installed

   = FFh installed
	BX = 7462h ('tb') if BX was 5442h on entry

Note: TBSCANX is a resident virus scanning module by Frans Veldman. Programs

  may perform virus checks on themselves, other program files, or their
  data files by invoking the TBSCANX API.

SeeAlso: AX=4653h,AX=C900h ———-2FCA01—————————– INT 2F - TBSCANX - GET STATUS

AX = CA01h

Return: AH = BCD version number (v2.2+)

   = CAh for versions before 2.2
AL = state (00h = disabled, 01h = enabled)
CX = number of signatures which will be searched

—v2.0—

BX = EMS handle, 0000h if not using EMS

—v2.3+—

BX = segment of swap area, 0000h if not swapped
DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS

SeeAlso: AX=CA02h ———-2FCA02—————————– INT 2F - TBSCANX - SET STATE

AX = CA02h
BL = new state (00h = disabled, 01h = enabled)

SeeAlso: AX=CA01h ———-2FCA03—————————– INT 2F - TBSCANX - SCAN BUFFER

AX = CA03h
CX = size of buffer
DS:DX -> buffer containing data to scan

Return: CF clear if no virus signatures found

    BX,ES destroyed
CF set if signature found
    ES:BX -> ASCIZ virus name (v2.3+)
    DS:DX -> ASCIZ virus name (v2.0)
AX,CX,DX destroyed (v2.3+)
all other registers except CS:IP and SS:SP destroyed (v2.0)

SeeAlso: AX=CA04h ———-2FCA04—————————– INT 2F - TBSCANX - SCAN FILE

AX = CA04h
DS:DX -> filename

Return: CF clear if no virus signatures found

    BX,ES destroyed
CF set if signature found
    ES:BX -> ASCIZ virus name
AX,CX,DX destroyed

Note: this function requires at least 4K free memory SeeAlso: AX=CA03h ———-2FCAFEBX0000———————– INT 2F U - THELP v3.0 - INSTALLATION CHECK

AX = CAFEh
BX = 0000h

Return: BX = segment of resident code if installed

   = 0000h if not installed

SeeAlso: AX=5453h ———-2FCB00—————————– INT 2F - Communicating Applications Specification - INSTALLATION CHECK

AX = CB00h

Return: AL = 00h not installed, OK to install

     01h not installed, not OK to install
     FFh installed

Note: AH = CBh is the default identifier, but may be reconfigured SeeAlso: AH=2Ah,AX=8000h“FaxBIOS”,AX=CB0Eh,AX=CBDCh ———-2FCB01—————————– INT 2F - Communicating Applications Specification - SUBMIT A TASK

AX = CB01h
DS:DX -> ASCIZ name of task control file

Return: AX >= 0: event handle

   < 0: error code

Note: files needed for an event must be kept until task is complete or error SeeAlso: AX=CB0Bh,AX=CB15h

Error codes (AH = class, AL = subcode, value passed back is 2's complement):

Class 00h	--- FAX warnings
Subcode 00h	no error
	02h	bad scanline count
	03h	page sent with errors, could not retransmit
	04h	received data lost
	05h	invalid or missing logo file
	06h	filename does not match nonstandard format (NSF) header
	07h	file size does not match NSF header
Class 01h	--- DOS warnings (data was sent)
Subcode 01h	invalid function
	05h	access denied
	06h	invalid handle
	others	see INT 21/AH=59h
Class 02h	--- fatal errors (data not sent)
Subcode	00h	multiplex handler failed
	01h	unknown command
	02h	bad event handle
	03h	FIND NEXT attempted before FIND FIRST
	04h	no more events
	07h	invalid queue type
	08h	bad control file
	09h	communication board busy
	0Ah	invalid command parameter
	0Bh	can't uninstall resident code
	0Ch	file exists
	80h	unknown task type
	81h	bad phone number
	82h	bad .PCX file header
	83h	unexpected EOF
	84h	unexpected disconnect
	85h	too many dialing retries
	86h	no file specified for send
	87h	communication board timeout
	88h	received too many pages (>1023) of data
	89h	manual connect initiated too long ago
	8Ah	hardware command set error
	8Bh	bad NonStandard Format (NSF) header file
Class 03h	--- fatal DOS errors
Subcode 02h	file not found
	03h	path not found
	others	see INT 21/AH=59h
Class 04h	--- FAX errors
Subcode 01h	remote unit not Group 3 compatible
	02h	remote unit did not send capabilities
	03h	other FAX machine incompatible
	04h	other FAX incapable of file transfers
	05h	exceeded retrain or FAX resend limit
	06h	line noise or failure to agree on bit rate
	07h	remote disconnected after receiving data
	08h	no response from remote after sending data
	09h	remote's capabilities incompatible
	0Ah	no dial tone (v1.2+)
	0Bh	invalid response from remote unit after sending data
	0Dh	phone line dead or remote unit disconnected
	0Eh	timeout while waiting for secondary dial tone (v1.2+)
	11h	invalid command from remote after receiving data
	15h	tried to receive from incompatible hardware
	5Ch	received data overflowed input buffer
	5Dh	remote unexpectedly stopped sending data
	5Eh	other FAX machine jammed (no data sent)
	5Fh	remote took too long to send fax scan line
	63h	can't get through to remote unit
	64h	user canceled event
Class 05h	--- application-specific (v1.2+)
---Intel FAXPOP.EXE
Subcode 00h	tried to send while in graphics mode
	01h	insufficient disk space
	02h	internal buffer overflow
Class 06h	--- CAS implementation-specific (v1.2+)

———-2FCB02—————————– INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT

AX = CB02h

Return: AX >= 0: event handle of aborted event

   < 0: error code (see AX=CB01h)

Note: termination could take up to 30 seconds SeeAlso: AX=CB08h,AX=CB10h ———-2FCB05—————————– INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY

AX = CB05h
CX = status of events to find
    0000h successful completion
    0001h waiting to be processed
    0002h number has been dialed
    0003h connection established, sending
    0004h connection established, receiving
    0005h event aborted
    FFFFh find any event, regardless of status
    other negative values, match error code
DH = direction
    00h chronological order, earliest to latest
    01h reverse chronological order, latest to earliest
DL = queue to search
    00h task queue
    01h receive queue
    02h log queue

Return: AX = 0000h successful

    BX = event handle for found event
   < 0	   error code (see AX=CB01h)

SeeAlso: AX=CB06h,AX=CB07h ———-2FCB06—————————– INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY

AX = CB06h
DL = queue to search
    00h task queue
    01h receive queue
    02h log queue

Return: AX = 0000h successful

    BX = event handle for found event
   < 0	   error code (see AX=CB01h)

Note: direction of search is same as preceding FIND FIRST call SeeAlso: AX=CB05h ———-2FCB07—————————– INT 2F - Communicating Applications Specification - OPEN FILE

AX = CB07h
BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
CX = receive file number (ignored for task queue and log queue)
    0000h  open receive control file
    N	   open Nth received data file
DL = queue
    00h task queue
    01h receive queue control file or received file, as given by CX
    02h log queue
    03h group file in task queue (v1.2+)
    04h group file in log queue (v1.2+)

Return: AX = 0000h successful

    BX = DOS file handle for requested file
   < 0	   error code (see AX=CB01h)

Note: the returned file handle has been opened in read-only mode and should

  be closed with INT 21/AH=3Eh after use

SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h ———-2FCB08—————————– INT 2F - Communicating Applications Specification - DELETE FILE

AX = CB08h
BX = event handle
CX = receive file number
    0000h delete ALL received files and receive control file
    N	  delete Nth received file
DL = queue
    00h delete control file in task queue and corresponding group file
	if it exists
    01h delete file in receive queue, as given by CX
    02h delete control file in log queue (individual deletions not
	recommended, to maintain integrity of log) and corresponding
	group file if it exists

Return: AX = 0000h successful

   < 0	   error code (see AX=CB01h)\

SeeAlso: AX=CB02h,AX=CB09h ———-2FCB09—————————– INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q

AX = CB09h
DL = queue
    00h delete all control files in task queue, including all group
	files
    01h delete all files in receive queue
    02h delete all control files in log queue, including all group
	files

Return: AX = 0000h successful

   < 0	   error code (see AX=CB01h)

SeeAlso: AX=CB08h ———-2FCB0A—————————– INT 2F - Communicating Applications Specification - GET EVENT DATE

AX = CB0Ah
BX = event handle
DL = queue
    00h task queue
    01h receive queue
    02h log queue

Return: AX = 0000h successful

	CX = year
	DH = month
	DL = day
   < 0	   error code (see AX=CB01h)

SeeAlso: AX=CB0Bh,AX=CB0Ch ———-2FCB0B—————————– INT 2F - Communicating Applications Specification - SET TASK DATE

AX = CB0Bh
BX = event handle (task event only)
CX = year
DH = month
DL = day

Return: AX = 0000h successful

   < 0	   error code (see AX=CB01h)

Note: setting a task's date and time to before the current date and time

  causes it to execute immediately

SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh ———-2FCB0C—————————– INT 2F - Communicating Applications Specification - GET EVENT TIME

AX = CB0Ch
BX = event handle
DL = queue
    00h task queue
    01h receive queue
    02h log queue

Return: AX = 0000h successful

	CH = hour
	CL = minute
	DH = second
	DL = 00h
   < 0	   error code (see AX=CB01h)

SeeAlso: AX=CB0Ah,AX=CB0Dh ———-2FCB0D—————————– INT 2F - Communicating Applications Specification - SET TASK TIME

AX = CB0Dh
BX = event handle (task events only)
CH = hour
CL = minute
DH = second
DL unused

Return: AX = 0000h successful

   < 0	   error code (see AX=CB01h)

Note: setting a task's date and time to before the current date and time

  causes it to execute immediately

SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h ———-2FCB0E—————————– INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK

AX = CB0Eh
DS:DX -> 256-byte buffer

Return: AX = 0000h successful

	buffer filled
   < 0	   error code (see AX=CB01h)

Format of external data block: Offset Size Description 00h BYTE CAS major version 01h BYTE CAS minor version 02h 68 BYTEs ASCIZ path to directory containing CAS software, ends in slash 46h 13 BYTEs ASCIZ name of current phonebook (in CAS directory) 53h 13 BYTEs ASCIZ name of current logo file (in CAS directory) 60h 32 BYTEs ASCIZ default sender name 80h 21 BYTEs ASCIZ CCITT identification of fax device 95h 107 BYTEs reserved ———-2FCB0F—————————– INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE

AX = CB0Fh
DL = subfunction
    00h get current autoreceive state
    01h set autoreceive state
	DH = number of rings before answer, 00h = never

Return: AX = 0000h autoreceive disabled

   = N	   number of rings before answer
   < 0	   error code (see AX=CB01h)

———-2FCB10—————————– INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS

AX = CB10h
DS:DX -> 512-byte buffer

Return: AX = 0000h successful

	BX = event handle of current event or negative error code if
		no current event
	buffer filled
   < 0	   error code (see AX=CB01h)

SeeAlso: AX=CB02h,AX=CB0Dh

Format of status area: Offset Size Description 00h BYTE event type

	00h send
	01h receive
	02h polled send
	03h polled receive
	04h to 7Fh reserved
	FFh serious hardware error

01h BYTE transfer type

	00h 200x200 dpi, FAX mode
	01h 100x200 dpi, FAX mode
	02h file transfer mode
	03h to 7Fh reserved

02h WORD event status

	0000h completed successfully
	0001h waiting
	0002h number dialed
	0003h connected, sending
	0004h connected, receiving
	0005h aborted
	0006h to 007Fh reserved
	0080h to 7FFFh application-specific events
	8000h to FFFFh error codes

04h WORD event time (packed DOS time format, see INT 21/AX=5700h) 06h WORD event date (packed DOS date format, see INT 21/AX=5700h) 08h WORD number of files to transfer, max 7FFFh 0Ah WORD offset of file transfer record 0Ch 47 BYTEs ASCIZ phone number to call 3Bh 64 BYTEs ASCIZ application-specific tag string 7Bh BYTE reserved (00h) 7Ch BYTE connect time, seconds 7Dh BYTE connect time, minutes 7Eh BYTE connect time, hours 7Fh DWORD total number of pages in all files 83h DWORD pages already transmitted 87h WORD number of files already transmitted 89h BYTE cover page flag

	00h don't transmit cover page
	01h transmit cover page
	02h to 7Fh reserved

8Ah WORD total number of transmission errors 8Ch 78 BYTEs reserved (zeros) DAh 21 BYTEs ASCIZ remote FAX's CCITT identification EFH 32 BYTEs ASCIZ destination name 10Fh 32 BYTEs ASCIZ sender name 12Fh 80 BYTEs filename of PCX logo file (max 1780×800 pixels) 17Fh 128 BYTEs file transfer record for current event (see below)

Format of file transfer record: Offset Size Description 00h BYTE file type (ignored unless FAX)

	00h ASCII
	01h PCX
	02h DCX
	03h to 7Fh reserved

01h BYTE text size for ASCII FAX file

	00h = 80 columns by 66 lines (11 inches)
	01h = 132 columns by 88 lines (11 inches)
	02h to 7Fh reserved

02h BYTE status of file

	00h untouched
	01h opened
	02h moved
	03h deleted
	04h not yet received
	05h to 7Fh reserved

03h DWORD bytes already transmitted 07h DWORD file size in bytes 0Bh WORD pages alread transmitted 0Dh WORD number of pages in file 0Fh 80 BYTEs ASCIZ filename 5Fh BYTE 1/8 inch page length

	if page length below set to 01h through 7Fh, this value 
	specifies additional 1/8 inch increments to page length

60h BYTE page length

	00h = 11 inches
	01h to 7Fh = page length is this number of inches plus value of
		1/8 inch field above
	80h to FEh reserved
	FFh = ASCII pages ending with formfeed

61h 31 BYTEs reserved (zeros) ———-2FCB11—————————– INT 2F - Communicating Applications Specification - GET QUEUE STATUS

AX = CB11h
DL = queue to get status of
    00h task queue
    01h receive queue
    02h log queue
    03h send events (v1.2+)
    04h receive events (v1.2+)

Return: AX >= 0 total number of changes made to queue, modulo 32768

	BX = number of control files currently in queue
	CX = number of received files (zero for task and log queues)
AX < 0	error code (see AX=CB01h)

SeeAlso: AX=CB12h ———-2FCB11DL03————————- INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS

AX = CB11h
DL = 03h

Return: AX = number of successful sends since resident manager started

BX = number of unsuccessful sends, including warnings

SeeAlso: AX=CB11h/DL=04h ———-2FCB11DL04————————- INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS

AX = CB11h
DL = 04h

Return: AX = number of received file events since resident manager started

BX = number of received FAX events

SeeAlso: AX=CB11h/DL=03h ———-2FCB12—————————– INT 2F - Communicating Applications Specification - GET HARDWARE STATUS

AX = CB12h
DS:DX -> 128-byte status buffer

Return: AX = 0000h successful

	buffer filled with hardware-dependent status information
   < 0	   error code (see AX=CB01h)

SeeAlso: AX=CB10h,AX=CB11h

Format of status buffer for Intel Connection CoProcessor: Offset Size Description 00h BYTE bit flags

	bit 7: hardware busy sending or receiving
	bit 6: last page of data
	bit 5: no data on current page
	bit 4: retransmit request for current page being transmitted
	bit 3: NSF mode active
	bits 2-0: reserved

01h BYTE number of kilobytes of free buffer space 02h BYTE page buffer status

	bit 7: Connection CoProcessor has documents to send
	bits 6-0: number of pages in buffer

03h BYTE number of retries left for dialing number 04h BYTE page number to retransmit 05h BYTE communications status

	bit 7: originating call
	bit 6: FAX message to be sent
	bit 5: on line
	bit 4: ring detected and receive enabled
	bit 3: buffer dumped on receive
	bits 2-0: hardware sequence state
		000 idle
		001 dial
		010 answer
		011 transmit
		100 receive
		101 pre-message
		110 post-message
		111 disconnect

06h BYTE baud rate

	bit 7: reserved
	bits 6-4: baud rate
		000 = 300 baud	(V.21 SDLC or HDLC mode)
		100 = 2400 baud (V.27 ter)
		101 = 4800 baud (V.27 ter)
		110 = 7200 baud (V.29)
		111 = 9600 baud (V.29)
	bits 3-0: reserved, should be 0110

07h 3 BYTEs reserved 0Ah BYTE hardware status

	bit 7: modem option installed
	bit 6: Connection CoProcessor has control of DAA (not latched)
	bit 5: on line (not latched)
	bit 4: ring detected (not latched)
	bit 3: data in command buffer (not latched)
	bit 2: set if using DMA channel 1, clear if using DMA channel 3
	bit 1: line length compensation bit 1 set (not latched)
	bit 0: line length compensation bit 0 set (not latched)

0Bh BYTE switch states

	bit 7: reserved
	bit 6: unused
	bit 5: spare switch open
	bit 4: FAX ADR1 switch open
	bit 3: FAX ADR0 switch open
	bit 2: alternate interrupt switch open
	bit 1: COM SEL 1 switch open
	bit 0: COM SEL 0 switch open
		Note: valid combinations of bits 0-2 are
			000  COM2 IRQ3 IObase 2F8h
			001  COM1 IRQ4 IObase 3F8h
			010  COM4 IRQ3 IObase 2E8h
			011  COM3 IRQ4 IObase 3E8h
			110  COM4 IRQ2 IObase 2E8h
			111  COM3 IRQ5 IObase 3E8h

0Ch BYTE bit flags

	bit 7: reserved
	bit 6: auxiliary relay forced ON
	bit 5: modem select relay forced ON
	bit 4: offhook relay forced ON
	bit 3: 9600 bps enabled
	bit 2: 7200 bps enabled
	bit 1: 4800 bps enabled
	bit 0: 2400 bps enabled

0Dh BYTE reserved 0Eh WORD error count (only valid while busy, reset when idle) 10h DWORD size of nonstandard format (NSF) file in bytes 14h BYTE 'A' if Connection CoProcessor board present 15h 9 BYTEs reserved 1Eh 21 BYTEs ASCIZ CCITT identification 33h 77 BYTEs reserved

Format of status buffer for Intel SatisFAXtion board: Offset Size Description 00h BYTE connection status flags

	bit 7: busy in T.30 CCITT fax protocol
	bit 6: data on current page/file (only used for block xfers)
	bit 5: retransmission of last page requested
	bit 4: in file transfer mode
	bit 3: data in buffer
	bit 2: data buffer dumped on receive
	bit 1: 200x100 dpi resolution instead of 200x200 dpi
	bit 0: data modem in use, FAX image modem not available

01h BYTE board state

	bit 7: reserved
	bit 6: handset jack active, data and FAX modems not available
	bits 5-3: current bit rate
	    000	 300 bps (V.21 HDLC)
	    100 2400 bps (V.27 ter)
	    101 4800 bps (V.27 ter)
	    110 7200 bps (V.29)
	    111 9600 bps (V.29)
	bits 2-0: T.30 CCITT protocol state
	    000 idle
	    001 dialing
	    010 answering
	    011 transmitting
	    100 receiving
	    101 pre-message
	    110 post-message
	    111 disconnect

02h BYTE number of KB free in buffer 03h BYTE number of pages or files in buffer 04h BYTE number of redials remaining on current number 05h BYTE FAX page number to retransmit 06h BYTE current page/file in block transfer 07h BYTE number of rings received (only if auto-answer enabled) 08h WORD error count 0Ah DWORD length of file being transferred 0Eh 6 BYTEs reserved 14h BYTE 'B' is SatisFAXtion board present 15h 13 BYTEs ASCIZ transfer agent name 22h 5 BYTEs ASCIZ transfer agent version number 27h 13 BYTEs ASCIZ resident loader name 34h 5 BYTEs ASCIZ resident loader version number 39h 21 BYTEs ASCIZ remote CSID 4Eh 13 BYTEs ASCIZ resident manager name 5Bh 5 BYTEs ASCIZ resident manager version number 60h 32 BYTEs reserved Note: the Intel Connection CoProcessor and SatisFAXtion may be distinguished

  by examining the byte at offset 14h

———-2FCB13DL00————————- INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS

AX = CB13h
DL = 00h

Return: AX = 0040h in progress

   >= 0	   passed
   < 0	   hardware-dependent failure code (see below)

SeeAlso: AX=CB13h/DL=01h

Intel Connection CoProcessor failure codes:

bit 3: 9600 bps FAX modem module failed
bit 2: SDLC chip failed
bit 1: RAM failed
bit 0: ROM checksum failed

Intel SatisFAXtion failure codes:

bit 1: 2400 bps data modem failed
bit 0: 9600 bps FAX modem failed

———-2FCB13DL01————————- INT 2F - Communicating Applications Specification - START DIAGNOSTICS

AX = CB13h
DL = 01h

Return: AX = 0000h successfully started

   < 0	   error code (see AX=CB01h)

SeeAlso: AX=CB13h/DL=00h ———-2FCB14—————————– INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE

AX = CB14h
BX = event handle
CX = receive file number
     0001h first received file
     N	   Nth received file
DS:DX -> ASCIZ string specifying new name for file (must not exist)

Return: AX = 0000h successful

   < 0	   error code (see AX=CB01h)

———-2FCB15—————————– INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND

AX = CB15h
DS:DX -> variable-length data area (see below)

Return: AX >= 0 event handle

   < 0	error code (see AX=CB01h)

SeeAlso: AX=CB01h

Format of data area: Offset Size Description 00h BYTE transfer type

	00h = 200x200 dpi, fax mode
	01h = 100x200 dpi, fax mode
	02h = file transfer mode
	03h to 7Fh reserved

01h BYTE text size

	00h = 80 columns
	01h = 132 columns
	02h to 7Fh reserved

02h WORD time to send (DOS packed time format, see INT 21/AX=5700h) 04h WORD date to send (DOS packed date format, see INT 21/AX=5700h) 06h 32 BYTEs ASCIZ destination name 26h 80 BYTEs ASCIZ name of file to send 76h 47 BYTEs ASCIZ phone number to dial A5h 64 BYTEs ASCIZ application-specific tag string E5h BYTE reserved (00h) E6h BYTE cover page

	00h don't send cover page
	01h send cover page
	02h to 7Fh reserved

E7h 23 BYTEs reserved (zeros) FEh variable ASCIZ string containing text of cover page (if cover page flag

	set to 01h)

———-2FCB16BX1234———————– INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER

AX = CB16h
BX = 1234h
CX = 5678h
DX = 9ABCh

Return: AX = 0000h successful

   < 0	   error code

SeeAlso: AX=CB00h ———-2FCB17—————————– INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS

AX = CB17h
BX = event handle
CL = cover page status
    00h not read
    01h read by user

Return: AX = 0000h successful

   < 0	   error code

———-2FCB80—————————– INT 2F - Intel SatisFAXtion CASMGR - ???

AX = CB80h
???

Return: ??? ———-2FCB81—————————– INT 2F - Intel SatisFAXtion CASMGR - ???

AX = CB81h
???

Return: ??? ———-2FCB82—————————– INT 2F - Intel SatisFAXtion CASMGR - ???

AX = CB82h
???

Return: ??? ———-2FCBDC—————————– INT 2F - Comwave Microfax Specification - GET STATUS ARRAY

AX = CBDCh
BL = 56h
BH = line number (starts with 1)
CX:DX -> 32-byte status buffer or 80 character string

Return: AX = number of cards installed, or FFFFh on error Program: Comwave manufacturers the Microfax line of fax cards which are a high-

  performance multi-card FAX solution for OEMs.

Note: defaults to AH=CBh but can be changed SeeAlso: AX=CBDDh,AX=DA00h ———-2FCBDD—————————– INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION

AX = CBDDh
BL = 56h
BH = ?
CX:DX -> command to execute

Return: AX = status

    0000h success
    FFFFh on error

SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh ———-2FCC–SI5453———————– INT 2F U - Qualitas Qcach v4.00

AH = CCh
SI = 5453h or 7473h
AL = ???
DL = 00h or ???

Return: SI = 7473h

???

———-2FCD00—————————– INT 2F - Intel Image Processing Interface - INSTALLATION CHECK

AX = CD00h

Return: AL = 00h not installed, OK to install

     01h not installed, not OK to install
     FFh installed

SeeAlso: AX=CD02h“Image” ———-2FCD00—————————– INT 2F - SWELL.EXE - INSTALLATION CHECK

AX = CD00h

Return: AX = 00FFh installed

    BH = major version
    BL = minor version

Note: SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child

  process with INT 21/AH=4Bh

———-2FCD01—————————– INT 2F - Intel Image Processing Interface - SET DEVICE NAME

AX = CD01h
CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")

Return: AL = 00h successful

	CX:BX -> internal character device name
   = 80h error

———-2FCD01—————————– INT 2F - SWELL.EXE - SUSPEND ONCE

AX = CD01h

Return: AX = 0000h SeeAlso: AX=CD02h“SWELL” ———-2FCD02—————————– INT 2F - Intel Image Processing Interface - GET VERSION NUMBER

AX = CD02h

Return: AL = 00h/01h successful

	BH = major version number (BCD)
	BL = minor version number (BCD)
   = 80h error

Note: if return AL = 01h, the IPI supports network redirection SeeAlso: AX=CD00h“Image” ———-2FCD02—————————– INT 2F - SWELL.EXE - SUSPEND

AX = CD02h

Return: AX = 0000h SeeAlso: AX=CD03h“SWELL” ———-2FCD03—————————– INT 2F - Intel Image Processing Interface - SELECT SCAN LINE

AX = CD03h
BX = scan line
CX = requested density in dots per inch (300, 600, or 1200)

Return: AL = 00h succesful

	CX = density at which scan line was mapped
	ES:DI -> start of scan line
AL = 80h unsuccessful
   = 81h scan line out of range
   = 82h unsupported scan line density
   = 83h out of memory

SeeAlso: AX=CD04h“Image” ———-2FCD03—————————– INT 2F - SWELL.EXE - ACTIVATE

AX = CD03h

Return: AX = 0000h SeeAlso: AX=CD02h“SWELL” ———-2FCD04—————————– INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE

AX = CD04h
CX:BX -> structure (see below)

Return: AL = 00h successful

   = 80h unsuccessful
   = 81h scan line out of range
   = 82h unsupported scan line density
   = 83h out of memory
   = 84h unrecognized source
   = 85h initialization error

SeeAlso: AX=CD03h“Image”

Format of structure: Offset Size Description 00h WORD image source (0 = conventional memory, 1 = expanded memory) 02h DWORD pointer to image data 06h WORD scan line on which to place 08h WORD bit offset from start of scan line at which to place 0Ah WORD density of bitmap data (300, 600, or 1200 dpi) 0Ch WORD width in bits of data 0Eh WORD source logical page number 10h WORD source handle (only if source in expanded memory) 12h WORD source offset (only if source in expanded memory) ———-2FCD04—————————– INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE

AX = CD04h

Return: AX = 0000h SeeAlso: AX=CD05h“SWELL” ———-2FCD05—————————– INT 2F - Intel Image Processing Interface - PRINT PAGE

AX = CD05h

Return: AL = 00h successful

   = 80h unsuccessful

Note: page image is retained, so multiple calls will print multiple copies of

  the page

SeeAlso: AX=CD06h“Image” ———-2FCD05—————————– INT 2F - SWELL.EXE - TURN ON VERBOSE MODE

AX = CD05h

Return: AX = 0000h SeeAlso: AX=CD04h“SWELL” ———-2FCD06—————————– INT 2F - Intel Image Processing Interface - CLEAR PAGE

AX = CD06h

Return: AL = 00h successful

   = 80h unsuccessful

Note: palette is reset to default SeeAlso: AX=CD09h“Image” ———-2FCD06—————————– INT 2F - SWELL.EXE - UNINSTALL

AX = CD06h

Return: AX = 0000h uninstalled

   = 8002h programs still swapped, not uninstalled

———-2FCD07—————————– INT 2F - Intel Image Processing Interface - reserved

AX = CD07h

———-2FCD07—————————– INT 2F - SWELL.EXE - GET INFO

AX = CD07h
ES:BX -> 32-byte buffer for info

Return: AX = 0000h successful

    ES:BX buffer filled
   = 8001h buffer wrong size

Format of info buffer: Offset Size Description 00h WORD 20h (total size of buffer) 02h BYTE suspend-once mode active if nonzero 03h BYTE 00h active, 01h suspended 04h BYTE 00h quiet, 01h verbose 05h BYTE “Borland support” (allowing INT 21/AX=4B01h) on if nonzero 06h 26 BYTEs unused??? ———-2FCD08—————————– INT 2F - Intel Image Processing Interface - SCREEN IMAGE

AX = CD08h
CX:BX -> structure (see below)

Return: AL = 00h successful

   = 80h unsuccessful
   = 81h scan line out of range
   = 82h unsupported scan line density
   = 83h out of memory
   = 84h unrecognized source
   = 85h initialization error

SeeAlso: AX=CD05h“Image”,AX=CD09h“Image”

Format of structure: Offset Size Description 00h WORD image source (0 = conventional memory, 1 = expanded memory) 02h DWORD pointer to image data 06h WORD horizontal position on paper of left edge (in 1200 dpi units) 08h WORD vertical position on paper of top edge (in 1200 dpi units) 0Ah WORD left cropping (currently must be zero) 0Ch WORD top cropping (currently must be zero) 0Eh WORD width (currently must be 8000h) 10h WORD height (currently must be 8000h) 12h WORD horizontal size of image in 1200 dpi units 14h WORD vertical size of image in 1200 dpi units 16h WORD aspect ratio (currently reserved) 18h WORD initialization flag (if 01h, initialization is performed) 1Ah WORD pixels per line of source data 1Ch WORD number of scan lines in source data 1Eh WORD number of scan lines in packet 20h WORD bits per pixel (1,2,4,6, or 8) 22h WORD pixels per byte (1,2,4, or 8) 24h WORD compression type (currently only 00h [uncompressed] supported) 26h WORD source page number (if in expanded memory) 28h WORD source handle (if in expanded memory) 2Ah WORD source offset (if in expanded memory) ———-2FCD08—————————– INT 2F - SWELL.EXE - UNUSED

AX = CD08h

Return: AX = FFFFh (error) ———-2FCD09—————————– INT 2F - Intel Image Processing Interface - LOAD SCREEN

AX = CD09h
CX:BX -> structure (see below)

Return: AL = 00h successful

   = 80h unsuccessful

SeeAlso: AX=CD06h“Image Processing”,AX=CD0Ah“Image Processing”

Format of structure: Offset Size Description 00h BYTE style

	44h ('D') diamond style
	4Ch ('L') line style

01h BYTE reserved (00h) 02h WORD frequency in lines per inch [sic]

	currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100

04h WORD screen angle in degrees (-360 to 360)

	currently coerced to nearest of -45, 0, 45, or 90

———-2FCD09—————————– INT 2F - SWELL.EXE - TURN OFF “BORLAND SUPPORT”

AX = CD09h

Return: AX = 0000h SeeAlso: AX=CD0Ah“SWELL” ———-2FCD0A—————————– INT 2F - Intel Image Processing Interface - LOAD PALETTE

AX = CD0Ah
CX:BX -> palette structure (see below)

Return: AL = 00h successful

   = 80h unsuccessful

SeeAlso: AX=CD09h“Image Processing”

Format of palette structure: Offset Size Description 00h BYTE bits per pixel for which palette is to be used (1,2,4,6, or 8) 01h 2**N palette translation values, one per possible pixel value ———-2FCD0A—————————– INT 2F - SWELL.EXE - TURN ON “BORLAND SUPPORT”

AX = CD0Ah

Return: AX = 0000h SeeAlso: AX=CD09h“SWELL” ———-2FD000—————————– INT 2F - MDEBUG display driver - GET DRIVER STATUS

AX = D000h

Return: CF set on error

    all other registers must be unchanged)
CF clear if successful
    AL = FFh
    AH = driver semaphor
	00h driver is not active
	01h driver is active
    BX = CS of the driver
    CX = driver version (CH = major, CL = minor, must be >= 013Ch)
    DL = buffer semaphor
	00h driver is not pending
	01h driver is pending between functions 02h and 03h
    DH = show semaphor
	00h driver is not pending
	01h driver is pending between functions 04h and 05h

Notes: MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,

  including a memory monitor, an interpreter and a disassembler
MDEBUG can use any two consecutive multiplex numbers between C0h and
  FFh; the default is D0h for the display driver and D1h for the
  command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  numbers used)
this function MUST be reentrant, as MDEBUG calls it after every popup
  before any other actions.  The handler should not change any
  registers if the display is in an unsupported mode or in a mode
  MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  not call any of the other functions for this popup session.
MDEBUG will not call the other functions if the returned version is
  less than the actual version of MDEBUG.
if the driver is reentrant, DL and DH should be 00h

SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h ———-2FD000—————————– INT 2F - ZWmous - INSTALLATION CHECK

AX = D000h

Return: AX = 5A57h (“ZW”) if installed

    BX = segment of resident code

Note: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse

  with many non-mouse applications by entering the letter under the
  mouse cursor on button presses

SeeAlso: INT 33/AX=0003h ———-2FD000—————————– INT 2F - Lotus CD/Networker - INSTALLATION CHECK

AX = D000h

Return: AL = FF if CD/Networker TSR is loaded

BX = 4D44h ("MD") signature
CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
DX = bitmap identifying all loaded CD/Networker TSRs.

Notes: INT 2F/AH=D0h is used by CD/Networker to communicate between a

  resident redirector TSR and a transient program that controls the
  TSR's CD-ROM drive emulation (volume attachments, caching, etc).
At present there is only one CD/Networker TSR; the bitmap always = 4.

SeeAlso: AX=D002h“Lotus”,INT 2F/AX=1500h“CD-ROM” ———-2FD001—————————– INT 2F - MDEBUG display driver - INITIALIZE DRIVER

AX = D001h

Return: CF set on error

AL = driver semaphor
AH = buffer semaphor

Notes: MDEBUG calls this function after every succesful call of the function

  00h. The function should reset all internal data and the status of
  the driver. If this function returns an error, MDEBUG will not call
  the other functions in this popup session.
MDEBUG can use any two consecutive multiplex numbers between C0h and
  FFh; the default is D0h for the display driver and D1h for the
  command driver

SeeAlso: AX=D000h ———-2FD002—————————– INT 2F - MDEBUG display driver - SAVE GRAPHIC DATA

AX = D002h

Return: CF set on error

CF clear if successful
    display memory saved and display switched to one of the text modes
      02h, 03h or 07h.

Note: MDEBUG calls this function only once every popup session before

  displaying its windows.

SeeAlso: AX=D000h,AX=D003h ———-2FD002BX4D44———————– INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA

AX = D002h
BX = 4D44h
DX = bitmap identifying one loaded CD/Networker TSR

Return: ES:DI → data area owned by TSR Note: the format of the data area changes with each minor revision, so it

  cannot be counted on

SeeAlso: AX=D000h“Lotus” ———-2FD003—————————– INT 2F - MDEBUG display driver - RESTORE GRAPHIC DATA

AX = D003h

Return: CF set on error

CF clear if successful
    display restored to the mode it was in before calling AX=D002h and
      the display memory is restored

Note: MDEBUG calls this function only once every popup session just before

 it exits to normal DOS.

SeeAlso: AX=D000h,AX=D002h ———-2FD004—————————– INT 2F - MDEBUG display driver - SHOW SAVED DATA

AX = D004h

Return: CF set on error

CF clear if successful
    display switched to mode it was in before calling AX=D002h and the
      display memory is restored

Note: This function needn't save the display memory before changing it. SeeAlso: AX=D000h,AX=D005h ———-2FD005—————————– INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN

AX = D005h

Return: CF set on error

CF clear if successful
    display restored to mode it was in before calling AX=D004h

Note: This function needn't save or change the display memory SeeAlso: AX=D000h,AX=D004h ———-2FD0——————————- INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS

AH = D0h
AL = 06h-7Fh

Note: these functions are reserved for future use ———-2FD0——————————- INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS

AH = D0h
AL = 80h-FFh

Note: these functions numbers are reserved for user defined features (e.g.

  communication between the transient und resident parts of the driver)

———-2FD100—————————– INT 2F - MDEBUG command driver - GET STATUS

AX = D100h
BX = version of MDEBUG (BH = major, BL = minor)
CX = command driver counter

—v1.60+—

DS:SI -> MDEBUG identification table (see below)
ES = segment of display memory used by MDEBUG
DI = size of video mode used by MDEBUG
    (high byte = lines, low byte = columns)

Return: DL = FFh

BX = version number of the driver if it is less than the version in BX,
     else unchanged
CX incremented

Notes: MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,

  including a memory monitor, an interpreter, and a disassembler
called by MDEBUG at start of popup session; if the version number
  returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  not call any of the other functions during this popup session
MDEBUG can use any two consecutive multiplex numbers between C0h and
  FFh; the default is D0h for the display driver and D1h for the
  command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  actually used)
this function must end with a far call to the old INT 2F handler after
  changing the registers
this function MUST be reentrant
command drivers must also declare the following data at the given
  offsets in the code segment
	100h  3 BYTEs	JMP-command in .COM-files
	103h	BYTE	NOP-command (90h)
	104h 26 BYTEs	signature "Kommandotreiber fr MDEBUG"
	11Eh 12 BYTEs	name of driver, e.g. "MDHISDRV.COM"
			each driver must have a unique name
MDEBUG will pass every key and command to the command driver(s) before
  checking for a valid internal command

SeeAlso: AX=D000h,AX=D101h

Format of MDEBUG identification table: Offset Size Description -2 WORD entry offset 00h WORD CS of MDEBUG 02h DWORD old INT 08h vector 06h DWORD old INT 09h vector 0Ah DWORD address INT 16h routine used by MDEBUG 0Eh BYTE length of version string 0Fh N BYTEs version string ———-2FD101—————————– INT 2F - MDEBUG command driver - INITIALIZE DRIVER

AX = D101h
CX = command driver counter

Return: DL = FFh if successful

	CX incremented
     else error: all registers unchanged

Note: this function must end with a far call to the old INT 2F handler after

  changing the registers
this function must be reentrant

———-2FD102—————————– INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND

AX = D102h
BL = first character of the interpreter command
BH = last character of the interpreter command (or blank)
DS:SI -> parameter for the interpreter command as ASCIZ string
DS:DI -> MDEBUG data structure (see below)

Return: AL = FFh

CF set on error
    AH = error number
	01h syntax error
	02h first shell of the command.com is activ
	03h esc pressed
	04h break pressed
	05h DOS is busy
	06h command ended
	07h division by zero
	08h invalid display driver
	09h invalid command driver
	0Ah error 8 and 9
	0Bh unknown error
	0Ch new error
	    DS:SI -> ASCIZ error message (max 30 characters)
       else unknown error
CF clear if successful
    AH = return code
	00h continue processing the command line
	01h leave MDEBUG popup session
	02h leave MDEBUG popup session and automatically popup again
	    if the InDOS flag is zero
	03h not used (same as 00h)
	04h not used (same as 00h)
	05h put new command line into the input buffer,
	    DS:SI -> new command line (ASCIZ string, max 66 chars)
	06h process new command line
	    DS:SI -> new command line (ASCIZ string, max 66 chars)
       else unknown status, but continue processing commmand line

Note: this function must end with a far call to the old INT 2F handler (with

  registers unchanged) if the driver does not support the interpreter
  command in BX.  Otherwise, the driver must not chain to the old
  INT 2F.

Format of MDEBUG data structure: Offset Size Description 00h WORD register SE 02h WORD register OF 04h WORD register FS 06h WORD register FO 08h WORD register AX 0Ah WORD register BX 0Ch WORD register CX 0Eh WORD register DX 10h WORD register SI 12h WORD register DI 14h WORD register DS 16h WORD register ES 18h WORD register BP 1Ah WORD register SS 1Ch WORD register SP 1Eh WORD register FL (flags) 20h WORD register R0 22h WORD register R1 24h WORD register R2 26h WORD register R3 28h WORD register R4 2Ah WORD register R5 2Ch WORD register R6 2Eh WORD register R7 30h WORD register R8 32h WORD register CS, return-address 34h WORD register IP, return-address 36h DWORD saved pointer to data for key <F6> (v1.60) saved monitor address (v1.70) 3Ah 12 WORDs saved register values on last popup entry (for <F8> key)

	(original register values at popup entry of MDEBUG)
	AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags

52h 12 WORDs saved register values on last popup exit (for <SHIFT-F8> key)

	AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags

6Ah DWORD address of the DOS-invars-table 6Eh DWORD address of the InDOS flag 72h WORD offset of the register which is used for the segment of the

	first monitor window

74h WORD offset of the register which is used for the offset of the

	first monitor window

76h WORD name of the register which is used for the segment of the

	first monitor segment

78h WORD name of the register which is used for the offset of the first

	monitor window	 

7Ah WORD pseudo register 1 7Ch WORD pseudo register 2 ———-2FD103—————————– INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR

AX = D103h
BX = key code (like result of an interrupt 16h call)
CX = 0 -> the cursor is in the ASCII column of the monitor
CX = 1 -> the cursor is in one of the hex fields of the monitor
DS:SI -> MDEBUG data structure (see AX=D102h)
ES:DI -> actual byte in the monitor

Return: AL = FFh

AH = return code
    00h key processed, read next key
    01h leave MDEBUG popup session
    02h leave MDEBUG popup session and automatically popup again if DOS
	is not busy
    03h signal an error (beep)
    04h driver has redefined the key, proceed with the new key
	BX = new key code
	MDEBUG will not pass the new key to the command driver(s)
   else treat like code 00h

Note: this function must end with a far call to the old INT 2F handler (with

  registers unchanged) if the driver does not support the key in BX.
  Otherwise, the driver must not chain to the old INT 2F.

SeeAlso: AX=D104h ———-2FD104—————————– INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER

AX = D104h
DS:SI -> MDEBUG data structure (see AX=D102h)

Return: AL = FFh

AH = return code
    00h key processed, read next key
    01h leave MDEBUG popup session
    02h leave MDEBUG popup session and automactically popup again if
	DOS is not busy
    03h signal an error (beep)
    04h driver has redefined the key, proceed with the new key
	BX = new key code
	MDEBUG won't pass the new key to the command driver(s)
    05h put new command line into the input buffer
	DS:SI -> new command line (ASCIZ string, max 66 chars)
    06h process new command line
	DS:SI -> new command line (ASCIZ string, max 66 chars)
   else treat like code 00h

Note: this function must end with a far call to the old INT 2F handler if the

  driver does not support the key in BX.  Otherwise, the driver must
  not chain to the old INT 2F.

SeeAlso: AX=D103h ———-2FD1——————————- INT 2F - MDEBUG command driver - RESERVED FUNCTIONS

AH = D1h
AL = 05h-0Ah

Note: these functions are reserved for future use ———-2FD110—————————– INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F

AX = D110h

Return: DL = FFh

ES:BX -> next program in the chain for INT 2F
CX = code segment of this driver
DI = offset of driver identification table (see below) (v1.60+)

Notes: only called by the transient part of the driver

must be reentrant and the driver must not chain this function to the
  old INT 2F

Format of the driver identification table: Offset Size Description 00h 26 BYTEs signature “Kommandotreiber fr MDEBUG”

                                           ^- Note: ASCII 129,German U-umlaut

27h 12 BYTEs name of driver, e.g. “MDHISDRV.COM”

	 each driver must have a unique name

———-2FD111—————————– INT 2F - MDEBUG command driver - START DRIVER

AX = D111h

Return: DL = FFh Notes: only called by the transient part of the driver to inform the resident

  part that it is installed
the function must be reentrant and the driver mustn't chain this
  function to the old INT 2F

SeeAlso: AX=D101h,AX=D112h ———-2FD112—————————– INT 2F - MDEBUG command driver - END DRIVER

AX = D112h

Return: DL = FFh Notes: only called by the transient part of the driver to inform the resident

  part that it will be released after this function
the function must be reentrant and the driver mustn't chain this
  function to the old INT 2F

SeeAlso: AX=D101h,AX=D111h ———-2FD1——————————- INT 2F - MDEBUG command driver - RESERVED FUNCTIONS

AH = D1h
AL = 13h-7Fh

Note: these functions are reserved for future use ———-2FD1——————————- INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS

AH = D1h
AL = 80h-FFh

Note: these functions are reserved for user defined features (e.g.

  communication between the transient und resident parts of the	driver)

———-2FD200BX5144———————– INT 2F U - Quarterdeck - QEMM/QRAM/VIDRAM/MANIFEST v5.0+ - INSTALLATION CHECK

AX = D200h
BX = 5144h ("QD")
CX = 4D45h ("ME")
DX = 4D30h ("M0")

Return: AL = FFh installed

if BX,CX,DX registers were as specified on entry:
    BX = 4D45h ("ME")
    CX = 4D44h ("MD")
    DX = 5652h ("VR")

Notes: QEMM/QRAM/VIDRAM/MANIFEST/etc will search for a free AH value from D2h

  through FFh, then C0h through D1h
for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  Quarterdeck product, it just chains to the previous INT 2F handler

———-2FD201BX4849———————– INT 2F U - Quarterdeck - GET QD HIMEM PRESENCE

AX = D201h
BX = 4849h ("HI")
CX = 4D45h ("ME")
DX = 4D51h ("MQ")

Return: BX = 4F4Bh (“OK”)

ES:DI -> HIMEM entry point

Notes: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h

  through FFh, then C0h through D1h

SeeAlso: AX=D201h/BX=5145h ———-2FD201BX4849———————– INT 2F U - Quarterdeck - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN

AX = D201h
BX = 4849h ("HI")
CX = 5241h ("RA")
DX = 4D30h ("M0")

Return: BX = 4F4Bh (“OK”)

CX = segment of start of HIRAM chain
DX = QEMM/QRAM code segment

Notes: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h

  through FFh, then C0h through D1h
QEMM and QRAM both responded the same
the HIRAM memory chain has the same format as the regular DOS 4.0
  memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  have the block header program name field set to "UMB"; blocks whose
  "owner" field is set to the QEMM/QRAM code segment returned in DX
  are locked out regions such as video memory and ROMs.

———-2FD201BX4D41———————– INT 2F U - Quarterdeck - MANIFEST v1.0+ - INSTALLATION CHECK

AX = D201h
BX = 4D41h ("MA")
CX = 4E49h ("NI")
DX = 4645h ("FE")

Return: BX = 5354h (“ST”) Note: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h

  through FFh, then C0h through D1h

———-2FD201BX4D45———————– INT 2F U - Quarterdeck - DVDOS4GX.DVR - ???

AX = D201h
BX = 4D45h ("ME")
CX = 5155h ("QU")
DX = 5044h ("PD")

Return: ??? Notes: AH=D2h is the default; use the Quarterdeck installation check described

  under AX=D200h
called by QEMM 6.03

———-2FD201BX5145———————– INT 2F U - Quarterdeck - QEMM v5.0+ - INSTALLATION CHECK

AX = D201h
BX = 5145h ("QE")
CX = 4D4Dh ("MM")
DX = 3432h ("42")

Return: BX = 4F4Bh (“OK”)

ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)

Notes: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h

  through FFh, then C0h through D1h
this call is not available under QEMM v6.00 unless Windows3 support
  has been disabled with the NW3 switch to QEMM386.SYS

SeeAlso: AX=D201h/BX=4849h,INT 67/AH=3Fh ———-2FD201BX5649———————– INT 2F U - Quarterdeck - VIDRAM v5.0+ - INSTALLATION CHECK

AX = D201h
BX = 5649h ("VI")
CX = 4452h ("DR")
DX = 414dh ("AM")

Return: BX = 4F4Bh (“OK”)

ES:DI -> VIDRAM entry point

Note: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h

  through FFh, then C0h through D1h

Call VIDRAM entry point with:

AH = 00h get status
	Return: AL = VIDRAM state (see below)
		BL = bit 0: ???
		     bits 1-7 not used
		BH = flags???
		    bit 4: high RAM exists in video area???
		CL = current monitor (01h = mono, 80h = color)
		SI = current top of memory (paragraph)???
		DI = segment of ???
AH = 01h setup
	AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
	BL = bit 0: ???
	     bits 1-7 not used
	BH = flags???
	CL = monitor (01h = monochrome, 80h = color)
	SI = new top of memory (paragraph)???
AH = 02h get ???
	Return: ES:DI -> ??? data

Return: CF set on error

CF clear if successful

———-2FD300BX4562———————– INT 2F U - TeleReplica - INSTALLATION CHECK

AX = D300h
BX = 4562h
CX = 2745h
DX = serial port I/O base address??? (03F8h for v3.9)

Return: SI = segment of resident code

AX = 251Dh
BX = DF21h
CX = F321h
DX = ???

———-2FD3CB—————————– INT 2F U - LapLink Quick Connect v6 - API

AX = D3CBh
CX = function
    0002h get ???
	Return: BX:AX -> ???
		CL = ???
		CH = ???
		DX = ???
		DI = COM1 I/O port???
		SI = COM2 I/O port???
    0003h initialization???
    0004h ???
    0005h initialization???
    0006h reset/clear ???
	Return: AX = 0000h
		ES:DI -> next byte after ??? cleared by this call
    0007h initialization???
    0008h uninstall
	Return: BX = status
		    0000h successful
		    FFFFh incomplete, stub remains in memory

Return: CX = 534Bh (except function 0002h) ———-2FD44D—————————– INT 2F - 4DOS.COM v2.1+ - API

AX = D44Dh
BH = function
    00h installation check
	Return: AX = 44DDh
		BL = minor version number
		BH = major version number
		CX = PSP segment address for current invocation
		DL = 4DOS shell number (0 for the first (root) shell,
		     updated each time a new copy is loaded)
    01h (internal, v2.1-3.03) terminate current copy of 4DOS
	Return: nothing
	(internal, v4.0) ???
	Return: ES:BX -> data area (see below)
    02h ???
	DX = ???
---v2.1-3.03 only---
    03h EXEC program
	CX:DX -> EXEC record
    FEh deallocate shell number (passed through to root shell)
	???
    FFh allocate shell number (passed through to root shell)

Note: bug in v3.00 will crash system if unrecognized value in BH SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h

Format of EXEC record: Offset Size Description 00h WORD offset of ASCIZ program name in same segment as EXEC record 02h WORD offset of DOS commandline in same segment as EXEC record 04h WORD segment of environment for child process (see INT 21/AH=26h)

Format of 4DOS v4.0 data area: Offset Size Description 00h 2 BYTEs ??? 06h WORD XMS handle for swapping

???

———-2FD44E—————————– INT 2F - 4DOS v3.0+ - AWAITING USER INPUT

AX = D44Eh

—4DOS v3.01+—

BX = 0000h 4DOS is ready to display prompt
   = 0001h 4DOS has displayed the prompt, about to accept user input

Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS Note: v3.00 only makes the call corresponding to BX=0001h, does not set BX SeeAlso: AX=D44Dh ———-2FD44FBX0000———————– INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK

AX = D44Fh
BX = 0000h

Return: AX = 44DDh if installed SeeAlso: AX=D44Fh/BX=0001h ———-2FD44FBX0001———————– INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK

AX = D44Fh
BX = 0001h
CX = number of keystrokes (01h-FFh)
DS:DX -> keystroke list (one word per keystroke)

Return: AX = status

    0000h successful
    nonzero failed
BX,CX,DX destroyed

Notes: the keystrokes are the exact values to return from subsequent calls to

  INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
	0000h causes subfunctions 01h and 11h to indicate an empty
		keyboard buffer
	FFFFh is followed by a word indicating the number of clock
		ticks to delay before the next faked keystroke
v4.00 KSTACK overwrites any unread keystrokes from the previous
  invocation, and does not range-check CX; it will overwrite memory
  following the resident portion if CX is greater than 100h.

SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h ———-2FD600—————————– INT 2F - HEART.COM - INSTALLATION CHECK

AX = D600h

Return: AX = 0303h (two hearts) if installed

    ES:DI -> buffer (see below)

Note: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.

Once the host program has identified the address of the data area, it
  can change this to indicate safe/critical, alternate colours, etc.
The entries for the color table are in char/attrib form.  Every two
  entries form a pair which is alternated between 68 times a minute.
  The first half of the table is for color videos, the second mono.
  Within each half, the first half is for the safe chars, and the
  second for the critical chars.

Format of buffer: Offset Size Description 00h 8 WORD Table of colors/attributes (see notes). 10h BYTE flags

	bit 0: program is in critical section, so flash double
		exclamation mark
	bit 1: program is in safe code, so flash the heart character

11h WORD position of heartbeat on screen, normally 009Eh (last column

	of second line)

———-2FD600—————————– INT 2F U - VEDIT VSWAP - INSTALLATION CHECK

AX = D600h

Return: AL = D6h if installed Note: VSWAP is the resident portion of VEDIT's “swapper” capability.

    	VEDIT is a programmer's text editor by Greenview Data.

SeeAlso: AX=D601h,AX=D602h ———-2FD601—————————– INT 2F U - VEDIT VSWAP - ???

AX = D601h
BL = subfunction number???

Return: BL = return code ???

ES = resident portion's data??? segment
DX = resident portion's code segment

SeeAlso: AX=D600h“VSWAP” ———-2FD602—————————– INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP

AX = D602h
other registers set as for INT 21/AX=4B00h

Return: CF set on error

    AL = error code
	82h = failure due to ???
CF clear on success

SeeAlso: AX=D600h“VSWAP”,INT 21/AX=4Bh“EXEC” ———-2FD701—————————– INT 2F - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER

AX = D701h

Return: AX = 0000h installed

    BX = interrupt number (60h to 66h)
   nonzero not present

Note: if AX is nonzero, VINES 3.x or earlier may be installed, thus it is

  necessary to examine the four bytes preceding the handlers for
  INT 60 through INT 66 for the string "BANV"

SeeAlso: AX=D702h,AX=D703h,AX=D704h ———-2FD702—————————– INT 2F U - BANYAN VINES v4+ - PCPRINT interface

      AX = D702h
      BX = function
      ???

Return: ??? SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h“Banyan” ———-2FD703—————————– INT 2F U - BANYAN VINES v4+ - MAIL interface

      AX = D703h
      BX = function
      ???

Return: ??? SeeAlso: AX=D702h,AX=D704h ———-2FD704—————————– INT 2F U - BANYAN VINES v4+ - Streettalk Directory Assistance interface

      AX = D704h
      BX = function
      ???

Return: ??? SeeAlso: AX=D703h,INT 61/AX=0007h“Banyan” ———-2FD800—————————– INT 2F - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK

AX = D800h

Return: AL = FFh if installed

    DX = version number??? (0100h in 1.00)
    BX = data segment of resident copy???
    ES:DI = FAR entry point for API routines
	    Load BX = function number and call for various
	    functions.	Functions 00h - 10h supported in 1.00.

SeeAlso: AX=7A00h,AX=D880h ———-2FD880—————————– INT 2F - Novell NetWare Lite - SERVER.EXE - INSTALLATION CHECK

AX = D880h

Return: AL = FFh if installed

    DX = version number??? (0100h in 1.00)
    BX = Data segment of resident copy???
    CL = 01h if SERVER is active
       = 00h if SERVER is disabled

SeeAlso: AX=7A00h,AX=D800h ———-2FDA00—————————– INT 2F - ZyXEL ZFAX - INSTALLATION CHECK

AX = DA00h

Return: AH = enabled state (00h = enabled, 01h = disabled)

AL = 5Ah installed

Note: ZFAX is the bundled FAX software which comes with the ZyXEL model

  fax modems.

SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h ———-2FDA01—————————– INT 2F - ZyXEL ZFAX - UNINSTALL

AX = DA01h

Return: AL = 00h Success

     01h Failure

SeeAlso: AX=DA00h ———-2FDA02—————————– INT 2F - ZyXEL ZFAX - DISABLE

AX = DA02h

Return: AL = 00h SeeAlso: AX=DA03h ———-2FDA03—————————– INT 2F - ZyXEL ZFAX - ENABLE

AX = DA03h

Return: AL = 00h SeeAlso: AX=DA02h ———-2FDA55—————————– INT 2F U - TRAP.COM - INSTALLATION CHECK

AX = DA55h
DL = interrupt number
DH = ???

Return: if installed

    AH = interrupt number
    AL = ???
    ES:BX -> ???

Notes: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel

a separate copy of TRAP is loaded for each interrupt to be traced; thus
  the interrupt number is part of the installation check

———-2FDC00—————————– INT 2F - GOLD.COM - INSTALLATION CHECK

AX = DC00h

Return: AL = 00h not installed

   = FFh installed

Note: GOLD is a TSR by Bob Eager which makes the NumLock key return the code

  for F1; the purpose is to improve Kermit's VTxxx emulation

———-2FDC01—————————– INT 2F - GOLD.COM - GET STATE

AX = DC01h

Return: AL = status

    00h off
    01h on

SeeAlso: AX=DC00h,AX=DC02h ———-2FDC02—————————– INT 2F - GOLD.COM - SET STATE

AX = DC02h
DL = new state
    00h off
    01h on

Return: AL = 00h (OK) SeeAlso: AX=DC01h ———-2FDD——————————- INT 2F - SoftCom programs - API

AH = DDh
AL = FEh get info
    Return: ES:BX -> TSR info list (see below)
AL = program identifier
    BH = function
	FDh get version
	    Return: BX = version
	FFh installation check
	    Return: AL = FFh if installed
			BX = version
			ES = segment of resident code
	others vary by program

Return: AL = status

    bit 7 set on error
    AL = 81h unknown function

Format of TSR info list: Offset Size Description 00h 9 BYTEs blank-padded ASCIZ program name 09h BYTE program ID 0Ah WORD program's PSP segment 0Ch WORD program version (major in high byte) 0Eh DWORD pointer to next item in info list or 0000h:0000h 12h BYTE number of interrupts hooked 13h 5 BYTEs interrupt numbers hooked by program 18h 8 BYTEs reserved ———-2FDE00BX4445———————– INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK

AX = DE00h
BX = 4445h ("DE")
CX = 5844h ("XD")
DX = 4931h ("I1")

Return: AL = FFh if installed (even if other registers do not match)

if BX,CX, and DX were as specified on entry,
    BX = 4845h ("HE")
    CX = 5245h ("RE")
    DX = 4456h ("DV")

Notes: AH=DEh is the default XDI multiplex number, but may range from C0h-FFh

programs should check for XDI starting at DEh to FFh, then C0h to DDh
the XDI handler should not issue any DOS or BIOS calls, nor should it
  issue DESQview API calls other than those allowed from hardware ints

———-2FDE01—————————– INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION

AX = DE01h
BX = driver ID
other registers as needed by driver

Notes: XDI drivers should pass this call through to previous handler if ID

  does not match
DESQview never calls this function

———-2FDE01BX5242———————– INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers

AX = DE01h
BX = 5242h ("RB")
CX:DX = program identifier
	656F7000h ("eop",0) for DVeop

Return: AX = 5242h (“RB”) if installed

    ES:BX -> data or entry point
    CX = version number (CH = major, CL = minor)

Call DVeop entry point with:

ES:DI -> callback address or 0000h:0000h to remove callback

Return: AX = status

    0000h failed (callback table full or attempted to remove non-
		existent callback)
    0001h successful
	ES:DI -> chaining address
BX,CX,DX destroyed

Notes: the callback function is called with a simulated interrupt when the

  DESQview window containing it is closed; it should perform all
  necessary cleanup and then perform a FAR jump to the chaining address
  or an IRET if the chaining address is 0000h:0000h
if the program wishes to remove itself before the window is closed, it
  should call the DVeop entry point with the previously returned
  chaining address and ignore the returned chaining address.

———-2FDE01BX7474———————– INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM

AX = DE01h
BX = 7474h
CL = function
    00h installation check
	Return: AL = FFh
    01h get process handle
	DX = keys on Open Window menu (DL = first, DH = second)
	Return: AX = process handle or 0000h if not running
    02h (v1.3+) set TMAN handle
	DX = TMAN process handle
    03h (v1.3+) set open keys to ignore on next CL=01h call
	DX = keys on Open Window menu (DL = first, DH = second)

Return: BX = 4F4Bh (“OK”)

DL destroyed

Note: DVTXDI is distributed as part of the shareware products DVTree (DOS

 shell/DESQview process manager) and DVTMAN by Mike Weaver

———-2FDE01BX7575———————– INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM

AX = DE01h
BX = 7575h
CX = function
    0000h installation check
	Return: AX = 00FFh if installed
    0001h turn on notification (currently unused)
	Return: AX = 0001h
    0002h turn off notification (currently unused)
	Return: AX = 0001h
    0003h get process information
	Return: AX = status
		    0000h failed
		    0001h successful
			BX = last instantaneous time slice
				in 1/100s (v1.10)
				in 1/18s (v1.11+)
			CX = number of processes
			DX = number of "(starting)" records (v2.00+)
			SI = number of records in process info array
			     (v2.00+) (always 15 for v1.x)
			ES:DI -> process info array (see below)
    0004h get version
	Return: AH = major version
		AL = minor version
    0005h (v1.10+) get time since DESQview started
	Return: DX:AX = 1/100s since DV start (v1.10)
		DX:AX = 1/18s since DV start (v1.11+)
    0006h (v1.10+) get number of task switches
	Return: DX:AX = total task switches
		CX = task switches in last instantaneous interval

Notes: DVSIXDI is part of the DVSI (DESQview System Information) package by

  Daniel J. Bodoh
for v1.00, function 0003h allocates common memory, which the caller
  must deallocate after reading the process information; only the
  currently used records are placed in the buffer
for v1.10+, function 0003h merely returns a pointer to the internal
  array of process information; the caller should make a copy of the
  array while inside a critical section (see INT 15/AX=101Bh).	Only
  those records with bit 7 of the first byte set are valid.

Format of information for one process (v1.00): Offset Size Description 00h BYTE flags

	bit 7: process slot is valid

01h WORD offset into DESQVIEW.DVO of program's record if started from Open Windows menu, else undefined 03h WORD Switch Windows window number 05h WORD segment of process handle 07h WORD number of tasks owned by process 09h WORD mapping context of process 0Bh DWORD hook for other programs

Format of information for one process (v1.10-v2.00): Offset Size Description 00h BYTE flags

	bit 7: valid record
	    6: (v2.00+) record is allocated; if bit 7 clear, process
	    	is "(starting)" and only offsets 01h and 09h are valid
	    5: (v2.00+) this app currently owns the CPU
	    4: reserved (0)
	    3: DESQview system task
	    2: reserved (0)
	    1: task has keyboard (currently unused)
	    0: task swapped out (currently unused)

01h WORD Open Window keys 03h WORD Switch Windows number 05h WORD segment of process handle 07h WORD number of tasks for process 09h WORD process mapping context 0Bh DWORD time process started (relative to start of DESQview) 0Fh DWORD time process last got CPU (relative to start of DESQview) 13h DWORD time process last gave up CPU (relative to start of DESQview) 17h DWORD total CPU time since process started 1Bh DWORD CPU time at start of current instantaneous interval 1Fh DWORD CPU time in current instantaneous interval 23h DWORD hook for other programs Note: all times are in 1/100s for v1.10, in 1/18s for v1.11+ ———-2FDE01BXFFFE———————– INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???

AX = DE01h
BX = FFFEh
CX = 4D47h ("MG")
DX = 0052h (0,"R")

Return: AL = FFh

DX = 584Dh

———-2FDE02—————————– INT 2F - DESQview v2.26+ External Device Interface - DV INITIALIZATION COMPLETE

AX = DE02h
BX = mapping context of DESQview
DX = handle of DESQview system task

SeeAlso: AX=DE03h Note: driver should pass this call to previous handler after doing its work ———-2FDE03—————————– INT 2F - DESQview v2.26+ External Device Interface - DV TERMINATION

AX = DE03h
BX = mapping context of DESQview
DX = handle of DESQview system task

SeeAlso: AX=DE02h Notes: driver should pass this call to previous handler before doing its work

DESQview makes this call when it is exiting, but before unhooking any
  interrupt vectors

———-2FDE04—————————– INT 2F - DESQview v2.26+ External Device Interface - ADD PROCESS

AX = DE04h
BX = mapping context of new process
DX = handle of process

Return: nothing Notes: XMS XDI handler (installed by default) allocates a 22-byte record

  (see below) from "common" memory to control access to XMS memory
all DOS, BIOS, and DV API calls are valid in handler
driver should pass this call to previous handler after processing it

SeeAlso: AX=DE05h

Format of XMS XDI structure: Offset Size Description 00h DWORD pointer to 10-byte record??? 04h DWORD pointer to next XMS XDI structure 08h WORD mapping context 0Ah BYTE ??? 0Bh 5 BYTEs XMS entry point to return for INT 2F/AX=4310h

	(FAR jump to next field)

10h 6 BYTEs FAR handler for XMS driver entry point

	(consists of a FAR CALL followed by RETF)

———-2FDE05—————————– INT 2F - DESQview v2.26+ External Device Interface - REMOVE PROCESS

AX = DE05h
BX = mapping context of process
DX = handle of last task in process

Return: nothing Notes: XMS XDI handler releases the structure allocated by AX=DE04h

driver should pass this call to previous handler before processing it
all DOS, BIOS, and DV API calls except those generating a task switch
  are valid in handler

SeeAlso: AX=DE04h ———-2FDE06—————————– INT 2F - DESQview v2.26+ External Device Interface - CREATE TASK

AX = DE06h
BX = mapping context of process containing task
DX = handle of new task

Notes: driver should pass this call to previous handler after processing it

all DOS, BIOS, and DV API calls are valid in handler

———-2FDE07—————————– INT 2F - DESQview v2.26+ External Device Interface - TERMINATE TASK

AX = DE07h
BX = mapping context of process containing task
DX = handle of task

Notes: driver should pass this call to previous handler before processing it

all DOS, BIOS, and DV API calls except those generating a task switch
  are valid in handler

———-2FDE08—————————– INT 2F - DESQview v2.26+ External Device Interface - SAVE STATE

AX = DE08h
BX = mapping context of task being switched from
DX = handle of task being switched from

Notes: invoked prior to task swap, interrupts, etc

driver should pass this call to previous handler after processing it

———-2FDE09—————————– INT 2F - DESQview v2.26+ External Device Interface - RESTORE STATE

AX = DE09h
BX = mapping context of task being switched to
DX = handle of task being switched to

Notes: state is restored except for interrupts

driver should pass this call to previous handler before processing it

———-2FDE0A—————————– INT 2F - DESQview v2.26+ External Device Interface - CHANGE KEYBOARD FOCUS

AX = DE0Ah
BX = mapping context of task receiving focus
DX = handle of running task

Notes: driver should pass this call to previous handler before processing it

this call often occurs inside a keyboard interrupt

———-2FDE0B—————————– INT 2F - DESQview v2.26+ External Device Interface - DVP PROCESSING COMPLETE

AX = DE0Bh
BX = mapping context of DESQview system task
CX = number of system memory paragraphs required for the use of all
	XDI drivers (DV will add this to system memory in DVP buffer)
DX = handle of DESQview system task
SI = mapping context of new process if it starts
ES:DI -> DVP buffer

Return: CX incremented as needed Notes: once DV invokes this function, the DVP buffer contents may be changed

driver should pass this call to previous handler before processing it

———-2FDE0C—————————– INT 2F - DESQview v2.26+ External Device Interface - SWAP OUT PROCESS

AX = DE0Ch
BX = mapping context of task being swapped out
DX = handle of DESQview system task

Note: driver should pass this call to previous handler after processing it ———-2FDE0D—————————– INT 2F - DESQview v2.26+ External Device Interface - SWAP IN PROCESS

AX = DE0Dh
BX = mapping context of process just swapped in
DX = handle of DESQview system task

Note: driver should pass this call to previous handler before processing it ———-2FDE0E—————————– INT 2F - DESQview v2.26+ External Device Interface - DVP START FAILED

AX = DE0Eh
BX = mapping context of DESQview system task
DX = handle of DESQview system task
SI = mapping context of failed process (same as for call to AX=DE0Bh)

Note: driver should pass this call to previous handler after processing it ———-2FDF–BX4448———————– INT 2F U - HyperDisk v4.20+ - INSTALLATION CHECK

AH = DFh
BX = 4448h ('DH')

Return: AL = FFh if installed

    CX = 5948h ('YH')
    BX:DX -> ??? in resident portion if BX=4448h on entry

Note: HyperDisk is a shareware disk cache by HyperWare (Roger Cross) SeeAlso: INT 13/AX=8EEDh ———-2FE300—————————– INT 2F - ANARKEY.COM - INSTALLATION CHECK

AX = E300h

Return: AL = 00h not installed

     FEh if installed but suspended (v3.0+)
     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

SeeAlso: AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h,AX=E307h ———-2FE301—————————– INT 2F U - ANARKEY.COM v2+ - GET ???

AX = E301h

Return: DX:BX → ??? SeeAlso: AX=E300h

Format of returned data structure for ANARKEY v2.0: Offset Size Description -7 7 BYTEs signature ('ANARKEY') 00h WORD ??? (I see 0001h in v2.0) 02h WORD ??? (I see 0001h in v2.0) 04h WORD ??? (I see 0 in v2.0) 06h WORD PSP segment of next program loaded

Format of returned data structure for ANARKEY v3+: Offset Size Description -1 BYTE multiplex number 00h WORD ??? (I see 0001h in v3.0-4.0) 02h WORD ??? (I see 0001h in v3.0-4.0) 04h BYTE ??? (I see 0 in v3.0-4.0) 05h WORD PSP segment of next program loaded ———-2FE302—————————– INT 2F U - ANARKEY.COM v3+ - ???

AX = E302h
BL = ???

Return: ??? SeeAlso: AX=E300h ———-2FE303—————————– INT 2F U - ANARKEY.COM v3+ - ANARKMD API

AX = E303h
BL = function
    01h	toggle insert mode
    02h	display contents of history buffer
    03h	write history buffer to file
	ES:DX -> file name
    04h	clear history buffer
    05h	undefine all aliases
    06h	show aliases
    07h	list programs using Unix switchar
    08h	jump to bottom of history buffer	
    09h (v4.0) add string to history buffer
	ES:DX -> ASCIZ string
    0Ah (v4.0) ???
	ES:DX -> ???
    0Bh (v4.0) copy string to edit buffer for use as next input line
	ES:DX -> ASCIZ string
    0Ch (v4.0) ???
    0Dh (v4.0) copy ??? to ???
    0Eh (v4.0) ???
    0Fh (v4.0) ???
    10h (v4.0) set ??? flag
    11h (v4.0) display error message about running in EMS under Windows

Return: ??? SeeAlso: AX=E300h ———-2FE304—————————– INT 2F U - ANARKEY.COM v2+ - ???

AX = E304h
BL = ???

Return: ??? SeeAlso: AX=E300h ———-2FE305—————————– INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY

AX = E305h
BL = new state
    01h suspended
    00h enabled

SeeAlso: AX=E300h ———-2FE306—————————– INT 2F U - ANARKEY.COM v4.0 - GET ???

AX = E306h

Return: AX = ??? SeeAlso: AX=E300h ———-2FE307—————————– INT 2F U - ANARKEY.COM v4.0 - GET ???

AX = E307h

Return: AX = ???

BL = ???

SeeAlso: AX=E300h ———-2FE44D—————————– INT 2F - NDOS - API

AX = E44Dh

Note: as NDOS is a licensed version of 4DOS v3.03, the API is identical to

  that for 4DOS, except that AH=E4h instead of D4h and the installation
  check returns AX=44EEh instead of AX=44DDh

SeeAlso: AX=D44Dh,AX=E44Eh ———-2FE44EBX0000———————– INT 2F - NDOS - AWAITING USER INPUT

AX = E44Eh
BX = 0000h NDOS is ready to display prompt
   = 0001h NDOS has displayed the prompt, about to accept user input

Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS SeeAlso: AX=E44Dh ———-2FED00—————————– INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK

AX = ED00h
BL = DOS extender
    01h 286dosx v1.3+ (Software Development Kit)
    02h 286dosx v1.3+ (Run-Time Kit)
    03h 386dosx v4.0+ (SDK)
    04h 386dosx v4.0+ (RTK)

Return: AL = status

    00h not installed
    FFh installed
	SI = 5048h ("PH")
	DI = 4152h ("AR")
	CH = major version number
	CL = minor version number
	DX = flags
	    bit 0: running under DPMI
		1: running under Phar Lap VMM

SeeAlso: AH=A1h,AX=F100h,AX=FBA1h ———-2FEE00—————————– INT 2F - GRIDLOC.EXE - INSTALLATION CHECK

AX = EE00h

Return: AL = FFh if installed Note: GRIDLOC is a PC security program by Intelligent Security Systems, Inc. ———-2FF000—————————– INT 2F U - 4MAP - INSTALLATION CHECK

AX = F000h

Return: AX = 00FFh Notes: returns AX=00FFh for any value of AL not listed here

4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng

———-2FF001—————————– INT 2F U - 4MAP - GET KEY MAPPINGS

AX = F001h

Return: ES:BX → key mappings SeeAlso: AX=F000h ———-2FF002—————————– INT 2F U - 4MAP - INSERT CHARACTER INTO ???

AX = F002h
BL = character to insert

Return: AX = status

    0000h successful
    0001h buffer full

SeeAlso: AX=F000h,AX=F003h ———-2FF003—————————– INT 2F U - 4MAP - INSERT CHARACTER INTO ???

AX = F003h
BL = character to insert

Return: AX = status

    0000h successful
    0001h buffer full

SeeAlso: AX=F000h,AX=F002h ———-2FF1——————————- INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK

AH = F1h
AL <> F1h

Return: AL = F1h if installed Note: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24

  popup TSRs to be loaded but swapped out to disk, EMS, or XMS.	 One
  TSR at a time is brought back into memory at the user's request.

———-2FF100—————————– INT 2F - DOS EXTENDER INSTALLATION CHECK

AX = F100h

Return: AL = FFh if DOS extender present

    SI = 444Fh ("DO")
    DI = 5358h ("SX")

Note: supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h ———-2FF700—————————– INT 2F - 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 ———-2FF701—————————– INT 2F - AUTOPARK.COM - SET PARKING DELAY

AX = F701h
BX:CX = 32-bit count of 55ms timer ticks

———-2FFB——————————- INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL

AH = FBh

———-2FFB00—————————– INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK

AX = FB00h

Return: AX = 00FFh if installed Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. SeeAlso: INT 10/AH=38h,INT 14/AX=F0F1h ———-2FFB00—————————– INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK

AX = FB00h

Return: AX = FFFFh if installed

    BX = version (BCD, BH=major, BL=minor)

SeeAlso: AX=FB03h“Jot-It”,AX=FB01h“Jot-It” ———-2FFB01—————————– INT 2F U - AutoBraille v1.1A - ???

AX = FB01h
???

Return: ??? ———-2FFB01—————————– INT 2F U - Jot-It! v1.50 - GET USER NAME

AX = FB01h

Return: DX:BX → ASCIZ user name SeeAlso: AX=FB02h“Jot-It” ———-2FFB02—————————– INT 2F U - AutoBraille v1.1A - ???

AX = FB02h

Return: AH = ???

AL = ???

———-2FFB02—————————– INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY

AX = FB02h

Return: DX:BX → ASCIZ name of directory in which messages are stored SeeAlso: AX=FB01h“Jot-It” ———-2FFB03—————————– INT 2F U - AutoBraille v1.1A - GET NEXT ???

AX = FB03h

Return: AX = ??? ———-2FFB03—————————– INT 2F U - Jot-It! v1.50 - UNINSTALL

AX = FB03h

Return: resident code removed from memory Note: CAUTION: NO checks are performed to ensure that the interrupt vectors

  being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code

SeeAlso: AX=FB00h“Jot-It” ———-2FFB——————————- INT 2F U - AutoBraille v1.1A - SET ???

AH = FBh
AL = 04h-08h

Return: AX = 0000h ———-2FFB——————————- INT 2F U - AutoBraille v1.1A - SET ???

AH = FBh
AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)

Return: ??? Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. ———-2FFB——————————- INT 2F U - AutoBraille v1.1A - SET ???

AH = FBh
AL = 10h-1Fh
???

Return: ??? ———-2FFB20—————————– INT 2F U - AutoBraille v1.1A - SET ??? FLAGS

AX = FB20h
BL = flags to set

SeeAlso: AX=FB21h“AutoBraille” ———-2FFB21—————————– INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS

AX = FB21h
BL = flags to clear

SeeAlso: AX=FB20h“AutoBraille” ———-2FFB22—————————– INT 2F U - AutoBraille v1.1A - SET ???

AX = FB22h
BL = ???

Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. ———-2FFB28—————————– INT 2F U - AutoBraille v1.1A - ???

AX = FB28h
BX = ???
???

Return: ??? SeeAlso: AX=FB29h“AutoBraille” ———-2FFB29—————————– INT 2F U - AutoBraille v1.1A - ???

AX = FB29h
BX = ???
???

Return: ??? SeeAlso: AX=FB28h“AutoBraille” ———-2FFB——————————- INT 2F U - AutoBraille v1.1A - SET ???

AH = FBh
AL = 2Bh-34h
BX = ???

———-2FFB35—————————– INT 2F U - AutoBraille v1.1A - SET ???

AX = FB35h
BL = ???

———-2FFB36—————————– INT 2F U - AutoBraille v1.1A - SET ???

AX = FB36h
BL = ???

———-2FFB37—————————– INT 2F U - AutoBraille v1.1A - SET ???

AX = FB37h
BL = ???

Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. ———-2FFB42BX0001———————– INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???

AX = FB42h
BX = 0001h

Return: AX = version number??? (AL=major, AH=minor)

CX = next-selector increment

—BC2.0—

ES:BX -> 80-byte buffer for ???
DX = DPMI version

—BC3.0—

BX = ??? (0000h)
DX = ???
ES:SI -> list of valid selectors ???

Notes: The version of DPMILOAD distributed with BC++ v2.0 identifies itself

  as version 1.000, while the version distributed with BC++ 3.0
  identifies itself as version 1.0; the former is 10864 bytes, the
  latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  the BC3.0 version also adds a DPMI host and DOS extender
the BC++ 2.0 version displays an error message if called with BX
  values other than 0001h-0008h

———-2FFB42BX0002———————– INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY

AX = FB42h
BX = 0002h
CX = size in bytes
DX = bit flags
    bit 2: set to allocate DOS memory, clear for DPMI memory
SI = selector of descriptor to be modified to access allocated memory
DI = selector of a second descriptor to be modified

Return: AX = ??? or 0000h on error

CX:DX = linear base address of DPMI memory block
SI:DI = handle for DPMI memory block or FFFFh:FFFFh
???

Note: two segment descriptors may be set if a code and an aliased data

  segment are required; if only one descriptor is needed, SI should
  equal DI on entry

BUG: when allocating DOS memory, the code computes the linear address by

  multiplying the segment number by 4 rather than shifting by 4

SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h ———-2FFB42BX0002———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY

AX = FB42h
BX = 0002h
ES:SI -> memory block info (see below)

Return: ??? Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself

  as version 1.000, while the version distributed with BC++ 3.0
  identifies itself as version 1.0; the former is 10864 bytes, the
  latter 22180 bytes.

SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h

Format of memory block info: Offset Size Description 00h WORD flags

	bit 0: set if data segment rather than code segment
	bit 1: information valid
	bit 2: set if DOS memory block rather than DPMI memory block
	bit 4: ???
	bit 15: set if no LDT selectors for memory block???

02h DWORD block size in bytes —DPMI memory block— 06h DWORD DPMI memory block handle —DOS memory block— 06h WORD real-mode segment of memory block 08h WORD selector of memory block — 0Ah DWORD linear address of memory 0Eh WORD memory operation error code 0008h no more free LDT descriptors —if flags bit 0 clear— 10h WORD code segment selector for memory block or 0000h or FFFFh 12h WORD data alias selector for memory block or 0000h or FFFFh —if flags bit 0 set— 10h WORD data segment selector for memory block or 0000h or FFFFh 12h WORD unused??? ———-2FFB42BX0003———————– INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY

AX = FB42h
BX = 0003h

Return: DX:AX = size of largest free block in paragraphs

	0000h:0000h on error (BC3.0 version only)

Note: AX and DX are destroyed on error, but no other error indicator is

  returned, under the BC++ 2.0 version of DPMILOAD

SeeAlso: AX=FB42h/BX=0002h ———-2FFB42BX0004———————– INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???

AX = FB42h
BX = 0004h
DS:DX -> ASCIZ filename of protected-mode executable

Return: CX = selector of ??? or 0000h —BC3.0—

DX = status (0000h,FFF4h,others???) (see below)

Note: the filename may also be terminated by a CR rather than a NUL under the

  BC++ 3.0 version of DPMILOAD

Values for status: 0000h successful 0001h ??? failure 0002h invalid selector 0004h unknown error 0008h no more LDT descriptors available??? FFDEh unable to set descriptor FFDFh unable to get segment base address FFE0h ??? FFF2h invalid parameter value FFF4h component of filename too long (name not in 8.3 format) FFF5h pathname too long (>79 chars) FFF6h ??? FFF8h ??? FFF9h index out of range FFFAh ??? FFFCh invalid access to code segment??? FFFEh ??? FFFFh general error ———-2FFB42BX0005———————– INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME

AX = FB42h
BX = 0005h
CX = selector of DPMILOAD data (see below)
DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)

Return: DX = status (see AX=FB42h/BX=0004h)

    0000h successful
	AX:BX -> ??? FAR function (called with two words on top of stk)
    else
	BX destroyed

SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh

Format of DPMILOAD data: Offset Size Description 00h 12 BYTEs ??? 0Ch WORD ??? bit flags 0Eh 14 BYTEs ??? 1Ch WORD number of memory control records 1Eh 25 BYTEs ??? 37h BYTE ??? bit flags bit 4: data valid??? 38h 4 BYTEs ??? 3Ch WORD ??? 3Eh 12 BYTEs ??? 46h BYTE ??? counter 47h BYTE ??? 48h BYTE ??? 49h BYTE ??? 4Ah WORD ??? 4Ch 2 BYTEs ??? 4Eh WORD offset of array of 64-byte memory control records 52h WORD offset of name list (see below) 54h 4 BYTEs ??? 58h WORD offset of array of 6-byte objects 5Ah 8 BYTEs ??? 62h 9 BYTEs ASCIZ name for ??? 6Bh 9 BYTEs ASCIZ name for ??? ???

Format of name list entry [array]: Offset Size Description 00h BYTE length of name (00h if end of array) 01h N BYTEs name N+1 WORD 1-based index into array of unknown 6-byte objects

Format of 6-byte objects: Offset Size Description 00h BYTE ??? 01h BYTE ??? 02h BYTE ??? 03h BYTE 1-based index of memory control record 04h WORD ???

Format of memory control record: Offset Size Description 00h 20 BYTEs memory block info (see AX=FB42h/BX=0002h) 14h 6 BYTEs ??? 1Ah BYTE ??? 1Bh 2 BYTEs ??? 1Dh BYTE ??? bit flags 1Eh 14 BYTEs ??? 2Ch DWORD pointer to ??? memory control record or 0000h:0000h 30h DWORD pointer to ??? memory control record or 0000h:0000h 34h DWORD pointer to next??? memory control record or 0000h:0000h 38h DWORD pointer to prev??? memory control record or 0000h:0000h 3Ch 4 BYTEs ??? Note: the pointers at offsets 2Ch and 30h form a doubly-linked list, as do

  the pointers at offsets 34h and 38h

———-2FFB42BX0006———————– INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER

AX = FB42h
BX = 0006h
CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
DX = 1-based index into array of ??? 6-byte objects

Return: DX = status (see AX=FB42h/BX=0004h)

    0000h successful
	AX:BX -> ??? FAR function (called with two words on top of stk)
    else
	BX destroyed

SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh ———-2FFB42BX0007———————– INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0007h
CX = selector of ???

Return: ??? Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself

  as version 1.000, while the version distributed with BC++ 3.0
  identifies itself as version 1.0; the former is 10864 bytes, the
  latter 22180 bytes.

———-2FFB42BX0007———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0007h
CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
???

Return: DX = status (see AX=FB42h/BX=0004h)

    0000h successful	
	AX = ???

———-2FFB42BX0008———————– INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK

AX = FB42h
BX = 0008h
CX = bit flags
    bit 2: set if DPMI memory, clear if DOS memory
DX = selector of DOS memory block
SI:DI = handle of DPMI memory block

Return: DX = 0000h on error, unchanged if succcessful Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself

  as version 1.000, while the version distributed with BC++ 3.0
  identifies itself as version 1.0; the former is 10864 bytes, the
  latter 22180 bytes.

SeeAlso: AX=FB42h/BX=0002h ———-2FFB42BX0008———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK

AX = FB42h
BX = 0008h
ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")

Return: ??? SeeAlso: AX=FB42h/BX=0009h ———-2FFB42BX0009———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK

AX = FB42h
BX = 0009h
ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
???

Return: ??? SeeAlso: AX=FB42h/BX=0008h“3.0” ———-2FFB42BX000A———————– INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL

AX = FB42h
BX = 000Ah
CX = 0001h
DX = ???
SI = ???

Return: after user exits subshell Notes: this call is used by DPMIRES; unlike most of the DPMILOAD calls, this

  function is not available in protected mode.
the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  version also adds a DPMI host and DOS extender.

SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h ———-2FFB42BX000B———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED

AX = FB42h
BX = 000Bh

———-2FFB42BX000C———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???

AX = FB42h
BX = 000Ch ???
ES:SI -> memory block info ??? (see AX=FB42h/BX=0002h"3.0")

Return: DX = status??? SeeAlso: AX=FB42h/BX=000Fh ———-2FFB42BX000D———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT

AX = FB42h
BX = 000Dh
CX = number of words to copy from protected-mode to real mode stack
DL = interrupt number
DH = flags
    bit 0: reset the interrupt controller and A20 line
ES:DI -> real-mode call structure (see INT 31/AX=0300h)

Return: CX = status

    0000h successful
    0001h failed

SeeAlso: INT 31/AX=0300h ———-2FFB42BX000E———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???

AX = FB42h
BX = 000Eh
DS:DX -> ASCIZ or CR-terminated name of ???

Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) corresponding to

	name, 0000h on error

SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh ———-2FFB42BX000F———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???

AX = FB42h
BX = 000Fh
ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")

Return: ??? SeeAlso: AX=FB42h/BX=000Ch ———-2FFB42BX0010———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR

AX = FB42h
BX = 0010h
DX = segment number

Return: CX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	DX = selector number for descriptor
    0008h failed

SeeAlso: AX=FB42h/BX=0023h ———-2FFB42BX0011———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0011h
CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
???

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	AX:BX -> ??? name
    0002h invalid selector
    FFFEh ??? error

———-2FFB42BX0012———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0012h
CX = selector for ???

Return: CX = selector for ??? ———-2FFB42BX0013———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0013h
CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
DX = 1-based index of ???

Return: CX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	BX = ??? or 0000h
    0002h invalid selector
    FFF9h ??? error

———-2FFB42BX0014———————– INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0014h ???
	CX = 0001h
	Return: BX = 0000h

Note: unlike most of the DPMILOAD functions, this call is available only in

  real or V86 mode

SeeAlso: AX=FB42h/BX=000Ah ———-2FFB42BX0015———————– INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0015h uninstall
CX = 0001h

Return: ??? Note: unlike most of the DPMILOAD functions, this call is available only in

  real or V86 mode

SeeAlso: AX=FB42h/BX=000Ah ———-2FFB42BX0016———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???

AX = FB42h
BX = 0016h
CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	CX = ???

———-2FFB42BX0017———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0017h
CX = ???
DX = ???
???

Return: DX = status (0000h,0001h) (see below) ———-2FFB42BX0018———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???

AX = FB42h
BX = 0018h
CX = ???

———-2FFB42BX0019———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0019h
CX = selector for ???
???

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	CX = selector for ???

———-2FFB42BX001A———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 001Ah
CX = selector for ???
???

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
    0004h failed
CX:BX -> ???

———-2FFB42BX001B———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 001Bh
CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
DX = offset of ???

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	BX = selector for ???
	CX = selector for ???
    0002h invalid selector

———-2FFB42BX001C———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 001Ch
ES = selector for DPMILOAD data (see AX=FB42h/BX=0005h)
CX = 1-based index of ???
DX = 1-based index of ???

Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h) ———-2FFB42BX001D———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???

AX = FB42h
BX = 001Dh

Return: CX:DX = ??? ———-2FFB42BX001E———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 001Eh
CX = ???
???

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
    FFF7h ??? error
CX:BX -> ???

———-2FFB42BX001F———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???

AX = FB42h
BX = 001Fh
DS:DX -> 8-character name of ???
???

Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) for ???

	0000h on error

SeeAlso: AX=FB42h/BX=000Eh ———-2FFB42BX0020———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???

AX = FB42h
BX = 0020h

Return: DX = ??? (always 0000h) ———-2FFB42BX0021———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT

AX = FB42h
BX = 0021h
CL = exception number (00h-1Fh)

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	AX:BX = selector:offset of handler
    FFF2h unable to get exception handler vector

SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h ———-2FFB42BX0022———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT

AX = FB42h
BX = 0022h
CL = exception number (00h-1Fh)
SI:DX = selector:offset of new handler

Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h) SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h ———-2FFB42BX0023———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER

AX = FB42h
BX = 0023h
CX = selector

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	CX = real-mode segment number
    FFF2h descriptor has invalid base address for real-mode segment

SeeAlso: AX=FB42h/BX=0010h ———-2FFB42BX0024———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR

AX = FB42h
BX = 0024h
CL = interrupt number

Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)

AX:BX = selector:offset of handler

SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h ———-2FFB42BX0025———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR

AX = FB42h
BX = 0025h
CL = interrupt number
SI:DX = selector:offset of new handler

Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h) SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h ———-2FFB42BX0026———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???

AX = FB42h
BX = 0026h
CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
DX = 1-based index of ???
???

Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)

    0000h successful
    	BX = offset of ??? within data structure

———-2FFB42BX0027———————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???

AX = FB42h
BX = 0027h
CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
DX = offset of ???

Return: DX = status (see also AX=FB42h/BX=0004h)

    0000h successful
	BX = ???

———-2FFB42BX0080———————– INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE

AX = FB42h
BX = 0080h
???

Return: AX = ???

???

———-2FFB42BX0081———————– INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE

AX = FB42h
BX = 0081h
???

Return: AX = ???

???

———-2FFB43—————————– INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION

AX = FB43h
BX = subfunction (at least 0000h-000Eh)

Notes: this function is only present in protected mode; it does nothing but

  an immediate IRET
DPMILOAD.EXE itself calls various subfunctions:
    subfunction 0004h is called with CX=selector of ???, DI=selector
    	of DPMILOAD data
    subfunction 0008h is called with CX=selector of DPMILOAD data

———-2FFB64—————————– INT 2F U - AutoBraille v1.1A - GET ???

AX = FB64h

Return: AX = ??? (0006h seen) Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. ———-2FFBA1BX0081———————– INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK

AX = FBA1h
BX = 0081h
ES:DI -> 16-byte buffer

Return: if installed, first four bytes of ES:DI buffer are “IABH” Note: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86. It was

  present only in Borland C++ 2.0; with version 3.0, the DOS extender
  was moved into DPMILOAD.

SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h SeeAlso: INT 21/AX=4403h“TKERNEL” ———-2FFBA1BX0082———————– INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT

AX = FBA1h
BX = 0082h
ES:DI -> response buffer (see below)

Return: ES:DI buffer filled SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h

Format of response buffer: Offset Size Description 00h 4 BYTEs signature “IABH” 04h DWORD pointer to FAR extender entry point

Call entry point with:

AX = function number
    0000h initialize???
    	STACK:  WORD  ???
	Return: AX = status???
		STACK unchanged
    0001h get version???
    	Return: AX = 0200h for v2.0.34
    0002h get ???
    	Return: AX = ??? (011Eh or 0182h seen)
    0003h load protected-mode executable
    	STACK:	DWORD -> ASCIZ filename of executable
		DWORD	???
		DWORD -> program arguments (counted string plus CR)
		DWORD -> environment for protected-mode executable
			(terminated with two consecutive NULs)
		DWORD -> WORD buffer for ???
	Return:	AX = status???
		STACK unchanged
    0004h get descriptor
        STACK:	WORD	selector for which to get descriptor
		WORD	segment number (when running in real mode)
		DWORD -> buffer for descriptor
	Return: CF clear if successful
		    buffer filled
		CF set on error
		    AX destroyed???
		STACK unchanged
    0005h ???
    	STACK:	WORD 	selector for ???
		WORD 	subfunction number???
			0000h run previously-loaded program???
			0001h ??? (similar to 0000h)
			0002h
			0003h
			0005h ??? (similar to 0000h and 0001h)
	Return: AX = status???
		STACK unchanged
    0006h ???
    	STACK:	WORD ???
		DWORD -> WORD (call) max iterations of ???
			      (return) remaining iterations
	Return: AX = ???
		STACK unchanged
    0007h unused
    	Return: AX = 0001h
    0008h unused
    	Return: AX = 0001h
    0009h copy protected-mode memory into conventional memory
    	STACK:  WORD 	selector for source segment
		WORD	segment of source if in real mode???
		DWORD	offset of source
		WORD 	number of bytes to copy
		DWORD -> low-memory destination
	Return: AX = status
		STACK unchanged
    000Ah copy conventional memory into protected-mode memory
    	STACK:  WORD	selector for destination segment
		WORD 	segment of destination if in real mode???
		DWORD	offset of destination
		WORD 	number of bytes to copy
		DWORD -> low-memory source
	Return: AX = status
		STACK unchanged
    000Bh get ??? pointers
    	STACK:	WORD desired pointer
			0000h get ???
			0002h get protected-mode CR3
			0003h get 4K page table buffer pointer
			else Return: DX:AX = FFFFh:FFFFh
	Return: DX:AX = requested pointer
		STACK unchanged
    000Ch set ??? pointers
    	STACK:	WORD desired pointer
			0000h set ???
			0002h set protected-mode CR3
			0003h set 4K page table buffer pointer
			else ignore
		DWORD new value for pointer
	Return: STACK unchanged
    000Dh get ??? pointers
    	STACK:	WORD desired pointer
			0000h get ???
			0001h get ???
			0002h get ???
			0003h get ???
			0004h get ???
			0005h get ???
			0006h get ???
			0007h get ???
			else Return: DX:AX = FFFFh:FFFFh
	Return: DX:AX = desired pointer
		STACK unchanged
 	    000Eh set ??? pointer
    	STACK:	WORD desired pointer
			0000h set ???
			0001h set ???
			0002h set ???
			0003h set ???
			0004h set ???
			0005h set ???
			0006h set ???
			0007h set ???
			else Return: DX:AX = FFFFh:FFFFh
	Return: STACK unchanged
    000Fh get ???
    	Return: AX = ??? (seen 0008h)
    0010h get ???
    	Return: AX = ???
    0011h determine whether selector is valid
    	STACK:	WORD	possible selector
	Return: AX = selector or 0000h if invalid
		STACK unchanged
    0012h get physical address
    	STACK:	WORD	selector for desired segment
		WORD	segment number if in real mode
		DWORD	offset within segment
	Return: DX:AX = 32-bit physical address or 00000000h on error
		BX destroyed
		STACK unchanged
    0013h ???
        Note:	normally jumps to code for function 0012h
    0014h copy protected-mode memory to conventional memory, with ???
    	STACK:  WORD	selector for source segment
		WORD	segment of source if in real mode???
		DWORD	offset of source
		WORD	number of bytes to copy
		DWORD -> low-memory destination
	Return: AX = status???
		STACK unchanged
    0015h copy conventional memory to protected-mode memory, with ???
    	STACK:  WORD	selector for destination segment
		WORD	segment of destination if in real mode???
		DWORD	offset of destination
		WORD	number of bytes to copy
		DWORD -> low-memory source
	Return: AX = status???
		STACK unchanged
    0016h set ??? pointer
    	STACK:	WORD	unused
		DWORD -> ??? or 0000h:0000h
	Return: AX = 0000h
		STACK unchanged
    0017h allocate real-mode procedure???
    	STACK:	DWORD	ASCIZ name of procedure
		DWORD ???
		DWORD	address of subroutine to invoke
	Return: AX = status
		    0032h procedure by that name exists
		    0033h no more real-mode procedures available
		DX destroyed
		STACK unchanged
    0018h unused
    	Return: AX = 0001h
    0019h get parameter block
    	Return: DX:AX -> parameter block (format unknown at this time,
			but 92h bytes)
			(preceded by signature "!!PARAM-BLOCK!!")
    001Ah get ???
    	Return: AX = ??? (0148h seen)
    001Bh free real-mode procedure???
    	STACK:	DWORD -> ASCIZ name of procedure
	Return: ???
		STACK unchanged
    001Ch check whether packets from protected mode task pending
    	Return: AX = 0001h if packets pending, 0000h if not
    001Dh set ???
    	STACK:	DWORD ??? or 0000h:0000h
	Return: AX,BX destroyed
		STACK unchanged
    001Eh ???
    	STACK:	WORD ??? (high byte ignored)
		DWORD -> data structure (see below)
	Return: AX,BX,CX,DX destroyed
		data structure updated
		STACK unchanged
	Format of data structure
	Offset	Size	Description
	 00h  2 BYTEs	unused
	 02h	WORD	???
	 04h	WORD	???
	 06h	WORD	???
	 08h  2 BYTEs	unused
	 0Ah	WORD	???
	 0Ch	WORD	(call) ???
	 		(return) offset of this data structure (BUG?)
    001Fh set ???
    	STACK:	WORD ??? (set to 0001h if zero)
	Return: AX destroyed
		STACK unchanged
    0020h ???
    	STACK:	DWORD -> ??? (8 bytes of data)
	Return: AX = ???
		STACK unchanged
    0021h ???
    	STACK:	DWORD -> ??? (8 bytes of data)
		WORD	???
		WORD	???
	Return: AX = ???
		STACK unchanged
    0022h ???
    	STACK:	DWORD -> ??? (8 bytes of data)
		DWORD -> 4-byte buffer for results
	Return: AX = ???
		STACK unchanged
    0023h ???
    	STACK:	DWORD -> ??? (8 bytes of data)
	Return: AX = ???
		STACK unchanged
    0024h set ???
    	STACK:	WORD ???
	Return: AX destroyed
		STACK unchanged
    0025h get ???
    	Return: AX = ??? (value set with func 0024h)
    0026h BUG: jumps to hyperspace due to fencepost error
    FFFFh set DOS memory management functions
	BX:SI -> FAR routine for allocating DOS memory
		(called with AH=48h,BX=number of paragraphs to alloc;
		 returns CF clear, AX=segment of allocated memory, or
		 	 CF set on error)
	CX:DI -> FAR routine for freeing DOS memory
		(called with AH=49h,ES=segment of block to free;
		 returns CF set on error,AX=error code)
	Note: each of these pointers normally points at INT 21/RETF
    other Return: AX = 0001h

Note: BX may be destroyed by any of the API calls ———-2FFBA1BX0084———————– INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL

AX = FBA1h
BX = 0084h
ES:DI -> response buffer (see below)

Return: ES:DI buffer filled SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h

Format of response buffer: Offset Size Description 00h 4 BYTEs signature “IABH” 04h WORD success indicator

	0001h failed (INT 2F hooked by another program)
	unchanged if successful

06h WORD segment of ??? 08h WORD segment of ??? memory block to free if nonzero 0Ah WORD segment of ??? memory block to free if nonzero ———-2FFBFBES0000———————– INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK

AX = FBFBh
ES = 0000h

Return: ES nonzero if installed

    ES:BX -> entry point data structure (see below)

SeeAlso: INT 80/BX=0000h,INT F3“SoundBlaster”

Format of entry point data structure: Offset Size Description 00h 3 BYTEs signature “FB ” 03h BYTE driver major version number??? 04h DWORD speech driver entry point 08h 24 BYTEs ??? 20h ? BYTEs data buffer for calling speech driver

Call driver entry point with:

AL = function
    07h speak a string
    	data buffer (see above) contains:
		BYTE  length of string
	      N BYTEs string to speak

———-2FFE00DI4E55———————– INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT

AX = FE00h
DI = 4E55h ("NU")
SI = TSR identifier
    4346h ("CF") NCACHE-F (v5) / NCACHE (v6.0+)
    4353h ("CS") NCACHE-S (v5 only)
    4443h ("DC") DISKREET
    444Dh ("DM") DISKMON
    4653h ("FS") FILESAVE (v5) / EP (v6.0+)

Return: SI = TSR reply

    lowercase version of SI on entry (i.e. SI OR 2020h)
AH = status
    00h installed but disabled internally
    01h installed and enabled
AL = status
    00h	NCACHE-x or DISKREET installed
    01h FILESAVE / EP / DISKMON v6 installed
    45h	DISKMON v5 installed
BX = length of *.INI file (DISKMON and FILESAVE/EP only) (see below)
CX = segment of resident portion
    FFFFh if completely loaded high (NCACHE)

—FILESAVE/EP—

DL = ??? (apparently always 00h)

—DISKMON—

DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6])

Note: the value returned in CX is incorrect for NCACHE 6.00 SeeAlso: AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h

Format of DISKMON.INI file: Offset Size Description -6Ch 108 BYTEs (in memory copy only)

	list of filenames which are always protected:
	  IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
	  MIO.SYS/IO.BIN, COMMAND.COM

00h BYTE ??? always 01h 01h BYTE disk light (00h off, 01h on) 02h BYTE disk protection (00h off, 01h on) 03h BYTE protected areas

	01h system area
	02h files
	03h system area and files
	04h entire disk

04h BYTE floppy access (00h not allowed, 01h allowed) 05h 27 BYTEs filename extension list (9 entries)

	(lowercase, blank padded or = 000000h)

20h 240 BYTEs filename list (20 entries)

	(lowercase, name and extension blank padded, with '.')

Note: CX:0508h → copy in installed TSR (v5)

CX:052Fh -> copy in installed TSR (v6)

Format of FILESAVE.INI / EP.INI file: Offset Size Description 00h 26 BITs drive list (bit set: file protection on, cleared: off): 00h BYTE drives A: - H: 01h BYTE drives I: - P: 02h BYTE drives Q: - X: 03h BYTE drives Y: - Z: 04h BYTE which files to protect

	00h all files
	01h all files with extension in list
	02h all files except those with extension in list

05h 27 BYTEs filename extension list (9 entries, uppercase, ASCIZ) 20h BYTE include files with archive bit clear (00h no, 01h yes) 21h WORD number of days after which files are purged (0 = never) 23h WORD max kilobytes of erased file space to hold (0 = all) Note: CX:03D2h → copy in installed TSR (v5.0)

CX:03F5h -> copy in installed TSR (v6.0)

———-2FFE01DI4E55———————– INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE

AX = FE01h
DI = 4E55h ("NU")
SI = TSR identifier (see AX=FE00h)

Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)

AX = status
    0002h successful (DISKMON, FILESAVE, EP)
    FE00h successful (NCACHE-x, DISKREET)

Notes: if the enable/disable calls are used on DISKMON or NCACHE-x, the status

  report generated by the programs still indicates the previous state,
  and DISKMON.INI is not updated
apparently has no effect on DISKREET

SeeAlso: AX=FE00h,AX=FE02h ———-2FFE02DI4E55———————– INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE

AX = FE02h
DI = 4E55h ("NU")
SI = TSR identifier (see AX=FE00h)

Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)

AX = status
    0004h successful (DISKMON, FILESAVE)
    FE00h successful (NCACHE-x, DISKREET)

Note: (see AX=FE01h) SeeAlso: AX=FE00h,AX=FE01h ———-2FFE03DI4E55———————– INT 2F U - NORTON UTILITIES 5.0+ TSRs - internal - ???

AX = FE03h
DI = 4E55h ("NU")
SI = TSR identifier (see AX=FE00h)

Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)

AX = status
    0006h successful???

Notes: only supported by DISKMON, FILESAVE, and NCACHE-x

reportedly dangerous

SeeAlso: AX=FE00h ———-2FFE04DI4E55———————– INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???

AX = FE04h
DI = 4E55h ("NU")
SI = TSR identifier (see AX=FE00h)

Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)

AX = status
    0008h successful???

SeeAlso: AX=FE00h ———-2FFE05DI4E55———————– INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???

AX = FE05h
DI = 4E55h ("NU")
SI = TSR identifier (see AX=FE00h)

Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)

AX = status
    000Ah successful???

Note: reportedly dangerous SeeAlso: AX=FE00h ———-2FFF00—————————– INT 2F - Topware Network Operating System - INSTALLATION CHECK

AX = FF00h

Return: AL = 00h not installed, OK to install

   = 01h not installed, not OK to install
   = FFh installed

SeeAlso: AX=FF01h,INT 21/AH=FFh“Topware”,INT 7A“Topware” ———-2FFF01—————————– INT 2F - Topware Network Operating System - GET VERSION

AX = FF01h

Return: AX = version SeeAlso: AX=FF00h ———-30——————————— INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls

 the CALL 5 entry point does a FAR jump to here

Note: under DOS 2+, the instruction at PSP:0005 points two bytes too low in

  memory

SeeAlso: INT 21/AH=26h