第3部

MSX−DOS

   第1章 MSX-DOS

    1.1 MSX-DOSの構成

 MSX-DOSは、ROMによって供給されるMSX-DOSカーネルと、ディスクによって供給される
MSXDOS.SYSとCOMMAND.COMの2つのシステムファイルによって構成されています。
 DOSカーネルは、増設ドライブのインターフェイス部分や、ドライブ内蔵機種では本体
内に16KBのROMが搭載されています。
 DOSカーネルは生産時期によっていくつかのバージョンがあるようですが、通常このこ
とを意識する必要はありません。またシステムファイルもいくつかのバージョンが存在
します。

 MSX-DOSの構成

    DOSカーネル(ROMによって供給)
      いくつかのバージョンがあります。
    MSXDOS.SYS
      ver.0.26    MSXDOS  .SYS       3072  84-01-01
      ver.1.03    MSXDOS  .SYS       2432  85-08-23  21:29:34
    COMMAND.COM
      ver.0.12    COMMAND .COM       6144  84-01-01
      ver.1.11    COMMAND .COM       6656  85-09-02  22:10:16


    1.2 MSX-DOSの起動

 MSX-DOSの起動手順を説明します。

 1.DISK ROMのINITルーチンはSHIFTキーが押されていればBEEP音を出してからBASIC
   を起動します。
 2.CTRLキーが押されているか調べてBEEP音を出します。そしてディスクシステムの
   ためのワークエリアを確保します。さらに、各ディスクROMのディスクドライバが
   設定をします。
 3.H.STKE(FEDAH)に何らかのルーチンが設定されていれば、DISK-BASICの環境を設定
   してからH.STKEにジャンプします。
 4.TEXTエントリをもつカートリッジがあった場合、DISK-BASICの環境を設定してか
   らそのカートリッジのBASICプログラムを実行します。
 5.カレントドライブのブートセクタの先頭の100Hバイトの内容をC000Hからに転送し
   ます。読み込めなかった場合はDISK-BASICが起動します。
 6.Cyフラグをリセットした状態でC01EHをコールします。ここにプログラムを書いて
   おくとそのプログラムが起動します。
 7.RAM容量をチェックして、64KBの容量がなかった場合はDISK-BASICが起動します。
 8.MSX-DOSの環境が設定されCyフラグをセットしてC01EHをコールします。
   通常ここではMSXDOS.SYSが100Hからにロードされ実行されます。MSXDOS.SYSが存
   在しない場合DISK-BASICが起動します。
   MSXDOS.SYSは自分自身を高位アドレスに転送してから、COMMAND.COMを100Hからに
   ロードし実行します。COMMAND.COMが存在しない場合は"INSERT A DISKETTE"のメ
   ッセージが表示され、正しいディスクがセットされるのを待ちます。


    1.3 ファンクションコール

 ファンクションコールはMSX-DOSが提供するサポートルーチン群です。MSX-DOSの基本
的な入出力を行うBDOSを汎用のサブルーチンとしてまとめてあります。ファンクション
は42個あります。ファンクションコールの詳細については第5章をご覧下さい。
 ファンクションコールを利用する時は、Cレジスタにファンクションコールのファンク
ション番号をセットしてファンクションコールのエントリ(0005H)をコールします。コー
ルされるとMSX-DOSは内部スタックに切り換えますので、必要なユーザーのスタックは8
バイトです。
 ファンクションコールでは全てのレジスタ(AF,BC,DE,HL)は破壊されます。DOS1では裏
レジスタ及びインデックスレジスタも破壊されます。DOS2では裏レジスタとインデック
スレジスタはそれが値を返す場合を除いて保存されます。また、CP/Mとの互換性のため
にCP/Mのファンクションに対応するファンクションでは、A=L,B=Hでリターンします。


   第2章 MSX-DOS2

    2.1 MSX-DOS2の構成

 MSX-DOS2は、ROMによって供給されるMSX-DOS2カーネルと、ディスクによって供給され
るMSXDOS2.SYSとCOMMAND2.COMの2つのシステムファイルによって構成されています。
 DOS2カーネルは、MSX-DOS2カートリッジとして供給されるほか、MSX-DOS2が標準装備
になったturboR以降の機種は本体内にROMを持っています。DOS2カーネルのROMは48KBの
容量があります。48KBのROMはページ1にあり16KB*3のローカルバンクを構成しています。
 DOS2カーネルはいくつかのバージョンがあります。

  MSX-DOS2の構成

    DOS2カーネル(ROMによって供給)
      ver.2.20    日本語MSX-DOS2
      ver.2.30    MSXturboR FS-A1ST
      ver.2.31    MSXturboR FS-A1GT
    MSXDOS2.SYS
      ver.2.20    MSXDOS2 .SYS       4480  88-10-14  15:12:50
      ver.2.30    MSXDOS2 .SYS       4870  90-09-03  16:58:40
    COMMAND2.COM
      ver.2.20    COMMAND2.COM      14976  88-10-25  15:04:24
      ver.2.30    COMMAND2.COM      15472  90-09-11  16:24:42
      ver.2.31    COMMAND2.COM      15708  91-06-19  20:11:26


    2.2 ファンクションコール

 ファンクションコールはMSX-DOS2が提供するサポートルーチン群です。
 ファンクションコールはMSX-DOSでの42個に新たに50個が加わって92個あります。MSX-
DOS2ではMSX-DOSであった42個のファンクションコールはほとんど互換性があると考えて
よいのですが、細かい部分では変更されている部分があり、注意が必要な場合がありま
す。ファンクションコールの詳細については第5章をご覧下さい。
 ファンクションコールを利用する時は、Cレジスタにファンクション番号をセットして
ファンクションコールのエントリ(0005H)をコールします。


   第3章 プログラムの起動と終了

    3.1 外部コマンドの起動

 DOS上で外部コマンド(COMファイル)を実行する際の手順は次のようになっています。
 コマンド行のパラメータについて、その長さをシステムスクラッチエリアの80H番地に
実際の文字列を0081H以降に格納し、さらに最初の2つのパラメータをファイル名とみな
してそれをFCBの形式でそれぞれシステムスクラッチエリアの005CHと006CH以降にそれぞ
れ格納します。その後で外部コマンドを0100H以降に読み込み、0100Hにジャンプします。
 005CHおよび006CHからの内容はそのままFCBとしてファイルのアクセスに使用すること
ができるようになっていますが、両FCBが16バイトしか離れていないために完全なFCBと
して利用できるのはどちらか片方だけになります。
 0080Hからには、全パラメータ(外部コマンド名その物は含まれません)が入っているの
で、ファイル名以外のパラメータや3つ以上のパラメータを使用する時に利用できます。
 このようにシステムスクラッチエリアの005CH〜00FFHは、DOSからパラメータを渡すた
めに使用されますが、外部コマンドが起動した後はワークエリアとして使うこともでき
ます。
 システムスクラッチエリアの0000H〜005BHの内容を次に示します。
0000H,3  リブートエントリ
0003H,2  予約
0005H,3  MSX-DOSのエントリ
0008H,4  RST08H ユーザ用
000CH,4  RDSLTルーチンへのエントリ
0010H,4  RST10H ユーザ用
0014H,4  WRSLTルーチンへのエントリ
0018H,4  RST18H ユーザ用
001CH,4  CALSLTルーチンへのエントリ
0020H,4  RST20H ユーザ用
0024H,4  ENASLTルーチンへのエントリ
0028H,4  RST28H ユーザ用
002CH,4  予約
0030H,4  CALLFルーチンへのエントリ
0034H,4  予約
0038H,3  割り込みベクタ
003BH,33 拡張スロット切り換えコードによって使用


    3.2 外部コマンドの終了

 プログラムの実行が終了した時には、次のいずれかの方法でMSX-DOSのコマンドレベル
に戻ることができます。

 1. スタックポインタを変更していなければ、RETを実行する。
 2. 「プログラムの終了」ファンクション(00H)を実行する。
 3. 0000Hのウォームスタートのためのエントリにジャンプする。
 4. 「エラーコードを伴った終了」ファンクション(62H)を実行する。(DOS2)

 ただし、DOS2では外部コマンドの終了には「エラーコードを伴った終了」ファンクシ
ョンを使用することになっています。しかしDOS2で上の3つの方法を使用したとしても正
常に終了するので、DOS1のプログラムをDOS2で使用できないということではありません。
 DOSに処理が返ると、ますMSXDOS.SYSがTPAの内側にあるCOMMAND.COMが破壊されている
かどうかを調べます。破壊されていれば、再びディスクからロードします。破壊されて
いなければディスクからのロードは行わないのでコマンドレベルに戻るのがいくらか早
くなります。


   第4章 ディスクのデータ構造

 ここでは、ディスクに記録されるデータがどのように記録されているかを説明し、ま
たディスクアクセスに関係して必要となるデータ構造について解説します。

    4.1 ディスクの内容

 ディスクはディスク内のファイルの管理情報を記録する管理領域とファイルのデータ
を保存するデータ領域があります。
 管理領域には、ブートセクタ、FAT、ディレクトリがあります。ブートセクタはセクタ
0にあり、続くセクタにFAT、ディレクトリの順に存在します。FATとディレクトリのサイ
ズはブートセクタの情報によって知ることができます。

 各領域とセクタ番号の対応

                   2DD 9セクタ  2DD 8セクタ  1DD 9セクタ  1DD 8セクタ
  ブートセクタ           0            0            0            0
  FAT1             1〜   3      1〜   2      1〜   2            1
  FAT2             4〜   6      3〜   4      3〜   4            2
  ディレクトリ     7〜  13      5〜  11      5〜  11      3〜   9
  データ領域      14〜1439     12〜1279     12〜 719     10〜 639
  クラスタ数        713          634          354          315

    4.2 セクタ

 実際にデータが記録される最小の単位はセクタです。2DDの場合、セクタは512バイト
の容量があります。ハードディスク、RAMディスクといったフロッピーディスク以外のメ
ディアでは物理的なフォーマットはもちろん異なりますが、論理セクタのレベルではフ
ロッピーディスクも他のメディアも同一視できるようになっています。(セクタサイズが
異なる可能性はあります。)
 1枚の2DDフロッピディスクには1440のセクタあります。ある特定のセクタは論理セク
タ番号で表されます。論理セクタ番号は0〜1439となります。セクタ番号と言った場合論
理セクタ番号を指すのが普通です。
 MSXではディスクアクセスに論理セクタを用います。これによってたとえメディアが異
なっても同様のアクセスをすることが可能となっています。


    4.3 クラスタ

 データ領域の管理にはクラスタが用いられます。クラスタは1〜数セクタ(2DDのディス
クの場合2セクタ)を単位にデータ領域を管理します。クラスタは2から始まるクラスタ番
号を持っています。クラスタ2がデータ領域の先頭に位置し、そこからデータ領域の最後
までクラスタが存在します。
 クラスタ番号は((クラスタ番号)-2)*(クラスタあたりのセクタ数)+(データ領域の開始
セクタ番号)でセクタ番号に換算できます。


    4.4 ブートセクタ

 ブートセクタはセクタ0に存在し、メディア情報を記録してある他、MSX-DOSの起動プ
ログラムが書かれています。起動時にブートセクタが読み込まれMSXDOS.SYSがあればDOS
の起動が行われます。MSX-DOSとMSX-DOS2ではブートセクタの内容が異なります。
 メディアに固有の情報をブートセクタの内容から知ることができますが、逆にブート
セクタのメディア情報を書き換えてメディアの構造を変えることはできません。DOSのア
クセスではブートセクタの情報からではなくFATに記録されているメディアID(FAT ID)に
よってメディアの特性が決定されるからです。

 ブートセクタの内容(DOS1)

+00H,3  8086でのジャンプ命令(MS-DOSへの配慮)
+03H,8  メーカーID(メーカー名等)
+0BH,2  1セクタのサイズ(バイト単位)
+0DH,1  1クラスタのサイズ(セクタ単位)
+0EH,2  MSX-DOSが使用しないセクタ数
+10H,1  FATの個数
+11H,2  ディレクトリエントリの数
+13H,2  ディスクに含まれるセクタの総数
+15H,1  メディアID
+16H,2  FATのサイズ(セクタ単位)
+18H,2  1トラックに含まれるセクタ数
+1AH,2  面の数
+1CH,2  隠されたセクタ数
+1EH    ブートプログラム

 ブートセクタの内容(DOS2)

+00H〜+1DH  DOS1と同じ
+1EH,2  ブートプログラムの先頭(+30Hへのジャンプ命令)
+20H,6  "VOL_ID"という文字列
+26H,1  UNDEL可能かどうかのフラグ(0以外で可能)
+27H,4  ボリュームID。フォーマット時に乱数により決定される。各バイトは0〜127。
+2BH,5  将来のための予約(0で埋める)
+30H    ブートプログラム


    4.5 FAT(File allocation table)

 FATはデータ領域に記録されているデータのリンク情報を記録しています。データ領域
