DOSCMD(1)

名称
doscmd - リアルモード DOS プログラムのサブセットを実行する

書式
doscmd -23AbDEfGHIMOPRrtVvXxYz -c file -d file -i port [:cnt] -o port [:cnt] -S int -U int [cmd [args ...]]

解説
doscmd は、DOS のサブセットをエミュレートして単一コマンド cmd args を実行することができますし、 PC をエミュレートして DOS をブートすることもできます。 DOS をブートする場合には、より多様な DOS アプリケーションを 実行することができます。 MS-DOS 6.2 以降は doscmd ではうまく扱えないようです。 DOS をブートするには、 -b フラグを指定するか、 cmd 引数を省略してください。 -b を指定すると、 cmd と args は無視されます。

doscmd は DOS のサブセットを提供するだけですが、 多くのプログラムを実行するには十分です。 コンパイラ、アセンブラ、リンカローダといったプログラムも実行できますが、 これらに限定するものではありません。

次に示す多様なフラグを doscmd に指定可能です:

-2  DOS プログラムからの doscmd エミュレータへのすべてのトラップのデバッグトレースを有効にします。 カーネルによって扱われるためにトレースされないトラップがあることに 注意してください。

-3  割り込みベクタの変更や論理ドライブへのパスの初期化といった、 いくつかの下位レベル機能のデバッグを有効にします。

-A  エミュレータを通過するすべての割り込みのトレースを有効にします。 -S オプションを、255 個すべての割り込みの値とともに指定する場合と同じです。

-b  DOS をエミュレートする代りに DOS をブートします。

-c file
    画面へのすべての出力を捕まえて、 file へ出力します。 画面の直接の書き込みは捕まえられないことに注意してください。

-C  MS-DOS の呼び出しエミュレーションと戻り値をリストします。

-D  ディスクとファイルの操作に関するデバッグを有効にします。

-d file
    デバッグ出力を、標準エラー出力の代りに file へ送ります。

-E  exec ルーチンのデバッグを有効にします。

-G  ビデオ (グラフィックス) ルーチンのデバッグを有効にします。

-H  中途半端に実装された呼び出しのトレースを有効にします。

-I  すべての割り込みのトレースを有効にします。 -A とほとんど同じですが、有効になるトレースは少しだけ少ないです。

-i port
    [:cnt] 入出力ポート port からのすべての入力要求のトレースを有効にします。 もし cnt が与えられると、 port から port+cnt-1 までをトレースします。

-M  メモリ操作のデバッグを有効にします。

-O  デバッグ出力を、標準エラー出力の代りに、標準出力へ出力します。

-o port
    [:cnt] 入出力ポート port からのすべての出力要求のトレースを有効にします。 もし cnt が与えられると、 port から port+cnt-1 までをトレースします。

-p port
    [:cnt] 要求された I/O port (オプションとして port+cnt-1 までの範囲を指定可能です) を実機ハードウェア I/O ポートへマップします。 アクセスには root 権限が必要でしょう。

-P  入出力ポート呼び出し (例えば inb, outb など) のトレースを有効にします。

-R  ファイルリダイレクトコードのデバッグを有効にします。

-r  生のキーボード入力と表示を使用します。<CTRL-ALT-DEL> を押すと、 doscmd は終了します。VGA グラフィックスが使えるようになります。

-S int
    割り込み int のトレースを有効にします。

-t  命令レベルのトレースを試みます。 トレースを混乱させる命令があります。 <CTRL-ALT-T> を押すとトレースモードの有効と無効とを切り替えます。

-U int
    割り込み int のトレースを無効にします。 -A や -I の後で使用すると便利です。

-V  未知の割り込みを報告する際、レジスタダンプも含めます。

-v  -AH と同じです。

-X  XMS 操作のデバッグを有効にします。

-x  X11 のウィンドウを表示出力のためにオープンします。 他の方法では利用できない様々な割り込みを有効にします。 -b を指定しても、指定しなくても、使用可能です。

