DOS API
DOS APIは86-DOSを起源とするAPIで、MS-DOS/PC DOSや他のDOS互換のオペレーティングシステムで使われている。DOS APIのほとんどの呼び出しは、INT 21hを使用して呼び出される。AH プロセッサレジスタのサブファンクション番号と他のレジスタの他のパラメータを指定してINT 21hを呼び出すことによって、さまざまなDOSサービスを呼び出せる。これには、キーボード入力、ビデオ出力、ディスクファイルアクセス、プログラム実行、メモリ割り当て、その他さまざまなアクティビティの処理が含まれる。1980年代後半には、DOSエクステンダとDPMIを併用することで、プログラムを16ビットまたは32ビットの保護モードで実行してもDOS APIにアクセスできるようになった。
DOS APIの歴史
86-DOSおよびMS-DOS 1.0の元のDOS APIは、CP/Mと機能的に互換性があるように設計されている。ファイルアクセスにはファイルコントロールブロック (FCB)が利用された。DOS APIは、ファイルハンドルを使用したファイルアクセス、階層ディレクトリ、およびデバイスのI/O制御など、いくつかのUNIXの概念によってMS-DOS 2.0で大幅に拡張された[1]。DOS 3.1では、ネットワークリダイレクタのサポートが追加された。MS-DOS 3.31では、32 MBを超えるハードディスクをサポートするようにINT 25h/26h機能が強化された。MS-DOS 5は、上位メモリブロック(UMB)を使用するためのサポートを追加した。MS-DOS 5以降は、DOSの連続したスタンドアロンリリースのDOS APIは変更されていない。
DOS APIとWindows
Windows 9xでは、プロテクトモードのシステムとGUIシェルをロードするブートローダとしてDOSが使用されていた。DOSは通常VDMからアクセスされていたが、WindowsをロードせずにリアルモードMS-DOS 7.0としてブートすることも可能であった。ロングファイルネーム(LFN)はVDMでのみ利用可能であったが、DOS APIは拡張国際化サポートとLFNサポートで拡張された。Windows 95 OSR2では、DOSは7.1に更新されてFAT32サポートが追加され、DOS APIに機能追加された。Windows 98およびWindows MEもMS-DOS 7.1 APIを実装しているが、Windows MEはMS-DOS 8.0として報告する。
Windows XPやWindows VistaなどのWindows NT系のシステムはMS-DOSを利用していない。そのため、NTVDMを利用してDOS APIを処理している。NTVDMは、仮想8086モードでDOSプログラムを実行する。NTVDMはDOS 5.0 APIをサポートする。Linux用のDOSEMUも同様の方法を利用している。
DOSで使用される割込みベクタ
以下は、DOS API関数を呼び出すための割り込みベクタのリストである。
割り込みベクタ | 説明 | バージョン | 備考 |
---|---|---|---|
20h | プログラムを終了 | 1.0+ | DOSカーネルに実装 |
21h | メインDOS API | 1.0+ | DOSカーネルに実装 |
22h | プログラム終了アドレス | 1.0+ | 呼び出し元プログラムの戻りアドレス |
23h | Control-Cハンドラアドレス | 1.0+ | デフォルトのハンドラはコマンドシェル(通常はCOMMAND.COM)にある |
24h | 重大なエラーハンドラアドレス | 1.0+ | デフォルトのハンドラはコマンドシェル(通常はCOMMAND.COM)にある |
25h | 絶対ディスク読み取り | 1.0+ | DOSカーネルで実装され、DOS 3.31で拡張され、最大2 GBのパーティションをサポート |
26h | 絶対ディスク書き込み | 1.0+ | DOSカーネルで実装され、DOS 3.31で拡張され、最大2 GBのパーティションをサポート |
27h | 終了して常駐する | 1.0+ | DOS 1.0ではCOMMAND.COM、DOS 2.0+ではDOSカーネルで実装されている |
28h | アイドルコールアウト | 2.0以上 | 入力待ちのときにDOSカーネルによって呼び出される |
29h | 高速コンソール出力 | 2.0以上 | 組み込みのコンソールデバイスドライバまたはANSI.SYSのような代替ドライバによって実装される |
2Ah | ネットワーキングと重要なセクション | 3.0以上 | ネットワークソフトウェアとインターフェイスするためにDOSカーネルによって呼び出される |
2Bh | 未使用 | ||
2Ch | 未使用 | ||
2Dh | 未使用 | ||
2Eh | 一時的なリロード | 2.0以上 | COMMAND.COMで実装されている |
2Fh | 多重化 | 3.0以上 | サブファンクション番号に応じて、DOSカーネルおよびさまざまなプログラム(PRINT、MSCDEX、DOSKEY、APPENDなど)で実装されている |
DOS INT 21hサービス
以下は、DOS APIのプライマリソフトウェア割り込みベクタを介して提供される機能のリストである。
AH | 説明 | バージョン |
---|---|---|
00h | プログラム終了 | 1.0+ |
01h | 文字入力 | 1.0+ |
02h | 文字出力 | 1.0+ |
03h | 補助入力 | 1.0+ |
04h | 補助出力 | 1.0+ |
05h | プリンタ出力 | 1.0+ |
06h | 直接コンソール入出力 | 1.0+ |
07h | エコーなし直接コンソール入力 | 1.0+ |
08h | エコー付きコンソール入力 | 1.0+ |
09h | 文字列表示 | 1.0+ |
0Ah | バッファドキーボード入力 | 1.0+ |
0Bh | 入力状態取得 | 1.0+ |
0Ch | 入力と入力バッファの破棄 | 1.0+ |
0Dh | ディスクリセット | 1.0+ |
0Eh | デフォルトドライブ設定 | 1.0+ |
0Fh | ファイルオープン(FCB) | 1.0+ |
10h | ファイルクローズ(FCB) | 1.0+ |
11h | 一番目のファイル検索 | 1.0+ |
12h | 次のファイル検索 | 1.0+ |
13h | ファイル削除 | 1.0+ |
14h | シーケンシャル読み込み | 1.0+ |
15h | シーケンシャル書き込み | 1.0+ |
16h | ファイル作成/上書き | 1.0+ |
17h | ファイル名変更 | 1.0+ |
18h | 予約済み | 1.0+ |
19h | デフォルトドライブ取得 | 1.0+ |
1Ah | Set disk transfer address | 1.0+ |
1Bh | Get allocation info for default drive | 1.0+ |
1Ch | Get allocation info for specified drive | 1.0+ |
1Dh | 予約済み | 1.0+ |
1Eh | 予約済み | 1.0+ |
1Fh | Get disk parameter block for default drive | 1.0+ |
20h | 予約済み | 1.0+ |
21h | ランダム読み込み | 1.0+ |
22h | ランダム書き込み | 1.0+ |
23h | レコード中のファイル長取得 | 1.0+ |
24h | Set random record number | 1.0+ |
25h | 割り込みベクタ設定 | 1.0+ |
26h | PSP作成 | 1.0+ |
27h | ランダムブロック読み込み | 1.0+ |
28h | ランダムブロック書き込み | 1.0+ |
29h | ファイル名解析 | 1.0+ |
2Ah | 日付取得 | 1.0+ |
2Bh | 日付設定 | 1.0+ |
2Ch | 時刻取得 | 1.0+ |
2Dh | 時刻設定 | 1.0+ |
2Eh | ベリファイフラグ設定 | 1.0+ |
2Fh | Get disk transfer address | 2.0+ |
30h | DOSバージョン取得 | 2.0+ |
31h | 常駐して終了 | 2.0+ |
32h | Get disk parameter block for specified drive | 2.0+ |
33h | Ctrl+Break取得/設定 | 2.0+ |
34h | Get InDOS flag pointer | 2.0+ |
35h | 割り込みベクタ取得 | 2.0+ |
36h | ディスク空き容量取得 | 2.0+ |
37h | Get or set switch character | 2.0+ |
38h | 国情報取得/設定 | 2.0+ |
39h | サブディレクトリ作成 | 2.0+ |
3Ah | サブディレクトリ削除 | 2.0+ |
3Bh | カレントディレクトリ変更 | 2.0+ |
3Ch | ファイル作成/上書き | 2.0+ |
3Dh | ファイルオープン | 2.0+ |
3Eh | ファイルクローズ | 2.0+ |
3Fh | デバイス/ファイル読み込み | 2.0+ |
40h | デバイス/ファイル書き込み | 2.0+ |
41h | ファイル削除 | 2.0+ |
42h | ファイルポインタ移動 | 2.0+ |
43h | ファイル属性取得/設定 | 2.0+ |
44h | デバイス向けI/Oコントロール | 2.0+ |
45h | ハンドル複写 | 2.0+ |
46h | ハンドルをリダイレクト | 2.0+ |
47h | カレントディレクトリ取得 | 2.0+ |
48h | メモリ確保 | 2.0+ |
49h | メモリ解放 | 2.0+ |
4Ah | メモリ再確保 | 2.0+ |
4Bh | プログラム実行 | 2.0+ |
4Ch | 戻り値を返して終了 | 2.0+ |
4Dh | 戻り値取得 | 2.0+ |
4Eh | 一番目のファイル検索 | 2.0+ |
4Fh | 次のファイル検索 | 2.0+ |
50h | 現在のPSP設定 | 2.0+ |
51h | 現在のPSP取得 | 2.0+ |
52h | Get DOS internal pointers (SYSVARS) | 2.0+ |
53h | ディスクパラメータブロック作成 | 2.0+ |
54h | ベリファイフラグ取得 | 2.0+ |
55h | Create program PSP | 2.0+ |
56h | ファイル名変更 | 2.0+ |
57h | ファイル時刻取得/設定 | 2.0+ |
58h | Get or set allocation strategy | 2.11+ |
59h | 拡張エラー情報取得 | 3.0+ |
5Ah | ユニークファイル作成 | 3.0+ |
5Bh | 新規ファイル作成 | 3.0+ |
5Ch | ファイルロック/アンロック | 3.0+ |
5Dh | ファイル共有機能 | 3.0+ |
5Eh | ネットワーク機能 | 3.0+ |
5Fh | ネットワークリダイレクト機能 | 3.0+ |
60h | Qualify filename | 3.0+ |
61h | 予約済み | 3.0+ |
62h | 現在のPSP取得 | 3.0+ |
63h | Get DBCS lead byte table pointer | 3.0+ |
64h | Set wait for external event flag | 3.2+ |
65h | 拡張国情報取得 | 3.3+ |
66h | コードページ設定/取得 | 3.3+ |
67h | Set handle count | 3.3+ |
68h | Commit file | 3.3+ |
69h | メディアID取得/設定 | 4.0+ |
6Ah | Commit file | 4.0+ |
6Bh | 予約済み | 4.0+ |
6Ch | 拡張 ファイルオープン/作成 | 4.0+ |
ネイティブサポートのあるオペレーティングシステム
- MS-DOS - 最も普及している実装
- PC DOS - MS-DOSのIBM OEMバージョン
- DR-DOS - Novell DOS、PalmDOS、OpenDOSなどを含むDigital Research DOSファミリー
- PTS-DOS - PhysTechSoftおよびParagon DOSクローン、S/DOSを含む
- ROM-DOS - Datalight ROM DOSバージョン
- FreeDOS - フリーのオープンソースDOSクローン
- ReactOS(IA-32およびx86-64バージョン)
- Windows 95 - MS-DOS 7.0が含まれている
- Windows 98 - MS-DOS 7.1が含まれている
- Windows 98 SE - MS-DOS 7.1が含まれている
- Windows ME - MS-DOS 8.0を含む
- Windows NT(64ビット版を除くすべてのバージョン)
その他のエミュレータ
- Windows NT用NTVDM
- Linux用のDOSEMU
- DOSBox
脚注
- ^ Ray Duncan (1988). Advanced MS-DOS Programming: The Microsoft Guide for Assembly Language and C Programmers. Microsoft Press. ISBN 0914845772
関連項目
- BIOS割り込み呼び出し
- ラルフ・ブラウンの割り込みリスト(RBIL)
- DOSオペレーティングシステムの比較
- DOS保護モードインタフェース(DPMI)
- DOSエクステンダ
- DOS MZ実行可能ファイル
- COMMAND.COM
出典
- Bornstein, Howard; Bredehoeft, Lawrence; Duncan, Ray; Morris, Carol; Rose, David; Socha, John; Tomlin, Jim; Vian, Kathleen et al. (1986). “Technical advisors”. In Beley. MS-DOS (Versions 1.0-3.2) Technical Reference Encyclopedia. Microsoft Reference Library. 1 (Original withdrawn ed.). Redmond, Washington, USA: Microsoft Press. ISBN 0-914845-69-1. LCCN 86--8640. OCLC 635600205 (xvii + 1053ページ; 29 cm)(NB。このオリジナル版には、システムの内部動作のフローチャートが含まれている。しかし、1986年に大量配布される前にマイクロソフトによって撤回された。なぜなら、公表されるべきではない機密情報だけでなく、多くの事実上の誤りが含まれていたためである。生き残った印刷物はほとんどなかった。それはその後に、1988年に完全に作り直された版に置き換えられた。[1] )
- Duncan, Ray; Bostwick, Steve; Burgoyne, Keith; Byers, Robert A.; Hogan, Thom; Kyle, Jim; Letwin, Gordon; Petzold, Charles et al. (1988). “Technical advisors”. The MS-DOS Encyclopedia: versions 1.0 through 3.2 (Completely reworked ed.). Redmond, Washington, USA: Microsoft Press. ISBN 1-55615-049-0. LCCN 87--21452. OCLC 16581341 (xix + 1570ページ; 26 cm)(NB。この版は、1986年に撤回された1986年の初版を別の作家のチームによって大幅に改良した後に1988年に出版された。[2] )
- ピーターノートンとリチャードウィルトン著IBM PC&PS/2の新しいピーターノートンプログラマーズガイド、マイクロソフトプレス、1987年ISBN 1-55615-131-4 。
- Ray Duncan (1988). Advanced MS-DOS Programming: The Microsoft Guide for Assembly Language and C Programmers. Microsoft Press. ISBN 0914845772
- 1991年マイクロソフトプレス、Thom Hogan 著「Programmer's PC Sourcebook」 ISBN 155615321X
- Microsoft MS-DOSプログラマーズリファレンス - MS-DOSの公式テクニカルリファレンス、Microsoft Press、1993 ISBN 1556155468
- IBM PC DOS 7テクニカルアップデート
- OpenDOS Developer's Reference Series — OpenDOS Programmer's Guide — System and Programmer's Guide. Caldera, Inc.. (August 1997). Caldera Part No. 200-DOPG-003. オリジナルの2017-10-07時点におけるアーカイブ。 2012年6月28日閲覧。 (イギリスで印刷された。)
外部リンク
- x86割り込みリスト(別名 RBIL、ラルフ・ブラウンの割り込みリスト)
- ctyme.com - INT関数による呼び出し
- wustl.edu - MS-DOSサービスの説明