は常に先頭から順に使用されていくとは限らず、飛び飛びにデータが記録される場合も
あり、どのようにデータがつながっているかということがリンク情報として記録されま
す。FATには12ビットのリンク情報が特殊なフォーマットで記録されています。リンク情
報はそのクラスタに続くクラスタの番号を記録します。リンク情報がFFFHの場合そのク
ラスタがファイルの終端であることを、0である場合そのクラスタが未使用であることを
表します。
 FATの先頭にはFAT ID(メディアIDと同じ値)が記録されており、メディアの判別に使用
されるため、ここが正しい値でないとファイル操作ができなくなります。

 FATの構造

+00H  FAT ID
+01H  0FFH
+02H  0FFH
+03H              FATエントリ2(下位8ビット)
+04H  FATエントリ3(下位4ビット)  FATエントリ2(上位4ビット)
+05H              FATエントリ3(上位8ビット)
+06H              FATエントリ4(下位8ビット)
+07H  FATエントリ5(下位4ビット)  FATエントリ4(上位4ビット)
+08H              FATエントリ5(上位8ビット)
+09H              FATエントリ6(下位8ビット)
+0AH  FATエントリ7(下位4ビット)  FATエントリ6(上位4ビット)
              :                :                :
 余った部分は00Hでうめられる。


    4.6 ディレクトリ

 ディレクトリはディスクに記録されているファイルの情報を記録しています。ファイ
ル毎に32バイトのディレクトリエントリが存在し、ここに記録されている情報は、ファ
イル名、ファイル属性、作成日時、ファイルの先頭クラスタ、ファイルサイズがありま
す。
 ファイル名として使用できる文字は、A〜Z、0〜9、$&#@!%'()-{}〜_ひらがなカタカナ
です。アルファベットの小文字は、MSX-DOSによって大文字に変換されます。もしMSX-DOS
以外によってMSX-DOSで使用できない文字(アルファベット小文字など)を使用したディレ
クトリエントリが作成されるとそのファイルに対してMSX-DOSではアクセスできません。
 DOS2においてサブディレクトリが作成された場合には、サブディレクトリに関する情
報がディレクトリに記録されます。DOS1でのディレクトリはDOS2のルートディレクトリ
に当たります。サブディレクトリ本体はデータ領域に作成され、その領域の管理はファ
イルと同様にFATで行われます。サブディレクトリの先頭には"."と".."のサブディレク
トリ属性を持ったディレクトリエントリが作成されます。これは、そのサブディレクト
リその物と親ディレクトリを示します。
 ディレクトリエントリの先頭が00Hなら未使用のディレクトリエントリ、E5Hなら削除
されたディレクトリエントリです。ファイル名の先頭がE5H(半角の"な"や全角文字の一
部の1バイト目)の場合、その文字は05Hで記録されます。ファンクションコールではファ
イル名の先頭の文字がE5Hでも問題ありませんが、ディレクトリをセクタリードで直接読
む場合は注意が必要です。
 DOS1ではファイル属性として、不可視があり、DOS2では更に、書き込み専用、読み込
み専用、システムファイルの各属性があります。

 ディレクトリエントリの構造

+00H,8  主ファイル名
+08H,3  拡張子
+0BH,1  ファイル属性
+0CH,1  (DOS2のみ)ファイル削除時にディレクトリエントリの第1文字が入る(UNDEL用)
+0DH,9  空き領域
+16H,2  ファイル更新時刻
+18H,2  ファイル更新日
+1AH,2  ファイルの先頭クラスタ
+1CH,4  ファイルサイズ

 DOS2でボリューム名は+00H,11に記録されます。

 ファイル属性
b0 読み出し専用(DOS2)
 ファイルの書き込みや削除ができなくなります。読み込み、ファイル名変更、移動は
可能です。
b1 不可視
 通常はファイルアクセスができなくなります。
 DOS2で検索属性バイトの不可視をセットして「最初のエントリの検索」ファンクショ
ンを使用した時のみ見付けることができます。
b2 システムファイル(DOS2)
 「新しいエントリの検索」と、「作成」ファンクションが自動的に削除することがな
いということ、を除いて不可視と同じ効果を持ちます。コマンドインタプリタによって
組み込まれたコマンドはアクセスすることができません。
b3 ボリューム名(DOS2)
 ボリューム名を表します。ボリューム名はディレクトリエントリの最初の11バイトに
書き込まれます。この属性はルートディレクトリに一つだけ設定可能です。ボリューム
名にはコントロールコードと"/"を除いてファイル名として無効な文字も含めることがで
きます。ただし、先頭に空白は入れられません。
b4 ディレクトリ(DOS2)
 サブディレクトリを表します。
b5 アーカイブビット(DOS2)
 ファイルが書き込まれてクローズされるとセットされます。このビットがセットされ
ているとファイルが変更されたことを表します。

 サブディレクトリ

 サブディレクトリを示すディレクトリエントリではファイルサイズは0で、先頭クラス
タが、サブディレクトリの先頭クラスタを示しています。
 サブディレクトリ中には"."と".."という名前のディレクトリが作成されます。これら
は、そのディレクトリ自身と親ディレクトリを示します。親ディレクトリがルートディ
レクトリだった場合、ディレクトリエントリ中の先頭クラスタ番号は0になります。ディ
レクトリエントリ"."と".."はディレクトリの先頭に作成されますが、必ずしも先頭にあ
る必要はありません。


    4.7 FCB(ファイルコントロールブロック)

 FCBは、ファイルアクセスの際に必要となるファイル情報を保持する37バイトのテーブ
ルです。オープンするファイル毎に存在します。
 オープンされていないFCBとは、FCBのドライブ番号とファイル名及び拡張子をセット
したものです。オープンされていないFCBはファンクションコールによって各データがセ
ットされオープンされたFCBとなります。
 FCBの内容はDOS1とDOS2では異なる部分があります。

 FCBの内容(DOS1)

+00,1  ドライブ番号
+01,8  ファイル名前部
+09,3  ファイル名拡張子
+12,2  カレントブロック
+14,2  レコードサイズ
+16,4  ファイルサイズ
+20,2  日付
+22,2  時刻
+24,1  デバイスID
+25,1  ディレクトリロケーション
+26,2  ファイル先頭のクラスタ番号
+28,2  最後にアクセスしたクラスタ番号
+30,2  ファイルの開始クラスタからの相対位置
+32,1  カレントレコード
+33,4  ランダムレコード

ドライブ番号
  0     カレントドライブ
  1〜8  A:〜H:
ファイル名前部、ファイル拡張子
 文字数が満たない場合は空白で埋められる。
カレントブロック
 シーケンシャルアクセスで参照中のブロック番号
レコードサイズ
 レコードのサイズをバイト単位で指定
ファイルサイズ
 バイト単位
日付、時刻
 ディレクトリに記録されているのと同じフォーマット
デバイスID
 ディスクファイルの場合40H+ドライブ番号
 CON=FFH PRN=FBH LST=FCH AUX=FEH NUL=FDH
ディレクトリロケーション
 ディレクトリ領域の中で何番目のディレクトリにエントリに該当するか
先頭クラスタ
 ディスクにおける先頭クラスタを示す
最終アクセスクラスタ
 最後にアクセスされたクラスタを示す
最終アクセスクラスタの先頭クラスタからの相対位置

カレントレコード
 シーケンシャルアクセス時の、現在参照中のレコード
ランダムレコード(0〜)
 ランダムアクセス及びランダムブロックアクセスの際、アクセスするレコードを指定
します。レコードサイズが64未満の場合4バイト、64以上の場合は3バイトのみ有効です。

 FCBの内容(DOS2)

+00,1  ドライブ番号
+01,8  ファイル名
+09,3  ファイル名拡張子
+12,1  エクステント番号(下位バイト)
+13,1  ファイル属性
+14,1  CP/Mファンクションのためのエクステント番号(上位バイト)
+15,1  CP/Mファンクションのレコードカウント
+16,4  ファイルサイズ(最下位バイトが最初にくる)
+20,4  ボリュームID
+24,8  内部情報
+32,1  範囲(0〜127)中のカレントレコード
+33,4  ランダムレコード番号(下位バイトが先)

+14,2はDOS1互換のブロックファンクションでは、レコードサイズをセットする。


    4.8 DPB(ドライブパラメータブロック)

 DPBは21バイトのテーブルで、論理ドライブ毎に存在しドライブ毎の情報を保持してい
ます。この情報によりMSX-DOSはメディア間の差異を吸収することができます。DPBの情
報はMSX-DOSの起動時やメディアが交換された際に更新されます。

 DPBの内容

+00,1  ドライブ番号
+01,1  メディアID
+02,2  セクタサイズ
+04,1  ディレクトリマスク(セクタサイズ/32-1)
+05,1  ディレクトリシフト
+06,1  クラスタマスク(クラスタ当たりのセクタ数-1)
+07,1  クラスタシフト
+08,2  1つめのFATの先頭セクタ
+10,1  FATの数
+11,1  ディレクトリエントリの数(〜254)
+12,2  データ領域の先頭セクタ
+14,2  クラスタ総数+1
+16,1  1つのFATに要するセクタの数
+17,2  ディレクトリ領域の先頭セクタ
+19,2  メモリ上に置かれたFATのアドレス


    4.9 メディアID

 メディアIDはブートセクタやFATの先頭に記録されていて、その値を読むことによりそ
のメディアを判別することができます。
 メディアIDとメディアタイプの関係を示します。

  F8H:1DD 9SEC   F9H:2DD 9SEC   FAH:1DD 8SEC   FBH:2DD 8SEC
  FCH:1D  9SEC   FDH:2D  9SEC   FEH:1D  8SEC   FFH:2D  8SEC

 RAMディスクではメディアIDはFFHになっています。


    4.10 FIB(ファイル情報ブロック)

 DOS2で新設されたファイルに関係するファンクションでは、ASCIIZ文字列の代わりに
FIBを渡すことができます。FIBは未知のファイルやサブディレクトリを検索するといっ
たより複雑な処理に使用されます。
 FIBは64バイトの領域で、「最初のエントリの検索」「次のエントリの検索」「新しい
エントリの検索」ファンクションによって満たされます。

 FIBの内容

+00,1   常に0FFH(パス名文字列と区別するため)
+01,13  ファイル名(ASCIIZ文字列)
+14,1   ファイル属性バイト
+15,2   最終変更時刻
+17,2   最終変更日付
+19,2   開始クラスタ
+21,4   ファイルのサイズ
+25,1   論理ドライブ
+26,38  内部情報(変更してはならない)

ファイル名
 直接印字可能なASCIIZ文字列です。空白は全て取り除かれ、あれば拡張子の前にピリ
オドが付加され、名前は大文字になります。エントリがボリュームラベルだと、名前は
"."セパレータなしでストアされ、空白が残されて大文字化されません。

ファイル属性バイト
b0 読み出し専用
b1 不可視
b2 システムファイル
b3 ボリューム名
b4 ディレクトリ
b5 アーカイブビット
b6  予約(常に0)
b7  デバイスビット
 セットされるとFIBがディスクファイルでなく、文字デバイスを参照していることを示
し、他の全ての属性ビットは無視されます。


    4.11 ASCIIZ文字列

 DOS2ではASCIIZ文字列というものが多用されますが、ASCIIZ文字列とはヌルコード(00H)
で終了する文字列のことです。
 ドライブ・パス・ファイルASCIIZ文字列を受け取るファンクションで、ファンクショ
ンに渡すデータは、たとえば"B:\TEMP\ED.$$$"といった形の文字列の最後に00Hを付加し
たものになります。


    4.12 時刻、日付のフォーマット

 ディレクトリエントリやFCB中で時刻や日付を表す時、それぞれ2バイトに詰め込んだ
特殊なフォーマットが使用されます。

    時刻のフォーマット           日付のフォーマット
  b15〜b11  時間(0〜23)        b15〜 b9  年(0〜99)(1980〜2079に対応)
  b10〜 b3  分(0〜59)           b8〜 b5  月(1〜12)
   b4〜 b0  秒/2(0〜29)         b4〜 b0  日(1〜31)


    4.13 ファイルハンドル

 DOS2では、新しいファンクションでファイルのアクセスを行う際、ファイルハンドル
でファイルを指定します。
 ファイルハンドルは特定のオープンファイルやデバイスを示す8ビットの数値です。フ
ァイルハンドルは「ファイルハンドルのオープン」あるいは「ファイルハンドルの作成」
ファンクションで割り当てられます。外部プログラムの実行時にはまえもっていくつか
のファイルハンドルが定義されています。これらのファイルハンドルは自由にクローズ
することができ、またプログラム終了の前に戻す必要はありません。
 デフォルトのファイルハンドルを示します。

 0 標準入力(CON)
 1 標準出力(CON)
 2 標準エラー出力(CON)
 3 標準補助入出力(AUX)
 4 標準プリンタ出力(PRN)


   第5章 ファンクションコールの詳細

 ファンクションコールの詳細を紹介します。
 ファンクションの名称はMSX2テクニカルハンドブック、MSX-DOS2リファレンスマニュア
ル、MSXDatapack1、MSXDatapack3で相互に異なる場合がありますが、ここでは基本的には
Datapack3での表記に統一します。

  ファンクションコール一覧

 左から順に、CP/M2.2との互換性があるか、DOS1でのファンクションかどうか、DOS2で