-Y  EMS 操作のデバッグを有効にします。

-z  DOS プログラムにジャンプする直前に doscmd を停止させます。 doscmd を開発する以外の用途はほとんどありません。

起動時に、 doscmd はコンフィギュレーションファイルを読もうとします。 まず、カレントディレクトリのファイル .doscmdrc を試します。もし見付からない場合、 $HOME を検索します。それでもなお見付からない場合、ファイル /etc/doscmdrc を使用します。

コンフィギュレーションファイルでは、コメントは # 文字から開始します。 また、空行は無視されます。 非空行は、環境変数またはデバイスを設定するコマンドです。 空白の前に = がある行は、環境変数への代入であると扱われ、 DOS の環境に追加されます。 その他の行は次のいずれかです。

boot [A: | C:]
    ブートするデバイスを設定します。 デフォルトでは、 A: が定義されていれば最初に試され、もしそれが失敗すると、 C: が試されます。

assign
    [A-Z]: [-ro] path BSD/OS のディレクトリ path を、指定したドライブに割り当てます。 -ro フラグを指定すると、読み取り専用ファイルシステムになります。 DOS ブート時には、 /usr/libdata/doscmd/redir.com バイナリが実行されるまでは、これらの割り当ては実行されません。

assign
    lpt[0-4]: [direct] path [timeout] 指定したプリンタを path に割り当てようとします。 timeout が指定された場合、 その期間 (秒数) 活動がない場合に、プリンタをフラッシュすべきことを示します。 デフォルトは 30 秒です。 path が本物のプリンタを参照している場合には、 direct オプションを指定してください。

assign
    [A: | B:] [-ro] path density

assign
    flop[01] [-ro] path density ファイル path を、次に利用可能なフロッピまたは指定したフロッピに割り当てます。 -ro が指定されると、フロッピは読み取り専用になります。 density は次のいずれかです:

    180 9 ヘッド 40 トラック片面フロッピ
    360 9 ヘッド 40 トラック両面フロッピ
    720 9 ヘッド 80 トラック両面フロッピ
    1200
        15 ヘッド 80 トラック両面フロッピ
    1440
        18 ヘッド 80 トラック両面フロッピ
    2880
        36 ヘッド 80 トラック両面フロッピ

assign
    [C-Z]: [-ro] path [type | cyl head sec] [fdisk_tab]

assign
    hard[01] [-ro] path [type | cyl head sec] [fdisk_tab] ファイル path を、次に利用可能なハードディスクまたは指定したハードディスクに割り当てます。 ディスクのジオメトリは、シリンダ数 cyl とヘッド数 head とトラックあたりのセクタ数 sec で直接指定することもできますし、標準タイプから 1 つを type (後述) で指定することもできます。 オプションの fdisk_tab 引数は、このディスクの最初のセクタとして使用するファイルを指定します。 path がディスクの一部のみを参照する場合に、 偽の fdisk テーブルを挿入するために使用できます。

assign
    com[1-4]: path port irq path で指定した tty または pty を、 指定した com ポートとして使用するように割り当てます。 ベースアドレスは port でエミュレートされ、割り込みは irq で指定されます。 このコードは軽くテストしただけなので、向かない用途があるかもしれません。

setver command version
    doscmd が DOS をエミュレートする場合、 command という名前のプログラムから呼ばれた時に、DOS バージョンとして version を報告するようにします。 version のフォーマットは、後述の MS_VERSION 変数と同じです。

C: は、まだ割り当てられていない場合には、ルートディレクトリ (/) に割り当てられ、 C: のカレントディレクトリは、現在のカレントディレクトリに設定されます。 これはすなわち、

    doscmd ../foo

のように起動しても、動作しないことを意味することに注意してください。 なぜなら C: ディレクトリはカレントパスで開始するからです。 また、次の環境変数も、未設定の場合には設定されます:

    COMSPEC=C:\COMMAND.COM
    PATH=C:\
    PROMPT=DOS>

