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.