エラー処理ルーチンから呼び出せるか、DOS1とDOS2で注意すべき変更点の有無、ファンク
ション番号、パブリックラベル、ファンクションの名称、参照ページとなっています。
 パブリックラベルはファンクションコードに割り当てられているラベルです。

CP/M DOS1 エラー  変更                               ページ
 *   *            00H _TERM0   プログラムの終了                         28
 *   *   *       01H _CONIN   コンソール入力                           28
 *   *   *       02H _CONOUT  コンソール出力                           28
 *   *   *       03H _AUXIN   補助入力                                 28
 *   *   *       04H _AUXOUT  補助出力                                 28
 *   *   *       05H _LSTOUT  プリンタ出力                             29
 *   *   *       06H _DIRIO   直接コンソールI/O                        29
      *   *       07H _DIRIN   直接コンソール入力                       29
      *   *       08H _INNOE   エコーなしコンソール入力                 29
 *   *   *       09H _STROUT  文字列出力                               29
 *   *   *       0AH _BUFIN   バッファ行入力                           29
 *   *   *       0BH _CONST   コンソールステータス                     30
 *   *   *       0CH _CPMVER  バージョン番号の獲得                     30
 *   *            0DH _DSKRST  ディスクリセット                         30
 *   *        *  0EH _SELDSK  ディスクの選択                           30
 *   *            0FH _FOPEN   ファイルのオープン[FCB]                  30
 *   *            10H _FCLOSE  ファイルのクローズ[FCB]                  30
 *   *            11H _SFIRST  最初のエントリの検索[FCB]                31
 *   *        *  12H _SNEXT   次のエントリの検索[FCB]                  31
 *   *            13H _FDEL    ファイルの削除[FCB]                      31
 *   *        *  14H _RDSEQ   シーケンシャルな読み出し[FCB]            31
 *   *            15H _WRSEQ   シーケンシャルな書き込み[FCB]            31
 *   *            16H _FMAKE   ファイルの作成[FCB]                      32
 *   *            17H _FREN    ファイル名の変更[FCB]                    32
 *   *   *       18H _LOGIN   ログインベクタの獲得                     32
 *   *   *       19H _CURDRV  カレントドライブの獲得                   32
 *   *            1AH _SETDTA  ディスク転送アドレスのセット             32
      *        *  1BH _ALLOC   アロケーション情報の獲得                 32
                    1CH〜20H   未定義
 *   *            21H _RDRND   ランダムな読み出し[FCB]                  33
 *   *            22H _WRRND   ランダムな書き込み[FCB]                  33
 *   *            23H _FSIZE   ファイルサイズの獲得[FCB]                33
 *   *            24H _SETRND  ランダムレコードのセット[FCB]            33
                    25H     未定義
      *            26H _WRBLK   ランダムなブロックの書き込み[FCB]        33
      *            27H _RDBLK   ランダムなブロックの読み出し[FCB]        33
 *   *            28H _WRZER   ゼロフィルを行うランダムな書き込み[FCB]  34
                    29H     未定義
      *   *       2AH _GDATE   日付の獲得                               34
      *   *       2BH _SDATE   日付のセット                             34
      *   *       2CH _GTIME   時刻の獲得                               34
      *   *       2DH _STIME   時刻のセット                             34
      *   *       2EH _VERIFY  ベリファイフラグのセット・リセット       34
      *   *       2FH _RDABS   アブソリュートなセクタの読み出し         35
      *   *       30H _WRABS   アブソリュートなセクタの書き込み         35

CP/M DOS1 エラー  変更                           ページ
           *       31H _DPARM   ディスクパラメータの獲得                 35
                    32H〜3FH   未定義
                    40H _FFIRST  最初のエントリの検索                     36
                    41H _FNEXT   次のエントリの検索                       36
                    42H _FNEW    新しいエントリの検索                     36
                    43H _OPEN    ファイルハンドルのオープン               37
                    44H _CREATE  ファイルハンドルの作成                   37
                    45H _CLOSE   ファイルハンドルのクローズ               37
                    46H _ENSURE  ファイルハンドルの確保                   37
                    47H _DUP     ファイルハンドルの複製                   38
                    48H _READ    ファイルハンドルからの読み出し           38
                    49H _WRITE   ファイルハンドルへの書き込み             38
                    4AH _SEEK    ファイルハンドルポインタの移動           38
                    4BH _IOCTL   デバイスのI/O制御                        39
                    4CH _HTEST   ファイルハンドルのテスト                 40
                    4DH _DELETE  ファイル・サブディレクトリの削除         40
                    4EH _RENAME  ファイル名・サブディレクトリ名の変更     40
                    4FH _MOVE    ファイル・サブディレクトリの移動         40
                    50H _ATTR    ファイル属性の獲得・セット               41
                    51H _FTIME   ファイルの日付および時刻の獲得・セット   41
                    52H _HDELETE ファイルハンドルの削除                   41
                    53H _HRENAME ファイルハンドルの名前の変更             41
                    54H _HMOVE   ファイルハンドルの移動                   42
                    55H _HATTR   ファイルハンドルの属性の獲得・セット     42
                    56H _HFTIME  ファイルハンドルの日付及び時刻の獲得・セット
           *       57H _GETDTA  ディスク転送アドレスの獲得               42
           *       58H _GETVFY  ベリファイフラグ設定の獲得               42
                    59H _GETCD   カレントディレクトリの獲得               43
                    5AH _CHDIR   カレントディレクトリの変更               43
                    5BH _PARSE   パス名の解析                             43
                    5CH _PFILE   ファイル名の解析                         44
           *       5DH _CHKCHR  文字の検査                               44
                    5EH _WPATH   完全なパス文字列の獲得                   45
                    5FH _FLUSH   ディスクバッファのフラッシュ             45
                    60H _FORK    子プロセスの起動                         46
                    61H _JOIN    親プロセスに戻る                         46
                    62H _TERM    エラーコードを伴った終了                 47
                    63H _DEFAB   アボート終了ルーチンの定義               47
                    64H _DEFER   ディスクエラー処理ルーチンの定義         48
           *       65H _ERROR   直前のエラーコードの獲得                 48
           *       66H _EXPLAIN エラーコードの説明                       48
                    67H _FORMAT  ディスクのフォーマット                   49
                    68H _RAMD    RAMディスクの作成あるいは消去            49
                    69H _BUFFER  セクタバッファの割り付け                 49
           *       6AH _ASSIGN  論理ドライブの割り当て                   49
           *       6BH _GENV    環境変数の獲得                           50
           *       6CH _SENV    環境変数のセット                         50
           *       6DH _FENV    環境変数の検索                           50
           *       6EH _DSKCHK  ディスク検査ステータスの獲得・セット     50
           *       6FH _DOSVER  MSX-DOSのバージョン番号の獲得            51
           *       70H _REDIR   リダイレクションの状態の獲得・セット     51


 ファンクションの説明

 各ファンクションについて説明します。
  それぞれのファンクションについて、ファンクション番号とパブリックラベル、ファン
クションの名称、レジスタの設定と戻り値、説明があります。

●00H _TERM0   プログラムの終了

    設定 なし
   戻り値 なし

 MSX-DOS上からコールした場合には、0000Hに分岐することによってシステムがリセット
されます(DOSのコマンドレベルに処理が返る)。Disk BASICからコールした場合は、Disk 
BASICがウォームスタートします。つまり、ロードされているプログラムを破壊せずにBAS
ICのコマンドレベルに戻ります。
 DOS2においては、プログラム終了の際にはこのファンクションコールではなく「エラー
コードを返して終了」(62H)を使用することが推奨されています。

●01H _CONIN   コンソール入力

    設定 なし
   戻り値 A(=L) コンソールから入力した文字

 入力がない場合(キーボードバッファが空の場合)には、入力待ちを行います。入力され
た文字はコンソールにエコーバックされます。以下に示すコントロールキャラクタはファ
ンクション内部で処理されるため、入力として扱いません。
 DOS2においては、標準入力から読み込んで標準出力にエコーします。

  CTRL-C システムリセット
  CTRL-P プリンタへのエコー開始
  CTRL-N プリンタへのエコー停止
  CTRL-S ウェイト

●02H _CONOUT  コンソール出力

    設定 E 出力する文字コード
   戻り値 なし

 Eレジスタで指定した文字を画面に表示します。またコンソールの入力をチェックし、C
TRL+C、CTRL+P、CTRL+N、CTRL+Sの処理を行います。
 DOS2においては文字は標準出力に書き出されます。

●03H _AUXIN   補助入力

    設定 なし
   戻り値 A(=L) 補助入力から読み込んだ1文字

 文字がない場合は入力を待ちます。補助入力装置がセットされていない時は、EOF文字(
1AH)を返します。コンソール入力は、ファンクション02Hと同様にチェックします。
 DOS2においては補助入力デバイスから読み込まれます。

●04H _AUXOUT  補助出力

    設定 E 補助出力に出力する文字コード
   戻り値 なし

 補助出力装置がセットされていない時は何もしません。コンソール入力はファンクショ
ン02Hと同様にチェックします。
 DOS2においては補助出力デバイスに対して出力されます。

●05H _LSTOUT  プリンタ出力

    設定 E プリンタに出力する文字コード
   戻り値 なし

 コンソール入力は、ファンクション02Hと同様にチェックします。
 DOS2においては標準プリンタデバイスに出力されます。

●06H _DIRIO   直接コンソールI/O

    設定 E  FFH   入力
          FFH以外 セットされた値を文字コードとしてコンソールに出力
   戻り値 Eが0FFHにセットされていた場合(入力)
        A(=L) キーが押されていた場合はその文字コード
              押されていなかった場合は00H
       Eが0FFH以外にセットされていた場合(出力)
        なし

 入力のエコーバック、コントロールキャラクタの処理は行いません。出力のプリンタへ
のエコーバックは行いません。
 DOS2においては入力は標準入力に対して、出力は標準出力に対して行われます。

●07H _DIRIN   直接コンソール入力

    設定 なし
   戻り値 A(=L) コンソールから入力した文字

 コントロールキャラクタのサポートは行いません。エコーバックは行いません。
 DOS2においては標準入力から読み込みます。

●08H _INNOE   エコーなしコンソール入力

    設定 なし
   戻り値 A(=L) コンソールから入力した1文字

 エコーバックは行いません。コントロールキャラクタはファンクション01Hと同様に処
理します。
 DOS2においては標準入力から読み込みます。

●09H _STROUT  文字列出力

    設定 DE コンソールに出力する文字列のアドレス
   戻り値 なし

 文字列の最後には、終端記号(ターミネータ)として24H("$")を付加しておく必要があり
ます。コントロールキャラクタはファンクション02Hと同様に処理します。

●0AH _BUFIN   バッファ行入力

    設定 DE 行バッファの先頭アドレス
       (行バッファの先頭+0) 最大入力文字数(1〜0FFH)
   戻り値 (行バッファの先頭+1) 実際に入力された文字数
       (行バッファの先頭+2〜) コンソールから入力された文字列

 リターンキーの入力をコンソールからの入力の終端と見なします。ただし、入力文字数
が指定の最大入力文字数を超える場合には、指定の入力文字数までを入力文字列と見なし
てメモリにセットした後、処理を終了します。このファンクションコールによる文字列入
力時には、テンプレートによる編集が可能です。
 コントロールキャラクタの入力をチェックします。

●0BH _CONST   コンソールステータス

    設定 なし
   戻り値 A(=L) FFH コンソール入力がある
             00H コンソール入力がない

 入力文字がある時もその文字は取り出しません。ただし、コントロールキャラクタはフ
ァンクション02Hと同様に処理します。入力文字はファンクション01Hか08Hで取り出すこ
とができます。

●0CH _CPMVER  バージョン番号の獲得

    設定 なし
   戻り値 HL(=BA) 0022H

 エミュレートしているCP/Mのバージョン番号を返します。一律に0022Hが返ります。

●0DH _DSKRST  ディスクリセット

    設定 なし
   戻り値 なし

 変更されてまだディスクに書きこまれていないセクタがあれば、それをディスクに書き
込んだ後、デフォルトドライブをAドライブにセットし、DTAを0080Hにセットします。

●0EH _SELDSK  ディスクの選択

    設定 E デフォルトドライブ番号(0:A、1:B・・・7:H)
   戻り値 (DOS1)なし
       (DOS2)A(=L) 使用できるドライブの数

 デフォルトドライブはFCBなどのドライブ番号に0が指定されたときに有効です。接続さ
れていないドライブが指定された時には変更しません。
 DOS2においてはCP/Mとの互換性のために(0004H)にもカレントドライブ番号を格納しま
す。また使用できるドライブの数をA(1〜8)に返します。ただし、この数にRAMDISKは含ま
れません。

●0FH _FOPEN   ファイルのオープン[FCB]

    設定 DE オープンされていないFCBの先頭アドレス
   戻り値 A(=L)  00H  成功
                   FCBの各フィールドが設定される
              FFH  失敗

 FCBがファイル入出力のファンクションコールで使用できるようになります。レコード
サイズ、カレントレコード、ランダムレコードの各フィールドは使用するファンクション
に応じて、オープンの後ユーザープログラムが設定しなければなりません。

●10H _FCLOSE  ファイルのクローズ[FCB]

    設定 DE オープンされたFCBの先頭アドレス
   戻り値 A(=L)  00H クローズが成功
              FFH クローズが失敗

 現在のFCBの内容をディスク上の該当するディレクトリエリアに書きこむことによって
ファイルの更新に関する整合性を保ちます。ただし、ファイルの内容を変更していない時
には書き込みは行いません。クローズしたFCBはオープンされていないFCBとして再利用で
きます。また、オープンされたFCBとしてさらに入出力を続けることもできます。

●11H _SFIRST  最初のエントリの検索[FCB]

    設定 DE オープンされていないFCBの先頭アドレス
   戻り値 A(=L) 00H ファイルが見つかった
               DTAにドライブ番号と、それに続く32バイトにそのファイル
                        のディスク上のディレクトリエントリをセットする
             FFH ファイルが見つからなかった

 ファイル名にはワイルドカード文字の「?」を使用することができます。その場合、最
初にマッチしたファイルのディレクトリ情報を得ることができます。ワイルドカード文字
の「*」はサポートしていないため、適当な数の「?」に置き換える必要があります。DTA
領域に設定されたデータはオープンされていないFCBとして使用できます。

●12H _SNEXT   次のエントリの検索[FCB]

   設定 なし
  戻り値 A(=L) 00H  ファイルが見つかった
                   FFH ファイルが見つからない

 「最初のエントリの検索」でのファイル名に適合する次のファイルを検索します。返さ
れる結果の内容は「最初のエントリの検索」と同様です。
 DOS1では「最初のエントリの検索」で指定した"オープンされていないFCB"が残ってい
なければなりません。DOS2では情報を内部に保持するので"オープンされていないFCB"は
なくても構いません。

●13H _FDEL    ファイルの削除[FCB]

   設定 DE オープンされていないFCBのアドレス
  戻り値 A(=L) 00H  ファイルの削除が成功した場合
          FFH ファイルが一つも削除されなかった場合

 ワイルドカードキャラクタが使用できます。
 DOS2においては、サブディレクトリ、システムファイル、不可視、読み出し専用ファイ
ルは削除されません。

●14H _RDSEQ   シーケンシャルな読み出し[FCB]

   設定 DE オープンされたFCBのアドレス
  戻り値 A(=L) 00H 読み出しが成功した
          01H EOFでエラー

 128バイトのレコードを読み込みんでDTAに転送します。ファイルの終端で読み込んだバ
イト数が128バイトにみたない場合はDOS1では1AH、DOS2では00Hで詰められます。

●15H _WRSEQ   シーケンシャルな書き込み[FCB]

   設定 DE オープンされたFCBのアドレス
  戻り値 A(=L) 00H 書き込みが成功した場合
          01H ディスクがいっぱいでエラー

 128バイトのレコードをファイルに書き出します。レコードはカレントレコードで指定
します。

●16H _FMAKE   ファイルの作成[FCB]

   設定 DE オープンされていないFCBのアドレス
  戻り値 A(=L) 00H  成功
          FFH 失敗

 指定のドライブのカレントディレクトリに新しいファイルを作成し、オープンします。
ファイル名にワイルドカードを使用することはできません。また、不正なファイル名が生
成されないようにチェックされます。

●17H _FREN    ファイル名の変更[FCB]

   設定 DE オープンされていないFCBのアドレス
  戻り値 A(=L) 00H  成功
          FFH 失敗

 オープンされていないFCBは通常のドライブとファイル名に加えて、(DE+17)からに新し
いファイル名をセットします。2番目のファイル名中、"?"についてはそれに対応する元の
文字をそのままにします。ファイル名の重複や不正なファイル名をチェックされます。サ
ブディレクトリやシステムファイル、不可視属性ファイルの名前変更はできません。

●18H _LOGIN   ログインベクタの獲得

   設定 なし
  戻り値 HL ログインベクタ

 利用できるドライブについてHLの対応するビットを1にして返します。現在システムで
サポートされているのは8つまでで、Hレジスタは通常0が返ります。
    L    / H: / G: / F: / E: / D: / C: / B: / A: /

●19H _CURDRV  カレントドライブの獲得

   設定 なし
  戻り値 A(=L) カレントドライブ(0:A、1:B・・・7:H)

 カレントドライブ番号を返します。

●1AH _SETDTA  ディスク転送アドレスのセット

   設定 DE  要求するディスク転送アドレス
  戻り値 なし

 DEで指定したアドレスをディスク転送アドレス(DTA)としてセットします。このアドレ
スはFCBを利用したディスクアクセスなどで使用されます。
 DOS2で拡張されたファンクションにおいては、転送アドレスを直接指定するためにディ
スク転送アドレスは使用されません。

●1BH _ALLOC   アロケーション情報の獲得

   設定 E ドライブ番号(0:カレント、1:A・・・8:H)
  戻り値 A  1クラスタ当たりのセクタ数
      BC セクタサイズ(常に512)
      DE ディスク上のクラスタの総数
      HL ディスク上の未使用クラスタ数
      IX DPBへのポインタ
      IY FATセクタへのポインタ

 指定のドライブ中のディスクについての情報を返します。
 DOS2ではDOS1と異なり、FATの最初のセクタだけがIYからのアドレスでアクセスでき、
そこのデータは次のファンクションコールまでしか有効ではありません。

●21H _RDRND   ランダムな読み出し[FCB]

   設定 DE オープンされたFCBへのポインタ
  戻り値 A(=L) 00H 読み出しが成功の場合
          01H エンドオブファイルでエラー

 ファイルから128バイトのレコードを読み出しDTAに入れます。ファイルの位置はFCBの
ランダムレコード番号で決まります。ファイルの終わりの断片レコードは0で詰められま
す。ランダムレコード番号は変更されません。

●22H _WRRND   ランダムな書き込み[FCB]

   設定 DE オープンされたFCBのアドレス
  戻り値 A(=L) 00H エラーが起きなかった場合
          01H ディスクがいっぱいでエラーの場合

 DTAから128バイトをファイルに書き込みます。書き込む位置はランダムレコード番号に
よって指定します。ランダムレコード番号は更新されません。

●23H _FSIZE   ファイルサイズの獲得[FCB]

   設定 DE  オープンされていないFCBのアドレス
  戻り値 A(=L) 00H ファイルが見つかった
          FFH ファイルが見つからない

 ファイルのオープンと同様に最初に一致するファイルを検索します。ファイルのサイズ
は128バイト単位に切り上げられ、レコード数がランダムレコード番号の始めの3バイトに
セットされます。

●24H _SETRND  ランダムレコードのセット[FCB]

   設定 DE オープンされたFCBのアドレス
  戻り値 なし

 FCB中のランダムレコードフィールドをカレントレコードによって設定します。

●26H _WRBLK   ランダムなブロックの書き込み[FCB]

   設定 DE オープンされたFCBのアドレス
      HL 書き込むレコード数
  戻り値 A 00H 成功
        01H エラー

 DTAからのデータをランダムレコード番号によって決まる位置へ書き込みます。FCBの
レコードサイズによってレコードのサイズが決まります。
 ランダムレコードが更新されます。
 書き込むレコード数が0の場合、データは書き込まれず、ファイルサイズがランダムレ
コード領域で指定した値に変更されます。このとき、必要に応じてディスクの領域が割り
当てられたり開放されたりします。あらたに割り当てられた領域は初期化されません。

●27H _RDBLK   ランダムなブロックの読み出し[FCB]

   設定 DE オープンされたFCBのアドレス
      HL 読み出すレコード数
  戻り値 A 00H 成功
        01H エラー(通常、エンドオブファイル)
      HL 実際に読んだレコード数

 EOFに達した場合、断片レコードは余りが0で詰められ、戻り値はAに01Hがセットされま
す。

●28H _WRZER   ゼロフィルを行うランダムな書き込み[FCB]

   設定 DE オープンされたFCBのアドレス
  戻り値 A(=L) 00H 成功
          01H エラー

 ランダムな書き込みと同じですが、ファイルを拡張した時にあらたに割り当てられたク
ラスタが0でうめられます。

●2AH _GDATE   日付の獲得

   設定 なし
  戻り値 HL 年(1980〜2079)
      D  月(1〜12)
      E  日(1〜31)
      A  曜日(0:日〜6:土)

●2BH _SDATE   日付のセット

   設定 HL 年(1980〜2079)
      D  月(1〜12)
      E  日(1〜31)
  戻り値 A 00H 成功
        FFH 日付が無効

 曜日は日付から算出されます。

●2CH _GTIME   時刻の獲得

   設定 なし
  戻り値 H 時間(0〜23)
      L 分(0〜59)
      D 秒(0〜59)
      E 1/100秒(常に0)

 クロックが1/100秒単位までないためEは常に0です。

●2DH _STIME   時刻のセット

   設定 H 時間(0〜23)
      L 分(0〜59)
      D 秒(0〜59)
      E 1/100秒(無視されます)
  戻り値 A 00H 成功
        FFH 時刻が無効

●2EH _VERIFY  ベリファイフラグのセット・リセット

   設定 E 0     ベリファイを無効に
        0以外 ベリファイを有効に
  戻り値 なし

 MSX-DOSが起動した時には無効になっています。
 この機能はディスクドライバに依存しているため、ディスクドライバがベリファイに対
応していない場合、このファンクションでベリファイを有効にしてもベリファイは行われ
ません。

●2FH _RDABS   アブソリュートなセクタの読み出し

   設定 DE セクタ番号
      L  ドライブ番号(0:A、1:B・・・7:H)
      H  読み出すセクタ数
  戻り値 A エラーコード(0でエラーなし)

 データはDTAに読み込まれます。

●30H _WRABS   アブソリュートなセクタの書き込み

   設定 DE セクタ番号
      L  ドライブ番号(0:A、1:B・・・7:H)
      H  読み出すセクタ数
  戻り値 A エラーコード(0でエラーなし)

 データはDTAから書き込まれます。

●31H _DPARM   ディスクパラメータの獲得

   設定 DE ディスクパラメータ(32バイトのバッファ)へのポインタ
      L  ドライブ番号(0:カレント、1:A・・・8:H)
  戻り値 A  エラーコード
      DE 保存される

 指定のドライブ中のディスクのフォーマットに関するパラメータを、ユーザープログラ
ム内に確保されたバッファに返します。

 ディスクパラメータの内容

  +00,1 物理的なドライブ番号(1:A・・・8:H)
 +01,2 セクタサイズ(現在は常に512)
  +03,1 クラスタごとのセクタ数
  +04,2 予約セクタ数(通常1)
  +06,1 FATの数(通常2)
  +07,2 ルートディレクトリのエントリ数
  +09,2 論理セクタの総数
  +11,1 メディアディスクリプタバイト
  +12,1 FATごとのセクタ数
  +13,2 ルートディレクトリの最初のセクタ番号
  +15,2 最初のデータのセクタ番号
  +17,2 最大クラスタ番号
  +19,1 ダーティディスクフラグ
  +20,4 ボリュームID(-1:ボリュームIDなし)
  +24,8 システム予約(現在は常に0)

 ダーティディスクフラグは、ディスク中にUNDELコマンドで復活できるファイルがある
ことを示すフラグです。ファイルやディレクトリにクラスタが割り当てられるとリセット
されます。

●40H _FFIRST  最初のエントリの検索
   設定 DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
      HL 検索ファイル名 ASCIIZ文字列(DE=FIBポインタである場合)
      B  検索属性
      IX 新しいFIBへのポインタ
  戻り値 A    エラーコード
      (IX) 一致するエントリが入る

 文字列のドライブ・パス部分あるいはFIBは検索するディレクトリを指定します。ファ
イルを指定するFIBが渡されると.IATTRエラーが返されます。
 検索するファイル名には、ワイルドカード文字("?"と"*")を含めても良く、その場合に
は最初に一致するエントリが返されます。ファイル名がヌルの場合"*.*"と見なします。
 検索属性は一致するエントリのタイプを指定します。読み出し専用およびアーカイブビ
ットは無視されます。ボリューム名ビットがセットされるとボリュームラベルのエントリ
だけが検索されます。ボリューム名はパスの指定は無視してルートから検索します。
 DEがFIBを指している場合、IXも同一のFIBを指定することができ、この場合重ね書きさ
れます。
●41H _FNEXT   次のエントリの検索

   設定 IX 以前の「最初のエントリの検索」で返されたFIBへのポインタ
  戻り値 A    エラー
      (IX) 次の一致するエントリが入る

 「最初のエントリの検索」の後で使用しなければなりません。
 一致するエントリが見つからない場合、.NOFILエラーを返します。

●42H _FNEW    新しいエントリの検索

   設定 DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
      HL 検索ファイル名ASCIIZ文字列(DE=FIBポインタの場合のみ)
      B  検索属性/新規作成フラグ(b7)
      IX テンプレートファイル名を保持している新しいFIBへのポインタ
  戻り値 A    エラー
      (IX) 新しいエントリが入る

 「最初のエントリの検索」と似ていますが、指定されたファイル名で新しいエントリを
作成します。ファイル名にワイルドカード文字を使用すると、テンプレートファイル名の
該当する文字で置き換えられます。ファイル名がヌルの場合"*.*"として扱われます。
 このファンクションコールは、ファイル名を変えてコピーを行う場合に有用です。
 検索属性をセットすると該当するボリューム名、サブディレクトリ、などが作成されま
す。ファイルに不可視等の各属性をセットすることもできます。アーカイブビットは常に
セットされて作成されます。
 新規作成フラグをセットしてあると、既に該当するエントリが存在している場合は.FIL
EXエラーを返します。
 新規作成フラグがセットされていない場合に、読み出し専用ファイル(.FILRO)、システ
ムファイル(.SYSX)又はサブディレクトリ(.DIRX)だった場合やエントリをオープンしてい
るハンドルが存在した場合(.FOPEN)にはエラーが返されます。
 サブディレクトリを作成しようとしている場合、既存のファイルは削除されません。(
.FILEXエラー)
 .FILEX、.FILRO、.SYSX、.DIRX、.FOPENの各エラーが発生した場合、既存のエントリの
情報がFIBに書き込まれます。

●43H _OPEN    ファイルハンドルのオープン

   設定 DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
      A  オープンモード
       b0 書き込み禁止
       b1 読み出し禁止
       b2 継承
       b3〜b7 必ずクリア
  戻り値 A エラー
      B 新しいファイルハンドル

 読み出し禁止の場合、ファイルハンドルへの書き込みも禁止されます。継承ビットがセ
ットされると「子プロセスの起動」によって生成された新しいプロセスにファイルハンド
ルが受け継がれます。
 デバイスのファイルハンドルが組み込みデバイスのファイル名を与えられてオープンさ
れると、ASCIIモードでオープンされます。
●44H _CREATE  ファイルハンドルの作成

   設定 DE ドライブ・パス・ファイルASCIIZ文字列
      A  オープンモード
       b0 書き込み禁止
       b1 読み出し禁止
       b2 継承
       b3〜b7 必ずクリア
      B 要求する属性/新規作成フラグ(b7)
  戻り値 A エラー
      B 新しいファイルハンドル

 ファイルまたはサブディレクトリを作成します。
 新規作成フラグをセットすると既に同名のエントリが存在している場合は、既存のファ
イルを削除せずエラーを返します。
 不正な属性ビットは無視されます。ファイルは常にアーカイブビットをセットして作成
されます。
 ファイルはオープンされてファイルハンドルが返されます。(「ファイルハンドルのオ
ープン」と同様)
 サブディレクトリはオープンされないため、BレジスタにFFHが返されます。

●45H _CLOSE   ファイルハンドルのクローズ

   設定 B ファイルハンドル
  戻り値 A エラー

 指定のファイルハンドルを開放して再利用できるようにします。ハンドルにファイルが
書き込まれていると、ディレクトリエントリを更新し、アーカイブビットをセットし、バ
ッファ中のデータをディスクの書き出します。
 このファイルハンドルは続けて使用することはできず、「ファイルハンドルの複製」や
「子プロセスの起動」で作成されたファイルハンドルは続けて使用できます。

●46H _ENSURE  ファイルハンドルの確保

   設定 B ファイルハンドル
  戻り値 A エラー

 ファイルハンドルにファイルが書き込まれていると、ディレクトリエントリを更新し、
アーカイブビットをセットし、バッファ中のデータをディスクに書き出します。ファイル
ハンドルは開放されないため、続けてファイルをアクセスすることができます。ファイル
ポインタの位置は変わりません。

●47H _DUP     ファイルハンドルの複製

   設定 B ファイルハンドル
  戻り値 A エラー
      B 新しいファイルハンドル

 ファイルハンドルのコピーを作成します。
 元のファイルハンドルと新しいファイルハンドルの両方を同様に使用することができま
す。ファイルポインタの移動や名前の変更は両方のファイルハンドルに効果が及びます。
ただし、片方のファイルハンドルを削除した場合、もう片方のファイルハンドルはオープ
ンしたままの状態ですが「クローズ」、「確保」、「削除」以外では使用できません。

●48H _READ    ファイルハンドルからの読み出し

   設定 B  ファイルハンドル
      DE バッファアドレス
      HL 読み込むバイト数
  戻り値 A  エラー
      HL 実際に読み込んだバイト数

 指定されたバイト数をファイルポインタの位置から読み出します。読み出した後、ファ
イルポインタは続くアドレスに更新されます。
 HLに読み込んだバイト数が返りますが、指定のバイト数よりも短い場合もあります。た
だし、指定のバイト数よりも短い場合でも.EOFエラーは返りません。.EOFエラーは、実際
には次に読み込みをした時に0バイトの読み込みを行って返ります。

●49H _WRITE   ファイルハンドルへの書き込み

   設定 B ファイルハンドル
      DE バッファアドレス
      HL 書き込むバイト数
  戻り値 A エラー
      HL 実際に書き込んだバイト数
 指定されたバイト数をファイルポインタの位置から書き込みます。書き込んだ後、ファ
イルポインタは続くアドレスに更新されます。
 実際に書き込んだバイト数は、エラーが発生した時に0になる他は要求した数と等しく
通常は無視できます。

●4AH _SEEK    ファイルハンドルポインタの移動

   設定 B     ファイルハンドル
      A     方式コード
            0 ファイルの先頭から相対
            1 現在の位置から相対
            2 エンドオブファイルから相対
      DE:HL 符号付きオフセット
  戻り値 A     エラー
      DE:HL 新しいファイルポインタ

 ファイルポインタを移動します。
 エンドオブファイルのチェックは行わないので、ファイルポインタはエンドオブファイ
ルを越えてセットすることが可能です。

●4BH _IOCTL   デバイスのI/O制御

   設定 B  ファイルハンドル
      A  サブファンクションコード
         00H ファイルハンドルの状態の獲得
         01H ASCII・バイナリモードのセット
         02H 入力レディの検査
         03H 出力レディの検査
         04H 画面サイズの検出
      DE 他のパラメータ
  戻り値 A  エラー
      DE 他の結果

ファイルハンドルの種々の状態を判別、変更することができます。特にディスクファイ
ルとデバイスを区別することができ、それらを区別したい場合に役に立ちます。どの処理
を行うかはサブファンクションコードで指定します。
 サブファンクションで指定される各機能を以下に説明します。

○ファイルハンドルの状態の獲得(A=0)

  戻り値 DE デバイスの場合
         b0 コンソール入力デバイス
         b1 コンソール出力デバイス
         b2〜b4 システム予約
         b5 ASCIIモード
         b6 エンドオブファイル
         b7 デバイス(常に1:デバイスファイル)
         b8〜b15 システム予約
        ディスクファイルの場合
         b0〜b5 ドライブ番号(0:A・・・)
         b6 エンドオブファイル
         b7 デバイス(常に0:ディスクファイル)
         b8〜b15 システム予約

○ASCII・バイナリモードのセット(A=1)

   設定 E b5 1 ASCII
          0 バイナリ

 DEレジスタの他のビットは無視されます。

○入力レディ(A=2)/出力レディの検査(A=3)

  戻り値 E FFH レディ
        00H  ノットレディ

○画面サイズの獲得(A=4)

  戻り値 D 行数
      E 列数

 画面サイズのないデバイスの場合DもEも0になります。どちらが0でもそれは無限である
と解釈します。

●4CH _HTEST   ファイルハンドルのテスト

   設定 B  ファイルハンドル
      DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
  戻り値 A エラー
      B 00H 同じファイルでない
        FFH 同じファイル

 ファイルハンドルとDEで指定されるファイルが同じファイルかどうかを判断します。
 ファイルがデバイスファイルの場合は同じファイルでないと常に返します。

●4DH _DELETE  ファイル・サブディレクトリの削除

   設定 DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
  戻り値 A エラー

 ファイルあるいはサブディレクトリを削除します。ワイルドカード文字は使用できませ
ん。つまり、一つだけのファイルあるいはサブディレクトリを削除できます。
 サブディレクトリは、空でない場合には削除できません(.DIRNE)。オープンされている
ファイル(.FOPEN)や読み出し専用ファイル(.FILRO)は削除できません。
 FIBを渡した場合、FIBの指すファイルは削除されてしまうため、そのFIBは「次のエン
トリの検索」以外では使用してはいけません。
 「CON」などのデバイス名が指定されるとエラーは返されませんが、そのデバイスは実
際には削除されません。

●4EH _RENAME  ファイル名・サブディレクトリ名の変更

   設定 DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
      HL 新しいファイル名ASCIIZ文字列
  戻り値 A エラー

 ファイル名にはワイルドカード文字を使用することができます。新しいファイル名にワ
イルドカード文字を使用すると、変更前のファイル名のその位置に該当する文字で置き換
えられます。
 DEがFIBを指している場合、FIB自身に含まれるファイル名の情報は更新されないため、
FIBをそのまま使用することはできません。
 新しいファイル名文字列にドライブ文字やディレクトリパスを含めると、.IFNMエラー
が返されます。新しいファイル名が不正である場合(.IFNM)やすでに同名のエントリが存
在する場合(.DUPF)エラーになります。「CON」などのデバイス名が指定されるとエラーは
返されませんが、名前の変更はされません。

●4FH _MOVE    ファイル・サブディレクトリの移動

   設定 DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
      HL 新しいパスASCIIZ文字列
  戻り値 A エラー

 新しいパス文字列中にはドライブ名があってはなりません。
 ワイルドカード文字を使用することはできません。
 ディレクトリは自分自身の下に移動することはできません(.DIRE)。またオープンされ
たファイルハンドルを持つファイルは移動できません(.FOPEN)。
 DEがFIBを指している場合、FIB自身に含まれるファイルの位置に関する情報は更新され
ないため、このFIBをそのまま使用することはできません。「次のエントリの検索」では
使用することができます。
●50H _ATTR    ファイル属性の獲得・セット

   設定 DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
      A  0 属性の獲得
         1 属性のセット
      L  新しい属性バイト(A=1の場合)
  戻り値 A エラー
      L 現在の属性バイト

 ファイルについては、システム、不可視、読み出し専用、アーカイブビットを変更する
ことができます。サブディレクトリについては不可視属性を変更できます。
 FIBが渡された場合、FIB中の属性バイトは更新されません。
 ワイルドカードは使用できません。オープンされているファイルの属性を変更すること
はできません。"."と".."の属性は変更することができます。
 「CON」などのデバイス名が渡されてもエラーは返されませんが、実際には属性は変更
されません。

●51H _FTIME   ファイルの日付および時刻の獲得・セット

   設定 DE ドライブ・パス・ファイルASCIIZ文字列またはFIBポインタ
      A  0 日付と時刻の獲得
         1 日付と時刻のセット
      IX 新しい時刻の値(A=1の場合)
      HL 新しい日付の値(A=1の場合)
  戻り値 A  エラー
      DE ファイルの時刻の現在値
      HL ファイルの日付の現在値

 ファイルまたはディレクトリの最終修正時刻を獲得またはセットします。
 ワイルドカードは使用できません。オープンしているファイルでは変更できません(読
み出しは可)。日付と時間のチェックは行われません。
 FIBを渡した場合FIB中の日付と時刻は更新されません。

●52H _HDELETE ファイルハンドルの削除

   設定 B ファイルハンドル
  戻り値 A エラー

 指定したファイルを削除しそのファイルハンドルをクローズします。別個に同じファイ
ルをオープンしているファイルハンドルが存在すると削除は行えません(.FOPEN)。
  ファイルハンドルの複製が存在していた場合、これらの複製は使用できなくなり、使用
しようとした場合.HDEADエラーとなります。
 エラーが存在しても常にファイルハンドルはクローズされます。

●53H _HRENAME ファイルハンドルの名前の変更

   設定 B  ファイルハンドル
      HL 新しいファイル名ASCIIZ文字列
  戻り値 A エラー

 ファイルハンドルに結合されたファイルの名前を変更します。同一のファイルに対して
別にオープンされたファイルハンドルが存在する場合名前の変更はできません。
 ファイルハンドルのコピーが存在する場合は、コピーも同時に名前が変更されます。
 ファイルハンドルの名前の変更はファイルポインタを変えませんが、暗黙の「確保」処
理を実行します。

●54H _HMOVE   ファイルハンドルの移動

   設定 B  ファイルハンドル
      HL 新しいパスASCIIZ文字列
  戻り値 A エラー

 指定のファイルハンドルに結合したファイルを移動します。
 別にオープンしているファイルハンドルが存在する場合は移動できません(.FOPEN)。
 ファイルハンドルのコピーが存在する場合、コピーも移動されます。ファイルハンドル
の移動はファイルポインタを変更しませんが、暗黙の「確保」処理をします。

●55H _HATTR   ファイルハンドルの属性の獲得・セット

   設定 B ファイルハンドル
      A 0 属性の獲得
        1 属性のセット
      L 新しい属性バイト(A=1の場合)
  戻り値 A エラー
      L 現在の属性バイト

 指定のファイルハンドルに結合したファイルの属性バイトを獲得または変更します。
 別にオープンしているファイルハンドルが存在する場合は獲得はできますが、変更はで
きません(.FOPEN)。
 ファイルポインタを変更しませんが、暗黙の「確保」処理をします。

