*第7章 PC−Engine ファイルシステム [#qaa0f9b6]
 
 #setlinebreak(on)
 
 *7.1 INT 21H システムファンクションコール [#ubc038f4]
 
 【ファンクション 0EH】
 
 機能  デフォルト・ドライブの選択
 
 入力  AH=0EH
     DL=デフォルトに使用するドライブ番号(A:0,B:1,‥‥‥‥)
 
 出力  AL=接続ドライブ数
 
 破壊  AL,CF
 
 説明  DLで指定されたドライブをデフォルト・ドライブとして採用します。この設
     定は、パス名のドライブ指定を省略した場合などに有効となります。また現在
     接続されているドライブの総数をALに返します。
 
 
 【ファンクション 19H】
 
 機能  デフォルト・ドライブの取得
 
 入力  AH=19H
 
 出力  AL=デフォルト・ドライブの番号(A:0,B:1,‥‥‥)
 
 破壊  AL,CF
 
 説明  デフォルト・ドライブとして選択されているドライブの番号をALに返します。
 
 
 
 【ファンクション 1AH】
 
 機能  システム情報エリアの設定
 
 入力  AH=1AH
     DX=システム情報エリアの開始オフセットアドレス
     DS=システム情報エリアの開始セグメントアドレス
 
 出力  −−−−
 
 破壊  CF
 
 説明  システム情報エリアのアドレスを設定します。このエリアは、ファンクション
     4EH,4FHでファイルの検索を行う時などに有効です。デフォルトエリア
     としては、プロセスコントローラのオフセット80Hが用いられます。このエ
     リアにデータを転送する場合、システムは上で設定したDSの値をそのまま用
     いますので、DXにはラップ・アラウンドを起こさない範囲の値を指定する必
     要があります。現在のシステム情報エリアのアドレスは、ファンクション2F
     Hを用いて取得することができます。
 
 
 
 【ファンクション 1BH】
 
 機能  デフォルト・ドライブ・データの取得
 
 入力  AH=1BH
 
 出力  AL=1クラスタ当たりのセクタ数
     CX=1セクタ当たりのバイト数
     DX=1ドライブ当たりのクラスタ数
     BX=メディアIDの格納領域のオフセットアドレス
     DS=メディアIDの格納領域のセグメントアドレス
 
 破壊  AX,BX,CX,DX,DS,CF
 
 説明  デフォルト・ドライブの物理情報を各レジスタに返します。またメディアID
     を格納しているエリアのアドレスをDS:BXに返します。メディアIDと、
     対応するディスクのフォーマットは以下のようになります。
 
     ID  タイプ セクタ長    セクタ/トラック ディスク容量
 
     01H 2D  256バイト  16セクタ    320KB
     02H 2HD 256バイト  26セクタ    1MB
 
     F9H 2DD 512バイト  9セクタ     720KB
     FBH 2DD 512バイト  8セクタ     640KB
     FDH 2D  512バイト  9セクタ     360KB
     FEH 2HD 1024バイト 8セクタ     1.2MB
     FFH 2D  512バイト  8セクタ     320KB
 
     D0H HD  −−−−    −−−−     5MB
     D1H HD  −−−−    −−−−     10MB
     D2H HD  −−−−    −−−−     20MB
     D3H HD  −−−−    −−−−     40MB
 
 参考  似たファンクションとして、ファンクション1CH,36Hがあります。
 
 
 
 【ファンクション 1CH】
 
 機能  ドライブ・データの取得
 
 入力  AH=1CH
     DL=ドライブ番号(デフォルト:0,A:1,B:2,‥‥‥)
 
 出力  AL=FFH:無効なドライブ
        その他:1クラスタ当たりのセクタ数
     CX=1セクタ当たりのバイト数
     DX=1ドライブ当たりのクラスタ数
     BX=メディアIDの格納領域のオフセットアドレス
     DS=メディアIDの格納領域のセグメントアドレス
 
 破壊  AX,BX,CX,DX,DS,CF
 
 説明  DLで指定されたドライブの物理情報を各レジスタに返します。指定されたド
     ライブが存在しない場合、ALにFFHを返します。この時AL以外のレジス
     タは意味を持ちません。ドライブが存在する場合、各レジスタにドライブの物
     理情報を返します。またメディアIDを格納しているエリアのアドレスをDS
     :BXに返します。メディアIDと、対応するディスクのフォーマットは以下
     のようになります。
 
     ID  タイプ セクタ長    セクタ/トラック ディスク容量
 
     01H 2D  256バイト  16セクタ    320KB
     02H 2HD 256バイト  26セクタ    1MB
 
     F9H 2DD 512バイト  9セクタ     720KB
     FBH 2DD 512バイト  8セクタ     640KB
     FDH 2D  512バイト  9セクタ     360KB
     FEH 2HD 1024バイト 8セクタ     1.2MB
     FFH 2D  512バイト  8セクタ     320KB
 
     D0H HD  −−−−    −−−−     5MB
     D1H HD  −−−−    −−−−     10MB
     D2H HD  −−−−    −−−−     20MB
     D3H HD  −−−−    −−−−     40MB
 
 参考  似たファンクションとして、ファンクション1BH,36Hがあります。
 
 
 
 【ファンクション 25H】
 
 機能  割込みベクタの設定
 
 入力  AH=25H
     AL 割込みタイプ番号
     DX 割込み処理ルーチンの開始オフセットアドレス
     DS 割込み処理ルーチンの開始セグメントアドレス
 
 出力  −−−−
 
 破壊  CF
 
 説明  指定された割込みベクタの内容を変更します。具体的には、ALで与えられた
     割込みタイプに該当するベクタ領域に、DS:BXで指定された割込み処理ル
     ーチンのアドレスをセットします。通常、割込みベクタを変更する場合には、
     そのベクタがすでに使用されているかどうかをチェックする必要があります。
     もし使用されている場合、ユーザはまずファンクション35Hにより旧割込み
     ベクタの値を読出し、それが新たな割込み処理ルーチンの出口となるように、
     ルーチンを組む必要があります。
 
 
 
 【ファンクション 2EH】
 
 機能  リードアフタライトモードのセット/リセット
 
 入力  AH=2EH
     AL=00H:リードアフタライトの解除
        01H:リードアフタライトの設定
 
 出力  −−−−
 
 破壊  CF
 
 説明  レジスタALの値に応じて、リードアフタライトモードの設定/解除を行いま
     す。ALが00Hの場合、ディスクへデータを書込むだけで処理を終了するモ
     ードが選択されます。またALが01Hの場合、ディスクへデータを書込んだ
     後、チェックリードにより結果を確認するモードが選択されます。このモード
     は、ディスクに重要なデータを書込む際、その信頼性を向上させるのに有効で
     す。ただし処理時間が2倍近くになるため、使用時には使い分けが必要です。
     またデフォルトのモードはオフ状態に設定されます。
 
 
 
 【ファンクション 2FH】
 
 機能  システム情報エリアのアドレスの取得
 
 入力  AH=2FH
 
 出力  BX=システム情報エリアの開始オフセットアドレス
     ES=システム情報エリアの開始セグメントアドレス
 
 破壊  BX,ES,CF
 
 説明  ファンクション1AHで設定した、システム情報エリアのアドレスを返します。
     プロセス実行開始後、一度も1AHが発行されていない場合、デフォルト値と
     してプロセスコントローラのオフセット80Hのアドレスを返します。
 
 
 
 【ファンクション 31H】
 
 機能  プロセスの常駐終了
 
 入力  AH=31H
     AL=プロセス出力コード
     DX=常駐するメモリのパラグラフサイズ
 
 出力  ファンクション4BH実行時のレジスタ(CFを除く)
 
 破壊  全レジスタ
 
 説明  メモリを解放せずにプロセスを終了します。DXには在駐するメモリエリアの
     パラグラフサイズが、またALにはプロセスの出力コードが設定されていなけ
     ればなりません。EXE形式のファイルの場合、一般にプログラムとデータは
     同一セグメントに含まれるとは限りませんので、DXにはデータ領域を含むプ
     ログラム全てのサイズを指定する必要があります。またプログラムの直前には
     100Hバイトのプロセスコントローラが存在するため、実際にDXに設定す
     る値は、このコントローラの大きさを含んでいる必要があります。
     このファンクションは現在のプロセスを終了し、プロセスID(PID)のメ
     モリサイズをDXの値に再設定します。この際、終了プロセスに関連する他の
     メモリアサインは変更しませんので、勝手に他のメモリエリアを解放したりす
     ることはありません。
     またALの出力コードは上位プロセスに情報を引渡すためのもので、ファンク
     ション4DHを通して読出すことができます。
 
 
 
 【ファンクション 33H】
 
 機能  CTRL−Cの検査状態の設定
 
 入力  AH=33H
     AL=00H:CTRL−Cの検査状態の取得
        01H:CTRL−Cの検査状態の設定
     DL=00H:CTRL−Cの検査を禁止(設定時)
        01H:CTRL−Cの検査を許可(設定時)
 
 出力  AL=FFH:ALの指定が無効
        その他:正常終了
     DL=00H:CTRL−Cの検査は禁止(取得時)
        01H:CTRL−Cの検査は許可(取得時)
 
 破壊  AL,DL,CF
 
 説明  INT 21Hシステムコールの各ファンクションにおいて、CTRL−Cの
     検査を行うかどうかを指定します。レジスタALはCTRL−C検査状態の設
     定/取得を制御し、以下のような意味をもっています。
 
     1)AL=00H:CTRL−Cの検査状態をDLに返します。
     2)AL=01H:CTRL−Cの検査状態をDLの指定に変更します。
     3)AL=その他:エラーとなり、ALにFFHを返します。
 
     CTRL−Cの検査が設定され、その入力が検出された場合、システムはプロ
     セスコントローラのCTRL−C抜出しアドレスにもとづく割込みを実行しま
     す。
 
 
 
 【ファンクション 35H】
 
 機能  割込みベクタの取得
 
 入力  AH=35H
     AL=割込みタイプ番号
 
 出力  BX=割込み処理ルーチンの開始オフセットアドレス
     ES=割込み処理ルーチンの開始セグメントアドレス
 
 破壊  BX,ES,CF
 
 説明  指定した割込みベクタのアドレスをES:BXに返します。ALには割込みタ
     イプ番号が設定されている必要があります。このファンクションはファンクシ
     ョン25Hと組になっており、通常はこれら2つのファンクションを用いてベ
     クタの設定/変更を行います。割込みベクタを変更する場合、その処理ルーチ
     ンの抜出しアドレスは、前もってこのファンクションで読出しておいたアドレ
     スに設定すべきです。
 
 
 
 【ファンクション 36H】
 
 機能  ディスクのフリースペースの取得
 
 入力  AH=36H
     DL=ドライブ番号(デフォルト:0,A:1,B:2,‥‥‥)
 
 出力  BX=使用可能なクラスタ数
     DX=1ドライブ当たりのクラスタ数
     AX=FFFFH:無効なドライブ
        その他  :1クラスタ当たりのセクタ数
     CX=1セクタ当たりのバイト数
 
 破壊  AX,BX,CX,DX,CF
 
 説明  指定したドライブの使用可能なクラスタ数および物理情報を返します。DLは
     ドライブ番号を与え、0がデフォルトを、1がドライブAを、2がドライブB
     を指定します。ドライブ指定が無効の場合、AXにFFFFHを返します。そ
     うでなければBXにFATの空きクラスタ数を、またAX,CX,DXにメデ
     ィアの物理情報を返します。
 
 
 
 【ファンクション 39H】
 
 機能  ディレクトリの作成 
 
 入力  AH=39H
     DX=パス名の先頭のオフセットアドレス
     DS=パス名の先頭のセグメントアドレス
 
 出力  CF=1,AX=03H:無効なパス名
             05H:アクセス不可
             0FH:無効なドライブ
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  DS:DXによって指定されたパス名を解析し、対応するサブディレクトリを
     作成します。パス名はASCIZ形式で設定される必要があります。パス中に
     無効な文字が検出された場合、解析を中止してAXにエラー03Hを返します。
     またパス名のドライブ指定が無効な場合、AXにエラー0FHを返します。
     パス中のディレクトリ名、ドライブ名が正常な場合、ドライブ名によって指定
     されたデバイスに対し、サブディレクトリを作成します。具体的には、指定さ
     れたパスに該当するディレクトリセクタ上に、指定されたディレクトリ名でエ
     ントリを作成し、そのエントリ属性をサブディレクトリのそれに設定します。
     またそのエントリに対応するFATクラスタも確保します。さらに確保したク
     ラスタの頭のエントリ領域に、その親ディレクトリ[..]と自分自身のディ
     レクトリ[.]を作成します。
 
 
 
 【ファンクション 3AH】
 
 機能  ディレクトリの削除
 
 入力  AH=3AH
     DX=パス名の先頭のオフセットアドレス
     DS=パス名の先頭のセグメントアドレス
 
 出力  CF=1,AX=03H:無効なパス名
             05H:アクセス不可
             0FH:無効なドライブ
             10H:現在使用中のディレクトリ
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  指定されたサブディレクトリを削除します。DS:DXは削除するサブディレ
     クトリのパス名を示すASCIZ形式の文字列を指していなければなりません。
     削除するパス名が存在しない場合、AXにエラー03Hを返します。また削除
     するパス名がルートディレクトリであるが、ディレクトリが空でないか、属性
     がリードオンリーである場合、アクセスを否定してAXにエラー05Hを返し
     ます。さらに指定されたパスの指すディレクトリがカレント・ディレクトリで
     ある場合、AXにエラー10Hを返します。
     指定されたパスが正常な場合、そのサブディレクトリに対応するディレクトリ
     エントリ、およびFAT上のクラスタチェインを解放します。サブディレクト
     リは、属性が異なるという以外の点では通常のファイルとエントリ構造が等し
     いため、削除の動作はファイルと同様に行われます。
 
 
 
 【ファンクション 3BH】
 
 機能  カレント・ディレクトリの変更
 
 入力  AH=3BH
     DX=パス名の先頭のオフセットアドレス
     DS=パス名の先頭のセグメントアドレス
 
 出力  CF=1,AX=03H:無効なパス名
             05H:アクセス不可
             0FH:無効なドライブ
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  カレント・ディレクトリを変更します。DS:DXは変更するサブディレクト
     リのパス名を示すASCIZ形式の文字列を指していなければなりません。変
     更するパス名が存在しない場合、AXにエラー03Hを返します。
     またパス名が有効である場合、そのディレクトリが新たなカレント・ディレク
     トリとして採用されます。
     パス名でファイルおよびディレクトリを扱う場合、ルートからの文字列の長さ
      (ドライブ指定と最初の¥、および最後のヌル文字を除いた値)は61バイト
     以内でなければなりません。これはディレクトリパス用のシステムバッファが
     この長さまでしかサポートしていないためです。
 
 
 
 【ファンクション 3CH】
 
 機能  ファイルの作成
 
 入力  AH=3CH
     CX=ファイルの属性(ディレクトリエントリの属性)
     DX=パス名の先頭のオフセットアドレス
     DS=パス名の先頭のセグメントアドレス
 
 出力  CF=1,AX=03H:無効なパス名
             04H:オープン不可
             05H:アクセス不可
             0FH:無効なドライブ
     CF=0,AX    :作成・オープンされたファイルのハンドル
 
 破壊  AX,CF
 
 説明  ファイルを作成し、作成したファイルをオープンし、そのハンドルを返します。
     DS:DXは作成するファイルのパス名を示すASCIZ形式の文字列を指し
     ていなければなりません。またCXにはファイルの属性が設定されていなくて
     はなりません。属性はディレクトリエントリのそれと同一の形式を取り、以下
     のようなビット対応になっています。
 
       下位1ビット目:リードオンリー属性
       下位2ビット目:隠れファイル属性
       下位3ビット目:システムファイル属性
       下位4ビット目:ボリュームラベル属性(指定不可)
       下位5ビット目:ディレクトリ属性(指定不可)
       下位6ビット目:保存ファイル属性
 
     同一名のファイルが存在しない場合、ディレクトリ上に新たに指定された属性
     のファイルを形成します。また同一名のファイルが存在する場合、ディレクト
     リエントリを初期化し、不要となったFATチェインを開放します。その後、
     ファイルを読出し/書込みのためにオープンし、ハンドルをAXに返します。
     ただし、指定されたファイルの属性がリードオンリーの場合、読出しのみのオ
     ープンとなります。
     また指定されたパス名が無効な場合、AXにエラー03Hを返します。オープ
     ンするためのハンドルに空きがない場合、AXにエラー04Hを返します。さ
     らにファイルが正常にオープン出来ない場合、もしくはCXの属性に作成不可
     能なもの(ディレクトリ等)が含まれていた場合、AXにエラー05Hを返し
     ます。このファンクションを用いて、サブディレクトリないしボリュームラベ
     ルを作成することは出来ません。
 
 
 
 【ファンクション 3DH】
 
 機能  ファイルハンドルのオープン
 
 入力  AH=3DH
     AL=オープン属性
     DX=パス名の先頭のオフセットアドレス
     DS=パス名の先頭のセグメントアドレス
 
 出力  CF=1,AX=02H:存在しないファイル
             03H:無効なパス名
             04H:オープン不可
             05H:アクセス不可
             0FH:無効なドライブ
     CF=0,AX    :オープンされたファイルのハンドル
 
 破壊  AX,CF
 
 説明  このファンクションはDS:DXによって指定されたパス名をもとにファイル
     を読出し/書込み/双方(読出し&書込み)のモードでオープンします。パス
     名が無効である場合、もしくはパスが存在しない場合、AXにエラー03Hを
     返します。またパス名によって指定されたファイルが存在しない場合、AXに
     エラー02Hを返します。カレント・プロセス中にオープンするためのハンド
     ルの空きがない場合、もしくは内部システムテーブルに空きがない場合、AX
     にエラー04Hを返します。さらにリードオンリーのファイルを書込みオープ
     ンしようとした場合、もしくは属性がディレクトリのそれであった場合、AX
     にエラー05Hを返します。
     このファンクションでは、システムファイル、隠れファイルの属性を禁止して
     いないため、これらのファイルもオープン/アクセスすることが出来ます。フ
     ァイルのオープンはALに設定されたオープン属性に基づいて行われます。正
     常にオープンされた場合、AXにファイルハンドルを返します。
 
 
 
 【ファンクション 3EH】
 
 機能  ファイルハンドルのクローズ
 
 入力  AH=3EH
     BX=ファイルハンドル
 
 出力  CF=1,AX=05H:アクセス不可
             06H:無効なハンドル
     CF=0       :正常終了
 
 破壊  AX,BX,CF
 
 説明  ファンクション3CH,3DHによってオープンされたファイルをクローズし
     ます。BXにはオープンされているファイルハンドルが設定されていなければ
     なりません。ファイルハンドルに誤りがある場合、もしくはハンドルが既にク
     ローズされている場合、AXにエラー06Hを返します。
     ファイルハンドルに誤りがない場合、PCENGINEは該当するファイルを
     クローズし、そのファイルに対応する全てのシステムバッファをフラッシュし
     ます。
 
 
 
 【ファンクション 3FH】
 
 機能  ファイルデータの読込み
 
 入力  AH=3FH
     BX=ファイルハンドル
     CX=読込むべきバイト数
     DX=読込みバッファのオフセットアドレス
     DS=読込みバッファのセグメントアドレス
 
 出力  CF=1,AX=05H:アクセス不可
             06H:無効なハンドル
     CF=0,AX    :読込まれたバイト数
 
 破壊  AX,CF
 
 説明  ハンドルによって指定されたファイルからデータを読込みます。BXにはファ
     イルハンドルが、CXには読込むべきデータのバイト数が設定されていなけれ
     ばなりません。また、DS:DXは読込んだデータの格納領域のアドレスを指
     していなければなりません。指定されたファイルが読込み禁止になっている場
     合、AXにエラー05Hを返します。またファイルハンドルがオープンされて
     いない場合、AXにエラー06Hを返します。
     エラーがない場合、AXには読込んだデータのバイト数を返します。このため
     ポインタが既に終点に達しているファイルを読込もうとした場合、AXの値は
     0になります。またCXで指定された読込みバイト数がファイルの残りエリア
     より大きい場合、AXにはCXよりも小さな値を返します。従って、CXで指
     定されたバイト数の全てがバッファ領域に転送されるとは限りません。
 
 
 
 【ファンクション 40H】
 
 機能  ファイルデータの書込み
 
 入力  AH=40H
     BX=ファイルハンドル
     CX=書込むべきバイト数
     DX=書込みバッファのオフセットアドレス
     DS=書込みバッファのセグメントアドレス
 
 出力  CF=1,AX=05H:アクセス不可
             06H:無効なハンドル
     CF=0,AX    :書込まれたバイト数
 
 破壊  AX,CF
 
 説明  ハンドルによって指定されたファイルにデータを書込みます。BXにはファイ
     ルハンドルが、CXには書込むべきデータのバイト数が設定されていなければ
     なりません。またDS:DXは書込みデータの格納領域のアドレスを指してい
     なければなりません。指定されたファイルが書込み禁止である場合、AXにエ
     ラー05Hを返します。またファイルハンドルがオープンされていない場合、
     AXにエラー06Hを返します。
     エラーがない場合、AXには書込まれたバイト数を返します。従って、ディス
     クに書込む余裕がない場合、AXはCXで指定したバイト数よりも小さな値を
     示します。この時、一応書込みが行われているのでCFはセットされません。
     このため、このファンクションの実行後は必ずAXの値を調べる必要がありま
     す。
 
 
 
 【ファンクション 41H】
 
 機能  ファイルの削除
 
 入力  AH=41H
     DX=削除するパス名を指す文字列のオフセットアドレス
     DS=削除するパス名を指す文字列のセグメントアドレス
 
 出力  CF=1,AX=02H:存在しないファイル
             03H:無効なパス名
             05H:アクセス不可
                 サブディレクトリエントリ
                 リードオンリーのエントリ
             0FH:無効なドライブ
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  DS:DXによって指定されたパス名のファイルを削除します。指定されるパ
     ス名はASCIZ形式の文字列でなければなりません。パス名が無効である場
     合、AXにエラー03Hを返します。また該当するファイルが存在しない場合、
     AXにエラー02Hを返します。さらにパス名の指定するエントリがディレク
     トリまたはリードオンリーのファイルである場合、AXにエラー05Hを返し
     ます。
     ファイルが存在し、かつ書込みが許されている場合には、そのファイルを削除
     します。具体的には、該当するディレクトリエントリ、およびFAT上のクラ
     スタチェインを解放することで処理を完了します。なお、リードオンリーのフ
     ァイルを削除する場合には、まずファンクション43Hにより属性を変更した
     後、このファンクションを用いるようにする必要があります。
 
 
 
 【ファンクション 42H】
 
 機能  ファイルポインタの移動
 
 入力  AH=42H
     AL=移動方法
     BX=ファイルハンドル
     CX=移動するバイト数(上位16ビット)
     DX=移動するバイト数(下位16ビット)
 
 出力  CF=1,AX=01H:無効な移動方法
             06H:無効なハンドル
     CF=0,DX    :新規のポインタ位置(上位16ビット)
          AX    :新規のポインタ位置(下位16ビット)
 
 破壊  AX,DX,CF
 
 説明  指定されたハンドルのファイルの読込み/書込みポインタを移動します。この
     ポインタは32ビットの絶対表現によるファイルのバイト位置を示しています。
     ファンクション3FH、40Hはこのポインタを参照してファイルの読込み/
     書込みを行っているため、このポインタを制御することにより、ファイルの一
     部をスキップしたり、逆に戻って読出し/書込みを行うことができます。AL
     はポインタの移動方法で、以下の値を設定します。
 
       00H:ポインタは、ファイルの先頭からのオフセットの位置に移動しま
           す。
       01H:ポインタは、現在のロケーションにオフセットを加算した位置に
           移動します。
       02H:ポインタは、ファイルの終わりにオフセットを加算した位置に移
           動します。
 
     結果として得られるDX:AXは実際のポインタロケーションを示します。従
     って、CX:DX=0でこのファンクションを実行した場合、ファイルサイズ
     をDX:AXに返します。またポインタの移動方法として02Hを選んだ場合、
     ファイル内のロケーションを得るためには、CX:DX<0となるように設定
     する必要があります。
     ALの指定が00H〜02H以外の場合、AXにエラー01Hを返します。ま
     たハンドルがオープンされていない場合には、AXにエラー06Hを返します。
 
 
 
 【ファンクション 43H】
 
 機能  ファイルの属性の取得/設定
 
 入力  AH=43H
     AL=00H:ファイル属性の取得
        01H:ファイル属性の設定
     CX=設定すべき属性(設定時)
     DX=パス名を指す文字列のオフセットアドレス
     DS=パス名を指す文字列のセグメントアドレス
 
 出力  CF=1,AX=01H:ALの指定が範囲外
             02H:パス名がボリュームラベルを指定
             03H:無効なパス名
             05H:アクセス不可
             0FH:無効なドライブ
     CF=0,CX    :ファイルの属性(取得時)
 
 破壊  AX,CX,CF
 
 説明  ファイルの属性を得る、または設定します。DS:DXはファイルのパス名を
     示すASCIZ形式の文字列を指していなければなりません。ALは属性を得
     るか/設定するかを指定します。ALが00Hの場合、属性情報をCXに返し
     ます。ALが01Hの場合、CXで指定された属性をファイルのディレクトリ
     エントリに設定します。この時、ディレクトリ属性およびボリュームラベル属
     性を変更することは出来ません。ALが00H,01H以外の値である場合、
     AXにエラー01Hを返します。またパス名が不適切である場合、AXにエラ
     ー03Hを返します。変更不可能な属性が指定されるか、変更不可能なファイ
     ルの属性を変更しようとした場合、AXにエラー05Hを返します。
     このファンクションの実行はディレクトリフィールドの0BHバイト目の属性
     を書き変えることにより行われ、CXの値が適切か?ファイルの属性が変更可
     能か?が検査されます。
 
 
 
 【ファンクション 45H】
 
 機能  ファイルハンドルの二重化
 
 入力  AH=45H
     BX=ファイルハンドル
 
 出力  CF=1,AX=04H:オープン不可
             06H:無効なハンドル
     CF=0,AX    :新規のファイルハンドル
 
 破壊  AX,CF
 
 説明  指定されたハンドルをもとに新たなハンドルを作成します。従って、ファイル
     は新旧どちらのハンドルを使用してもアクセスすることが出来ます。しかし、
     ファイルポインタは1つしか使用出来ませんので、双方のハンドルが兼用しま
     す。従って、一方のハンドルがファイルリードやファイルライトなどでポイン
     タロケーションを移動させた場合、他のハンドルのポインタロケーションも移
     動してしまいます。BXはオープンされているファイルハンドルでなければな
     りません。BXに有効なハンドルが指定されなかった場合、AXにエラー06
     Hを返します。オープンされているハンドルが多く、ハンドルのシステムエリ
     アに空きがない場合、もしくは現在のプロセスで使用可能な開放されたハンド
     ルが存在しない場合、AXにエラー04Hを返します。
 
 【ファンクション 46H】
 
 機能  ファイルハンドルの強制二重化
 
 入力  AH=46H
     BX=既存のファイルハンドル
     CX=新規のファイルハンドル
 
 出力  CF=1,AX=04H:オ−プン不可
             06H:無効なハンドル
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  指定されたハンドルをもとに新たなハンドルを作成します。従って,ファイル
     は新旧どちらのハンドルを使用してもアクセスすることが出来ます。しかし、
     ファイルポインタは1つしか使用出来ませんので,双方のハンドルが兼用しま
     す。従って、一方のハンドルがファイルリ−ドやファイルライトなどでポイン
     タロケ−ションを移動させた場合、他のハンドルのポインタロケ−ションも移
     動してしまいます。BXはオ−プンされているファイルハンドルでなければな
     りません。BXに有効なハンドルが指定されなかった場合、AXにエラ−06
     Hを返します。オ−プンされているハンドルが多く、ハンドルのシステムエリ
     アに空きが無い場合、もしくは現在のプロセスで使用可能な解放されたハンド
     ルが存在しない場合、AXに04Hを返します。またCXは新規のファイルハ
     ンドルでなければなりません。もし既にオ−プンされているハンドルである場
     合、同じくAXにエラ−04Hを返します。
 
 
 【ファンクション 47H】
 
 機能  カレント・ディレクトリパスの取得
 
 入力  AH=47H
     DL=ドライブ番号(デフォルト:0,A:1,B:2,‥‥‥)
     SI=ディレクトリパスを読み込む領域のオフセットアドレス
     DS=ディレクトリパスを読み込む領域のセグメントアドレス
 
 出力  CF=1,AX=0Fh:無効なドライブ
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  指定したドライブのカレントディレクトリのパス名をDS:SIで指定された
     領域に読出します。この領域には63バイト以上の長さが確保されていなけれ
     ばなりません。転送されるパス名はル−トディレクトリからの相対位置で表わ
     したASCIZ形式の文字列となります。
 
     例]ABC¥DEF¥GHI
       ドライブの指定が無効な場合、AXに0FHを返します。
 
 【ファンクション 48H】
 
 機能  メモリエリアの割り当て
 
 入力  AH=48H
     BX=割り当てるべきメモリの大きさ(パラグラフサイズ)
 
 出力  CF=1,AX=07H:PID異常
             08H:メモリ不足
          BX    :割り当て可能なメモリサイズ
     CF=0,AX    :割り当てたメモリのセグメントアドレス
 
 破壊  AX,BX,CF
 
 説明  BXで指定された大きさのメモリエリアを割当てます。この際、BXはパラグ
     ラフサイズ(1パラグラフ=16バイト)で表現されている必要があります。
     要求を満足するメモリが存在する場合、新たにPID(プロセスID)が設定
     されます。要求を満足するだけのメモリが確保されない場合、確保できうる最
     大のメモリサイズをパラグラフ単位でBXに入れ、AXにエラ−08Hを返し
     ます。メモリの開き領域(空きメモリエリア)を検索中、矛盾が生ずるような
     PIDが発見されると、AXにエラ−07Hを返します。この時、BXの値は
     意味を持ちません。また幾つかの空きメモリエリアが連続している場合、それ
     らはまず単一のメモリエリアに圧縮され、しかる後,割当て可能かどうかの判
     断が行なわれます。
     割当てる空きメモリエリアの選択は、ファンクション58Hで指定されたメモ
     リ割当てモ−ドに基づいて行われます。
     メモリ割当てモ−ドが00Hの場合、最下位の割当て可能な空きメモリ領域に、
     BXで指定されたメモリサイズを確保します。
     メモリ割当てモ−ドが01Hの場合、全メモリ中で割当て可能な最小の空きメ
     モリ領域に、BXで指定されたメモリサイズを確保します。
     メモリ割当てモ−ドが02Hの場合、最上位の割当て可能な空きメモリ領域に
     BXで指定されたメモリサイズを確保します。
 
 
 【ファンクション 49H】
 
 機能  割当てたメモリエリアの解放
 
 入力  AH=49H
     ES=解放すべきメモリエリアのセグメントアドレス
 
 出力  CF=1,AX=07H:PID異常
     CF=00      :正常終了
 
 破壊  AX,CF
 
 説明  ファンクション48Hによって割当てたメモリエリアを解放します。ESはメ
     モリエリアのセグメントアドレス(PIDの直後のセグメント)を示していな
     ければなりません。ESに対応するPIDが矛盾したデ−タを含んでいた場合
     AXにエラ−07Hを返します。このファンクションでは、空き領域となった
     メモリエリアの圧縮は行ないません。
 
 
 【ファンクション 4AH】
 
 機能  割当てたメモリエリアの変更
 
 入力  AH=4AH
     ES=メモリエリアの先頭のセグメントアドレス
     BX=変更したいメモリサイズ(パラグラフ単位)
 
 出力  CF=1,AX=07H:PID異常
             08H:メモリ不足
          BX    :変更可能な最大メモリサイズ
     CF=0       :正常終了
 
 破壊  AX,BX,CF
 
 説明  ファンクション48Hで割当てたメモリエリアのサイズを変更します。ESは
     メモリエリアのセグメントアドレス(PIDの直後のセグメント)を示してい
     なければなりません。またBXには変更したいメモリサイズがパラグラフ単位
     で指定されていなければなりません。ESに対応するPIDが矛盾したデ−タ
     を含んでいた場合、AXにエラ−07Hを返します。
     このファンクションでは、PIDのメモリサイズフィ−ルドの値よりもBXの
     指定するサイズの方が小さい場合、ESに対応するPIDのメモリサイズフィ
     −ルドをBXの値に変更し、[ES+BX+1:0]の位置に、新たに空きメ
     モリエリアを示すPIDを設置します。このPIDのメモリサイズフィ−ルド
     は、ESで指定されたPIDの<旧メモリサイズ−BX−1>となります。
     逆に、PIDのメモリサイズフィ−ルドの値よりもBXのそれの方が大きい場
     合、ESに対応するPIDの次のPIDを調べ、空きエリアの検索を行います。
     空きエリアのPIDが連続している場合には、まずそれらを1つのメモリエリ
     アに圧縮し、そうして得られた空きメモリサイズと現在のメモリエリアのサイ
     ズを加算します。<加算した値+1>(最大変更可能メモリサイズ)がBXの
     それよりも大きい場合、 ESに対応するPIDのメモリサイズフィ−ルドを
     BXの値に変更し、[ES+BX+1:0]の位置に,新たに空きメモリエリ
     アを示すPIDを設置します。このPIDのメモリサイズフィ−ルドは、<変
     更可能メモリサイズ−BX−1>となります。
     また、最大変更可能メモリサイズがBXの指定より小さい場合、変更するため
     の十分な領域がないのでBXに最大変更可能メモリサイズを入れ,AXにエラ
     −08Hを返します。
 
 
 【ファンクション 4B00H】
 
 機能  プロセスの実行
 
 入力  AH=4BH
     AL=00H
     DX=実行するファイル名のパス名のオフセットアドレス
     DS=実行するファイル名のパス名のセグメントアドレス
     BX=パラメ−タブロック位置のオフセットアドレス
     ES=パラメ−タブロック位置のセグメントアドレス
 
 出力  CF=1,AX=01H:ALの指定が範囲外
             02H:存在しないファィル
             03H:無効なパス名
             05H:アクセス不可
             07H:PID異常
             08H:ロ−ドメモリ不足
                 システムメモリ不足
             0FH:無効なドライブ
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  このファンクションはDS:DXによって指定されたパス名のファイル(プロ
     グラム)をロ−ド実行します。即ち、プロセスの実行を行います。DS:DX
     は実行するファイルのパス名を指していなければなりません(パス名は64バ
     イト以内)。またES:BXはパラメ−タブロックを指していなければなりま
     せん。このパラメ−タブロックは次の2項目によって構成されています。
 
     1)渡される環境セグメントのアドレス(2バイト)
       下位プロセスが使用する環境エリアのセグメントアドレスが必要です。但
       し、上位プロセスの環境をそのまま下位プロセスに渡す場合、0000H
       を指定します。
     2)渡されるコマンド行の格納アドレス(4バイト)
       下位プロセスが使用するコマンド行の格納アドレスです.コマンド行は第
       1バイト目がコマンドの文字数、第2バイト以降がコマンド文字列を与え、
       全体が128バイト以下でなくてはなりません.
 
     このファンクションをコ−ルする上位プロセスは、下位プロセスをロ−ドし実
     行するのに十分なメモリ領域を、ファンクション4AHによりあらかじめ解放
     しておく必要があります。このファンクションは、パラメ−タブロックES:
     BXに基づいてプロセスコントロ−ラを作成し、DS:DXで指定されたファ
     イルをロ−ド・実行します。また上位プロセスでオ−プンされていたハンドル
     の全てを下位プロセスに引き渡します。
     下位プロセスに渡される環境セグメントは個々環境情報がASCIZ形式の文
     字列で形成されています。それぞれの文字列は連続して並べられ、セグメント
     の最後は00Hで終わります。従って、このセグメントの最後には00Hが2
     つ連続します。環境セグメントの格納アドレスが0000Hの場合、システム
     は上位プロセスの環境をそのまま下位プロセスに引渡します。従って、環境セ
     グメントを差別化しなければならないようなプロセス以外は、通常0000H
     を指定します。
 
 
 【ファンクション 4B03H】
 
 機能  プログラムのオ−バ−レイロ−ド
 
 入力  AH=4BH
     AL=03H
     DX=実行するファイル名のパス名のオフセットアドレス
     DS=実行するファイル名のパス名のセグメントアドレス
     BX=パラメ−タブロック位置のオフセットアドレス
     ES=パラメ−タブロック位置のセグメントアドレス
 
 出力  CF=1,AX=01H:ALの指定が範囲外
             02H:存在しないファィル
             03H:無効なパス名
             05H:アクセス不可
             07H:PID異常
             08H:ロ−ドメモリ不足
                 システムメモリ不足
             0FH:無効なドライブ
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  このファンクションはDS:DXによって指定されたパス名のファイル(プロ
     グラム)をロ−ドします。DS:DXはロ−ドするファイルのパス名を指して
     いなければなりません(パス名は64バイト以内)。またES:BXはパラメ
     −タブロックを指していなければなりません。このパラメ−タブロックは次の
     2項目によって構成されています。
 
     1)ロ−ドセグメント(2バイト)
       プログラムをロ−ドすべきセグメントアドレスを指定します。
     2)リロケ−ション要素(2バイト)
       ロ−ドしたプログラムをリロケ−トしなければならない場合、そのプログ
       ラムのリロケ−ションを開始するセグメントアドレスを指定します。
 
     このファンクションをコ−ルするプロセスは、プログラムをロ−ドする領域を
     自分のメモリエリア内に用意する必要があります。従って、このファンクショ
     ンではメモリの割当ては行わず、指定されたセグメントからプログラムをロ−
     ドします。ただし、プロセスのメモリエリアを越えてロ−ドを行うことは出来
     ません。この場合、AXにエラ−08Hを返します。
     具体的な処理としては、ES:BXによって指定されたセグメントアドレスか
     ら、DS:DXによって指定されたファイル(プログラム)をロ−ドします。
     リロケ−ション不要のプログラムの場合、ロ−ド直後終了します。リロケ−シ
     ョンが必要な場合、ファイル上のリロケ−ション情報をシステム領域にロ−ド
     し、次にファイル上のプログラムをES:BXによって指定されたセグメント
     アドレスにロ−ドします。その後、リロケ−ション情報によってロ−ドしたプ
     ログラムをリロケ−トし、処理を終了します。
 
 
 【ファンクション 4CH】
 
 機能  プロセスの終了
 
 入力  AH=4CH
     AL=プロセス終了コ−ド
 
 出力  ファンクション4BH実行時のレジスタ(CFを除く)
 
 破壊  全レジスタ
 
 説明  現在のプロセスを終了し、上位プロセスに制御を戻します。この時、ALには
     プロセスの終了コ−ドを設定します。この出力コ−ドは、上位プロセスに情報
     を引渡すためのもので、ファンクション4DHを通じて上位プロセスにより参
     照されます。また現在のプロセスのハンドルは全て無効となり、ファンクショ
     ン4BH実行時の上位プロセスのハンドル状態が復帰します。
 
 
 【ファンクション 4DH】
 
 機能  下位プロセスからの出力コ−ドの取得
 
 入力  AH=4DH
 
 出力  AH=プロセス終了コ−ド
     AL=プロセス出力コ−ド
  
 破壊  AX,CF
 
 説明  ファンクション31H,4CHによってシステムワ−クに格納されたプロセス
     終了コ−ドおよび出力コ−ドを取得します。このファンクションは格納したコ
     −ドを1回しか返しませんので、下位プロセスの実行後,何回も参照する場合
     には上位プロセスが記憶しておく必要があります(2回目以降は必ず0000
     Hを返します)。終了コ−ドは、プロセスの終了課程を示す物で、以下のよう
     な内訳になっています。
 
     00H:正常終了。
     01H:CTRL−Cによる終了。
     02H:ハ−ドウェア・エラ−終了。
     03H:プログラム常駐のままの終了。
 
 【ファンクション 4EH】
 
 機能  最初に一致するファイルの検索
 
 入力  AH=4EH
     CX=検索する属性
     DX=検索するパス名を示すASCIZ形式の文字列のオフセットアドレス
     DS=検索するパス名を示すASCIZ形式の文字列のセグメントアドレス
 
 出力  CF=1,AX=03H:無効なパス名
             05H:アクセス不可
             0FH:無効なドライブ
             12H:ファイル検出不可
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  DS:DXによって指定されたパス名に該当するファイルを検索します。パス
     名にはワイルドカ−ド[?,*]が使用できます。最初に検索されたファイル
     情報がシステム情報エリアに格納されます。検索の対象はCXによって指定さ
     れた属性以下のファイルです。例えば、CXに00Hが設定された場合、通常
     のファイルとリ−ドオンリ−のファイルのみの検索になります。また16Hが
     設定された場合、通常のファイルの他に、隠しファイル、システムファイル、
     ディレクトリが検索されます。全てのファイルを検索する場合、CXには3F
     Hを設定してください.
     検索するパス名に異常な文字が含まれている場合、AXにエラ−03Hを返し
     ます。またパス名の指定するドライブが存在しない場合、AXにエラ−0FH
     を返します。検索した結果、パス名に該当するファイルが存在しなかった場合
     AXにエラ−12Hを返します。
 
 システム情報エリアに格納されるデ−タ
 
    ┌──────┬──────┬──────┬──────┐
 00H│      │      │      │      │
    ├──────┼──────┼──────┼──────┤
    │      │      │      │      │
    ├──────┼──────┴──────┼──────┤
    │      │  予約域(21バイト) │      │
    ├──────┼──────┬──────┼──────┤
    │      │      │      │      │
    ├──────┴──────┼──────┼──────┤
    │      ┃      │      │      │
    ├──────┬──────┼──────┴──────┤
 14H│      │ 検索属性 │  ファイルの最終時刻  │
    ├──────┴──────┼─────────────┤
 18H│  ファイルの最終日付   │ ファイルのサイズ(下位)│
    ├─────────────┼──────┬──────┤
 1CH│ ファイルのサイズ(上位) │      │      │
    ├──────┬──────┼──────┼──────┤
    │      │      │      │      │
    ├────  検索したファイル名(13バイト) ─────┤
    │      │      │      │      │
    ├──────┼──────┼──────┼──────┘
 28H│      │      │      │←2AH
    └──────┴──────┴──────┘
 2CH
 
 
 【ファンクション 4FH】
 
 機能  次に一致するファイルの検索
 
 入力  AH=4FH
 
 出力  CF=1,AX=05H:アクセス不可
             12H:ファンクション検出不可
     CF=0       :正常終了
 
 破壊  AX,CF
 
 説明  ファンクション4EHによって検索された次のファイルを検索します。検索さ
     れたファイル情報がシステム情報エリアに格納されます。検索の対象はファン
     クション4EHでCXによって指定された属性以下のファイルです。例えば,
     CXに00Hが設定された場合、通常のファイルのみの検索になります。また,
     CXに16Hが設定された場合、通常のファイルの他に、隠しファイル、シス
     テムファイル、ディレクトリが検索されます。全てのファイルを検索する場合、
     CXに3FHを設定してください。ファイルの検索は、このファンクションを
     繰返すことによって行うことが出来ます。このファンクションはシステム情報
     エリアさえ適正ならば、4EHを用いなくても次の検索を行うことが出来ます。
     また検索した結果、パス名に該当するファイルが存在しなかった場合、AXに
     12Hを返します。
 
 システム情報エリアに格納されるデ−タ
 
    ┌──────┬──────┬──────┬──────┐
 00H│      │      │      │      │
    ├──────┼──────┼──────┼──────┤
    │      │      │      │      │
    ├──────┼──────┴──────┼──────┤
    │      │  予約域(21バイト) │      │
    ├──────┼──────┬──────┼──────┤
    │      │      │      │      │
    ├──────┼──────┼──────┼──────┤
    │      │      │      │      │
    ├──────┼──────┼──────┴──────┤
 14H│      │ 検索属性 │  ファイルの最終時刻  │
    ├──────┴──────┼─────────────┤
 18H│  ファイルの最終日付   │ ファイルのサイズ(下位)│
    ├─────────────┼──────┬──────┤
 1CH│ ファイルのサイズ(上位) │      │      │
    ├──────┬──────┼──────┼──────┤
    │      │      │      │      │
    ├────  検索したファイル名(13バイト) ─────┤
    │      │      │      │      │
    ├──────┼──────┼──────┼──────┘
 28H│      │      │      │←2AH
    └──────┴──────┴──────┘
 2CH
 
 
 【ファンクション 54H】
 
 機能  リ−ドアフタ−ライトモ−ドの取得
 
 入力  AH=54H
 
 出力  AL=現在のリ−ドアフタ−ライトモ−ドの値
        00H:リ−ドアフタ−ライトオフ
        01H:リ−ドアフタ−ライトオン
 
 破壊  AL,CF
 
 説明  ディスク書込み時のリ−ドアフタライト機能の動作状態をALに返します。デ
     ィスク書込み時に書込み動作のみを行う場合、ALには00Hを返します。ま
     た、ディスク書込み時にチェックリ−ドを行う場合、ALには01Hを返しま
     す。このモ−ドはファンクション2EHにより設定出来ます。
 
 
 【ファンクション 56H】
 
 機能  ディレクトリエントリの変更
 
 入力  AH=56H
     DX=既存ファイルのパス名の格納オフセットアドレス
     DS=既存ファイルのパス名の格納セグメントアドレス
     DI=新規パス名の格納オフセットアドレス
     ES=新規パス名の格納セグメントアドレス
 
 出力  CF=1,AX=02H:存在しないファイル
             03H:無効なパス名
             05H:アクセス不可
             0FH:無効なドライブ
             11H:ドライブ間変更
     CF=0       :正常終了
     AX,CF以外のレジスタは保持されます。
 
 説明  ディレクトリエントリを変更することにより、ファイル名を変更します。この
     ファンクションはDS:DXによって指定されたファイルを検索します。ファ
     イルが存在しない場合、AXにエラ−02Hを返します。ファイルが検索され
     た場合、次にES:DIによって指定されたパス名を解析します。その結果、
     該当するエントリがすでに存在する場合、AXにエラ−05Hを返します。ま
     たドライブの指定が異なる場合、AXにエラ−11Hを返します。
     DS:DX,ES:DIの指定するサブディレクトリが同一である場合、DS
     :DXの指定するエントリのファイル名(ファイル拡張子を含む)が、ES:
     DIの指定するファイル名で置き代えられます。この際、ファイル名以外のエ
     領域は変更されません。
     DS:DX,ES:DIの指定するサブディレクトリが異る場合、ES:DI
     の指定するサブディレクトリ上に、新たなファイルエントリを形成します。こ
     の時のエントリは、DS:DXエントリのファイル名以外の部分と、ES:D
     Iの指定するファイル名とが合さったものとなります。またDS:DXのファ
     イルエントリは削除されます。
     ES:DIによって指定されたファイル名が新たなディレクトリエントリのフ
     ァイル名となります。また、DS:DXによって指定されたパス名は削除され
     ます。
 
 
 【ファンクション 57H】
 
 機能  ファイルの日付/時刻の取得/設定
 
 入力  AH=57H
     AL=00H:日付/時刻の取得
        01H:日付/時刻の設定
     BX=ファイルハンドル
     CX=設定すべき時刻(AL=01H)
     DX=設定すべき日付(AL=01H)
 
 出力  CF=1,AX=01H:ALの指定が範囲外
             05H:アクセス不可
             06H:無効なハンドル
     CF=0,CX    :ファイルの最終編集時刻(AL=00H)
          DX    :ファイルの最終編集日付(AL=00H)
     AX,CX,DX,CF以外のレジスタは保持されます。
 
 説明  ALが00Hの時、ファイルハンドルが示すファイルエントリの日付/時刻情
     報を返します。またALが01Hの時、ファイルハンドルが示すファイルエン
     トリの日付/時刻情報を仮変更します。この変更日時を実際にディスクに書込
     むのは、そのファイルハンドルがクロ−ズされる時点となります。
     BXはオ−プンされているファイルハンドルでなければなりません。BXで指
     定されたハンドルがオ−プンされていない場合、AXにエラ−06Hを返しま
     す。また指定されたALが00H〜01Hの範囲にない場合、AXにエラ−0
     1Hを返します。
 
     日付/時刻の構成
 
            ┌─────┬─────┐
            │  CH  │  CL  │
    【時刻】 CX ├───┬─┴─┬───┤
            │ 時 │ 分 │ 秒 │
            └───┴───┴───┘
             5 bits  6 bits  5 bits
 
            ┌─────┬─────┐
            │  DH  │  DL  │
    【日付】 DX ├────┬┴─┬───┤
            │  年  │ 月 │ 日 │
            └────┴──┴───┘
             7 bits   4 bits  5 bits
 
 
 【ファンクション 58H】
 
 機能  メモリ割当てモ−ドの取得/設定
 
 入力  AH=58H
     AL=00H:メモリ割当てモ−ドの取得
        01H:メモリ割当てモ−ドの設定
     BX=00H:下位アドレス(AL=01H)
        01H:最小ブロック(AL=01H)
        02H:上位アドレス(AL=01H)
 
 出力  CF=1,AX=01H:ALの指定が範囲外
     CF=0,AX=00H:下位アドレス(AL=00H)
             01H:最小ブロック(AL=00H)
             02H:上位アドレス(AL=00H)
 
 破壊  AX,BX,CF
 
 説明  ALが00Hの場合、AXに現在選択されているメモリ割当てモ−ドを返しま
     す。ALが01Hの場合、BXによって指定されたメモリ割当てモ−ドを設定
     します。メモリ割当てモ−ドは、メモリエリアの設定時に、空きメモリ空間の
     選択方法を指定するものです。このモ−ドはファンクション48Hの実行時に
     参照されます、このモ−ドの内訳を以下に示します。
 
     00H:メモリエリアを確保する際、空き領域の出来るだけ下位アドレスに割
         当てを行います。従って,割当てモ−ドとして00Hが選択された場
         合、開きメモリ領域の検索は下位アドレスから行われ、最初に発見さ
         れた適合サイズの空き領域にメモリの割当てが行われます。
 
     01H:メモリエリアを確保する際、可能な最小の空き領域に割当てを行いま
         す。従って、割当てモ−ドとして01Hが選択された場合、空きメモ
         リ領域の検索は下位アドレスから最終アドレスまで行われ、その中で
         適合可能な最小の空きメモリ領域に割当てが行われます。
 
     02H:メモリエリアを確保する際、空き領域の出来るだけ下位アドレスに割
         当てを行います。従って、割当てモ−ドとして02Hが選択された場
         合、開きメモリ領域の検索は下位アドレスから最終アドレスまで行わ
         れ、その中で適合可能な最上位のメモリ領域に割当てが行われます。
     ALに00H〜02H以外の値が指定された場合,AXにエラ−01Hを返し
     ます.
 
 
 【ファンクション 5AH】
 
 機能  一時ファイルの自動作成 
 
 入力  AH=5AH
     CX=ファイルの属性
     DX=作成するパス名の格納オフセットアドレス
     DS=作成するパス名の格納セグメントアドレス
 
 出力  CF=1,AX=02H:パス名がボリュ−ムラベルを指定
             03H:無効なパス名
             04H:オ−プン不可
             05H:アクセス不可
             0FH:無効なドライブ
     CF=0,AX    :一時ファイルのファイルハンドル
 
 破壊  AX,CX,DX,DS,CF
 
 説明  DS:DXには一時ファイルを作成するサブディレクトリの、ASCIZ形式
     のパス名が与えられなければなりません。このパス名領域は、入力時のASC
     IZ文字列の長さより13バイト余計に必要であり、この追加領域に一時ファ
     イルのファイル名が入ります。この時、ファイル名には現在の時刻が採用され,
     属性にはCXによって指定されたものが用いられます。ただし、属性にディレ
     クトリ、ボリュ−ムラベルを指定することはできません。また、出力時のパス
     DS:DXは、サブディレクトリ名から一時ファイル名へと変化します。
  
    DS:DX
    ↓
    ┌─────────┬─┬─────────────┐
    │ ディレクトリ名 │00│             │
    └─────────┴─┴─────────────┘
               ↓
    ┌─────────┬─┬──┬──┬──┬──┬─┐
    │ ディレクトリ名 │¥│"時"│"分"│"秒"│"00"│00│
    └─────────┴─┴──┴──┴──┴──┴─┘
      "時":時を16進化した文字列(2バイト)
      "分":分を16進化した文字列(2バイト)
      "秒":秒を16進化した文字列(2バイト)
 
    DS:DXによって指定されたディレクトリが存在しない場合、AXにエラ−
    03Hを返します。またファイルハンドルのためのシステム領域がない場合、
    AXにエラ−04Hを返します。
    正常にファイルが形成された場合、AXにファイルハンドルを返します。重複
    した一時ファイルが発生した場合、新たなファイル名を生成し直し、重複がな
    くなるまでこれを繰返します。このファンクションは一時ファイルの作成を行
    うだけなので、一時ファイルが不要になった場合、これを削除する必要があり
    ます。
 
 
 【ファンクション 5BH】
 
 機能  新たなファイルの作成
 
 入力  AH=5BH
     CX=ファイルの属性
     DX=パス名の先頭のオフセットアクセス
     DS=パス名の先頭のセグメントアクセス
 
 出力  CF=1,AX=02H:パス名がボリュ−ムラベルを指定
             03H:無効なパス名
             04H:オ−プン不可
             05H:アクセス不可
             0FH:無効なドライブ
             50H:既に存在するファイル
     CF=0       :作成・オ−プンされたファイルのハンドル
 
 破壊  AX,CF
 
 説明  ファイルを作成し、作成したファイルをオ−プンし、そのハンドルを返します。
     DS:DXは作成するファイルのパス名を示すASCIZ形式の文字列を指し
     ていなければなりません。またCXにはファイルの属性が設定されていなくて
     はなりません。属性はディレクトリエントリのそれと同一の形式を取り、以下
     のようなビット対応になっています。
 
      下位1ビット目:リ−ドオンリ−属性
      下位2ビット目:隠れファイル属性
      下位3ビット目:システムファイル属性
      下位4ビット目:ボリュ−ムラベル属性(指定不可)
      下位5ビット目:ディレクトリ属性(指定不可)
      下位6ビット目:保存ファイル属性
 
    同一名のファイルが存在しない場合、ディレクトリ上に新たに指定された属性
    のファイルを形成します。その後、ファイルを読出し/書込みのためにオ−プ
    ンし、ハンドルをAXに返します。ただし、指定されたファイルの属性がリ−
    ドオンリ−の場合、読出しのみのオ−プンとなります。
    また同一名のファイルが既に存在する場合、AXにエラ−50Hを返します。
    指定されたパス名が無効な場合、AXにエラ−03Hを返します。オ−プンす
    るためのハンドルに空きが無い場合、AXにエラ−04Hを返します。さらに
    ファイルが正常にオ−プン出来ない場合,もしくはCXの属性に作成不可能な
    もの(ディレクトリ等)が含まれている場合、AXにエラ−05Hを返します。
    このファンクションは、ファイルが既に存在してる場合にエラ−となる以外は、
    ファンクション3CHと同じ動作をします。
 
 
 *7.2 システムインタラプトコ−ル [#me1b4f02]
 
    23H・・・・・・・CTRL−Cブレ−ク処理
    24H・・・・・・・ディスクエラ−ハンドラ
    25H・・・・・・・ディスクセクタリ−ド
    26H・・・・・・・ディスクセクタライト
 
 
 【INT 23H】
 
 機能  CTRL−Cブレ−ク処理
 
 入力  −−−−
 
 出力  −−−−
 
 破壊  −−−−
 
 説明  INT 21Hファンクションコ−ルの実行時にCTRL−Cが入力され,か
     つCTRL−C検査モ−ドが選択されている場合,システムはINT 23H
     の割込みを起動します.この割込みル−チンは現在実行中のプロセスを中断し,
     SHELLのコマンド受け付けル−チンに制御を戻します.
     INT 23Hの割込みベクタは,プロセス起動時にプロセスコントロ−ラ領
     域にコピ−され,終了時に元の値に戻されますので,このベクタを書き換える
     ことにより,プロセス自身のINT 23Hル−チンを設けることができます.
     この際,システムの処理を継続させたい場合には,入力時の全てのレジスタを
     保存して,IRETで抜ける必要があります.この時の各レジスタの値は,フ
     ァンクションコ−ル起動時のそれと同一です.また割込み発生時のスタック状
     態は以下のようになっていますので,INT 23Hのスタックをポップ・ア
     ップしてIRETを行うと,直接ファンクションコ−ルの次のアドレスに移行
     することができます.
 
              下位アドレス
             ┌──────┐
             │  IP  │\
             ├──────┤ │
             │  CS  │ │INT 23H
             ├──────┤ │
             │ FLAG │/
             ├──────┤
             │  IP  │\
             ├──────┤ │
             │  CS  │ │INT 21H
             ├──────┤ │
             │ FLAG │/
             └──────┘
              上位アドレス
 
     CTRL−Cチェックはファンクションの頭で1回だけ行われます.従って,
     長い処理時間を要するようなファンクションの場合でも,その処理の最中にブ
     レ−クをかけることはできません.またファンクション33HによりCTRL
     −Cのチェックが禁止されている場合,INT 23Hの割込みは一切行われ
     ません.
 
 
 【INT 24H】
 
 機能  ディスクエラ−ハンドラ
 
 入力  AH=エラ−境界
     AL=エラ−発生時のドライブ
     DI=エラ−コ−ド
     SI=エラ−発生時のドライバオフセットアドレス
     BP=エラ−発生時のドライバオセグメントドレス
 
 出力  AL=ユ−ザ−処理情報
 
 破壊  −−−−
 
 説明  ディスクアクセス中に回復不能なエラ−が検出された場合,システムはINT
     24Hの割込みを起動します.この割込みル−チンはエラ−の種類を画面上に
     表示し,プロセス中止/アクセス再試行/エラ−無視の何れかをユ−ザに選択
     させます.この選択情報はIRET時にレジスタALに格納され,システムは
     この値に基づいて後続の処理を行います.
     INT 24Hの割込みベクタは,プロセス起動時にプロセスコントロ−ラ領
     域にコピ−され,終了時に元の値に戻されますので,このベクタを書き換える
     ことにより,プロセス自身のINT 24Hル−チンを設けることができます.
     この際,入力時のレジスタの保存は一切必要ありません.また割込み発生時の
     スタック状態は以下のようになっていますので,INT 24Hのスタックと
     INT 21Hのレジスタをポップ・アップしてIRETを行うと,直接ファ
     ンクションコ−ルの次のアドレスに移行することができます.
              下位アドレス
             ┌──────┐
             │  IP  │\
             │  CS  │ │INT 24H
             │ FLAG │/
             ├──────┤
             │  AX  │\
             │  BX  │ │
             │  CX  │ │
             │  DX  │ │
             │  SI  │ │INT 21H
             │  DI  │ │
             │  BP  │ │
             │  DS  │ │
             │  ES  │/
             ├──────┤
             │  IP  │\
             │  CS  │ │INT 21H
             │ FLAG │/
             └──────┘
              上位アドレス
 
    エラ−環境は,その最下位ビットのみが意味を持ち,0の場合は読出し時のエ
    ラ−を,1の場合は書込み時のエラ−を指定します.またエラ−コ−ドは発生
    したエラ−の種類を指定し,以下のような内訳になっています.
 
    00H:プロテクトされたディスクへの書込み
    01H:存在しないロ−カル・ユニット番号を指定
    02H:ドライブが非レディ状態
    03H:不正なコマンド番号
    04H:FDCのCRCエラ−
    05H:コマンドパラメ−タ−領域の長さが不適正
    06H:FDCのシ−クエラ−
    07H:不正なメディアタイプ
    08H:セクタが検出不能
    0AH:書込み時のエラ−
    0BH:読出し時のエラ−
    0CH:不定エラ−
 
    出力時には,ユ−ザが指定した後続処理の内容をレジスタALに返します.
    この内訳を以下に示します.
 
    00H:エラ−を無視し,ユ−ザプログラムに制御を戻します.
    01H:エラ−が生じた時のドライバの処理を再試行します.
    02H:現在のプロセスを中止し,上位プロセスに処理を戻します.
 
 
 【INT 25H】
 
 機能  ディスクセクタリ−ド
 
 入力  AL=ドライブ番号(0:A,1:B,………)
     CX=リ−ドセクタ数
     DX=開始セクタ番号
     BX=リ−ドバッファのオフセットアドレス
     DS=リ−ドバッファのセグメントアドレス
 
 出力  CF=エラ−フラグ
     AL=エラ−コ−ド(CF=1)
     DI=リ−ドに成功したセクタ数
     CX=リ−ドに失敗したセクタ数
 
 破壊  AX,CX,DI,FLAG
 
 説明  ディスクに対し,セクタ単位でのリ−ド処理を行います.このインタラプトコ
     −ルは,RETF命令を用いてユ−ザプログラムに復帰してくるため,ユ−ザ
     側で処理を継続するためには,スタック上に積まれたフラグをポップ・アップ
     してやる必要があります.このインタラプトコ−ルでエラ−が発生した場合,
     INT 24Hのエラ−処理は起動せず,単にCFを1にしてユ−ザに戻って
     きます.この際,INT 24Hの場合と同一のエラ−コ−ドをレジスタAL
     に返します.またアクセスに成功したセクタの数をレジスタDIに,失敗した
     セクタの数をレジスタCXに返します.
     指定したセクタの範囲がディスクの最終セクタを越えた場合,要求されたセク
     タ数の全てがアクセスできなくても,CFに1を返さないことがあります.こ
     の結果は使用しているドライバに依存し,デフォルトのフロッピ−・ディスク
     ・ドライバの場合,最終セクタを越えてもエラ−は返しません.
 
 
 【INT 26H】
 
 機能  ディスクセクタライト
 
 入力  AL=ドライブ番号(0:A,1:B,………)
     CX=ライトセクタ数
     DX=開始セクタ番号
     BX=ライトバッファのオフセットアドレス
     DS=ライトバッファのセグメントアドレス
 
 出力  CF=エラ−フラグ
     AL=エラ−コ−ド(CF=1)
     DI=ライトに成功したセクタ数
     CX=ライトに失敗したセクタ数
 
 破壊  AX,CX,DI,FLAG
 
 説明  ディスクに対し,セクタ単位でのライト処理を行います.このインタラプトコ
     −ルは,RETF命令を用いてユ−ザプログラムに復帰してくるため,ユ−ザ
     側で処理を継続するためには,スタック上に積まれたフラグをポップ・アップ
     してやる必要があります.このインタラプトコ−ルでエラ−が発生した場合,
     INT 24Hのエラ−処理は起動せず,単にCFを1にしてユ−ザに戻って
     きます.この際,INT 24Hの場合と同一のエラ−コ−ドをレジスタAL
     に返します.またアクセスに成功したセクタの数をレジスタDIに,失敗した
     セクタの数をレジスタCXに返します.
     指定したセクタの範囲がディスクの最終セクタを越えた場合,要求されたセク
     タ数の全てがアクセスできなくても,CFに1を返さないことがあります.こ
     の結果は使用しているドライバに依存し,デフォルトのフロッピ−・ディスク
     ・ドライバの場合,最終セクタを越えてもエラ−は返しません.
 
 
 *7.3 システムエリア [#t8e83b1d]
 
 
 【プロセスID】
 
 説明  この領域は,メモリエリアの管理を行うのに用いられ,ファンクション31H,
     48H,49H,4AH,4BH,4CHによりその設定/変更が行われます.
     各プロセスIDの先頭の1バイトは識別子の役割を果たし,4DHが中間のプ
     ロセスIDを,また5AHが最後のプロセスIDを示します.さらにプロセス
     IDは正方向のチェイン構造をなし,現在のプロセスIDのセグメント+1の
     値に,オフセット[+3]に格納されている1ワ−ドの値を加えたものが,次
     のプロセスIDのセグメントアドレスとなります.またオフセット[+1]に
     格納されている1ワ−ドが0000Hである場合,システムはそのメモリエリ
     アをフリ−とみなします.この領域の内訳を以下に示します.
 
    ┌──────┬─────────────┬──────┐
 00H│4Dor5A│ メモリの開始セグメント │メモリのパラ│
    ├──────┼──────┬──────┼──────┤
 04H│グラフサイズ│      │      │      │
    ├──────┼──────┴──────┼──────┤
 08H│      │   システム予約域   │      │
    ├──────┼──────┬──────┼──────┤
 0CH│      │      │      │      │
    └──────┴──────┴──────┴──────┘
 
 
 【プロセスコントロ−ラ】
 
 説明  この領域は,実行形式のプログラムの動作を管理するのに用いられ,ファンク
     ションコ−ル4BHの実行時に,メモリエリアの先頭から100Hバイトの領
     域に割当てられます(PIDの直後の100Hバイト).この領域の内訳を以
     下に示します.
 
    ┌──────┬──────┬─────────────┐
 00H│      │      │プロセス最終セグメント+1│
    ├──────┴──────┴──────┬──────┤
 04H│   システム予約域   ┃      │      │
    ├──────┬──────┬──────┴──────┘
 08H│      │      │ プロセス終了時の抜出し �
    ├──────┴──────┼─────────────┤
 0CH│アドレス         │ INT23Hル−チンの �
    ├─────────────┼─────────────┐
 10H│アドレス(コピ−)    │ INT24Hル−チンの �
    ├─────────────┼──────┬──────┐
 14H│アドレス(コピ−)    │      │      │
    ├──────┬──────┼──────┼──────┤
 18H│      │      │      │      │
    ├──────┼──────┼──────┼──────┤
    〜          システム予約域          〜
    ├──────┼──────┼──────┼──────┤
 28H│      │      │      │      │
    ├──────┴──────┼──────┴──────┤
 2CH│ プロセス環境セグメント │上位コントロ−ラセグメント│
    ├──────┬──────┼──────┬──────┤
 30H│      │      │      │      │
    ├──────┼──────┼──────┼──────┤
    〜          システム予約域          〜
    ├──────┼──────┼──────┼──────┤
 4CH│      │      │      │      │
    ├──────┴──────┼──────┼──────┤
 50H│   INT 21H   │ RETF │      │
    ├──────┬──────┼──────┼──────┤
 54H│      │      │      │      │
    ├──────┼──────┼──────┼──────┘
    〜          システム予約域          〜
    ├──────┼──────┼──────┼──────┤
 7CH│      │      │      │      │
    ├──────┼──────┼──────┼──────┤
 80H│      │      │      │      │
    ├──────┼──────┼──────┼──────┤
    〜      デフォルトのシステム情報エリア      〜
    ├──────┼──────┼──────┼──────┤
 FCH│      │      │      │      │
    └──────┴──────┴──────┴──────┘
 

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS