UMBCCMSC 211

UMBC | CSEE


CMSC211 Assembly Language Programming

Interrupt 21 Functions

to send /05h ileated with a character device. <9h 4Bh/00-03h
Func Purpose InputOutputDescriptionComments
00h Program Termination AH = 00h
CS = segment address of PSP
nothing Terminates execution of the current process and returns control of the parent process. COM programs store the segment address of the Program Segment Prefix (PSP) in the CS register automatically. For an EXE program, do not use this function, use Function 31H or 4Ch instead.
01h Keyboard Input AH = 01h AL = character read Reads a character from a standard input device and displays it on the standard output device. When the function is called, it waits until a character is available. This can be redirected. This function must be called twice to read extended ASCII codes on IBM and compatible PCs. The first call returns 0 in the AL register. If the character being read is the Ctrl-C character and input is not redirected, this function calls interrupt 23h. If standard input has been redirected, a Ctrl-C character is read and BREAK is ON, then this function calls interrupt 23h.
02h Display Output AH = 02h
DL = character to send to standard output
nothing Displays a character on the standard outhe standard output device. This can be redirected. If standard output has not been redirected, then control codes such as backspace, carriage return and linefeed are preformed when this function sends characters to the screen. If output has been redirected, these codes are sent to the file as ordinary ASCII codes.
03h Auxiliary Input AH = 03h AL = character read Reads a character from the serial port. The default is the COM1. The MODE command can redirect serial access. In most systems, the serial device has no internal buffer and is not interrupt driven. This means that it can send data faster than programs can read them. All unread characters may be lost.
Before calling this function, you must initialize the serial port by performing the MODE command. When starting up, the serial port is initialized to 2400 baud, one stop bit, no parity, and 8 data bits
The ROM BIOS functions of INT 14h are more efficient for accessing the serial port. This interrupt can be used to obrtain the status of the auxiliary device, which make them more flexible.
04h Auxiliary Output AH = 04h
DL = character to send
nothing Sends a character to the serial port. The default is the COM1. The MODE command can redirect serial access. See comments for 03h.
05h Printer Output AH = 05h
DL = character to print
nothing Sends a character to the standard list device. By default, this is LPT1:. The MODE command allows you to redirect printer access. The function transmits the character only when the output device is ready to accept it.
The functions of the ROM BIOS IN 17h are more efficient for accessing the printer.
06h Direct Console Character I/O AH = 06h
DL = 00h - FEh sends a character
DL = FFh - reads a character
Character output: nothing
Character input:
no character ready:

ZF = 1: No character ready
Character received:
ZF = 0 ; Character received
AL = character read
Reads a character from the standard input device and writes a character to the standard output device. This function is used to read and write all possible characters and control codes without examining them (e.gmining them (e.g., Ctrl-C has not effect on the program). Input and output for standard devices can be redirected. This funtion does not test whether the floppy disk or hard disk is full when it is writing. Neither can it tell whether all the characters have been read from the input device. This function must be called twice to read extended ASCII codes on PCs. The first call returns 0 in the AL register (this indicates presence of an extended code).
This function cannot display blanks (ASCII code 255) because it interprets that value as a command to input a character.
If a character is receceived, it is oched to STDOUT.
Ctrl-C or Crtl-Break are not checked.
07h Unfiltered Character Input Without Echo AH = 07h AL = Character Reads a character from the standard input device without displaying it on the standard output device. If the character is not ready when the function is called it waits until a character is available. Input to a standard device can be redirected. The OS does not test the input character. To read extended ASCII codes, the function must be called twice. The first call returns 0 in the AL register, indicating an extended code.
08h Character Input Without Echo AH = 08h AL = Character Reads a character from the standard input device without displaying it on the standard output device. If the character is not ready, it waits until a character is available. To read extended ASCII codes, the function must be called twice. The first call returns 0 in the AL register, indicating an extended code.
09h Display ASCIIZ String AH = 09h
DS:DX = segment:offset of the string
nothing Displays a character string to the standard output device. The string must be terminated with the dollar sign character '$'. Control codes such as carriage return, linefeed, and backspace caackspace can be embedded within the string.
0Ah Buffered Keyboard Input AH = 0Ah
DS:DX = segment:offset of the buffer
nothing Reads a string of bytes from the standard input device and sends the characters to a buffer. This function echoes characters to the standard output device. The input ends when it receives a carriage return code. Uses the buffer in the following format:
OffsetSizeDescription
00h 1 maximum number of characters (including the carriage return) buffer can hold
01h 1 number of characters
02h n actual characters read from input including the carriage return which terminated the string
0Bh Check Input Status AH = 0Bh AL = 00h if no character is available
AL = FFh one or more characters available
Determines whether standard input device has a character available a character available for reading If this function detects Ctrl-C and Ctrl-Break it calls INT 23h
0Ch Flush Input Buffer and Read Standard Input AH = 0Ch
AL = function to be called after clearing buffer
DS:DX = segment:offset of input buffer (if AL = 0Ah)
AL = input character (if called with AL = 01h, 06h, 07h, 08h) Clears the type-ahead input buffer and then performs one of the character input functions 01h, 06h, 07h, 08h, or 0Ah. If AL is not 01h, 06h, 07h, 08h, or 0Ah, this function flushes the buffer and passes control to the calling function.
0Dh Disk Reset AH = 0Dh nothing Writes all data stored in the internal DOS buffers to the disk. This function prevents access to new data, as it does not update the directory for all open files.
0Eh Select Default Disk Drive AH = 0Eh
DL = Drive number
(00h = A, 01h = B ,etc)
AL = number of logical drives Defines the current or denes the current or default disk and returns the number of available drives. With DOS 3.0 and later, this function returns the number 5 or the drive code corresponding to the LASTDRIVE value in AL.
0Fh Open File (FCB) AH = 0Fh
DS:DX = Pointer to unopened FCB
AL contains:
00h = File opened successfully
FFh = File not opened
Used to open existing disk files using an FCB. This function will not create a file (See Int 21/16). Function is called after filling in a drive, file name, and extension fields of FBC. Drive designations are 0 (default drive), 1 (A:), 2 (B:), etc. Function sets FCB block field to zero; record size to 80h; and file size, date, and time from requested file's directory entry.
10h Close File (FCB) AH = 10h
DS:DX = Pointer to opened FCB
AL contains:
00H = File closed successfully
FFh = File not closed
DO NOT USE. Use 21H/3EH instead. Used toign=top>Used to close a previously opened disk file that uses an FCB. This function is essential with FCB files because it forces DOS to update file's directory entry. To use function, provide the information in file-name, extension, and drive-designator fields.
11h Search for First Entry (FCB) AH = 11H
DS:DX = Pointer to unopened FCB
AL =
0 if match was found
FFH if no match was found
DO NOT USE. Use 21H/4EH instead. Used to search for first occurrence of specified directory entry. To use this function, provide the filename, extension, and drive designators in the appropriate FCB fields.

Use an extended FCB to search for a file with a specific attribute. Valid attributes are derived from the attribute bit settings and include the following:
ValueFile types matched
00H Normal
02H Normal and hidden
04H Norma and system
06 Normal, hidden, and system
08H Volume l Volume labels
10H Directories

Upon successful completion, the DTA holds an unopened FCB for the file that was found. If search is called with an extended FCB, DTA has entended FCB. If you are using wild-card characters to search for files, and no error was returned from this function, you can continue searching by using INT 21H/12H.

12h Search for Next Entry (FCB) AH = 12H
DS:DX Pointer to FCB return by INT 21H/11H
AL = 00H, if match found
  = FFh, if no match found
DO NOT USE. Use 21H/4FH instead. Continues a directory search begun by INT 21H/11H. Can be called as many times as necessary to locate a given file within a directory, but will search only for next matching entry, not first entry. FCB pointed to by DS:DX should be the same one used in previous search.

When successfully completed, the DTA holds an unopened FCB for the file found. If search was initiated with extended FDB, DTA will have extended FCB.

13h Delete File (FCB) AH = 13H
DS:DX = Pointer to unopened FCB
AL = 00h, if file deleted
= FFH if file not deleted
DO NOT USE. Use 21H/41H instead. Used to delete normal files using an FCB. Read-only files, system files, hidden files, volume labels, or directories cannot be deleted with this function.

To use, provide the file name, extension, and drive designators in the appropriate FCB fields. Do not try to delete an open file.

14h Read Sequential File (FCB) AH = 14H
DS:DX = Pointer to opened FCB">FCB
AL =
ValueDescription
00H Read was successful
01H No read, already at End-Of-File (EOF)
02H Read canceled, DTA boundary error
03H Partial read, now at EOF
DO NOT USE. Use 21H/3DH instead. Facilitates sequential reading of information from a disk file using an FCB. You can read information only from a previously opened file (INT 21H/0FH).

To use, point DS:DX to an FCB created after file was opened. Reads are controlled by the arameters set in the FCB. Length of read is given in record-size field. Location is given by current block and record numbers.

When completed, information read from the disk is placed in the DTA, and record address in the FCB is automatically incremented.

15h Write Sequential File
AH 15H
DS:DX Pointer to opened FCB
AL = known
Value
ValueDescription
00H Write successful
01H No write, disk full or read-only
02H Write canceled, DTA boundary error
DO NOT USE. Use 21H/3FH instead. Allows sequential writing of data to a file using an FCB. You can write data only to a previously opened (or created) file.

To use, point DS:DX to an FCB created after the file was opened or created. Parameters set in the FCB control writes. Length of write is given in record-size field. Location is given by current block and record numbers.

16h Create File (FCB) AH = 16H
DS:DX = Pointer to unopened FCB
AL = 00H, if File Created
= FFH, if file not created
DO NOT USE. Use 21H/3CH instead. Creates specified file and leaves it open for subsequent use with an FCB. To use, the FCB's drive, filename, and extension fields must be provided. When you use an extended FCB, you can assign an attribute to create a hidden file or volume label.
17h Rename File (FCB) AH = 17H
DS:DX = Pointer to modified FCB
AL =
0 if file renamed
FFH if file not renamed
DO NOT USE. Use 21H/56H instead. Allows you to change name of existing disk files using a modified FCB. Only normal files can be renamed. The modified FCB has the following format:
OffsetMeaning
00h Drive designation
01 Original file name
09h Original file extension
11h New file name
19 New file extension

Because filenames in any given directory must be unique, this fucntion will return an error if asked to rename a file to a name that already exists.

18h RESERVED         
19h Get Current Disk AH = 19h AL = drive (01h = A:, 02h = B:, etc) Determines the number of the current or default disk drive  
1Ah Set Data Transfer Address (DTA) AH = 1Ah
DS:DX = segment:offset of DTA
nothing Establishes the address of buffer area in memory to use as the current DTA for FCB-related function calls. When the program starts, the DTA is set to a 128 byte buffer at offset 0080h in the PSP.
It is recognized as an error and aborts a disk transfer if DTA is at the end of a segment and disk transfer exceeds the end of the segment.
DOS does not test the length of the DTA. You must create a DTA of any size, less than 64K, that is large enough for any disk operation that will use it.
1Bh Get Default Drive Data AH = 1Bh AL = sector/cluster
CX = bytes/sector
DX = number of clusters
DS:BX = segment:offset of media ID byte
values: DS/SS, sectors/track
FFh = DS, 8

FFh = DS, 8
FEh = SS, 8
FDh = DS, 9
FCh = SS, 9
F9h = DS, 15
F8h = hard disk
F0h = other
Get the information about the size of the default disk drive.  
1Ch Get Disk Data AH = 1Ch
DL = drive (00h = default, 01h = A:, etc)
AL = sector/cluster
CX = bytes/sector
DX = number of clusters
DS:BX = segment:offset of media ID byte
Get informat about the size of a specified disk drive. Identical to Fucntion 1B except the any drive can be specified.
1Dh RESERVED        
1Eh RESERVED        
1Fh Get Drive Parameter Block (DPB) for current drive AH = 1Fh AL = 00h if function successful
DS:BX = segment:offset ofbr>DS:BX = segment:offset of DPB
AL = FFH, if invalid drive
Gets information about the disk parameters for the current drive. For DOS 4.0 - 5.0, the DPB has the following format:
OffsetSizeDescription
00h 1 Drive number (0=A:,1=B:,etc)
01h 1 unit number within device driver
02h 2 bytes per sector
04h 1 highest sector number within cluster
05h 1 shift count to convert clusters into sectors
06h 2 number of reserved sectors at beginning of drive
08h 1 number of FATs
09h 2 number of root directory entries
0Bh 2 number of first sector containing user data
0Dh 2 highest cluster number (number of clusters + 1)
0Fh 2 number of sectors per FAT
11h 2 sector number of first directory sector
13h 2 address of device driver header
17h 1 media ID byte
18h 1 00h if disk is accessed, FF if not
19h 4 pointer to next DPB
1Dh 2 cluster at which cluster at which to start search for free space when writing
1Fh 2 number of free clusters on drive, FFFFh = not known
20h RESERVED        
21h Random Read AH = 21H
DS:DX = segment:offset of previously opened file control block (FCB)
AL =
valuedescription
00H read successful
01H End of File (EOF)
02H segment wrap, read canceled
03 partial record at EOF
Reads a selected record from a file into memory. DO NOT USE. Use 21H/3FH instead.
  • The record is read into memory at the current disk transfer area address, specified by the most recent call to INT 21H/1AH. It is the programmer's responsible to ensure that this area is large enough for any record that will be transferrerd that will be transferred. If the size and location of the buffer are such that a segment overflow or wraparound would accur, the function fails with a return code of 02H.
  • The filed location of the data to be read is determined by the combination of the relative-record field (offset 21H) and the record size field (offset 0EH( of the FCB. The default record size is 128 bytes.
  • The current block field (offset 0CH) and current record field (offset 20H) are updated to agree with the relative record field as a side effect of the function.
  • The relative-record field of the FCB is not incremented by this function; it is the responsibility of the application to update the FCB appropriately if it wishes to read successive records. Compare with INT 21H/27H, which can read multiple records with one function call and automatically increments the relative-record field.
  • If a partial record is read at EOF, it is padded to the requested record length with zeros.
  • If the program is running on a network, the user must hav Read access rights to the directory containing the file to be read.
22h Random Write AH = 22H
DS:DX = segment:offset of previously opened file control block (FCB)
AL =
00H if write successful
=
= 01H if disk full
=02H if segment wrap, write canceled
Writes data from memory inot a selected record in a file
  • DO NOT USE. Use 21H/40H instead.The record is written(logically, not necessarily physically) to the file from memory at the current disk transfer address (DTA), specified by the most recent call to INT 21H/1AH. If the size and location of the buffer are such that a segment overflow or waparound would occur, the fucntion fails with a return code of 02H.
  • The file location of the data to be written is determned by the combination of the relative-record field (offset 21H) and the reco size field (offset )EH) of the FCB. The default record size is 128 bytes.
  • The current block field (offset 0CH) and current record field (offset 20H) are updated to agree with the relative-record field as a side effect of the function.
  • The relative-record is not incremented by this function; it is the responsibility of the application to update the FDB appropriately if it wishes to write successive records. Compare with INT 21h/28h, which can write multiple records with one function call and automatically increments the relative-record field.
  • If a record is written beyond the current EOF, the space between the old EOF and the new record is allocated but not initialized.
  • If the program is running on a netetwork, the user must have Write access rights to the directory containing the file to be written.
23h Get File Size AH = 23H
DS:DX = segment:offset of unopened file control block (FCB)
If successful (matching file found)
AL = 00
FCB relative-record rield (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record

If unsuccessful (no matching file found):
AL = 0FFH

Get File Size
  • DO NOT USE.An approparite value must be plaed in the FCB record size field (offset )EH) before calling this function. There is no default record size for this function. Compare with the FDB-related open and create functions ( INT21H 0FH and 1hH), which initialize the FCB for a defualt record size of 128 bytes.
  • The record size field can be set to 1 to find the size of the file in bytes.
  • Because records numbers are zero based, this function can be sued to position the FDB's file ponter to EOF.
24h Set Relative Record Number AH = 24H
DS:D24H
DS:DX = segment:offset of previously opened file control block (FDB)
AL is destroyed
FCB relative record field (offset 21H) is updated
Sets the relative-record number field of a file control block (FCB) to correspond to the current file position as recorded in the opened FCB.
  • DO NOT USE.This function is used when swithcing from seuqential to random I/O within a file. The contents of the relative-record field (offset 21H) are derived from the record size (offset 0EH), current block (office 0CH), and the current reocd (offset 20H) fields of the file control block (FDB).
  • All four bytes of the FCG relative-record field (offset 21H) should be initialized to zero before calleing this function.
25h Set Interrupt Vector AH = 25h
AL = interrupt number
DS:DX = segment:offset address of new interrupt handler
nothing Sets a specfied interrupt vector to point to another handling routine. This function is a better way to change interrupt handlers than direct modification of the interrupt vector table
Before this function is called, the initial contents of the interrupt vector table must be retreived using Function 35h, and saved. Later, the original interrupt vector should be restored.
26h Create new PSP AH = 26h
DX = segment address of new PSP
nothing Copies the PSP from the PSP of the executing program to a specified address in the memory. This function is obsolete. Use Function 4Bh instead.
27h Random Block Read AH = 27H
CX = number of records to read
DS:DX = segment:offset of previously opened file control block
AL = <>
valueMeaning
00H All requested records read
01H01H End Of File (EOF)
02H segment wrap
03H partial record read at EOF
CX = actual number of records read
Reads one or more sequential records from a file into memory, starting at a designated file location
  • The records are read into memory at the current disk transfer area address (DTA), specified by the most recent call to INT21h/1AH. It is the programmer's responsibility to ensure that this area is large enough for the group of records that will be transferred. If the size and location of the buffer are such that a segment overflow or wraparound would occur, the function fails with a return code of 02H.
  • The file location of the data to be read is determined by the combination of the relative-record field (offset 21H) and the record size field (offset 0EH) of the FDB. The default record size is 128 bytes.
  • AFter the disk transfer is preformed, the current block (offset 0CH), current record (offset 020H), and the relative-record offset 21H) fields of the FCB are updated to point to the next record in the file.
  • If a partial record is read at the end of file (EOF), the remainder of the record is padded with zeros.
  • If the program is running on a network, the user must hvae Read access righrts to the directory containing the file to be read.< read.
  • Compare with INT 21H/21H, which transfers nly one record per function call and does not update the FCB relative-record field.
28h Random Block Write AH = 28H
CX = number of records to write
DS:DX = segment:offset of previously opened file control block
AL =
= 00H if all requested records written
= 01H if disk full
= 02H if segment wrap
CX = actual number of records written
Writes one ore more sequential records from memory to a file, starting at a designated file location.
  • The records are written (logically, not necessarily physically to disk from memory at the current disk transfer area (DTA), specificied by the most recent call to INT 21h/1AH. If the size and location of the buffer are such that a segment overflow or wraparound would occur, the function fials with a return code of 02H.
  • The file location of the data to be written is determined by the combination of the relative record field (offset 21H) and the record size field (offset 0EH) of the FCB. The default record size is 128 bytes.
  • AFter the disk transfer is performed, the current block (offset 0CH), current record (offset 020H), and the relative-record offset (21H) fields of the FCB are updated to poin to the next record in the file.
  • If this function is called with CX = 00H, no data is written to the disk but the file is extended or truncated to the length specified by the combination of the record size (offset 0EH) and the relative-record (offset 21H) fields of the FCB.
  • If the program is running on a network, the user must have Write access rights to the directory containing the file to be written.
  • Compare with INT 21H/22H, which transfers only one record per function call and does not update the FCB relative-record field.
29h Parse Filename into FCB AH = 29h
AL = parsing option:
bitmeaning
0 0: skip leading separators
1 1: set driver specifier in FCB only if the filename is specified on the command line
1 0: the drive specifier will be changed anyway; if no drive specified on the command line, FCB drive code is set to 0 (default).
2 1: set filename only if filename is specified on command on command line
2 0: the filename will be changed; if the filename is not present, FCB filename is set to blanks
3 1: set extension only if extension specified on the command line
3 0: the extension will be changed

DS:SI = segment:offset of string
ES:DI = segment:offset of file control block (FCB)
AL = return status (00h - no wildcards encountered, 01h - wildcard present, FFh - invalid drive specifier)
DS:SI = segment:offset of first unparsed character
ES:DI = segment:offset of buffer with unopened FCB
Parses a character string and copies into the appropriate fields of an FCB. The string can include drive, filename and file extension. If the filename or extension contain asterisks, then they are changed to question marks in the FCB.
The filename must terminate with a null byte (ASCII code 0).
This function cannot be used with a file specification which includes a path.
2Ah Get Date AH = 2Ah CX = yeagn=top>CX = year (1980 - 2099)
DH = month (1-12)
DL = day
AL = day of the week (0 = Sunday, 1 = Monday, etc)
Gets the current system date from the system calendar  
2Bh Set Date AH = 2Bh
CX = year (1980 - 2099)
DH = month (1 - 12)
DL = day
AL = 00h if date set successful
= FFh if invalid date.
Changes the current system date to a specific date. This function does not change the system time.
2Ch Get Time AH = 2Ch CH = hours (0 - 23)
CL = minutes (0 - 59)
DH = seconds (0 -59)
DL = 1/100 seconds (0 - 99)
Reads the current system current system time. Resolution may be 5/100 of a second.
2Dh Set Time AH = 2Dh
CH = hours (0 - 24)
CL = minutes (0 - 59)
DH = seconds (0 - 59)
DL = 1/100 seconds
AL = 00h if function is successful
= FFh if invalid time (ignored)
Sets the current system time  
2Eh Set Verify Flag AH = 01h
AL = 00h Do not verify data
= 01h Verify data
nothing Toggles the disk write verification flag. This flag determines that data must be verified once it has been written. The default flag is OFF because this is a slow disk operation.
2Fh Get Disk Transfer Address (DTA) AH = 2Fh ES:BX = segment:offset of DTA Determines the address of a current disk data buffer for all FCB file read and write operations. The default DTA starts at offset 80h in the PSP and has a length of 128 bytes.
30h Get MSDOS Version Number AH = 30h
AL = Determines information returned in BH
= 00h - Manufacturers ID
= 01 - Flag
AL = major version number
AH = minor version number
BH = OEM's serial number
= 00h IBM PC DOS
= FFh MSDOS
BH = version flag
= 08 DOS in ROM
= 10h DOS in XMA
Determines the MSDOS version number  
31h Terminate and Stay Resident (TSR) AH = 31h
AL = return code
DX = number of paragraph to be kep resident
nothing Terminates the program currently being executed and passes control to the calling program, withing releasing resources allocated to the current process. The current process stays resident in the memory and waits for another call. The parent process can read the return code in the AL register with Function 4Dh. Alternatively it can can be tested in a batch file by the ERRORLEVEL and IF statements. A non-zero return code usually indicates an error. The number of the 16-bit paragraph in the DX register indicates the initial memory allocation block, beginning with the PSP. This memory cannot be released for use by Function 48h. This memor This memory can only be relased by Function 49h.
32h Get DOS Driver Parameter Block (DPB) for Specific Drive AH = 32h
DL = drive (0 = current, 1 = A; etc)
AL = 00h if function is successful
DS:BX = segment:offset of DPB
AL = FFh invalid drive
Get information about disk parameters for a specific drive
OffsetSizeDescription
00h 1 Drive number (0=A:,1=B:,etc)
01h 1 unit number within device driver
02h 2 bytes per sector
04h 1 highest sector number within cluster
05h 1 shift count to convert clusters into sectors
06h 2 number of reserved sectors at beginning of drive
08h 1 number of FATtd valign=top>number of FATs
09h 2 number of root directory entries
0Bh 2 number of first sector containing user data
0Dh 2 highest cluster number (number of clusters + 1)
0Fh 2 number of sectors per FAT
11h 2 sector number of first directory sector
13h 2 address of device driver header
17h 1 media ID byte
18h 1 00h if disk is accessed, FF if not
19h 4 pointer to next DPB
1Dh 2 cluster at which to start search for free space when writing
1Fh 2 number of free clusters on drive, FFFFh = not known
33h/00h or 01h Get or Set Break Flag AH = 33h
AL = 00h if getting break flag
= 01 if setting break flag
DL = 00h if turn break flag OFF
= 01 if truning break flag ON
DL = current state
00h - break flag is OFF
01h - break flag is ON
Reads and chages the state of the Ctrl-Break check flag. When the system break flag is on, this function determines whether DOS should check the keyboard to see if the Ctrl-C or Ctrl-Break keys have been pressed. When this flag is off, it checks for traditional character input/output.
Since the Ctrl-Break flag is not part of the environment block of the current program, it affects all programs which use DOS functions fo character input/output and which check Ctrl-C and Ctrl-Break.
33h/02h Get and Set Extended Control-Break Checking State AH = 33h
AL = 02h
DL = 00 if checking OFF
01 if checking is ON
DL = old state of extended break checking Obtains an changes the state of the Control-Break flag. This function is full re-entrant.
33h/05h Determine Boot Drive Number AH = 33h
AL = 05h
DL = boot drive (1=A, 2+=B, etc) Reads the system boot drive  
33h/06h Get Actual Version Number AH = 33h
AL = 06h
BL = major version
BH = minor version
DL = revision
DH = version flag
bit 3=1 DOS is in ROM
bit 4 = DOS is in HMA
Reads the actual version of MS-DOS. This function returns the actual version of MS-DOS even if the DOS command SETVER has changed the version.
34h Get Address of InDOS Flag AH = 34h ES:BX = segment:offset of InDOS flag Reads the address of Critical Section (InDOS) flag. This indicates that INT 21h Function is working. The value of the InDOS flag is incremented when an INT 21h fucntion begins to work and decremented when it is completed.
During INT 28h, call the falue in InDOS flag may be 01h instead of zero. Burt in this case the functions from 01h to 0Ch INT 21 only may be calledl There may, however be occasions when DOS is busy but the InDOS flag is zero. This is possible because during its operation, the critical error handler decrements InDOS and increments the critical error flag.
The Critical error flag is the byte before the InDOS flag in DOS 3+.
This function may be called once at the beginning of a program only.
35h Get Interrupt Vector AH = 35h
AL = interrupt number
ES:BX = segment:offset of interrupt handler Gets the address of the interrupt service routine for a specific interrupt vector. This function must be used to ensure compatability with future versions of DOS.
36h Get Disk Free Space AH = 36H AX = lign=top>AX = sectors per cluster, or 0FFFFH if the drive number is invalid
BX = number of available clusters
CX = bytes per sector
DX = clusters per drive
   
37h RESERVED        
38h Get Country Specific Information AH = 38h
AL = 1-0FE for specific country with code < 255
0FFh for specific code >= 255
BX = country code, if AL=0FFh
DX = 0FFFFH
CF = 0 function is successful
BX = country code
DS:DX = segment:offset of buffer filled with info as follows:
OffsetSizeDescription
00h 2 date format
0=USA mm dd yy
1=Europe dd mm yy
2=Japan yy mm dd
02h 5 ASCIIZ currency symbol string
07h 1 Thousand separator character
08h 1 00h
09h 1 decimal separator character
0A 1 00h
0B 1 date separator character
0Ch 1 00h
0Dh 1 time separator character
0Eh 1 00h
0Fh 1 currency format
bit 0=0 if currency symbol precedes value
1 if currency symbol follows value
bit 1=0 if no space between value and currency symbol
1 if one space between value and currency symbol
bit 2=0 if currency symbol and decimal are separate
bit=1 if currency symbol replaces decimal separator
10h 1 number of digits after decimal in currency value
11h 1 time format:
bit 0 = 0 if 12-hour clock
= 1 if 24-hour clock
12h 4 address of case map routine
16h 1 data list separator character
17h 1 00h
18h 10 reserved

CF = 1 if unsuccessful
AX = error code
Obtains country specific information or sets the current country parameters The case map address in 12-15h is the segment:offset address of the FAR procedure which is used for performing country specific conversions of character codes from 80h through 0FFh. This procedure must be called with the character to be converted to a capital letter in the AL register. If a capital letter already exists for the character in the AL register, it is returned in AL after the function call, otherwise the contents of AL remain unchanged.
39h Create Directory AH = 39h
DS:DX = segment:offset of ASCIIZ pathname
CF = 0 if successful
CF = 1 if unsuccessful
AX = error code
= 03h Path not found
= 05h Access denied
Creates a new subdirectory in a specified drive. An error will occur if:
Any element of the pathname does not exist.
A subdt exist.
A subdirectory with the same name already exists
A subdirectory is to be created in a root directory which is already full.
3Ah Delete Directory AH = 3Ah
segment:offset of ASCIIZ pathname
CF = 0 if successful
CF = 1 if unsuccessful
AX = error code
= 03h if path not found
= 05 if Access denied
= 10h if attempt to remove current directory
Deletes a subdirectory on a specified drive. An error will occur if:
Any element of the pathname does not exist.
The specified directory is the current directory.
The specified directory contains no files.
3Bh Set Current Directory AH = 3Bh
DS:DX = segment:offset of ASCIIZ pathname
CF = 0 if successful
CF = 1 if unsuccessful
AX = error code
= 03 if path not found
Changes current or default directory for a specified path and drive. An error will occur if any element of pathname does not exist. If the new pathname includes a drive letter, the default drive will not be changed.
3Ch Create File AH = 3Ch
CS = file attribute
bit 0: read-only file
bit 1: hidden file
bit 2: system file
bit 3: volume label (ignored)
bit 4: reserved
bit 5: archive bit
bit 6: reserved
DS:CS = segment:offset of ASCIIZ pathname
CF = 0
if successful
AX = handle
CF = 1 if unsuccessful
= 03 Path not found
= 04 No available handle
Access denied
Creates a new empty file on a specified drive with a specified with a specified pathname. Wildcards are not permitted in the filename.
An error will occur if any element of pathname does not exist; the file is to be created in a root directory which is full; or a file with the same name and read-only attribute exists in the current directory.
If a file with the same name exists, it is truncated to zero length.
3Dh Open File AH = 3Dh
AL = access mode
bits 0-2: access mode:
000 = read only
010 = write only
010 = read/write
bit 3: reserved (0)
bits 4-6: Sharing mode:
= 000 compatibility mode
= 001 deny all (only current program can access file)
= 010 deny write (other program can only read from file)
= 011 deny read (other programs can only write into file)
= 100 deny none (other programs can read and write the file)
DS:DX = segment of ASCIIZ pathname
CF = 0 if successful
AX = handle
CF = 1 if unsuccessful
AX = error code
= 01h missing file sharing software
= 02h file not found
= 03h path not found or file does not exist
= 04h no handle available
=05 access denied
= 0Ch access mode not permitted
Opens an existing file for reading, writing or appending on the specified drive and specified pathname. Wildcards are not permitted in the filename. If the drive or path are omitted in the filename, DOS accesses the current drive or directory.
An error will occur if any element of pathname does not exist, or if the file has the read-only attribute set and is opened in the read/write access mode.
The file pointer is set to the first byte of file.
File handlers which are inherited from a parent process also inherit all sharing and access restrictions.
3Eh Close File AH = 3Eh
BX = handle
CF = 0 if successful
AX is destroyed
CF = 1 if unsuccessful
AX = error code
= 06 File not opened or unauthorized handle
Writes all information in internal DOS buffers associated with the file to disk and updates directory information, then closes the file. Do not call this function with a zero handle (standard input) and you won't be able to enter characters from the keyboard.
3Fh Read File or Device AH = 3Fh
BX = handle
CX = number of bytes to be read
DS:DX = segment:offset of buffer
CF = 0 if successful
AX = number of bytes read
CF = 1 if unsuccessful
AX = error code
= 05h access denied
06 illegal handle or file not opened
Reads a given number of bytes at the current file pointer position, from a previously opened file, with a given valid handle or device, to a buffer. If the CF is clear after the function call and AX = 0, it means that the file pointer was already at the end of the file and the file cannot be read.
If the CF is clear after the function call and the value in Athe value in AX is small than the value in CX, it means that only part of a record was read, either because the end of file was reached or an error occurred.
If the call is successful, the file pointer position is updated after the function call.
If this function is used to read from a file with handle 0 (standard input device -- keyboard ), it stops reading after the first CR, or once a specified number of characters have been read.
40h Write File or Device AH = 40h
BX = handle
CX = number of bytes to write
DS:DX = segment:offset of buffer
CF = 0 if successful
number of bytes written
CF = 1 if unsuccessful
AX = Error Code
= 05 Access denied
= 06 Illegal handle of a file which is not opened
Writes a given number of bytes at the current file pointer position, to a previously opened file, with a given valide handle or device This function writes to a file with a valid handle or to a stardand output device. If CF = 0 and AX< CX, only a partial record was written, either because EOF was reached, or there was a DOS error (disk full).
If CF = 0 and CX = 0 it means that no data is written and the file is truncated or extended to the current position of the file.
If successful, the file pointer is updated after the function.nction.
41h Delete File AH = 41h
DS:DX = segment:offset of ASCIIZ pathname
CF = 0 if successful
CF = 1 if unsuccessful
AX = Error Code
= 02h file not found
= 03h path not found or file does not exist
= 05h access denied
Erases a specified file This function cannot delete subdirectories or volume names. This function does not erase data in a file. It only replaces the first symbol in the filename in the directory with the hex code 0E5h and marks the FAT Chain for this file as "free".
Wildcards are not permitted in file specification.
An error occurs if an element in the pathname does not exist, or the file has the Read-Only Attribute set.
42h Set File Pointer AH = 42h
AL = offset code
= 00h absolute offset from start of file
= 01 signed offset from current file pointer
= 02h signed offset from end of file.
BX = handle
CS = most significant part of offset
least significant part of offset
CF = 0 if successful
DX = high word of file pointer
AX = low word of file pointer
CF = 1 if unsuccessful
AX = error code
= 01h illegal offset code
= 06 illegal handlllegal handle or file not open
Moves the file location pointer to a specified position in the file. This function always return the result absolute byte offset from the start of the file in DX:AX.
For offset codes 01h and 02h, the file pointer may be position before the start of the file. The file pointer can also be set after the end of th file. No error will be returned at this point, but a subsequent attempt to read or write will create errors.
YOu can get the size of the file using the offfset code 06 and offset of 0. After callint, examine the file pointer location.
43h/01-02h Get or Set File Attributes AH = 43h
AL = 00h to get attributes
= 001 to set attributes
CS = file attributes (if AL = 01h)
= bit 0: read-only
= bit 1: hidden
= bit2: system
= bit 3: volume label
= bit 4: directory
= bit 5: archive
bits 6-15: reserved
DS:DX = segment:offset of ASCIIZ pathname
CF = 0 if successful
CX = file attribute
= bit 0: read-only
= bit 1: hidden
= bit2: system
= bit 3: volume label
= bit 4: directory
= bit 5: archive
bits 6-15: reserved
CF = 0 if unsuccessful
AX = error code
= 01h unknown function code
= 02 file not found
= 03h path not found
attribute cannot be changed.
Determines or sets file attributes for a specified file. Wildcards are not permitted in the pathname. This function can not change the volume label or directory attributes.
An error occurs if an element in the pathname does not exists.
44h/00h Get Device Information AH = 44h
AL = 00h
BX = handle
CF = 0 if successful
DX = device information word
character device if bit 7 is set:
bit 0 if standard input
bit 1 if standard output
bit 2 if NUL device
bit 3 if clock device
bit 4 reserved
bit 5 0 if handle is in the ASandle is in the ASCII mode, else binary mode
bit 6 0 if EOF on input
bit 8 - 10 reserved
bit 11 1 drive supports Open/Close calls
bit 12 - 13 reserved
bit 14 if IOCTL subfunctions are supported
bit 15 reserved
disk file if bit 7 is clear
bit 0 - 5 drive number (0 = A, 1 = B, etc.)
bit 6 if file has not been written
bit 8 - 15 reserved
CF = 1 if unsuccessful
AX = error code
01h unknown function code
05h if access denied
06h handle not opened or does not exist
Gets information about a specified file or device DH corresponds to the high byte of the attribute word of the handle for the character device.
in the binary ("raw") mode MSDOS treats all characters as data. In the ASCII ("cooked" mode, MSDOS checks the character stream and performs the relevant function, if a special character Ctrl-C, Ctrl-S, Ctrl-P, Ctrl-Z or CR is detected.
44h/01h Set Device Information AH = 44h
AL = 01h
BX = handle
DX device informtion word
bit 0 if standard input
bit 1 if standard output
bit 2 if NUL device
bit 3 if clock device
bit 4 reserved (0)
bit 5 0 if ASCII (cooked)/1 if binary (raw)
bit 6 reserved (0)
bit 7 indicating device
bit 8- 15 reserved (0)
CF = 0 if successful
CF = 1 if unsuccessful
AX = error code:
01h unknown function code
05h attribute can not be changed
06h handle not opened or does not exist
0Dh invalid dat
Sets specific characteristics of the character device. This function is useful for switching between ASCII (cooked) and binary (raw) modes, when the handle is associated with a character device.
44h/02h IOCTL: Read Control Data from Character Device Driver DOS AH = 44h
AL = 02
BX = handle
CX = number of bytes to be read
DS:DX = segment:offset of buffer
CF = 0 if successful
AX = number of bytes read
CF = 1
AX = error code
01h unknown function code
05h access denied
06h handle not opened or does not exist
0Dh invalid data
Reads data specific to each character device driver from a character device The character device driver defines the structure and type of control data.
This function can be used for reading hardware dependent information and status information of the character device, if this device supports this function. This information cannot usually be obtaned by other DOS functions.
44h/03h IOCTL: Write Control Data from Character Device Driver DOS AH = 44h
Al = 03h
BX = handle
CX = number of bytes to be written
DS:DX = segment:offset of data
CF = 0 if successful
AXf successful
AX = number of bytes sent
CF = 1 if unsuccessful
AX = error code
01h unknown function code
05h attribute cannot be changed
06h handle not opened or does not exist
0Dh invalid data
Writes control data specific to each character device from an application directly to a specified character device. If this function is support by a character device driver, it can be used to perform certain hardware dependent operations. These operations are not usually supported by other MSDOS function calls.
44h/04h IOCTL: Read Control Data from Block Device Driver DOS AH = 44h
AL = 04h
BL = drive code (0 = default, 1=A, etc.)
CX = number of bytes to be read
DS:DX = setment:offset of buffer
CF = 0 if successful
AX = number of bytes read
CF = 1 if unsuccessful
AX = error code
id data
01h unknown function code
05h attriubte cannot be changed
06h handle not opened or does not exist
0Dh invalid data
Reads control data directly from the block device into the buffer. This function can be used if the block device driver supports the IOCTL call
44h/05h IOCTL: Write Control Data from Block Device Driver DOS AH = 44h
AL =05h
device code
CX = number of bytes to be written
DS:DX = segment:offset of data
CF = 0 if successful
AX = number of bytes sent
CF = 1 if unsuccessful
AX = error code
=01h unknown function code
= 05h attribute cannot be changed
= 06h handle not open or does not exist
= 0Dh invalid data
Write data specific to each character device control from an application program directly to a block device. The format and structure are specific to each device. If this function is supported by a character device driver, it can be used to perform certain hardware dependent operations. These operations are usually not supported by other MSDOS function calls.
44h/06h IOCTL: Check Input Status AH = 44h
AL = 06h
BX = handle
CF = 0 if successful
AX = 00h device not ready ice not ready or EOF on file
CF = 1 if unsuccessful
AX = error code
= 01h unknown function code
= 05h attribute cannot be changed
= 06h = handle not opened or does not exist
= 0Dh invalid data
Reads the status of the specified device to determine whether the device can read data. This function can be used to check the status of certain character devices that do not have their own MSDOS functions for status checking (for example, serial port).
44h/07h IOCTL: Check Output Status AH = 44h
AL = 07h
BX = handle
CF = 0 if successful
AL = 00h device not ready
= 01 device is ready
CF = 1 if unsuccessful
AX = error code
= 01 unknown function code
= 05h attribute cannot be changed
= 06h handle not op not opened or does not exist
= 0Dh invalid data
Reads the status of a specified device that determines whether this device can write data. This function always returns the ready status indicating that all files are ready for output, even if the disk is full or there is no disk in the drive.
44h/08h IOCTL: Check if Block Device is Removable AH = 44h
AL = 08h
BL = device number (0=default, 1=A, etc.)
CF = 0 if successful
AL = 00h if media is removable
= 01 if media is not removable
CF = 1 if unsuccessful
AX = error code
= 01h unknown function code
= 0F invalid drive
Determines where the block device media (disk, hard disk, etc.) of the specified block device can be changed.  
44h/09h IOCTL: Check if Block Device is Remote AH = 44h
AL = 09h
BX = drive number (0=default, 1=A, etc.)
CF = 0 if successful
DX = device attribute word
bit 15=1 drive is SUBSTituted
bit 12=0 drive is local
bit 12=1 drive is remote
CF = 1 if unsuccessful
AX = error code
= 01h unknown function cown function code
= 0Fh invalid drive
Determines whether the specified block device is local (part of the PC that is used as a workstation) or remote (part of a network server). This subfunction can be used if network software has beeen installed previously.
44h/0Ah IOCTL: Check if Handle is Remote AH = 44h
AL = 0Ah
BX = handle
CF = 0 if successful
DX = attribute word for file or device
bit 15 = 0 if local
= 1 if remote
CF = 1 if unsuccessful
AX = error code
= 01h unknown function code
06h handle not opened or does not exist
Determines whether the specif handle refers to a file on a remote or local device. This subfunction can be used if network sofware has been install previously.
44h/0Bh IOCTL: Change Sharing Retry Count AH = 44h
AL = 0Bh
CS = pause between attemps (default = 1)
DX = number of attempts (default = 3)
CF = 0 if successful
CF = 1 if unsuccessful
AX = error code
= 01 unknown error code
Sets the number of attempts which MSDOS will perform afterl perform after the SHARE utility fails to open or lock a file. This subfunction can be used if network software has been installed previously.
The value in the CX register defines the delay which perfrom by executing empty cycles:
xor cx,cx
loop $; repeat this command 65536 times
Consequently, the value of the delay depends of the processor speed.
44h/0Ch IOCTL: Generic I/O Control for Character Device AH = 44h
AL = 0Ch
CH =
valueCategory Code
00h unknown
01h COM1, COM2, COM3, or COM4
03h CON
05h LPT1, LPT2, or LPT3

CL =
valuefunction
45h Set Iteration Count
4ah Select Code Page
4ch Set Code Page Preparation
40h End Code Page Preparation
5fh Set Display Information
65h Get Iteration Count
6ah Query Selected Code Page
6bh Query Prepared List
7fh Get Display List

DS:DX = segment:offset of parameter block
CF = 0 if successful
DS:DX = segment:offset of parameter block if CL = 65h, 6ah, 6bh, or 7f
CF = 1 if unsuccessful
AX = error code
Various calls for a character from an application The parameter block for CL = 45h has the following format:
OffsetSizeDescription
00h 2 Number of times the device driver will wait before the driver assumes that the device is busy.
The parameter block for CL = 4Ah and 6Ah has the following format:
OffsetSizeDescription
00h 2 length of data
02h 2 code page ID
04h 2N bytes DCBS (Double Byte Character Set) lead byte range start/end for each N range
The parameter block for CL = 4Ch has the following format:
Ofborder="1">
OffsetSizeDescription
00h 2 font type bit 0 = 0 downloaded
= 1 cartridge
bits 1-5 reserved (0)
44h/0Dh IOCTL: Generic I/O Control for Block Device AH = 44h
AL = 0Dh
BX = drive number (00h=default, 01h=A, etc)
CH =
valuecategory code
08h disk drive

CL =
valuefunction
40h set device parameters
41h write logical device track
42h format and verify track
46h set volume serial number
47h set access flag
60h get device parameters
61h read track
62h verify track
67h get access flag
CF = 0 if successful
DS:DX = segment:offset of parameter block if CL=60h or 61h
CF = 1 iff CL=60h or 61h
CF = 1 if unsuccessful
= error code
Transfers miscellaneous requests from application programs to block device drivers  The parameter block for functions 40h and 60 has the following format:
OffsetSizeDescription
00h 1
bitspecial functions
0 = 0 device BIOS Parameter Block (BPB) contains a new default BPB
0 = 1 function uses current BPB
1 = 0 Functions used all field in the parameter block (if CL=60h)
1 = 1 function uses track layout field
2 = 0 sectors in track may be different sizes
2 = 1 sectors in track are all the same size
3-7 reserved (0)
01h 2
valuedevice type
00h 320/360k disk
01h 1.2M 5.25 inch disk
02h 720K 3.5 inch disk
03h single density 8-inch disk
04h double-density 8-inch disk
05h fixed disk
06h tape drive
07h 1.44M 3.5 inch disk
08h other type of block device
02h 2 = 1 door lock is supported
bitdevice attributes
0 = 0 removable storage medium
0 = 1 nonremovable storage medium
1 = 0 door lock is not supported
1 = 1 door lock is supported
2-15 reserved (0)
04h 2 number of cylinders
06h 1
valuemedia type
00h 1.2M 5.25 inch disk (default)
01h 320/360k 5.25 inch disk
07h 31 device BPB
26h 2 number of sectors per track
28h 2N number, size of each sector per track
The parameter bock for functions 41h and 61h has the following format:
OffsetSizeDescription
00h 1 special function (must be zero)
01h 2 number of disk head
03h 2 number of disk cylinder
05h 2 number of first sector to read/write
07h 2 number of sector to transfer
09h 4 transfer buffer address
The parameter bock for functions 42h and 62h has the following format:
OffsetSizeDescription
00h 1 bit 0 = 0 format/verify track
bit 0 = 1 format status call
bits 1-7 = reserved (0)
01h 2 number of disk head parameters
03h 2 number of disk cylinders
The parameter bock for functions 46h and 66h has the following format:
OffsetSizeDescription
00h 2 info level (00h)
02h 4 disk serial number (binary)
06h 11 volume label or "NONAME"
11h 8 file system type "FAT12" or "FAT16" (CL = 66 only)
The parameter bock for functions 47h and 67h has the following ford 67h has the following format:
OffsetSizeDescription
00h 1 special function field must be zero
01h 1 disk access flag
The device BPB field has the following format:/tr>
OffsetSizeDescription
00h 2 number of bytes per sector
02h 1 number of sectors per cluster
03h 2 number of reserved sectors at start of disk
05h 1 number of FATs
06h 2 number of entries in root directory
08h 2 total number of sectors
0Ah 1 media ID byte
0Bh 2 number of sectors per FAT
0Dh 2 number of sectors per track
0Fh
0Fh 2 number of heads
11h 4 number of hidden sectors
15h 4 total number of sectors if word at 08h contains 0
19h 6 unknown
1Fh 2 number of cylinders
21h 1 device type
22h 2 device attribute (removable or not, etc)
44h/0Eh IOCTL: Get Logical Drive Map AH = 44h
AL = 0Eh
BL = drive number (00h=default, 01h=A, etc)
CF = 0 if successful
AL = 00h block device has only one logical drive assigned,
= 1 - 26: letter corresponding to the last logical device on the drive (1 = A, etc)
CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function number
0Fh invalid disk drive
Reads the l Reads the last logical drive used to reference a specific block device  
44h/0Fh IOCTL: Set Logical Drive Map AH = 44h CF = 0 if successful
AL =
valuemapping code
00 block device has only one logical drive assigned 1-26 the last letter used to reference the drive (1=A, etc)
01h - 0Ah logical code drive (1 = A, 2 = B, etc) mapped to the block device

CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function number
0Fh invalid drive number
Assigns the drive letter t drive letter to a specified block device This function treats a single physicall drove as both A: and B:.
44h/10h Query Generic IOCTL Capability (Handle) AH = 44h
AL = 10h
BX = handle for device
CH =
valuecategory code
00h unknown
01h COMn:
02h CON
01h LPTn:

CL =
valuefunction code
45h set iteration count
25h get iteration count
CF = 0
AX = 0000h specified IOCTL function is supported
CF = 1 if unsuccessful
AL = IOCTL capability not available
Tests whether a character device will support a miscellaneous IOCTL request to character device driver. Character device must support a Generic IOCTL Check call.
44h/11h Query Generic IOCTL Capability (Drive) AH = 44h
AL =n=top>AH = 44h
AL = 11h
BL = driver number (0=default, 1=A, etc)
CH =
valuecategory code
08h disk drive

CL = function code
CF = 0 if successful
AX = 0000h specified IOCTL function is supported
CF = 1 function is unsucessful
CL = IOCTL capability not available
Tests whether a block device supports a miscellaneous IOCTL request. A block device driver must support a Generic IOCTL Check call.
This function may be used if you wish to use a Generic IOCTL call beyond the set of called defined for DOS 3.2
45h Duplicate Handle AH = 45h
BX = file handle
CF = 0 if successful
AX = new handle
CF = 1 if unsuccessful
AX =
valueerror code
04 no additional handle available
06h handle not opened or does not exist
Creates a new file handle that refers to the same currently operating device or file as an exist file handle This function is used to force DOS to clear the file buffers by closing the duplicate handle. Itcate handle. It is faster than closing and reopening a disk file. A better way of doing this is using Function 68h.
This function can also be used for updating the directory entry of a file that has changed in length without closing and reopening a file.
46h Force Duplicate File Handle AH = 46h
BX = first file handle
CX = second file handle
CF = 0 if successful
CF = 1 if unsuccessful
AX =
valueerror code
04h no additional handle available
06h handle not opened or does not exist
Forces a second handle to become a duplicate of the first handle. This function closes the first file handle if it is still open.
This function associates an existing open file with a different file, or device. It is particularly useful for redirecting standard input or output to a different file or device by software (i.e., without using piping or redirection on the command line).
47h Get Current Directory AH = 47h
DL = drive number (0=default, 1=A, etc)
offset:segment of a 64 bytent of a 64 byte long buffer with ASCIIZ pathname
CF = 0 if successful
CF = 1 if unsuccessful
AX =
valueerror code
0Fh invalid drive specification
Gets current working of a specified device. This function returns the path description without the drive letter and the initial backslash.
48h Allocate Memory AH = 48h
BX = number of paragraphs to be requested
CF = 0 if function successful
AX = pointer to allocated block
CF = 1 if unsuccessful
AX =
valueerror code
07h memory control block destroyed
08h insufficient memory

BX = size of largest available memory block in paragraphs
Allocates memory to the current program This function always fails when it is executed within COM-format programs. This is because they initially occupy the largest avaiable block of memory. Therefore you must free some memory before using this function.
49h Release Memory AH = 49h
ES = segment of block to be freed
CF = 0 if function successful
CF = 1 if unsuccessful
AX =
valueerror code
07h memory control block destroyed
09h incorrect memory block address
Releases memory blocks previously obtained using function 48h  
4Ah Modify Allocated Memory Block AH = 4Ah
BX = new memory size in paragraphs
ES = segment of block address
CF = 0 if function successful
CF = 1 if unsuccessful
AX =
valueerror code
07h memory control block destroyed
08h insufficient memory
09h incorrect memory block address
BX = maximum number of paragraphs available
Changes the size of a memory block previously allocated by function 48h.  
4Bh/00-03h Load and/or Execute AH = 4Bh
AL =
valuefunction code
00h load and execute
01h load but do not execute
03h load overlay

DS:DX = ASCIIZ string of pathname
ES:BX = segment:offset of parameter block
CF = 0 if successful
BX = destroyed
DX = destroyed
CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function number
02h file not found
03h path not found
05h access denied
08h insufficient memory
10h invalid environment block
11h invalid format
Loads and executes (optionally) another program This function loads a sub-program, creates PSP and runs the sub-program. The parameter block for AL=00h, 01h has the following format:
OffsetSizeDescription
00h 2 segment pointer to environment block
02h 4 pointer to command line tail
06h 4 pointer to first FCB to be copied into new PSP
0Ah 4 pointer to second FCB to be copied into new PSP

The parameter block for AL=03h has the following format:
OffsetSizeDescription
00h 2 segment address in which to load overlay
02h 2 relocation factor to apply to overlay

If the segment address of the environment block is 0, then a child process has the same environment block as the parent procesblock as the parent process.
The environment strings must be paragraph aligned and consist of a sequence of ASCIIZ strings. The strongs must be followed by the byte 00h. The command tail parameter string contains a count byte which represents the number of characters in the command string. This is followed by ASCII characters. The string ends with a carriage return (which is not included in count). The first character of the string should be a blank. Before using this function, you must ensure that there is enough unallocated memory availabe for the child process. If necessary, you must release all memory to load the child process.
When this function loads and runs a sub-program, all open files of the parent process are available to the child process; therefore, if the parent process redirects standard input or output, it also affects the child process.
4Bh/05h Set Execution State AH = 4Bh
AL = 05h
DS:DX = segment offset of execution state
CF = 0 if successful
AX = 00h
CF = 1 if unsuccessful
AX = error code
Prepares new programs for execution This function may be used by programs which want to bypass the normal EXEC function. All DOS, BIOS and other software interrupts cannot be used after returning from this function and be and before the start of the child process.
4Ch Terminate with Output Code AH = 4Ch
AL = return code
Nothing Ends the current process and passes an exit code to the parent process This function is the proper method for terminating programs in DOS. It releases all the memory belonging to the parent process, flushes all the file buffers and closes all open file handles of the parent process. It also restores the contents of the interrupt vecotrs for the terminate handler (INT 22h), the Ctrol-C handler (INT 23h) and the critical error handler (INT 24h). AFter this, control is passed to the parent process. All files that have been opened using FCBs must be closed before executing this function. All network files locks should be removed before this function is performed. Batch files can test the exit code with an ErrorLevel and IF statement. The exit code zero indicates that the function was successful. code with an Error
4Dh Get Output Code AH = 4Dh AH =
valueterminate type
01h normal termination (INT 20ation (INT 20h, INT 21h Function 00h, or INT 21 Function 4Ch)
02h Ctrl-C or Ctrl-Break abort
03h termination by critical error handler
04h terminate and stay resident (INT 21h Function or INT 27h)

AL = return code
Reads the exit cod and termination type of the child process after execution of the EXEC call. This function can only retrieve the return code once, because the word where DOS stores this coded is cleared once the function has read it.
4Eh Find First Matching File AH = 4Eh
bitattribute mask (if set)
0 read-only
1 hidden
2 system
3 volume label
4 directory
5 archive
6-15 reserved (0)

DS:DX = segment:offset of ASCIIZ pathname
CF /td> CF = 0 if successful
[DTA] Disk Transfer Area = FindFirst data block

The DTA has the following format:
OffsetSizeDescription
00h 1 drive letter
01h 11 search template
0Ch 1 search attribute
0Dh 2 entry count within directory
0Fh 2 cluster number of the start of the parent directory
11H 4 reserved
15h 1 attribute of file found
16h 2 file time:
bitdescription
0-4 seconds / 2 (0 - 29)
5-10 minutes (0-59)
11-15 hours (0-23)
18h 2 file date:
bitdescription
0-4 day (1-31)
5-8 month (1-12)
9-15 year - 1980

1Ah 4 file size
1Eh 13 ASCIIZ filename and extension
CF = 1 if unsucessful (no matching fiile)
AX =
valueerror code
02h file not found
08h path not found
12h no file with same attribute is found
Searches for the first file that matches a specified filename in the default or specified directory on the default or specified drive. This function allows the use of wildcards in the filename. If a wildcard character is included in the filename, only the first matching filename is returned.
If the attribute byte is other than 08h, this functions returns all the specified the specified combination of attribute bits. If the attribute is 08h (the volume label), the function returns the volume label only. 4Fh Find Next Matching File AH = 4Fh
DTA points to the data block from the previous FirstFind or FindNext call CF = 0 if successful
CF = 1 if unsuccessful
AX =
valueerror code
12h no file with same attribute is found
Search for the next file that matches a specified filename in the default or specified directory on the default or specified drive, if the previous call of Function 4Eh was successful. This function is used after the function fEh. The function 4Fh continues the search performed by the function 4Eh if that function leaves the DTA unchanged.
The original file specification must contain wildcard characters. 50h Set Current Process ID (Set PSP address) AH = 50h
BX = segment address of new PSP Nothing Sets a new value of PID into "current process" variable This function does not use any internal stacks internal stacks and is thus fully re-entrant. 51h Get Current Process ID (Get PSP address) AH = 51h BX = segment address of new PSP Reads the segment address of the current PSP This function does not use any internal stacks and is thus fully re-entrant. 53h Translate BIOS Parameter Block to Drive Parameter Block DOS AH = 53h
DS:SI = segment:offset DPB
ES:DI = segment:offset buffer for DPB ES:BP = address of buffer with information -Transforms drive parameter informatin from the BIOS Parameter Block (BPB) which is stored on the disk to the format used by DOS. The BPB has the following format:
OffsetSizeDescription
00h 2 number of bytes per sector
02h 1 number of sectors per cluster
03h 2 number of reserved sectors at start of disk
05h 1 number of FATs
06h 2 number of entries in root directory
08h 2 total number of sectors
0Ah 1 media ID byte
0Bh 2 number of sectors per FAT
0Dh 2 number of sectors per track
0Fh 2 number of heads
11h 4 number of hidden sectors
15h 4 total number of sectors if word at 08h contains 0
19h 6 unknown
1Fh 2 number of cylinders
21h 1 device type
22h 2 device attribute (removable or not, etc)
54tr> 54h Get Verify Flag AH = 54h Al = 0 if OFF, else 1 if on Gets the current value of the MSDOS "verify" flag (read after write)   56h Rename File AH = 56h
? ? Changes the name of a file or moves a file from one directory to another on the same logical drive. This function does not allow the wildcard character in any pathname specification
This function cannot rename open files. It also allows you to rename directories but not to move them.
An error occurs if the file is moved in the root directory and it is full, or a file with a new pathname exists. 57h/00h Get File's Date and Time AH = 57h
AL = 00h
BX = file handle CF = 0 if successful
CX = file's time
bitsdescription
0-4 seconds/2 (0-29)
5-10 minutes (0-59)
11-15 hours (0-23)

DX = fil>
DX = file's date
bitsdescription
0-4 day (1-31)
5-8 month (1-12)
9-15 year - 1980

CF = 1 if unscuccessful
AX =
valueerror code
01h invalid function
06h invalid
Reads the date and time of the creation or last modification of a file. This function can only be called after the file has been created or opened using one of the handle functions. 57h/01h Set File's Date and Time AH = 57h
AL = 01h
BX = file handle
CX = new time
bitsdescription
0-4 seconds/2 (0-29)
5-10 minutes (0-59)
11-15 hours (0-23)
DX =
bitsdescription
0-4 day (1-31)
5-8 month (1-12)
9-15 year - 1980
CF = 0 if successful
CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function
06h invalid
Modifies the date and time information of a file to given values. This function can only be called after the file has been created or opened using one of the handle functions. 58h/00h Get Allocation Strategy AH = 58h
AL = 00h CF = 0 if successful
AX =
valuestrategy
00h first fit
01h best fit
02h last fit

CF = 1 if unsuccessful
AX =
valueerror code
01h function number is invalid
Reads the control byte which indicates the current MSDOS method for allocating memory blocks DOS has three methods of allocating memory blocks:
First fit: DOS begins searching the available memory blocks at the start of the memory and allocates the first block which is large enough.
Best fit: DOS searches all available memory blocks and allocates the smallest memory block which meets the requested size.
Last fit: DOS begins searching the available memory at the end of the memory and allocates the first block which is large enough.
The default strategy is the last fit. 58h/01h Set Allocated Strategy AH = 58h
AL = 01h
BX =
valuestrategy
00h first fit
01h best fit
02h last fit
CF = 0 if sugn=top>CF = 0 if successful
CF = 1 if unsuccessful
AX =
valueerror code
01h function number is invalid
Write the control byte which indicates the current MSDOS strategy for allocating memory blocks.   58h/02h Get Upper-Memory Link AH = 58h
AL = 02h AL =
valueDescription
00h UMB is not part of DOS memory chain
01h UMB is in DOS memory chain
Defines whether use of Upper Memory Blocks is enabled or disabled.   58h/03h Set Upper-Memory Link AH = 58h
AL = 03h
BX =
valueDescription
00h remove UMBs from DOS memory chain
01h add UMBs to memory chain
? Sets the indicator that enables/disables use of UMnables/disables use of UMBs Before using this function, you must save the indicator of aloocation of UMBs and before termination of process, restore it. 59h Get Extended Error Information AH = 59h
BX = 00h AX = <
valueextended error code
01h function number invalid
02h file not found
03h path not found
04h too many open files
05h access denied
06h handle invalid
07h memory control block destroyed
08h insufficient memory
09h invalid memory address
0Ah environment invalid
0Bh format invalid
0Ch access code invalid
0Dh data invalid
0Eh unknown unitunknown unit
0Fh disk drive invalid
10h current directory cannot be removed
11h different device
12h no more files
13h disk write-protected
14h unknown unit
15h drive not ready
16h unknown command
17h data error (CRC)
18h bad request structure length
19h seek error
1Ah unknown media type
1Bh sector not found
1Ch printer out of paper
1Dh write fault
1Eh read fault
1Fh general failure
20h sharing violation
21h lock violation
22h disk change invalid disk change invalid
50h file already exists
52h cannot make directory
53h fail on INT 24h (critical error)
54h too many redirections
55h duplicate redirection
56h invalid password
57h invalid parameter
5Ah required system component not installed

BH=
valueerror class
01h out of resource (storage or handles)
02h temporary problems than can be expected to end
03h authorization problem
04h internal error in system software
05h hardware problems
06h system software failure (bad ro missing CONFIG.SYS)
07h application error
08h file or other item not found
09
09h file or other item of invalid type or format
0Ah file or other item locked
0Bh media problem (wrong disk in drive, etc.)
0Ch item already exists
0Dh unknown error

BL =
valuesuggested action
01h retry a few times
02h pause, then retry
03h ask user to resupply input
04h abort application with cleanup
05h immediate abort without cleanup
06h ignore error
07h retry after user intervention

CH =
valuesource of error
01h unknown
02h block device (disk)
03h network
04h serial device
05h memory

ES:DI = ASCIIZ volume label of disk to insert if AX = 022h Gets information about errors that occur after an unsuccessful INT 21 function call.   5Ah Create Temporary AH = 5Ah
CX = file attribute (bits may be combined)
DS:DX = segment:offset of ASCIIZ path ending with at least 13 zero bytes CF = 0 if successful
AX = handle
DS:DX = segment:offset of complete ASCIIZ pathname
CF = 1 if unsuccessful
AX =
valueerror code
03h path not found
04h too many open files
05h access denied
Creates a temporary file with a unique name using the current date and time. The ASCIIZ pathname may contain a drive specification and a path designatin. If the pathname does not include either a drive specification or a path designation, this function creates a temporary file in the current directory of the default drive.
This function is used by COMMAND.COM for creating a temporary "piping" file, used for redirection of input/output. 5Bh Create New File AH = 5Bh
CX =
valuefile attribute (bits may be combined
0 read-only
1 hidden
2 system
3 volume label
4 reserved (0)
5 archive
6-15 reserved (0)

DS:DX = segment:offset of ASCIIZ pathname CF = 0 if successful
AX = handle
CF = 1 if unsuccessful
AX = d>path not found
valueerror code
03h path not found
04h too many open files
50h file exists.
Creates a file in the specified or default directory if it does not already exist. An error occurs when:
Any element of the path does not exist.
A filename already exists in the specified directory.
The file is to be created in the root directory, but this is already full.

When a file is created, it usually has a normal read/write attribute (0). 5Ch Lock or Unlock File Region AH = 5Ch AL =
valuedescription
00h lock region of a file
01h unlock region of a file

BX = file handle
CX = high word of region offset
DX = low word of region offset
SI = high word of region length
DI = low word of region length CF = 0 if successful
CF = 1 if unsuccessful
AX = ign="top">21h
valueerror code
01h invalid function code
06h invalid handle
21h all or part of region already locked
Prevents or allows access to the specified region of a file. Every call to a lock region must be followed by a call to unlock the same region.
A child process created by an EXEC system call does not inherit access to the locked region of a file which has been locked by its parent. If a program is terminated by INT 23h or INT 24h, you must release the locked regions of the open file, otherwise the result is undefined. 5Eh/00h Get Machine Name AH = 5Eh
AL = 00h
DS:DX = segment:offset of buffer (16 bytes) with computer name CF = 0 if successful
CH =
valuedescription
00h name not defined
<>00h name is defined

CL = netBIOS name number (if CH <> 0) DS:DX = segment:offset of computer name (if CH <> 0)
CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function code
Returns the ASCIIZ name of a local computer within a Microsoft Network. The computer name is a 16-byte ASCIIZ string. Spaces are added to make it this length. 5Eh/01h Set Redirection Mode AH = 5Eh
AL = 01h
DS:DX = segment:offset of buffer (16 bytes) with computer name CF = 0 function is successful
CH = 00h name not defiend
<> name is defined
CL = netBIOS name number (if CH <> 0)

CF = 1 function is unsuccessful
AX = error code
= 01 invalid function code
Sets current redirection mode (printer/disk). The computer type is a 16-byte ASCIIZ string. Spaces are added to make it this length. Also see INT21H/5EH. 5Eh/02h Set Printer Setup String AH = 5Eh
AL = 02h
BX = redirection list index
CX = length of setup string
DS:DI = segment:offset of setup string CF = 0 if successful
CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function code
Specifies the printer setup string which precedes all output to a network printer. This strinter. This string allows network users to specify their own individual mode to the network printer. System redirection list assigns local names to network printers, files and directories. 5Eh/03h Get Printer Setup String AH = 5Eh
AL = 03h
BX = redirection list index
ES:DI = segment:offset 9f 64-byte setup string CF = 0 if successful
CX = print setup string length
ES:DI = segment:offset of buffer with Setup String CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function code
Gets the printer setup string used by a network printer which is running in the Microsoft Network.   5Fh/00h Get Redirection Mode AH = 5Fh
AL = 00h
BL =
valuedescription
03h printer
04h disk driver
CF = 0 if successful
BH =
valuedescription
00h off
01h on

CF = 1 if unsuccessful
AX = error code Gets the current redirection mode (printer/disk). This function is available when Microsoft Network is installed. 5Fh/01h Set Redirection Mode AH = 5Fh
AL = 00h
BL =
valuedescription
03h printer
04h disk driver

BH =
valuedescription
00h off
01h on
CF = 0 if successfull
CF = 1 if uccessfull
CF = 1 if unsuccessful
AX = error code Sets the current redirection mode (printer/disk). This function is available when Microsoft Network is installed. If redirection is off, then local device is used. 5Fh/02h Get Redirection List Entry AH = 5Fh
AL = 02h
BX = redirection list index
DS:SI = 16-byte buffer for ASCIIZ device name
ES:DI = 128-byte buffer for ASCIIZ network name CF = 0 if succssful
BH =
valuedevice status flag
00h valid
01h invalid

BL =
valuedevice type
03h printer
04h disk drive

CX = parameter value stored in memory
DX = destroyed
BP = destroyed
DS:SI = segment: offset of ASCIIZ local device name
ES:DI = segment:offset of ASCIIZ network name
CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function code
12h no more files no more files available
Reads the system redirection list. This list assigns local names to network files, directories or printers.   5Fh/03h Redirect Device AH = 5Fh
AL = 03h
BL =
valuedevice type
03h printer
04h disk drive
CX = user data to save
DS:DI = segment:offset of ASCIIZ local device name
ES:SI = segment:offset of ASCIIZ network name and ASCIIZ password CF = 0 if successful
CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function code
03h path not found
05h access denied
08h insufficient memory
0Fh invalid drive
12h no more files available
Redirects a specified device to a specific network name. Device names can be drive>Device names can be drive specifiers (such as "D:"), printer names (LPT1, PRN, LPT2 or LPT3) or null string. If the the device name is a null string and password, then DOS attempts to gain access to the network directory with the specified password. 5Fh/04h Cancel Device Redirection AH = 5Fh AL = 04h
DS:DI of ASCIIZ local device name CF = 0 if successful
CF = 1 if unsuccessful
AX =
valueerror code
01h invalid function code
03h path not found
05h access denied
08h insufficient memory
0Fh invalid drive
12h no more files available
Cancels the current redirection for the specified local device with a network of printers, files or directories This function is available when Microsoft Network is running. Device names can be specifiers such as ("D:"), printer names (LPT1, LPT22, LPT3 or PRN) or a string beginning with two back slashes which terminates the connection between the local computer and theal computer and the network directory. 60h RESERVED         61h RESERVED         62h Get Current PSP Address AH = 62h BX = segment of PSP for current process Reads the segment address of the PSP for the current program. This function is identical to the undocumented function 51h. 63h RESERVED         64h RESERVED         65h Get Extended Country InformationGet Extended Country Information AH = 65h
AL =
valuesubfunction
01h get general international information
02h get pointer to uppercase table
04h get pointer to filename uppercase table
05h get pointer to filename terminator table
06h get pointer to collating table
07h get pointer to Double-byte Character Set (DBCS) Vector

BX = code page (-1 = active CON device)
CX = size of buffer to receive information
DX = country ID (-1 = default)
ES:DI = address of buffer to receive information CF = 0 if successful
CX = size of country information r information returned
ES:DI = address of country information
CF = 1 if unsuccessful
AX = error code Reads country-dependent information This function returns an extended version of the information which is returned by INT 21h function 38h. 65/20-22h Country Dependent Character Capitalization AH = 65h
AL =
valuesubfunctioin
20h Capitalize character
DL = character to capitalize
21h Capitialize string
DS:DX = segment:offset of the string to capitalize
CX = length of the string
22h Capitalize ASCIIZ string
DS:DX = segment;offset of ASCIIZ string to capitalize
CF = 0 if successful
DL = capitalized character if AL = 20h
CF = 1 if unsuccessful
AX = error code Capitalizes a text in a country dependent fashion.   65/23 Determine if Character Represents Yes/No REsponse AH = 65h
AL = 23h CF = 0 if successful
0 if successful
valuetype
00h no
01h yes
02h neither yes or no

CF = 1 if unsuccessful Determines a typed character is a "yes/no" response for current country.   66h Get or Set Code Page AH = 66h
AL =
valuesubfunction
01h Get code page
02h select code page

BX = select code page (if AL = 02h) CF = 0 if successful
if AL = 01h
BX = active code page
DX = default code page
CF = 1 if unsuccessful
AX = error code DOS reads or sets the current code page. MSDOS, via the function COUNTRY.SYS, supplies a new code page if AL = 02, but the device must be prepared for this by the directive DEVICE in CONFIG.SYS and NLSFUNC and MODE CP PREPARE commands in AUTOEXEC.BAT 67h Set Handle Count AH = 67h
BX = numbAH = 67h
BX = number of desired handles CF = 0 if successful
CF = 1 if unsuccessful
AX = error code Sets the maximum number of handles currently available to the calling programs. The default table of the PSP for the current process can control only 20 handles.
An error occures if the number of handles in the BX register is greater than 20 and there is no free memory available to allocate a block for the enlarged table.

If the number of requested files in the BX register is greater than the available number of entries controlled by the FILES entry in CONFIG.SYS file, no error occurs.
However an attempt to open a file or device will fail if all file entries are in use, even if not all the file handles have been used by the program. 68h Commit File AH = 68h
handle CF = 0 if successful
CF = 1 if unsuccessful
AX = error code Forces all data in DOS buffers associated with a specific handle to be written immediately to the specified device. If the handle points to a file which has been updated, the file's directory is also updated. This function closes and reopens a file or duplicates a handle and then closes it. This function maintain control of the fi of the file in multitasking and networking applications. Although this function does not perform any actions when it accesses a character device, it sets the Carry Flag. 69h Get/Set Disk Serial Number AH = 69h
AL =
valuesubfunction
00h Get serial number
01h Set serial number

BL = drive (0 = default, 1=A,2=B, etc
DS:DX = segment:offset disk serial number info CF = 0 if successful
AX = destroyed
AL =
valuedescription
00h buffer is filled with value from extended DPB
01h extended DPB on disk set to values from buffer

CF = 1 if unsuccessful
AX =
valueerror code
01h function number invalid (network driver)
05h access denied (no extended DPB on disk)
Reads or writes the volume label and serial number of the specified of the specified disk. This function does not generate critical errors.
This function does not work on network drivers.
The format on disk serial number info has the following format:
OffsetSizeDescription
00h 2 info level (zero)
02h 4 disk serial number (binary)
06h 11 volume label (or "NO NAME")
11h 8 "FAT12 " or "FAT16 "
6Ch Extended Open/Create Number AH = 6Ch
AL = 00h
BL =
bitaccess type
0-2
valueopen mode
000 read-only
001 write-only
010 reserved
3 reserved
4-6
valuesharing modesharing mode
000 compatibility
001 deny all
010 deny write
011 deny read
100 deny none
7 inheritance

BH =
bitflags
0-4 reserved
5
valuecritical error handling
0 execute INT 24h
1 return error to process
6
valuevalueauto commit on write
0 write may be buffered
1 physical write at request time
7 reserved

CX =
bitcreate attribute (bits may be combined)
0 read-only
1 hidden
2 system
3 volume label
4 reserved
5 archive
6-15 reserved

DX =
bitopen flag
0-3
valueaction if file exists
0000h fail
0001h open file
0010h replace file
4-7 0000h
valueaction if file does not exist exists
0000h fail
0001h create

DS:SI = segment:offset of ASCIIZ filename CF = 0 if successful
AX = file handle
CX =
valueDescription
1 file opened
2 file created
3 file replaced

CF = 1 if unsuccessful
AX = error code Combines functions "create", "open", and "commit" into a common function. Also see INT 21H 3CH and 3DH.

This page is based on material from:

It should be noted that not all of this references provide material on the latest versions of DOS, and, as a result, do not always agree.


UMBC | CSEE