●56H _HFTIME  ファイルハンドルの日付及び時刻の獲得・セット

   設定 B  ファイルハンドル
      A  0 日付と時刻の獲得
         1 日付と時刻のセット
      IX 新しい時刻の値(A=1の場合)
      HL 新しい日付の値(A=1の場合)
  戻り値 A  エラー
      DE ファイルの時刻の現在値
      HL ファイルの日付の現在値

 指定のファイルハンドルに結合したファイルの日付と時刻を獲得または変更します。
 別にオープンしているファイルハンドルが存在する場合は獲得はできますが、変更はで
きません(.FOPEN)。
 ファイルポインタを変更しませんが、暗黙の「確保」処理をします。

●57H _GETDTA  ディスク転送アドレスの獲得

   設定 なし
  戻り値 DE 現在のディスク転送アドレス

●58H _GETVFY  ベリファイフラグ設定の獲得

   設定 なし
  戻り値 B 00H リファイ無効
        FFH ベリファイ有効

●59H _GETCD   カレントディレクトリの獲得

   設定 B  ドライブ番号(0:カレント、1:A・・・8:H)
      DE 64バイトバッファへのポインタ
  戻り値 A エラー
      DE カレントパスで満たされる

 指定のドライブのカレントディレクトリを表すASCIIZ文字列をバッファに格納します。
文字列にはドライブ名や前後の"\"は含まれません。ルートはヌル文字列となります。ド
ライブがアクセスされて、カレントディレクトリが実際に現在のディスク上に存在するこ
とが確認されるので、存在しない場合にはカレントディレクトリはルートにセットされヌ
ル文字列が返されます。

●5AH _CHDIR   カレントディレクトリの変更

   設定 DE ドライブ・パス・ファイルASCIIZ文字列
  戻り値 A エラー

 ドライブ・パス・ファイル文字列はファイルではなくディレクトリを指定しなければな
りません。指定のディレクトリが存在しない場合、ディレクトリは変更されずエラーが返
ります(.NODIR)。

●5BH _PARSE   パス名の解析

   設定 B  ボリューム名フラグ(b4)
      DE 解析するASCIIZ文字列
  戻り値 A  エラー
      DE 終了文字へのポインタ
      HL 最後の項目の先頭へのポインタ
      B  解析フラグ
      C  論理ドライブ番号(1:A、2:B・・・8:H)

 このファンクションは純粋な文字列操作ファンクションでディスクをアクセスすること
はなく、ユーザーの文字列に変更を加えることもありません。外部プログラムがコマンド
行を解析する手助けのために用意されています。
 ボリューム名フラグがリセットされていると文字列をドライブ・パス・ファイル文字列
として、セットされていると文字列をドライブ・ボリューム文字列として解析します。
 DEに返されるポインタはパス名文字列中で有効でない最初の文字を指し、文字列の終わ
りのヌルのこともあります。HLに返されるポインタは文字列の最後の項目(ファイル名部
分)の最初の文字を指します。
 Cに返されるドライブ番号は文字列中で指定される論理ドライブです。文字列がドライ
ブ文字で始まらない時は、カレントドライブが暗黙で指定されたということなので、Cは
カレントドライブ番号を保持しています。Cには0が返されることはありません。
 Bに返される解析フラグは文字列に関する情報を示します。ボリューム名ではビット1、
4、5、6、7は常にクリアされます。

 解析フラグ

 b0 ドライブ名以外の文字が解析された
 b1 ディレクトリパスが指定された
 b2 ドライブ名が指定された
 b3 最後の項目で主ファイル名が指定された
 b4 最後の項目でファイル名拡張子が指定された
 b5 最後の項目にワイルドカードがある
 b6 最後の項目が"."か".."の時セット
 b7 最後の項目が".."の時セット

●5CH _PFILE   ファイル名の解析

   設定 DE 解析のためのASCIIZ文字列
      HL 11バイトバッファへのポインタ
  戻り値 A  エラー
      DE 終了文字へのポインタ
      HL 保存、バッファが使用
      B  解析フラグ

 このファンクションは純粋な文字列操作ファンクションでディスクをアクセスすること
はなく、ユーザーの文字列に変更を加えることもありません。外部プログラムがフォーマ
ットされた形式でファイル名を出力する手助けのために用意されています。
 ASCIIZ文字列は単一のファイル名の項目として解析され、ファイル名はユーザーの11バ
イトのバッファに拡張された形式でセットされ、ファイル名及び拡張子の余白には空白が
詰められます。
 Bに返される解析フラグは「パス名の解析」と同じですが、ビット0〜2は常にクリアさ
れます。文字列中に有効なファイル名がなかったとしてもバッファは満たされ、その場合
にはバッファは空白で満たされます。"*"は適当な数の"?"に展開されます。ファイル名や
ファイル名拡張子が長すぎると、余分な文字は無視されます。
 DEに返されるポインタはファイル名の一部ではなかった文字列中の最初の文字を指しま
すが、文字列の終わりにあるヌルである場合があります。DEが指す文字は有効なファイル
名の文字であることはありません。

●5DH _CHKCHR  文字の検査

   設定 D 文字フラグ
      E 検査する文字
  戻り値 A 0(エラーを返すことはない)
      D 変更された文字フラグ
      E 検査された(大文字にされた)文字

 言語設定と独立して文字を大文字にしたり2バイトの文字やファイル名の操作をしたり
するのに役立ちます。

 文字フラグ

 b0 大文字にしない
 b1 2バイト文字の第1バイト
 b2 2バイト文字の第2バイト
 b3 ボリューム名の文字(ファイル名でない)
 b4 ファイル・ボリューム名の文字
 b5〜7 システム予約(常にクリア)

 ビット1〜2は文字列の最初の文字をチェックする時に両方ともクリアすることができ、
返された設定は続く文字のためにこのファンクションに直接渡すことができます。これら
のフラグで2バイト文字を含む可能性のある文字列を逆戻りする場合は注意が必要です。
 ビット4は文字がファイル名やボリューム名の終了文字であるとセットされてリターン
します。ビット3は単にファイル名の検査かあるいはボリューム名の文字の検査かを決定
するのに使われます。2バイト文字はボリューム名あるいはファイル名の終了文字と見な
されることはありません。

●5EH _WPATH   完全なパス文字列の獲得

   設定 DE 64バイトバッファへのポインタ
  戻り値 A エラー
      DE 完全なパス文字列で満たされる
      HL 最後の項目の始めへのポインタ

 内部バッファからASCIIZパス文字列をユーザーのバッファへコピーします。文字列は、
前に実行された「最初のエントリの検索」あるいは「新しいエントリの検索」で見付けら
れたファイルやサブディレクトリのルートディレクトリからの完全なパスとファイル名を
表します。文字列はドライブや最初の"\"を含みません。HLレジスタは「パス名の解析」
と同様、文字列上の最後の項目の最初の文字を指しています。
 「最初のエントリの検索」や「新しいエントリの検索」でDEがASCIIZ文字列を指して実
行された場合、続く「完全なパス名の獲得」は検索で返されるFIBに関係するサブディレ
クトリやファイルを表す文字列を返します。これがサブディレクトリであるとFIBはレジ
スタDEで別の最初のエントリの検索に渡すことができます。
 多くのファンクションコールが内部のパス文字列を変更し、たいていの場合正しくない
ので、このファンクションを使用する時は注意が必要です。「完全なパスの獲得」は「最
初のエントリの検索」や「新しいエントリの検索」の直後に行うべきです。

●5FH _FLUSH   ディスクバッファのフラッシュ

   設定 B ドライブ番号(0:カレント、1:A・・・、0FFH:全て)
      D 00H フラッシュのみ
        FFH フラッシュして無効にする
  戻り値 A エラー

 指定のドライブについて、まだ書き出されていない全てのディスクバッファをフラッシ
ュします。DがFFHであるとそのドライブの全てのバッファも無効になります。

●60H _FORK    子プロセスの起動

   設定 なし
  戻り値 A エラー
      B 親プロセスのプロセスID

 システムに対して子プロセスが起動されようとしていることを報告します。一般的には
これは実行されようとする新しいプログラムやサブコマンドです。
 新しいファイルハンドルのセットが作成され、継承アクセスモードをセットしてオープ
ンされた全ての現在のファイルハンドルがコピーされます。標準ファイルハンドルは継承
できるためコピーされます。
 新しいプロセスIDが子プロセスのために割り当てられ、親プロセスのプロセスIDが返さ
れ、後で「親プロセスに戻る」で親プロセスに戻ることができます。ファイルハンドルを
作成するのにメモリが足りない場合はエラーが返されます。
 子プロセスはオリジナルではなくて以前のファイルハンドルのコピーを持つため、コピ
ーの一つがクローズされても元の物はオープンされたままです。従って、子プロセスが標
準出力のファイルハンドルをクローズしそれを新しいファイルに再オープンすると、親プ
ロセスに戻るが実行されて親プロセスに戻った時、元の標準出力チャンネルはまだ有効で
す。

●61H _JOIN    親プロセスに戻る

   設定 B 親のプロセスIDまたは0
  戻り値 A エラー
      B 子プロセスからの1次エラーコード
      C 子プロセスからの2次エラーコード

 指定の親プロセスに戻り、子プロセスが終了したエラーコードをBに入れ、子プロセス
からの2次エラーコードをCに入れてリターンします。親プロセスと子プロセスの関係は常
に1対1ですが、適切なプロセスIDを与えることでいくつかのレベルを飛越えて戻ることが
できます。
 子プロセスのファイルハンドルのセットは自動的にクローズされ、親プロセスのファイ
ルハンドルのセットが再びアクティブになります。子プロセスが割り当てていた全てのユ
ーザーRAMセグメントも開放されます。
 プロセスIDが0であると部分的にシステムの再初期化が実行されます。全てのファイル
ハンドルがクローズされ、標準入出力が再オープンされ、全てのユーザーセグメントが開
放されます。この後では、コマンドインタプリタは正しい状態ではないためユーザープロ
グラムはコマンドインタプリタに戻ろうとするならこれを行ってはなりません。
 このファンクションコールを0F37DHを通して実行されると、B及びCレジスタはエラーコ
ードを返さないことに注意して下さい。これは、プログラムの終了や中断の処理はアプリ
ケーションプログラムによって実行されなければならないからです。エラーコードはアボ
ートルーチンに渡されており、そこにあるプログラムが必要ならばエラーコードを記憶し
ていなければなりません。1次及び2次エラーコードの意味については「エラーコードを伴
った終了」ファンクションも参照して下さい。

●62H _TERM    エラーコードを伴った終了

   設定 B 終了のエラーコード
  戻り値 なし

 指定されたエラーコードでプログラムを終了させますが、このコードはエラーなしを示
す0であっても構いません。このファンクションはユーザーのアボートルーチンが戻るよ
うに設定されていない限り呼び出し側に戻ることはありません。このファンクションの操
作は0005Hを通ってMSX-DOSの環境からコールされたのかF37DHを通ってDisk BASICの環境
からコールされたのかによって異なります。
 0005Hを通ってコールされた場合、ユーザーのアボートルーチンが定義されていると指
定のエラーコードと0の2次エラーコードをもってコールされます。このルーチンがリター
ンするかユーザーのアボートルーチンが定義されていないかすると、制御は0000Hへのジ
ャンプを経由して外部プログラムをロードしたルーチンへ戻されます。これはほとんど常
にコマンドインタプリタですが、場合によっては別の外部プログラムの場合もあります。
エラーコードはシステムによって記憶され、次の「親プロセスに戻る」ファンクションが
このエラーコードを返します。
 F37DHを通ってDisk BASICの環境からコールされると、制御はBREAKVECTのアボートベク
タへ渡されます。この環境では別に定義されたユーザーのアボートルーチンはなく「親プ
ロセスに戻る」はエラーコードを返さないため、エラーコードはBREAKVECTにあるコード
によって記憶されなければなりません。

●63H _DEFAB   アボート終了ルーチンの定義

   設定 DE アボート終了ルーチンのアドレス
        0000Hで定義解除
  戻り値 A 0(エラーを返すことはない)

 MSX-DOSの環境で0005Hを通してコールされた時に利用できます。
 外部プログラムが何らかの理由で終了しようとしている時には必ずシステムによってア
ボートルーチンがコールされます。0000Hへのジャンプでシステムに戻ろうとした場合は
コールされません。MSX-DOS2のために書かれたプログラムは0000Hへのジャンプではなく
「エラーコードを伴った終了」ファンクションで終了しなければなりません。
 ユーザーのアボートルーチンは、ユーザーのスタックをアクティブにしファンクション
コールが行われた時と同じようにIX、IY、と裏レジスタセットをセットし、TPA全体をペ
ージングして起動されます。終了エラーコードはAレジスタ、2次エラーコードはBレジス
タでルーチンに渡され、ルーチンがRETを実行するとA及びBに渡された値が「親プロセス
に戻る」ファンクションで返されるべきエラーコードとしてストアされます。ルーチンは
リターンせずに外部プログラム中のなんらかのウォームスタートコードへジャンプしても
構いません。システムは完全に安定した状態にあって、どのようなファンクションコール
も受け付けることができます。
 アボートルーチンが単純にリターンせず、POP HL:RETを実行すると制御はエラーが起こ
ったMSX-DOSコールまたはBIOSコールのすぐ次の命令に渡ります。これは、「ディスクエ
ラー処理ルーチンの定義」と共に使用すると有用で、ディスクエラーが起こった時に現在
のMSX-DOSコールをアボートすることができます。

●64H _DEFER   ディスクエラー処理ルーチンの定義

   設定 DE ディスクエラールーチンのアドレス
        0000Hで定義解除
  戻り値 A 0(エラーは発生しない)

 ディスクエラーが起こった場合にコールされるユーザーのルーチンのアドレスを指定し
ます。TPA全体がページングしてルーチンは起動されますが、ページ3のシステムスタック
がアクティブになり、MSX-DOSのファンクションコールが実行された時のレジスタは保存
されません。
 エラールーチンはMSX-DOSのコールを実行できますが、エラーの再起を避けるように注
意しなければなりません。ファンクション一覧に安全に実行できるファンクションコール
が示してあります。標準入出力がリダイレクトされている場合、このルーチンは一時的に
無効にした状態でコールされます。
 ルーチン自体のパラメータと結果を下に示します。
 IX、IYおよび裏レジスタセットを含む全てのレジスタは破壊できますが、ページングと
スタックは保存しなければなりません。ルーチンはシステムに返らなければならず、外部
プログラムにジャンプしてはなりません。外部プログラムに処理を渡すためには、A=1(ア
ボート)を返すことによって、ユーザーのアボートルーチンに制御を渡してアボートルー
チン内で必要な処理を行うようにします。

 ディスクエラールーチン

   設定 A エラーの原因となったエラーコード
      B 物理ドライブ
      C b0 書き込みでセット
        b1 無視の処理が望ましくない時セット
        b2 オートアボートを指示する時セット
        b3 セクタ番号が有効の時セット
      DE セクタ番号(Cのb3がセットされている場合)
  戻り値 A 0 システムエラールーチンのコール
        1 アボート
        2 再試行
        3 無視

●65H _ERROR   直前のエラーコードの獲得

   設定 なし
  戻り値 A 0
      B 直前のファンクションコールからのエラーコード

 前のMSX-DOSファンクションコールが失敗した原因のエラーコードを見付けることがで
きます。これは、エラーコードを返さない古いCP/M互換のファンクションで使用するため
のものです。

●66H _EXPLAIN エラーコードの説明

   設定 B  説明すべきエラーコード
      DE 64バイトの文字列バッファへのポインタ
  戻り値 A  0
      B  0あるいは変更無し
      DE エラーメッセージが入る

 MSX-DOSのファンクションから返されるエラーコードについてのASCIIZ説明文字列を得
ることができます。エラーが旧来のファンクションの物である場合は、「直前のエラーコ
ードの獲得」でエラーコードを得なければなりません。
 エラーの説明文字列は、システムの言語仕様に基づいたメッセージとなります。
 エラーコードが内部の説明文字列を持っている場合はBが0にセットされ、説明文字列が
ないとBは変更されず、返されるメッセージは"システムエラー 194"(40H〜FFH)あるいは
"ユーザーエラー 45"(00H〜3FH)といったものになります。

●67H _FORMAT  ディスクのフォーマット

   設定 B           ドライブ番号(0:カレント、1:A・・・8:H)
      A 00H     選択文字列を返す
        01H〜09H この選択をフォーマットする
        FEH,FFH  ブートセクタの更新
      HL          バッファへのポインタ(A=1〜9の場合)
      DE          バッファのサイズ(A=1〜9の場合)
  戻り値 A  エラー
      B  選択文字列のスロット(エントリでA=0の場合)
      HL 選択文字列のアドレス(エントリでA=0の場合)

 DEとHLはディスクドライバによって使用されるバッファ領域を指定します。必要なサイ
ズはわからないので可能な限る大きくするのが最良の方法です。バッファがページ境界を
またぐと、ディスクドライバには一つのページ中の最大の部分を選択して渡されます。
 A=FFHの場合、ディスクは実際にはフォーマットされませんが、ディスクに新しいブー
トセクタを書き込みMSX-DOS2ディスクにします。これは以前のMSX-DOSのディスクをボリ
ュームIDを持つように更新してそれによってMSX-DOS2で可能な完全なディスク検査とファ
イルの復活を可能にするためです。A=FEHはディスクパラメータのみを正しく更新し、ボ
リュームIDでブートプログラムを重ね書きすることはありません。
 ブートセクタの更新は、「フォーマットの選択の獲得」(A=0)を実行した後でなければ
ならず、これがエラーを返した場合はこれがフォーマットできないドライブで、ディスク
はブートセクタの更新で損傷されることがあり、更新を行ってはなりません。

●68H _RAMD    RAMディスクの作成あるいは消去

   設定 B 00H    RAMディスクの消去
        1〜FEH 新しいRAMディスクの作成
        FFH    RAMディスクのサイズを返す
  戻り値 A エラー
      B RAMディスクのサイズ

 サイズは16KBのセグメントを単位として指定します。Bが1〜FEHの場合、既にRAMディス
クが存在する場合や未使用セグメントが一つもない場合はエラーが返されます。

●69H _BUFFER  セクタバッファの割り付け

   設定 B 0      バッファ数を返す
        1〜FFH 要求するバッファ数
  戻り値 A エラー
      B バッファの現在の数

 セクタバッファは最低でも2必要です。バッファは通常の64KBの外のセグメントを使用
するため、TPAを減少させることはありません。バッファが多ければ、より多くのFATとデ
ィレクトリセクタを常駐させておけます。バッファの最大数は20程度になります。

●6AH _ASSIGN  論理ドライブの割り当て

   設定 B 論理ドライブ番号(1:A・・・8:H)
      D 物理ドライブ番号(1:A・・・8:H)
  戻り値 A エラー
      D 物理ドライブ番号(1:A・・・8:H)

 論理-物理ドライブの割り当てを制御します。
 BとDがどちらも0でないと、新しい割り当てがセットアップされます。Bが0でなくDが0
であるとBで指定した論理ドライブについての割り当てがキャンセルされます。BとDが両
方0であると、全ての割り当てがキャンセルされます。Bが0でなくDがFFHであると、Bで指
定した論理ドライブについての現在の割り当てがDに返されます。
 ディスクエラールーチンに渡されるドライブ番号は物理番号であるため、対応する論理
ドライブと異なる場合があります。

●6BH _GENV    環境変数の獲得

   設定 HL ASCIIZ名前文字列へのポインタ
      DE 値のためのバッファへのポインタ
      B  バッファサイズ
  戻り値 A  エラー
      DE 保存される、A=0の場合バッファが満たされる

 指定された環境変数名の現在の値を獲得します。環境変数の大文字、小文字の違いは無
視されます。その名前の環境変数が存在しないとヌルが返されます。バッファが小さいと
値の文字列は最後のヌルを付けずに切り捨てられ、エラーが返されます。
 255バイトのバッファは常に十分な大きさを持つことになります。

●6CH _SENV    環境変数のセット

   設定 HL ASCIIZ名前文字列へのポインタ
      DE ASCIIZ値文字列へのポインタ
  戻り値 A エラー

 新しい環境変数をセットします。環境変数の大文字、小文字の違いは無視されます。
 環境変数が有効で、格納するのに十分なメモリがある場合、同じ名前の古い変数が削除
され、新しい変数が環境リストの最初に追加されます。値文字列がヌルだと環境変数は削
除されます。

●6DH _FENV    環境変数の検索

   設定 DE 環境変数番号
      HL 名前文字列のバッファへのポインタ
      B  バッファサイズ
  戻り値 A  エラー
      HL 保存され、バッファが満たされる

 どのような環境変数が現在セットされているかを知るために使用されます。DEの環境変
数番号はリスト中のどの変数を検索するかを示します。最初の環境変数がDE=1に対応しま
す。変数番号<DE>が存在すると、その変数の名前文字列がHLによってさされるバッファ中
にコピーされます。バッファが小さすぎる場合には、名前は最後のヌルなしで切り捨てら
れ、エラーが返されます。255バイトのバッファは常に十分な大きさを持ちます。変数番
号<DE>が存在しないと、ヌル文字列が返されます。

●6EH _DSKCHK  ディスク検査ステータスの獲得・セット

   設定 A 00H ディスク検査ステータスの獲得
        01H ディスク検査ステータスのセット
      B 00H 有効(A=01Hの場合)
        FFH 無効(A=01Hの場合)
  戻り値 A エラー
      B 現在のディスク検査設定

 ディスク検査変数はファイルハンドル、FIBあるいはFCBがアクセスされるたびにディス
クが変更されたがどうかを見るためにディスクのブートセクタをシステムが再チェックす
るかどうかを制御します。有効であると、処理の最中にディスクを交換することによって
間違ったディスクに誤ってアクセスすることができなくなりますが、有効でない場合には
ディスクを破壊する場合もあります。ディスクインターフェースのタイプによって異なり
ますが、この機能を有効にする場合に若干余分なオーバーヘッドがある場合があります。
しかし、ほとんどのタイプのディスクでは処理時間に変わりはなく、これによって安全性
が確保されます。
 デフォルトでは有効です。

●6FH _DOSVER  MSX-DOSのバージョン番号の獲得

   設定 なし
  戻り値 A  エラー(常に0)
      BC MSX-DOSのカーネルバージョン
      DE MSXDOS2.SYSのバージョン番号

 MSX-DOSのバージョンを判断することができます。2つのバージョン番号が返され、BCに
ROM中のMSX-DOSのカーネルバージョンが、DEにMSXDOS2.SYSシステムファイルのバージョ
ンが入ります。これらのバージョン番号のどちらも上位バイトに主バージョン番号、下位
バイトに2桁のバージョン番号がBCD値で入っています。例えばバージョン番号2.34は0234
Hと表現されます。
 MSX-DOS1との互換性のためにこのファンクションを利用するためには次の手順が必要で
す。ます、エラーが存在する(A<>0)場合はこれはMSX-DOSではありません。次にBが2未満
であるとシステムは2.00以前のものでCとDEレジスタは不定となります。Bが2以上の場合B
CとDEはは上記のように指定することができます。
 通常、この手順の後、チェックされなければならないバージョン番号はDEのMSXDOS2.SY
Sのバージョンです。

●70H _REDIR   リダイレクションの状態の獲得・セット

   設定 A 00H リダイレクション状態の獲得
        01H リダイレクション状態のセット
      B 新しい状態
        b0 標準入力
        b1 標準出力
  戻り値 A エラー
      B コマンド以前のリダイレクションの状態

 主にディスクエラールーチンやリダイレクションに関係なくコンソールに常に出力され
なければならないその他のI/Oのために提供されています。
 A=1、B=0としてコールすることによって一時的にリダイレクションを無効にすることが
できます。
 このようにリダイレクションを変更すると、システムはいくぶん不安定な状態となり、
多くのファンクションコールがこのファンクションを無効にしてリダイレクションをその
実際の状態にリセットします。通常、オープン、クローズ、複製等といった、ファイルハ
ンドルを操作する全てのファンクションコールはリダイレクションの状態をリセットしま
す。したがってこのファンクションの効果は完全に一時的なものです。


   第6章 MSX-DOS2エラーコード表

 MSX-DOS2では新設されたファンクションコールからエラーコードが返され、旧来のファ
ンクションでは「直前のエラーコードの獲得」ファンクションコール(65H)でエラーコー
ドを得ることができます。エラーコードが0の場合はエラーが発生していない状態を示し
ますが、それ以外の値の場合はエラーコードがエラーの種類を表しています。
 エラーコードは0FFHから始まり、値が小さくなっていきます。40H未満のエラーコード
はユーザーエラーで、システムでは使用されず、外部プログラムが独自のエラーを返すた
めに使用できます。また、コマンドインタプリタは20H未満のユーザーエラーにはメッセ
ージを出力しません。
 以下にエラーコードとニーモニック、メッセージおよび意味を示します。


    6.1 ディスクエラー

 ディスクエラー処理ルーチンに渡されるエラーコードです。またディスクのフォーマッ
トでも返されます。

FFH .NCOMP  このディスクは使用できません            Incompatible disk
 そのドライブではアクセスできないディスクをアクセスした。

FEH .WRERR  書き込み異常です                   Write error
 ディスク書き込み中のエラー。

FDH .DISK   ディスクが異常です                  Disk error
 原因不明のディスクエラー。

FCH .NRDY   ディスクが入っていません               Not ready
 ディスクドライブが応答しない(通常、ディスクが入っていないことを表す)。

FBH .VERFY  正しく書き込まれませんでした            Verify error
 ベリファイで書き込み後にセクタが正しく読み込めなかった。

FAH .DATA   ディスクのデータが異常です              Data error
 セクタが読めなかった(CRCエラー)。ディスクの損傷を表す。

F9H .RNF    セクターが見つかりません               Sector not found
 セクタがディスク上に見つからなかった。ディスクの損傷を表す。

F8H .WPROT  ディスクが書き込み保護されています       Write protected disk
 書き込み禁止状態のディスクに書き込もうとした。

F7H .UFORM  ディスクがフォーマットされていません     Unformatted disk
 ディスクがフォーマットされていない。

F6H .NDOS   MSX-DOSディスクではありません         Not a DOS disk
 ディスクのフォーマットがMSX-DOSではアクセスできない。

