Jump to content

DOS API

From Wikipedia, the free encyclopedia

The DOS API is an API which originated with 86-DOS and is used in MS-DOS/PC DOS and other DOS-compatible operating systems. Most calls to the DOS API are invoked using software interrupt 21h (INT 21h). By calling INT 21h with a subfunction number in the AH processor register and other parameters in other registers, various DOS services can be invoked. These include handling keyboard input, video output, disk file access, program execution, memory allocation, and various other activities. In the late 1980s, DOS extenders along with the DOS Protected Mode Interface (DPMI) allow the programs to run in either 16-bit or 32-bit protected mode and still have access to the DOS API.

History of the DOS API

[edit]

The original DOS API in 86-DOS and MS-DOS 1.0 was designed to be functionally compatible with CP/M. Files were accessed using file control blocks (FCBs). The DOS API was greatly extended in MS-DOS 2.0 with several Unix concepts, including file access using file handles, hierarchical directories and device I/O control.[1] In DOS 3.1, network redirector support was added. In MS-DOS 3.31, the INT 25h/26h functions were enhanced to support hard disks greater than 32 MB. MS-DOS 5 added support for using upper memory blocks (UMBs). After MS-DOS 5, the DOS API was unchanged for the successive standalone releases of DOS.

The DOS API and Windows

[edit]

In Windows 9x, DOS loaded the protected-mode system and graphical shell. DOS was usually accessed from a virtual DOS machine (VDM) but it was also possible to boot directly to real mode MS-DOS 7.0 without loading Windows. The DOS API was extended with enhanced internationalization support and long filename support, though the long filename support was only available in a VDM. With Windows 95 OSR2, DOS was updated to 7.1, which added FAT32 support, and functions were added to the DOS API to support this. Windows 98 and Windows ME also implement the MS-DOS 7.1 API, though Windows ME reports itself as MS-DOS 8.0.

Windows NT and the systems based on it (e.g. Windows XP and Windows Vista) are not based on MS-DOS, but use a virtual machine, NTVDM, to handle the DOS API. NTVDM works by running a DOS program in virtual 8086 mode (an emulation of real mode within protected mode available on 80386 and higher processors). NTVDM supports the DOS 5.0 API. DOSEMU for Linux uses a similar approach.

Interrupt vectors used by DOS

[edit]

The following is the list of interrupt vectors used by programs to invoke the DOS API functions.

Interrupt vector Description Version Notes
20hTerminate program 1.0+ Implemented in DOS kernel
21hMain DOS API 1.0+ Implemented in DOS kernel
22hProgram terminate address 1.0+ Return address in calling program
23hControl-C handler address 1.0+ Default handler is in the command shell (usually COMMAND.COM)
24hCritical error handler address 1.0+ Default handler is in the command shell (usually COMMAND.COM)
25hAbsolute disk read 1.0+ Implemented in DOS kernel, enhanced in DOS 3.31 to support up to 2 GB partitions
26hAbsolute disk write 1.0+ Implemented in DOS kernel, enhanced in DOS 3.31 to support up to 2 GB partitions
27hTerminate and stay resident 1.0+ Implemented in COMMAND.COM in DOS 1.0, DOS kernel in DOS 2.0+
28hIdle callout 2.0+ Called by DOS kernel when waiting for input
29hFast console output 2.0+ Implemented by the built-in console device driver or a replacement driver like ANSI.SYS
2AhNetworking and critical section 3.0+ Called by DOS kernel to interface with networking software
2BhUnused
2ChUnused
2DhUnused
2EhReload transient 2.0+ Implemented in COMMAND.COM
2FhMultiplex 3.0+ Implemented in DOS kernel and various programs (PRINT, MSCDEX, DOSKEY, APPEND, etc.) depending on subfunction number

DOS INT 21h services

[edit]

The following is the list of functions provided via the DOS API primary software interrupt vector.