PATH 変数は cmd を検索する際にも使用されます。 DOS のように、まず cmd.com が検索され、それから cmd.exe が検索されます。

コンフィギュレーション変数
doscmd の内部変数であり、実際の DOS の環境では設定されない変数が、 .doscmdrc ファイル中にいくつかあります。 それらを以下に示します:

MS_VERSION
    この変数の値は、 doscmd が報告を行なう DOS のバージョンを決定するために使用されます。 doscmd は、動作を変えずに、報告方法だけを変えることに注意してください。 デフォルトでは、この値は 410 であり、 MS-DOS バージョン 4.1 に対応します。 バージョン 3.2 (以前の doscmd のデフォルトでした) に変更するには、値 320 を使用してください。

X11_FONT
    この変数の値は X window で使用するフォントを決定します。 デフォルトのフォントは vga であり /usr/libdata/doscmd/fonts にインストールされています。 X サーバがフォントを見付けられるように ‘xset fp+ /usr/libdata/doscmd/fonts’ を ${HOME}/.xsession か ${HOME}/.xinitrc に追加してください。

ファイル変換
doscmd は BSD/OS のファイル名を DOS のファイル名に変換する際、すべて大文字に変換し、無効な文字を除去します。 ASCII ファイルを、DOS の世界で好まれる <CR><LF> 形式へ変換するということはありません。 ASCII ファイルを変換するには、プログラム fconv(1) (ports コレクションの一部です) か、これに類するツール を使用してください。

ディスクタイプ
タイプ | シリンダ | ヘッド | セクタ | サイズ
01 | 306 | 4 | 17 | 10MB
02 | 615 | 4 | 17 | 20MB
03 | 615 | 6 | 17 | 30MB
04 | 940 | 8 | 17 | 62MB
05 | 940 | 6 | 17 | 46MB
06 | 615 | 4 | 17 | 20MB
07 | 462 | 8 | 17 | 30MB
08 | 733 | 5 | 17 | 30MB
09 | 900 | 15 | 17 | 112MB
10 | 820 | 3 | 17 | 20MB
11 | 855 | 5 | 17 | 35MB
12 | 855 | 7 | 17 | 49MB
13 | 306 | 8 | 17 | 20MB
14 | 733 | 7 | 17 | 42MB
15 | 976 | 15 | 17 | 121MB
16 | 612 | 4 | 17 | 20MB
17 | 977 | 5 | 17 | 40MB
18 | 977 | 7 | 17 | 56MB
19 | 1024 | 7 | 17 | 59MB
20 | 733 | 5 | 17 | 30MB
21 | 733 | 7 | 17 | 42MB
22 | 733 | 5 | 17 | 30MB
23 | 306 | 4 | 17 | 10MB
24 | 925 | 7 | 17 | 53MB
25 | 925 | 9 | 17 | 69MB
26 | 754 | 7 | 17 | 43MB
27 | 754 | 11 | 17 | 68MB
28 | 699 | 7 | 17 | 40MB
29 | 823 | 10 | 17 | 68MB
30 | 918 | 7 | 17 | 53MB
31 | 1024 | 11 | 17 | 93MB
32 | 1024 | 15 | 17 | 127MB
33 | 1024 | 5 | 17 | 42MB
34 | 612 | 2 | 17 | 10MB
35 | 1024 | 9 | 17 | 76MB
36 | 1024 | 8 | 17 | 68MB
37 | 615 | 8 | 17 | 40MB
38 | 987 | 3 | 17 | 24MB
39 | 987 | 7 | 17 | 57MB
40 | 820 | 6 | 17 | 40MB
41 | 977 | 5 | 17 | 40MB
42 | 981 | 5 | 17 | 40MB
43 | 830 | 7 | 17 | 48MB
44 | 830 | 10 | 17 | 68MB
45 | 917 | 15 | 17 | 114MB
46 | 1224 | 15 | 17 | 152MB