F5H .WDISK  ディスクが違います             Wrong disk
 ディスクが別のディスクに交換された。正しいディスクに交換しなければならない。

F4H .WFILE  このファイル用のディスクではありません   Wrong disk for file
 ファイルのオープン中に違うディスクに交換された。正しいディスクに交換する。

F3H .SEEK   シークエラー                Seek error
 ディスクの要求されたトラックが見つからない。

F2H .IFAT   FAT異常です                 Bad file allocation table
 FATが破壊されている。

F1H .NOUPB
 ディスク交換処理の一部としてDOSの内部で処理されるのでユーザーには返らない。

F0H .IFORM  このドライブはフォーマットできません   Cannot format this drive
 フォーマットできないドライブをフォーマットしようとした。


    6.2 MSX-DOSファンクションエラー

 通常にMSX-DOSのファンクションコールで返されるエラーです。

DFH .INTER  DOSが異常です                Internal error
 起こってはならないエラー。

DEH .NORAM  メモリー不足です              Not enough memory
 カーネルデータセグメントのデータを使いつくした。セクタバッファを減らすか環境変
数を減らして下さい。
 RAMディスクのための未使用セグメントがない。

DCH .IBDOS  無効なMSX-DOSファンクション番号です     Invalid MSX-DOS call
 不正なファンクション番号でファンクションコールが行われた。
 大部分の不正なファンクションコールはエラーを返しませんが、このエラーは「直前の
エラーコードの獲得」で返される場合がある。

DBH .IDRV   無効なドライブ名です            Invalid drive
 指定のドライブが存在していない。

DAH .IFNM   不正なファイル名です            Invalid filename
 ファイル名文字列が不正です。ドライブ・パス・ファイル文字列には返されません。

D9H .IPATH  無効なパス名です              Invalid pathname
 ASCIIZドライブ・パス・ファイル文字列が渡されるファンクションコールによって返さ
れる場合があります。文字列の構文が何らかの形で不正です。

D8H .PLONG  パス名が長過ぎます             Pathname too long
 ASCIIZドライブ・パス・ファイル文字列が渡されるファンクションコールによって返さ
れる場合があります。指定された完全なパスが63文字より長いです。使用されている場合
はカレントディレクトリも含みます。

D7H .NOFIL  ファイルが見つかりません          File not found
 ファイルが見つかりません。ディレクトリが指定されて、それが見つからなかった場合
にも返されます。

D6H .NODIR  ディレクトリが見つかりません        Directory not found
 ドライブ・パス・ファイル文字列中のディレクトリが見つからなかった。

D5H .DRFUL  ルートディレクトリがいっぱいです      Root directory full
 ルートディレクトリ中に空きエントリがないのに新しいエントリが要求されました。

D4H .DKFUL  ディスクがいっぱいです           Disk full
 書き込まれようとするデータに対してディスクに十分な領域がありません。

D3H .DUPF   ファイル名が重複しています         Duplicate filename
 目的のファイル名が既に目的のディレクトリ中にあります。

D2H .DIRE   ディレクトリが移動できません        Invalid directory move
 サブディレクトリをそれ自体の下に移動しようとしました。

D1H .FILRO  ファイルが読み出し専用です         Read only file
 読み出し専用ファイルに書き込みあるいは削除をしようとしました。
D0H .DIRNE  ディレクトリが空ではありません       Directory not empty
 空でないサブディレクトリを削除しようとしました。

CFH .IATTR  無効な属性です               Invalid attributes
 ファイルの属性を不正な方法で変更しようとしたか、サブディレクトリに対してのみ可
能な処理をファイルに行おうとした場合に起こります。また、ボリューム名のFIBの不正
な使用によっても起こります。

CEH .DOT    .や..に対しては操作できません         Invalid . or .. operation
 サブディレクトリ中の"."や".."に対して不正な操作をしようとしました。

CDH .SYSX   システムファイルが既にあります       System file exists
 既存のシステムファイルと同じ名前のファイルあるいはサブディレクトリを作成しよう
としました。システムファイルは自動的には削除されません。

CCH .DIRX   ディレクトリが既にあります         Directorty exists
 既存のサブディレクトリと同じ名前のサブディレクトリを作成しようとしました。

CBH .FILEX  ファイルが既にあります           File exists
 既存のファイルと同じ名前のサブディレクトリを作成しようとしました。

CAH .FOPEN  ファイルが使用中です            File is already in use
 そのファイルに対して、既にオープンされているファイルハンドルがあるファイルの削
除、名前の変更、移動、あるいは属性や日付や時刻の変更をそのファイルハンドルを使用
せずに行おうとしました。

C9H .OV64K  64Kを越える転送はできません         Cannot transfer above 64K
 ディスク転送領域が0FFFFHを越えてしまいます。

C8H .FILE   ファイルの割当異常です           File allocation error
 ファイルのクラスタチェインが破壊されました。

C7H .EOF    ファイルの終わりです            End of file
 ファイルポインタが既にエンドオブファイルにある、あるいはそれを越えている場合に
さらにファイルから読み込もうとしました。

C6H .ACCV   ファイルアクセス異常です          File access violation
 適切なアクセスビットをセットしてオープンされたファイルハンドルに対して読み出し
や書き込みを行おうとしました。

C5H .IPROC  無効なプロセスIDです            Invalid process id
 「親プロセスに戻る」で渡されたプロセスIDが不正です。

C4H .NHAND  ファイルハンドルが足りません        No spare file handles
 全てのファイルハンドルがすでに使用中である場合にファイルハンドルをオープンある
いは作成しようとしました。

C3H .IHAND  無効なファイルハンドルです         Invalid file handle
 指定のファイルハンドルが、システムで許される最大のファイルハンドル番号より大き
いです。

C2H .NOPEN  ファイルハンドルがオープンされていません File handle not open
 指定のファイルハンドルは現在オープンされていません。

C1H .IDEV   無効なデバイスオペレーションです     Invalid device operation
 デバイスのファイルハンドルやFIBを検索や移動などの不正な操作に使用しようとしま
した。

C0H .IENV   無効な環境変数です            Invalid environment string
 環境変数名の文字列に不正な文字があります。

BFH .ELONG  環境変数が長過ぎます           Environment string too long
 環境変数名あるいはその値の文字列が最大の255文字の長さを越えた、あるいは長すぎ
てユーザーバッファが足りません。

BEH .IDATE  無効な日付です              Invalid date
 「日付のセット」に渡されたパラメータが不正です。

BDH .ITIME  無効な時間です              Invalid time
 「時刻のセット」に渡された時刻が不正です。

BCH .RAMDX  RAM DISK(ドライブ H:)は既にあります    RAM disk(drive H:)
                           already exists
 RAMディスクが既に存在しているのにRAMディスクを作成しようとしました。

BBH .NRAMD  RAM DISKがありません           RAM disk does not exist
 RAMディスクが存在していない時にRAMディスクを削除しようとした。

BAH .HDEAD  ファイルが消去されています        File handle
                           has been deleted
 ファイルハンドルに関連したファイルが削除されたためファイルハンドルはもう使用で
きません。

B9H .EOL
 起こってはならない内部エラー

B8H .ISBFN  無効なサブファンクション番号です     Invalid sub-function
                           number
 「デバイスI/Oの制御」に渡されたサブファンクション番号が不正です。

B7H .IFCB   無効なFCBです               Invalid File Control Block
 FCBを使ったファイルアクセスの際、_FOPENなどをコールせずに無効なFCBを使用して読
み書きした際に起きるエラーです。


    6.3 プログラム終了エラー

 以下のエラーコードはシステムによって内部的に生成され、「中断」ルーチンに渡され
るエラーです。通常ファンクションコールからは返されません。中断ルーチンには外部プ
ログラムが「エラーコードを伴った終了」に渡す任意のエラーが渡されることに注意して
下さい。

9FH .STOP   Ctrl-STOPが押されました          Ctrl-STOP pressed
 "Ctrl-STOP"キーは、全ての文字I/Oなどのほとんどのシステムコールでチェックされま
す。

9EH .CTRLC  Ctrl-Cが押されました           Ctrl-C pressed
 "Ctrl-C"は、ステータスチェックを実行する文字ファンクションの場合にのみチェック
されます。

9DH .ABORT  ディスク入出力が打ち切られました     Disk operation aborted
 このエラーはディスクエラーがユーザーによってあるいはシステムによって自動的に中
断された時に起こります。元のディスクエラーコードは2次エラーコードとしてBレジスタ
から中断ルーチンに渡されます。

9CH .OUTERR 標準出力でエラーが起きました       Error on standard output
 標準出力チャンネルが文字ファンクションを通してアクセスされている間にエラーが起
こった場合に返されます。元のエラーコードは2次エラーコードとしてBレジスタから中断
ルーチンに渡されます。このエラーは通常、プログラムが標準ファイルハンドルを変更し
ている場合にのみ起こります。

9BH .INERR  標準入力でエラーが起きました       Error on standard input
 標準入力チャンネルが文字ファンクションを通してアクセスされている間に、エラーが
起こった場合に返されます。元のエラーコードは2次エラーコードとしてBレジスタから中
断ルーチンに渡されます。このエラーは通常、プログラムが標準ファイルハンドルを変更
している場合にのみ起こります。


    6.4 コマンドエラー

 以下のエラーはDOSのファンクションコールからは返されませんが、コマンドインタプ
リタによって使用されます。これらは、外部プログラムから利用できますので、ここにの
せてあります。

8FH .BADCOM コマンドのバージョンが違います      Wrong version of command
 COMMAND2.COMがディスクからその非常駐部分をロードしたが、そのチェックサムが期待
通りの値ではありません。

8EH .BADCM  コマンドが違います            Unrecognized command
 指定のコマンドが内部コマンドでなく、その名前のCOMおよびBATファイルも見つかりま
せんでした。

8DH .BUFUL  コマンドが長すぎます           Command too long
 バッチファイル中のコマンドが127文字の長さを越えています。

8CH .OKCMD
 コマンド行で渡したコマンドが終了した際に返される内部エラーコード。

8BH .IPARM  無効なパラメータです           Invalid parameter
 コマンドへのパラメータが何らかの形で不正です。

8AH .INP    パラメータが多すぎます          Too many parameters
 コマンドが要求する全てのパラメータを解析した後で、コマンド行上にまだ区切り文字
でない文字が残っています。

89H .NOPAR  パラメータが不足しています        Missing parameter
 パラメータがあるべきところでエンドオブラインが見つかりました。

88H .IOPT   無効なオプションです           Invalid option
 コマンド行で/の後に指定された文字はそのコマンドでは不正です。

87H .BADNO  無効な数値です              Invalid number
 数値が求められているところに数字以外の文字が入っています。

86H .NOGELP HELPファイルが見つかりません       File for HELP not found
 ヘルプファイルが見つからなかった、あるいはパラメータが有効なHELPパラメータでは
ありませんでした。

85H .BADVER MSX-DOSのバージョンが違います      Wrong version of MSX-DOS
 このエラーはコマンドインタプリタで使用されることはありません。コマンドインタプ
リタでこのエラーが発生した場合は自分自身でもっているメッセージを使用します。しか
し、このエラーを返すことが有用な場合には外部プログラムで使用できます。

84H .NOCAT  複写先ファイルは結合できません      Cannot concatenate
                           destination file
 CONCATコマンドの目的のファイルがソースの指定に一致しています。

83H .BADEST ファイルが作成できません         Cannot create
                           destination file
 COPYコマンドで目的のファイルが作成されるとソースファイルの一つを重ね書きしてし
まいます。
82H .COPY   自分自身にはコピーできません       File cannot be copied
                           onto itself
 COPYコマンドで目的のファイルが作成されるとソースファイルを重ね書きされてしまい
ます。

81H .OVDEST ファイルの重ね書きができません      Cannot overwrite previous
                           destination file
 COPYコマンドでワイルドカードを使ったソースがワイルドカードを使っておらずディレ
クトリでなく、デバイスでもない目的ファイルとともに指定されました。


  80H〜7EHにもメッセージがありますが、マニュアルには書いてないので使わない方がい
いでしょう。


   参考 CP/MのFCB

 参考までに、CP/MでのFCBの内容を紹介します。
 CP/Mでは、MSX-DOSでいうところのFATは、ファイル毎にFCB内部に記録され、ディスク
にもそれが記録されます。このために、ディスクアロケーションマップという領域がFCB
内に存在しています。この部分はMSX-DOSでは他の用途に使われています。
 CP/MのFCBは36バイトですが、MSX-DOSでは37バイト使用する場合があります。CP/M互換
のファンクションコールでは36バイトしか使用しません。

 FCBの内容(CP/M)

+00,1  ドライブ番号
+01,8  ファイル名
+09,3  ファイル形式
+12,1 ファイル・エクステント番号(通常0)
+13,2 システム用にとってある
+15,1 レコードカウント、あるいは現在のエクステントサイズ
+16,16 ディスクアロケーションマップ
+32,1  カレントレコード
+33,3  ランダムレコード番号(下位バイトが先)_
_





※個人的以外の使用および無断転載を禁止します。

Copyright(C) 1996 by ASCAT All rights reserved.

ホームページに戻る 目次に戻る