AHDescription Version
00hProgram terminate 1.0+
01hCharacter input 1.0+
02hCharacter output 1.0+
03hAuxiliary input 1.0+
04hAuxiliary output 1.0+
05hPrinter output 1.0+
06hDirect console I/O 1.0+
07hDirect console input without echo 1.0+
08hConsole input without echo 1.0+
09hDisplay string 1.0+
0AhBuffered keyboard input 1.0+
0BhGet input status 1.0+
0ChFlush input buffer and input 1.0+
0DhDisk reset 1.0+
0EhSet default drive 1.0+
0FhOpen file 1.0+
10hClose file 1.0+
11hFind first file 1.0+
12hFind next file 1.0+
13hDelete file 1.0+
14hSequential read 1.0+
15hSequential write 1.0+
16hCreate or truncate file 1.0+
17hRename file 1.0+
18hReserved 1.0+
19hGet default drive 1.0+
1AhSet disk transfer address 1.0+
1BhGet allocation info for default drive 1.0+
1ChGet allocation info for specified drive 1.0+
1DhReserved 1.0+
1EhReserved 1.0+
1FhGet disk parameter block for default drive 1.0+
20hReserved 1.0+
21hRandom read 1.0+
22hRandom write 1.0+
23hGet file size in records 1.0+
24hSet random record number 1.0+
25hSet interrupt vector 1.0+
26hCreate PSP 1.0+
27hRandom block read 1.0+
28hRandom block write 1.0+
29hParse filename 1.0+
2AhGet date 1.0+
2BhSet date 1.0+
2ChGet time 1.0+
2DhSet time 1.0+
2EhSet verify flag 1.0+
2FhGet disk transfer address 2.0+
30hGet DOS version 2.0+
31hTerminate and stay resident 2.0+
32hGet disk parameter block for specified drive 2.0+
33hGet or set Ctrl-Break 2.0+
34hGet InDOS flag pointer 2.0+
35hGet interrupt vector 2.0+
36hGet free disk space 2.0+
37hGet or set switch character 2.0+
38hGet or set country info 2.0+
39hCreate subdirectory 2.0+
3AhRemove subdirectory 2.0+
3BhChange current directory 2.0+
3ChCreate or truncate file 2.0+
3DhOpen file 2.0+
3EhClose file 2.0+
3FhRead file or device 2.0+
40hWrite file or device 2.0+
41hDelete file 2.0+
42hMove file pointer 2.0+
43hGet or set file attributes 2.0+
44hI/O control for devices 2.0+
45hDuplicate handle 2.0+
46hRedirect handle 2.0+
47hGet current directory 2.0+
48hAllocate memory 2.0+
49hRelease memory 2.0+
4AhReallocate memory 2.0+
4BhExecute program 2.0+
4ChTerminate with return code 2.0+
4DhGet program return code 2.0+
4EhFind first file 2.0+
4FhFind next file 2.0+
50hSet current PSP 2.0+
51hGet current PSP 2.0+
52hGet DOS internal pointers (SYSVARS) 2.0+
53hCreate disk parameter block 2.0+
54hGet verify flag 2.0+
55hCreate program PSP 2.0+
56hRename file 2.0+
57hGet or set file date and time 2.0+
58hGet or set allocation strategy 2.11+
59hGet extended error info 3.0+
5AhCreate unique file 3.0+
5BhCreate new file 3.0+
5ChLock or unlock file 3.0+
5DhFile sharing functions 3.0+
5EhNetwork functions 3.0+
5FhNetwork redirection functions 3.0+
60hQualify filename 3.0+
61hReserved 3.0+
62hGet current PSP 3.0+
63hGet DBCS lead byte table pointer 3.0+
64hSet wait for external event flag 3.2+
65hGet extended country info 3.3+
66hGet or set code page 3.3+
67hSet handle count 3.3+
68hCommit file 3.3+
69hGet or set media id 4.0+
6AhCommit file 4.0+
6BhReserved 4.0+
6ChExtended open/create file 4.0+

Operating systems with native support

[edit]

Operating systems with DOS emulation layer

[edit]

Other emulators

[edit]

See also

[edit]

References

[edit]
  1. ^Ray Duncan (1988). Advanced MS-DOS Programming: The Microsoft Guide for Assembly Language and C Programmers. Microsoft Press. ISBN 0914845772.

Further reading

[edit]
[edit]
close