擬似ディスクへの DOS のインストール
doscmd の擬似ハードディスクに DOS をインストールするには、 次のようにします:

1   少なくとも次の記述を含む .doscmdrc を作成します:

        assign A: /dev/fd0.1440 1440
        assign A: /dev/fd0.720 720
        assign hard boot_drive 80 2 2

    A: ドライブに対応するロウファイル (訳注: キャラクタスペシャルファイル) を、 システムに応じて修正する必要があるかもしれません。 この例では、HD ドライブを最初に試し、DD ドライブを次に試します (訳注: HD = High Density; 高密度、DD = Double Density; 倍密度)。

    ここでは、 ロウデバイスやロウファイルのみを使用する必要があることに注意してください。 加工された (cooked) デバイス (訳注: ブロックスペシャルファイル) を使用しないこと! (おそらくハードディスクは大丈夫でしょうが、フロッピは確実に駄目です)

    boot_drive は、ブート可能なイメージを格納するファイルの名前です。 80 2 2 という 3 つの数字は、 ドライブが 80 個のシリンダと 2 個のヘッドとトラックあたり 2 個のセクタを 持つことを示します。 これは、MS-DOS 5.0 を config.sys と autoexec.bat のファイルと共にインストールすることが可能な、最小のドライブです。

    もっと大きなブートドライブを作成したいかもしれません。

    ファイル boot_drive は存在する必要がありますので、touch コマンドで作成してください。

2   MS-DOS をブート可能で fdisk, format, sys コマンドを含むフロッピディスクを、 A: ドライブに挿入してください。 ファイル redir.com もフロッピにコピーしてください。 この際、msdos ファイルシステム型でフロッピをマウントするか、mtools を使用してください (例えば “mwrite redir.com a:” とします)。

3   doscmd を実行してください。

4   > プロンプトにて、 fdisk とタイプします。

5   Create DOS partition or Logical Drive を選択します。

6   Create Primary DOS Partition を選択します。

7   大きさを指定します (典型的にはドライブ全体です。それでも非常に小さいものです。)

8   <ESC> を何度か押して、FDISK を終了します。

9   doscmd が実行中断するでしょうから、 そうなった場合、doscmd を再度実行します。

10  > プロンプトにて、 format c: とタイプし、指示に従います。

11  > プロンプトにて、 sys c: とタイプします。

12  doscmd を終了します。

13  ドライブからフロッピを取り除くか、

        boot C:

    という行をあなたの .doscmdrc に加えてください。

14  新しいディスクから DOS を動かします。 config.sys と autoexec.bat の両ファイルが欲しいでしょうから、 まず最初は次のようにします:

        > copy con: config.sys
        LASTDRIVE=Z
        ^Z
        > copy con: autoexec.bat
        @echo off
        redir.com
        ^Z

15  doscmd を終了します。

16  FreeBSD ディスクを組み込む魔法のプログラム redir を自動的に呼び出す、ブート可能な擬似ディスクが完成しました。 FreeBSD ディスクを使用するためには、次の行をあなたの .doscmdrc に追加します:

        assign D: /usr/dos
        assign P: -ro /usr/prb

    名前の問題により、 アクセスできないファイルがあるかもしれないことに注意してください。

診断
実装されていない割り込みに出会うと、 doscmd は次のようなメッセージを表示し終了します:

    Unknown interrupt 21 function 99

doscmd -x スイッチ指定時に、 X11 support not compiled in というメッセージが表示された場合、環境変数 X11BASE を X Window System をインストールした場所 (通常 /usr/X11R6) に設定し、ソースディレクトリ (通常 /usr/src/usr.bin/doscmd) で make install とタイプすることで、本機能を有効にすることができます。 このように動作するためには、 X プログラマキットがインストールしてある必要があります。

作者
Pace Willisson, Paul Borman

歴史
doscmd は BSD/386 に初めて登場しました。