     The following is a summary of some undocumented DOS 2.0 functions
which can be invoked through interrupt 21H. The information provided
herein have inaccuracies, so use it at our own risk! It is correct to
the best of my knowledge. See the section in your DOS 2.0 manual entitled
"Invoking DOS Functions" for further information. The function number
provided below for each operation is to be placed in the AH register as
described in the DOS manual. All numbers shown are in hex.

FUNCTION		DESCRIPTION

   37		This interrupt is used to change incompatible
		configuration parameters to allow for switch
		indicators and whether hardware devices are
		available at every level of the tree directory.

		Usage:	MOV	AH, 37
			MOV	AL, func		; function code
			MOV	DL, data
			INT	21H
		; read function data is returned in DL

		Function code for AL:
		0 - Return the DOS switch character in DL.
		    Many systems might return "-".
		1 - Make the character in DL the switch character.
		2 - Read the device availability byte into DL. A
		    0 means devices that devices must be accessed
		    in file I/O calls by /DEV/device. A non-zero
		    value means that devices are accessible at
		    every level of the directory tree (e.g., PRN
		    is the printer and not a file PRN).
		3 - Set the device availability byte to the
		    contents of DL.

		Possible errors returned in AL:
		FF - Illegal function code specified in AL.


   1F (?)	Retrieve the pointer to the default drive parameter block.

		Usage:	MOV	AH, 1F
			INT	21H
		; address of drive parameter block is returned in DS:BX


   32 (?)	Retrieve the pointer to the drive parameter block
		for the drive number in DL, where 0 = default drive,
		1 = drive A:, 2 = drive B:, etc.).

		Usage:	MOV 	AH, 32h
			MOV	DL, drivenum
			INT	21H
		; address of drive parameter block is returned in DS:BX
		; AL contains FF if the drive # in DL is invalid.

   F8 (?)	Set OEM handler for INT 21H calls from F9 through FF
		to DS:DX. To reset these calls, pass DS and DX with FFFF.
		DOS is set up to allow ONE handler for all 7 of these
		calls. Any call to these handlers will result in the
		carry bit being set and AX will contain 1 if they are
		not initialized. The handling routine is passed all
		registers just as the user set them. The OEM handler
		routine should be exited through an IRET.

		Usage:	LDS	DX, handler_addr
			MOV	AH, F8h
			INT	21H


   4B		Load and possibly execute a program (EXEC). This call
		is PARTIALLY documented in the IBM DOS 2.0 manual, but
		several function call values (for register AL) are
		omitted. They are:

			1 - Create the program segment prefix and
			    load the program, but do not begin
			    execution. The CS:IP and SS:SP of the
			    program are placed in the area provided
			    by the user.

				+-------------------------------+
				| Word segment addr of environ.	|
				+-------------------------------+
				| Dword ptr to cmd line at 80h	|
				+-------------------------------+
				| Dword ptr to default FCB to	|
				| be passed at 5Ch.		|
				+-------------------------------+
				| Dword ptr to default FCD to	|
				| be passed at 6Ch.		|
				+-------------------------------+
				| Dword value of SS:SP returned	|
				+-------------------------------+
				| Dword value of CS:IP returned	|
				+-------------------------------+

			2 - This function still remains a mystery.


   4E		Find first matching file (FIND FIRST). This function
		is PARTIALLY documented in the IBM DOS 2.0 manual.
		The description of what is returned in the DTA where
		the first 21 bytes are "reserved for DOS use on
		subsequent find next calls" contain the following
		in this order:

			1 byte	- attribute byte of search
			1 byte	- drive used in search
			11 bytes- The search name used
			2 bytes - Word value of last entry
			4 bytes - Dword pointer to this DTA
			2 bytes - Word directory start
			-----------------------------------
			{ The documented bytes follow here
			  such as attribute found, file's
			  time, date, size, and name found. }


   50		Define the current DTA (?) - this is all I know...

   51		Retrieve current DTA (?)

   52		Retrieve "IN_VARS" (?)

   53		Define something about a DTA (?)

   55		Duplicate a DTA (?)


     If anyone discovers ANYTHING useful and/or incorrect about this
information, then PLEASE contact this bulletin board and leave a 
message for everyone. Let's figure out this DOS 2.00 (and 2.10)!
     This document was made available through:

	TECHNET BBS	(617) 791-1957

Here's some more information on DOS 2.0 interrupts:

    The DOS critical section flag may be interrogated from
    within an interrupt handler before requesting DOS
    services:

	  MOV AH,34h
	  INT 21h

    returns in ES:BX the address of a byte indicating (when
    set) that DOS is in an uninterruptible state, and no DOS
    calls should be made.



To access DOS' PRINT capabilities:

	  MOV AH,func
	  INT 2Fh

     where:

	  AH = 0    adds the file specified by DS:DX to the
		    print queue.  DS:DX must point to valid
		    opened FCB.

	  AH = 1    cancels the file indicated by DS:DX.
		    DS:DX must point to an FCB, opened or
		    unopened.  The drive byte must not be 0.
		    Wildcards are restricted: ? is okay, *
		    isn't.

	  AH > 1    do nothing.

     Return with registers set as follows:

		    DS,SI,DI,CX preserved, all others destroyed.
		    AH = number of files currently in queue.
		    AL = for AH=0, return 1 if queue was
			 full.	For all other cases, return 0.
		    ES:BX = pointer to list of 10 FCBs in
			 queue, 38 bytes/FCB.  If the first
			 byte of an FCB is -1, that FCB is
			 unused.

		    ES:DX = pointer to currently printing
			 FCB.  If the queue is empty, DX = -1.


