Английская Википедия:DOS API
Шаблон:More footnotes Шаблон:Use dmy dates 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
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
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
The following is the list of interrupt vectors used by programs to invoke the DOS API functions.
Interrupt vector | Description | Version | Notes |
---|---|---|---|
Шаблон:Code | Terminate program | 1.0+ | Implemented in DOS kernel |
Шаблон:Code | Main DOS API | 1.0+ | Implemented in DOS kernel |
Шаблон:Code | Program terminate address | 1.0+ | Return address in calling program |
Шаблон:Code | Control-C handler address | 1.0+ | Default handler is in the command shell (usually COMMAND.COM) |
Шаблон:Code | Critical error handler address | 1.0+ | Default handler is in the command shell (usually COMMAND.COM) |
Шаблон:Code | Absolute disk read | 1.0+ | Implemented in DOS kernel, enhanced in DOS 3.31 to support up to 2 GB partitions |
Шаблон:Code | Absolute disk write | 1.0+ | Implemented in DOS kernel, enhanced in DOS 3.31 to support up to 2 GB partitions |
Шаблон:Code | Terminate and stay resident | 1.0+ | Implemented in COMMAND.COM in DOS 1.0, DOS kernel in DOS 2.0+ |
Шаблон:Code | Idle callout | 2.0+ | Called by DOS kernel when waiting for input |
Шаблон:Code | Fast console output | 2.0+ | Implemented by the built-in console device driver or a replacement driver like ANSI.SYS |
Шаблон:Code | Networking and critical section | 3.0+ | Called by DOS kernel to interface with networking software |
Шаблон:Code | Unused | ||
Шаблон:Code | Unused | ||
Шаблон:Code | Unused | ||
Шаблон:Code | Reload transient | 2.0+ | Implemented in COMMAND.COM |
Шаблон:Code | Multiplex | 3.0+ | Implemented in DOS kernel and various programs (PRINT, MSCDEX, DOSKEY, APPEND, etc.) depending on subfunction number |
DOS INT 21h services
The following is the list of functions provided via the DOS API primary software interrupt vector.
Шаблон:Code | Description | Version |
---|---|---|
Шаблон:Code | Program terminate | 1.0+ |
Шаблон:Code | Character input | 1.0+ |
Шаблон:Code | Character output | 1.0+ |
Шаблон:Code | Auxiliary input | 1.0+ |
Шаблон:Code | Auxiliary output | 1.0+ |
Шаблон:Code | Printer output | 1.0+ |
Шаблон:Code | Direct console I/O | 1.0+ |
Шаблон:Code | Direct console input without echo | 1.0+ |
Шаблон:Code | Console input without echo | 1.0+ |
Шаблон:Code | Display string | 1.0+ |
Шаблон:Code | Buffered keyboard input | 1.0+ |
Шаблон:Code | Get input status | 1.0+ |
Шаблон:Code | Flush input buffer and input | 1.0+ |
Шаблон:Code | Disk reset | 1.0+ |
Шаблон:Code | Set default drive | 1.0+ |
Шаблон:Code | Open file | 1.0+ |
Шаблон:Code | Close file | 1.0+ |
Шаблон:Code | Find first file | 1.0+ |
Шаблон:Code | Find next file | 1.0+ |
Шаблон:Code | Delete file | 1.0+ |
Шаблон:Code | Sequential read | 1.0+ |
Шаблон:Code | Sequential write | 1.0+ |
Шаблон:Code | Create or truncate file | 1.0+ |
Шаблон:Code | Rename file | 1.0+ |
Шаблон:Code | Reserved | 1.0+ |
Шаблон:Code | Get default drive | 1.0+ |
Шаблон:Code | Set disk transfer address | 1.0+ |
Шаблон:Code | Get allocation info for default drive | 1.0+ |
Шаблон:Code | Get allocation info for specified drive | 1.0+ |
Шаблон:Code | Reserved | 1.0+ |
Шаблон:Code | Reserved | 1.0+ |
Шаблон:Code | Get disk parameter block for default drive | 1.0+ |
Шаблон:Code | Reserved | 1.0+ |
Шаблон:Code | Random read | 1.0+ |
Шаблон:Code | Random write | 1.0+ |
Шаблон:Code | Get file size in records | 1.0+ |
Шаблон:Code | Set random record number | 1.0+ |
Шаблон:Code | Set interrupt vector | 1.0+ |
Шаблон:Code | Create PSP | 1.0+ |
Шаблон:Code | Random block read | 1.0+ |
Шаблон:Code | Random block write | 1.0+ |
Шаблон:Code | Parse filename | 1.0+ |
Шаблон:Code | Get date | 1.0+ |
Шаблон:Code | Set date | 1.0+ |
Шаблон:Code | Get time | 1.0+ |
Шаблон:Code | Set time | 1.0+ |
Шаблон:Code | Set verify flag | 1.0+ |
Шаблон:Code | Get disk transfer address | 2.0+ |
Шаблон:Code | Get DOS version | 2.0+ |
Шаблон:Code | Terminate and stay resident | 2.0+ |
Шаблон:Code | Get disk parameter block for specified drive | 2.0+ |
Шаблон:Code | Get or set Ctrl-Break | 2.0+ |
Шаблон:Code | Get InDOS flag pointer | 2.0+ |
Шаблон:Code | Get interrupt vector | 2.0+ |
Шаблон:Code | Get free disk space | 2.0+ |
Шаблон:Code | Get or set switch character | 2.0+ |
Шаблон:Code | Get or set country info | 2.0+ |
Шаблон:Code | Create subdirectory | 2.0+ |
Шаблон:Code | Remove subdirectory | 2.0+ |
Шаблон:Code | Change current directory | 2.0+ |
Шаблон:Code | Create or truncate file | 2.0+ |
Шаблон:Code | Open file | 2.0+ |
Шаблон:Code | Close file | 2.0+ |
Шаблон:Code | Read file or device | 2.0+ |
Шаблон:Code | Write file or device | 2.0+ |
Шаблон:Code | Delete file | 2.0+ |
Шаблон:Code | Move file pointer | 2.0+ |
Шаблон:Code | Get or set file attributes | 2.0+ |
Шаблон:Code | I/O control for devices | 2.0+ |
Шаблон:Code | Duplicate handle | 2.0+ |
Шаблон:Code | Redirect handle | 2.0+ |
Шаблон:Code | Get current directory | 2.0+ |
Шаблон:Code | Allocate memory | 2.0+ |
Шаблон:Code | Release memory | 2.0+ |
Шаблон:Code | Reallocate memory | 2.0+ |
Шаблон:Code | Execute program | 2.0+ |
Шаблон:Code | Terminate with return code | 2.0+ |
Шаблон:Code | Get program return code | 2.0+ |
Шаблон:Code | Find first file | 2.0+ |
Шаблон:Code | Find next file | 2.0+ |
Шаблон:Code | Set current PSP | 2.0+ |
Шаблон:Code | Get current PSP | 2.0+ |
Шаблон:Code | Get DOS internal pointers (SYSVARS) | 2.0+ |
Шаблон:Code | Create disk parameter block | 2.0+ |
Шаблон:Code | Get verify flag | 2.0+ |
Шаблон:Code | Create program PSP | 2.0+ |
Шаблон:Code | Rename file | 2.0+ |
Шаблон:Code | Get or set file date and time | 2.0+ |
Шаблон:Code | Get or set allocation strategy | 2.11+ |
Шаблон:Code | Get extended error info | 3.0+ |
Шаблон:Code | Create unique file | 3.0+ |
Шаблон:Code | Create new file | 3.0+ |
Шаблон:Code | Lock or unlock file | 3.0+ |
Шаблон:Code | File sharing functions | 3.0+ |
Шаблон:Code | Network functions | 3.0+ |
Шаблон:Code | Network redirection functions | 3.0+ |
Шаблон:Code | Qualify filename | 3.0+ |
Шаблон:Code | Reserved | 3.0+ |
Шаблон:Code | Get current PSP | 3.0+ |
Шаблон:Code | Get DBCS lead byte table pointer | 3.0+ |
Шаблон:Code | Set wait for external event flag | 3.2+ |
Шаблон:Code | Get extended country info | 3.3+ |
Шаблон:Code | Get or set code page | 3.3+ |
Шаблон:Code | Set handle count | 3.3+ |
Шаблон:Code | Commit file | 3.3+ |
Шаблон:Code | Get or set media id | 4.0+ |
Шаблон:Code | Commit file | 4.0+ |
Шаблон:Code | Reserved | 4.0+ |
Шаблон:Code | Extended open/create file | 4.0+ |
Operating systems with native support
- MS-DOS – most widespread implementation
- PC DOS – IBM OEM version of MS-DOS
- OS/2 1.x – Microsoft/IBM successor to MS-DOS and PC DOS
- SISNE plus – Clone created by Itautec and Scopus Tecnologia in Brazil
- DR-DOS – Digital Research DOS family, including Novell DOS, PalmDOS, OpenDOS, etc.
- PTS-DOS – PhysTechSoft & Paragon DOS clone, including S/DOS
- ROM-DOS – Datalight ROM DOS version
- Embedded DOS – General Software version
- FreeDOS – Free, open source DOS clone
- ReactOS (IA-32 and x86-64 versions)
- Windows 95 – contains MS-DOS 7.0
- Windows 98 – contains MS-DOS 7.1
- Windows 98 SE – contains MS-DOS 7.1
- Windows ME – contains MS-DOS 8.0
Operating systems with DOS emulation layer
- Concurrent CP/M-86 (3.1 only) with PCMODE – Digital Research CP/M-86-based OS with optional PC DOS emulator
- Concurrent DOS – Digital Research CDOS family with built-in PC DOS emulator
- DOS Plus – a stripped-down single-user variant of Concurrent PC DOS 4.1–5.0
- Multiuser DOS – Digital Research/Novell MDOS family including Datapac System Manager, IMS REAL/32, etc.
- OS/2 (2.x and later) – IBM operating system using a fully-licensed MS-DOS 5.0 in a virtual machine
- Windows NT (all versions except 64-bit editions and 32-bit ARM editions)
Other emulators
See also
- BIOS interrupt call
- Ralf Brown's Interrupt List (RBIL)
- Comparison of DOS operating systems
- DOS Protected Mode Interface (DPMI)
- DOS extender
- DOS MZ executable
- COMMAND.COM
References
Further reading
- Шаблон:Cite book (xvii+1053 pages; 29 cm) (NB. This original edition contains flowcharts of the internal workings of the system. It was withdrawn by Microsoft before mass-distribution in 1986 because it contained many factual errors as well as some classified information which should not have been published. Few printed copies survived. It was replaced by a completely reworked edition in 1988. [1])
- Шаблон:Cite book (xix+1570 pages; 26 cm) (NB. This edition was published in 1988 after extensive rework of the withdrawn 1986 first edition by a different team of authors. [2])
- Шаблон:Cite book
- Шаблон:Cite book
- Шаблон:Cite book
- Шаблон:Cite book
- IBM PC DOS 7 Technical Update
- Шаблон:Cite book (Printed in the UK.)
External links
- The x86 Interrupt List (a.k.a. RBIL, Ralf Brown's Interrupt List)
- ctyme.com - INT Calls by function
- wustl.edu - Description of MS-DOS services
- MS-DOS Interrupts