BDOS コール


MSX-DOS のファンクションコールです。Disk BASIC でも使用できます。
主にディスクアクセスの機能へアクセスするためにで使用します。

  • MSX-DOS・2 = CALL 0005H
  • Disk BASIC = &HF37D を実行

レジスタは基本的に破壊されます。
必要なレジスタはスタックに入れるか領域に保存して下さい。

このページでは MSX-DOS2 上位互換
Nextor のファンクションコールについても触れています。

あえて 1 ページに短くまとめて、
ページ検索で目的のルーチンを見つけられるようにしています。


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

CP/M や MSX-DOS1 でファイルを管理するために扱う領域です。
MSX-DOS2 でも CP/M・MSX-DOS1 との互換動作として使用可能です。
実行ファイルのパラメータとしてファイル名をいれた場合、
005CH および 006CH に展開されているため、

ここを FCB として開く事ができます。
または実行ファイルの領域内に領域を設けます。

1 ファイルで必要な FCB は 36 バイトです。

  • 番地+0 ドライブ番号(0=カレント、1=A:、2=B:、……8=H)
  • 1~8 ファイル名(満たない場合はスペース)
  • 9~11 拡張子(満たない場合はスペース)
  • 12 カレントブロック
  • 13 システムで使用
  • 14~15 レコードサイズ
  • 16~19 ファイルサイズ(バイト)
  • 20~21 最終アクセス日付 YYYYYYYM MMMDDDDD
    (年 0~99 が +1980 を加えた西暦)
  • 22~23 最終アクセス時間 HHHHHMMM MMMSSSSS
    (秒 0~29 は 2 倍)
  • 24 デバイス ID
  • 25 ディレクトリロケーション
  • 26~27 先頭クラスタ
  • 28~29 最終クラスタ
  • 30~31 相対位置
  • 32 カレントレコード
  • 33~35 ランダムレコード

ファイルを開く場合、0~12 を満たします。12 のカレントブロックは通常 0 です。
ファイルの検索などではファイル名・拡張子として
ワイルドカード ? を使用できます。

ファイルを開くとドライブ番号がカレントだった場合は実ドライブに変更され、

12~31 はファイル情報で満たされます。


ファイル転送アドレス (DTA)

ファイルの中身を転送する領域の事です。
CP/M との互換性として 128 バイトが使用され、

デフォルトでは 0080H~00FFH を使用します。

この領域はアプリケーションの空いた領域に割り当てる事で、
ディスクアクセスを減らし、

高速化するなどする事が可能です。


ファンクションコール

ファンクション番号を C レジスタ、その他必要な入力レジスタを設定し、
MSX-DOS では 00005h、Disk BASIC では F37DH を CALL します。

BDOS では基本的にレジスタは破壊されます。
必要なレジスタは PUSH してスタックに入れるか、
領域へ値を入れて保存して下さい。

  • C=00H _TERM0 システムリセット CP/M
    MSX-DOS・Disk BASIC のコマンドレベルへ戻します。
  • C=01H _CONIN コンソール入力 CP/M
    ・出力レジスタ A=キャラクターコード
    1 文字入力します。ない場合は入力待ちになります。
    CTRL+C は中断 DOS・BASIC へ戻されます。
    CTRL+P はプリンターエコー・CTRL+N はプリンターエコー解除です。
    これらのキーは入力対象となりません。
  • C=02H _CONOUT コンソール出力 CP/M
    ・入力レジスタ E=キャラクターコード
    1 文字出力します。
    コンソールから CTRL+S が押された時は一時停止し、
    キーを押して再開できます。
  • C=03H_AUXIN 補助入力 CP/M
    ・出力レジスタ A=キャラクターコード
    補助入力機器から 1 文字入力します。
    補助入力機器がない場合、A には 1AH(EOF)を返します。
  • C=04H _AUXOUT 補助出力 CP/M
    ・入力レジスタ E=キャラクターコード
    補助出力装置へ 1 文字出力します。
    補助出力機器がない場合、何おせずに破棄されます。
  • C=05H _LSTOUT プリンタ出力 CP/M
    ・入力レジスタ E=キャラクターコード
    プリンターへ 1 文字出力します。
  • C=06H_DIRIO 直接コンソール入出力 CP/M
    ・入力レジスタ E=FFH 入力を受け付ける FFH以外 出力するコード
    ・出力レジスタ A=00H なし 00H 以外 入力されたコード
    入力文字はエコーバック・コントロール処理しません。
    出力はプリンターへエコーバックしません。
  • C=07H _DIRIN 直接コンソール入力
    ・出力レジスタ A=キャラクターコード
  • C=08H _INNOE コンソール入力
    ・出力レジスタ A=キャラクターコード
  • C=09H _STROUT 文字列出力 CP/M
    ・入力レジスタ DE=文字列開始番地
    $ を文字列の終端としてそれ以前までを出力します。$ は出力できません。
    Nextor で Fast STROUT モード(C=71H)が有効の場合、
    511 バイトまで有効です。
  • C=0AH _BUFIN 文字列入力 CP/M
    ・入力レジスタ バッファの先頭番地
    入力のためのバッファを確保する必要があります。
    最大入力は 255 文字ですが、任意に決められます。
    バッファの先頭番地 1 バイトには
    バッファのバイト-2=入力文字数を入れます。
    入力後、先頭番地+1 には入力された文字数、
    先頭番地+2 以降に文字列が入ります。
  • C=0BH _CONST コンソール入力状態の確認 CP/M
    ・出力レジスタ A=FFH 入力あり 00H 入力なし
    C=08H では確認を行うだけで、中身は取り出しません。
  • C=0CH _CPMVER CP/M バージョン情報の獲得 CP/M
    ・出力レジスタ HL=0022H
    CP/M との互換として用意されています。
    MSX-DOS・2 では常に 0022H 固定です。
  • C=0DH _DSKRST ディスクリセット CP/M
    デフォルトドライブを A:、DTA を 0080H に設定します。
    ディスクに書き込んでいなかった場合、リセット前に書き込まれます。
  • C=0EH _SELDSK デフォルトドライブの設定 CP/M
    ・入力レジスタ E=ドライブ番号(A=0、B=1、……、H=7)
    ドライブ番号 0 が指定された場合のドライブになります。
    接続されていないドライブが指定された場合、変更されません。
  • C=0FH _FOPEN FCB ファイルオープン CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 オープン成功 FFH=オープン失敗
  • C=10H_FCLOSE FCB ファイルクローズ CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 オープン成功 FFH=オープン失敗
    FCB の内容が書き込まれます。
    クローズじた FCB は再度オープンする事ができ、
    また、オープンしている FCB として引き続き入出力する事もできます。
  • C=11H _SFIRST FCB ファイル検索 初回 CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 ファイルが見つかった FFH ファイルが見つからなかった
    ファイルが見つかった場合、DTA の領域にドライブ番号、
    引き続く 32 バイトにファイルのディレクトリエントリを入れます。
    このデータはオープンされていない FCB として使用可能です。
    ファイル名には ? が使用できます。
    * は使用できないので ? に置き換えて下さい。
  • C=12H _SNEXT FCB ファイル検索 続き CP/M
    ・出力レジスタ A=0 ファイルが見つかった FFH ファイルが見つからなかった
    C=11H でワイルドカード検索をした場合、
    同じ条件で更に別のファイルを探します。
    ファイルが見つかった場合、DTA の領域にドライブ番号、
    引き続く 32 バイトにファイルのディレクトリエントリを入れます。
    このデータはオープンされていない FCB として使用可能です。
  • C=13H _FDEL FCB ファイル削除 CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 削除に成功した FFH 削除に失敗した
    ファイル名にワイルドカード ? を使用し、複数ファイルを削除できます。
  • C=14H _RDSEQ FCB シーケンシャル読み出し CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 読み出しに成功した FFH 読み出しに失敗した
    128 バイト単位で読み込まれます。
    MSX-DOS の場合、断片部分は 0 で埋められます。
  • C=15H _WRSQEQ FCB シーケンシャル書き込み CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 書き込みに成功した 1 書き込みに失敗した
  • C=16H _FMAKE FCB ファイル作成 CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 作成に成功した FFH=作成に失敗した
  • C=17H _FREN FCB ファイル名変更 CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 変更に成功した FFH=変更に失敗した
  • C=18H _LOGIN ログインベクトルの獲得 CP/M
    ・出力レジスタ HL ログインベクトル(L bit0=A: bit1=B: …… bit7=H:)
  • C=19H _CURDRV デフォルトドライブの獲得 CP/M
    ・出力レジスタ A=ドライブ (0=A: 1=B: …… 7=H:)
  • C=1AH _SETDTA ディスク転送アドレスの設定 CP/M
    ・入力レジスタ DE=ディスク転送アドレス
    デフォルトでは 0080H~00FFH がディスク転送アドレスに設定されています。
  • C=1BH _ALLOC ディスク情報の獲得
    ・入力レジスタ E=ドライブ番号 (0=カレント、1=A:、2=B:……8=H:)
    ・出力レジスタ A=クラスタあたりのセクタ数 BC=セクタサイズ(常に 512)
     DE=ディスク上のクラスタ総数 HL=ディスク上の未使用クラスタ数
     IX=DPBへのポインタ IY=最初のFATセクタへのポインタ
    Nextor で Reduced Allocation Information モード(C=75H)が有効の場合
    32MB 以上の場合は 32MB 未満の値にします。
    また SET ZALLOC=ON(Zero Allocation Information モード)の時は
    HL を 0 にします。
  • C=21H _RDRND FCB ランダム読み出し CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 読み出しに成功した 1 読み出しに失敗した
  • C=22H _WRRND FCB ランダム書き込み CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 書き込みに成功した 1 書き込みに失敗した
  • C=23H _FSIZE FCB ファイルサイズの獲得 CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 ファイルがいつ買った FFH ファイルが見つからない
  • C=24H _SETRND FCB ランダムレコードの設定 CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
  • C=26H _WRBLK FCB ランダムブロック書き込み
    入力レジスタ DE=FCB 先頭アドレス HL=書き込むレコード数
    ・出力レジスタ A=0 書き込みに成功した 1 書き込みに失敗した
  • C=27H _RDBLK FCB ランダムブロック読み出し
    ・入力レジスタ DE=FCB 先頭アドレス HL=読み出すレコード数
    ・出力レジスタ A=0 読み出しに成功した 1 読み出しに失敗した
  • C=28H _WRZER FCB ゼロ書き込みを伴うランダム書き込み CP/M
    ・入力レジスタ DE=FCB 先頭アドレス
    ・出力レジスタ A=0 書き込みに成功した 1 書き込みに失敗した
    ファイルを拡張した場合、拡張したクラスタを 0 で埋めます。
  • C=2AH _GDATE 日付の獲得
    出力レジスタ HL=年(1980~2079) D=月(1~12)
     E=日 A=曜日(0=日曜~6=土曜)
  • C=2BH _SDATE 日付の設定
    ・入力レジスタ HL=年(1980~2079) D=月(1~12) E=日(1~31)
    ・出力レジスタ A=0 設定成功 FFH 設定失敗
  • C=2CH _GTIME 時刻の獲得
    ・出力レジスタ H=時( 0~23) L=分(0~59) D=秒(0~59) E=1/100秒(常に0)
  • C=2DH _STIME 時刻の設定
    ・入力レジスタ H=時( 0~23) L=分(0~59) D=秒(0~59) E=1/100秒(無視)
    ・出力レジスタ A=0 設定成功 FFH 設定失敗
  • C=2EH _VERIFY ベリファイフラグの設定
    ・入力レジスタ E=0  ベリファイを無効に 0以外 ベリファイを有効に
  • C=2FH _RDABS 論理セクタの読み出し
    ・入力レジスタ DE=セクタ番号 L=ドライブ番号(0=A:、1=B:、…… 7=H:)
     H 読み出すセクタ番号
    ・出力レジスタ A=0 読み出し成功 0以外 読み出し失敗
    Nextor で FAT12 ではないドライブでは “Not a DOS disk” エラーを返します。
    代わりに _RDDRV(C=73H) を使用します。
  • C=30H _WRABS 論理セクタの書き込み
    ・入力レジスタ DE=セクタ番号 L=ドライブ番号)0=A:、1=B:、…… 7=H:)
     H 書き込むセクタ数
    ・出力レジスタ A=0 書き込み成功 0以外 書き込み失敗
    Nextor で FAT12 ではないドライブでは “Not a DOS disk” エラーを返します。
    代わりに _WRDRV(=74H) を使用します。

ファイルハンドル (MSX-DOS2)

MSX-DOS1(CP/M)での FCB に加えて
MSX-DOS2 ではファイルハンドルで管理できます。
ディレクトリを含むパス名をそのまま扱える、
カレント以外のドライブにもアクセスできる、
1 バイトのみで管理できる、などのメリットがあります。

MSX--DOS2 追加のファンクションコールでは
ファイルハンドルを使用する前提になっています。


ファイル情報ブロック(FIB)(MSX-DOS2)

ディレクトリ内のファイル・サブディレクトリを検索する等の用途で使います。
64 バイトの領域で 最初のエントリ検索・次のエントリ検索・新しいエントリ検索(C=40H~42H)から
新たに得る事ができます。

  • 番地+0 常に FFH
  • 1~13 ファイル名
  • 14 属性 下項目参照
  • 15~16 最終変更時刻
    bit11~15=時(24 時間)bit5~10=分 bit0~4=秒÷2(0~29)
  • 17~18 最終変更日付
    bit9~15=年(0=1980~99=2079)bit5~8=月 bit0~4 日
  • 19~20 開始クラスタ
  • 21~24 ファイルサイズ バイト単位
  • 25 論理ドライブ 下項目「ドライブ番号」参照
  • 26~63 内部情報(変更不可)

ファイル属性 (MSX-DOS2)

bit0=読み出し専用 bit1=不可視ファイル bit2=システムファイル bit3=ボリューム名

bit4=ディレクトリ bit5=アーカイブ bit6=予約(常に0) bit7=デバイス

 

ファンクションコールによって、bit7 は別の割り当てになっている場合があります。


ドライブ番号 (MSX-DOS2)

0=カレントドライブ 1=A: 2=B: 3=C: 4=D: 5=E: 6=F: 7=G: 8=H:

ファンクションコール等によって、0 は無効の場合があります。


エラー番号 (MSX-DOS2)

MSX-DOS 2 追加のファンクションコールでは A 固定です。

正常終了は 0 が A に入ります。

0 以外のエラーとなった場合、通常エラーを処理するルーチンを実行します。


ディスクパラメータ (MSX-DOS2)

ディスクパラメータの獲得(C=31)で取得します。
MSX=DOS2 では次のとおりです。

  • DE+1~2 セクタサイズ
  • 3 クラスごとのセクタ数 (2 の n 乗。n は 1 以上)
  • 4~5 予約セクタ数
  • 6 FAT 数
  • 7~8 ルートディレクトリのエントリ数
  • 9~10 論理セクタ総数
  • 11 メディアディスクリプタバイト
  • 12 FAT 毎のセクタ数
  • 13~14 ルートディレクトリの初期セクタ番号
  • 15~16 初期データのセクタ番号
  • 17~18 最大クラスタ番号
  • 19 ダーティディスクフラグ
  • 20~23 ボリューム ID (-1 の場合は ボリューム ID なし)
  • 24~31 システム予約

Nextor では次の違いがあります。

  • 9~10 論理セクタ総数 65535 を超える場合は 0
  • 24~27  論理セクタ総数 (32 ビット)
  • 28 ファイルシステムの種類 0=FAT12 1=FAT16 FFH=その他
  • 29~31 システム予約

MSX-DOS2 ファンクションコール

  • C=31H _DPARM ディスクパラメータの獲得
    ・入力レジスタ L=ドライブ番号  HL=32 バイトの領域
    ・出力レジスタ A=エラー番号 HL=ディスクパラメータの番地
  • C=40H _FFIRST 最初のエントリ検索
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
     HL=ファイル名の番地 (DE がファイル情報ブロックの場合)
     B=ファイル属性 IX=64 バイトの領域
    ・出力レジスタ A=エラー番号 IX=一致したファイル情報ブロックの番地
  • C=41H _FNEXT 次のエントリ検索
    ・入力レジスタ IX=ファイル情報ブロックの番地 (C=40H をそのまま使用)
    ・出力レジスタ A=エラー番号 IX=一致したファイル情報ブロックの番地
  • C=42H _FNEW 新しいエントリ検索
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
     HL=ファイル名の番地 (DE がファイル情報ブロックの場合)
     B=ファイル属性 bit7 新規作成フラグ
     IX=テンプレートを含んだファイル情報ブロック
    ・出力レジスタ A=エラー番号 IX=一致したファイル情報ブロックの番地
  • C=43H _OPEN ファイルハンドルのオープン
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
     A=オープンモード
    ・出力レジスタ A=エラー番号 B=新たなファイルハンドル
  • C=44H _CREATE ファイルハンドルの作成
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
     B=ファイル属性 bit7 新規作成フラグ
    ・出力レジスタ A=エラー番号 B=新たなファイルハンドル
  • C=45H _CLOSE ファイルハンドルのクローズ
    ・入力レジスタ B=ファイルハンドル
    ・出力レジスタ A=エラー番号
  • C=46H _ENSURE ファイルハンドルの確保
    ・入力レジスタ B=ファイルハンドル
    ・出力レジスタ A=エラー番号
  • C=47H _DUP ファイルハンドルの複製
    ・入力レジスタ B=ファイルハンドル
    ・出力レジスタ A=エラー番号 B=新たなファイルハンドル
  • C=48H _READ ファイルハンドルからの読み出し
    ・入力レジスタ B=ファイルハンドル DE=データ収納バッファの番地
     HL=読み込むバイト数
    ・出力レジスタ A=エラー番号 HL=実際に読み込まれたバイト数
  • C=49H _WRITE ファイルハンドルへの書き込み
    ・入力レジスタ B=ファイルハンドル DE=書き込みデータの番地
     HL=書き込むバイト数
    ・出力レジスタ A=エラー番号 HL=実際に書き込まれたバイト数
  • C=4AH _SEEK ファイルハンドルポインタの移動
    ・入力レジスタ B=ファイルハンドル A=位置 0 最初 1 現在位置 2 最後
     DEHL=A からの相対位置(符号を含む)
    ・出力レジスタ A=エラー番号 DEHL=新たなポインターの位置
  • C=4BH _IOCTL デバイス I/O 制御
    ・入力レジスタ B=ファイルハンドル DE=他のパラメータ
     A=コード 0 ファイルハンドル状態の獲得
     1 アスキー・バイナリーモードの設定 2 入力準備の確認
     3 出力準備の確認 4 画面サイズの検出
    ・出力レジスタ A=エラー番号 DE=結果
  • C=4CH _HTEST ファイルハンドルの検査
    ・入力レジスタ B=ファイルハンドル
     DE=パス名を含むファイル名 または ファイル情報ブロック の番地
    ・出力レジスタ A=エラー番号 B=0 異なるファイル FFH 同じファイル
  • C=4DH _DELETE ファイルあるいはサブディレクトリの削除
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
    ・出力レジスタ A=エラー番号
  • C=4EH _RENAME ファイルあるいはサブディレクトリ名の変更
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
     HL=新しいファイル名
    ・出力レジスタ A=エラー番号
  • C=4FH _MOVE ファイルあるいはサブディレクトリの移動
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
     HL=新しいパス名を含むファイル名
    ・出力レジスタ A=エラー番号
  • C=50H _ATTR ファイル属性の獲得・設定
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
     A=0 属性の取得 1 属性の設定 L=新たな属性(A=1)
    ・出力レジスタ A=エラー番号 L=属性
  • C=51H _FTIME ファイルの日付および時刻の獲得・設定
    ・入力レジスタ DE=パス名を含むファイル名・ファイル情報ブロック の番地
     A=0 日時の取得 1 日時の設定 HL=新たな日時(A=1)IX=新たな時刻(A=1)
    ・出力レジスタ A=エラー番号 HL=日時 DE=時刻
  • C=52H _HDELETE ファイルハンドルの削除
    ・入力レジスタ B=ファイルハンドル
    ・出力レジスタ A=エラー番号
  • C=53H _HRENAME ファイルハンドルの名前の変更
    ・入力レジスタ B=ファイルハンドル HL=新しいファイル名
    ・出力レジスタ A=エラー番号
  • C=54H _HMOVE ファイルハンドルの移動
    ・入力レジスタ B=ファイルハンドル HL=新しいパス名を含むファイル名
    ・出力レジスタ A=エラー番号
  • C=55H _HATTR ファイルハンドルの属性の獲得・設定
    ・入力レジスタ B=ファイルハンドル
     A=0 属性の取得 1 属性の設定 L=新たな属性(A=1)
    ・出力レジスタ A=エラー番号 L=属性
  • C=56H _HFTIME ファイルハンドルの日付および時刻の獲得・設定
    ・入力レジスタ B=ファイルハンドル
     A=0 日時の取得 1 日時の設定
     HL=新たな日時(A=1)IX=新たな時刻(A=1)
    ・出力レジスタ A=エラー番号 HL=日時 DE=時刻
  • C=57H _HGETDTA ディスク転送アドレスの獲得
    ・出力レジスタ DE=ディスク転送アドレスの番地
  • C=58H _GETVFY ベリファイフラグ設定の獲得
    ・出力レジスタ B=0 ベリファイ無効 FFH ベリファイ有効
  • C=59H _GETCD カレントディレクトリの獲得
    ・入力レジスタ B=ドライブ番号 DE=64 バイトの領域
    ・出力レジスタ A=エラー番号 DE=パス
  • C=5AH _CHDIR カレントディレクトリの変更
    ・入力レジスタ DE=変更するパス
    ・出力レジスタ A=エラー番号
  • C=5BH _PARSE パス名の解析
    ・入力レジスタ B=Bit4 ボリューム名 DE=解析文字列の番地
    ・出力レジスタ A=エラー番号 DE=終了文字の番地 HL=最終項目の番地
     B=解析フラグ C=論理ドライブ番号
  • C=5CH _PFILE ファイル名の解析
    ・入力レジスタ DE=解析文字列の番地 HL=11 バイトの領域
    ・出力レジスタ A=0 DE=終了文字の番地 B=解析フラグ
  • C=5DH _CHKCHR 文字の検査
    ・入力レジスタ D=文字フラグ E=検査文字
    ・出力レジスタ A=0 D=文字フラグ E=検査文字
  • C=5EH _WPATH パス文字列全体の獲得
    ・入力レジスタ DE=64バイトの領域
    ・出力レジスタ A=エラー番号 DE=完全なパス名 HL=最終項目の先頭
  • C=5FH _FLUSH ディスクバッファのフラッシュ
    ・入力レジスタ B=ドライブ番号 0 カレント FFH=すべてのドライブ
     D=0 フラッシュのみ FFH フラッシュして無効化
    ・出力レジスタ A=エラー番号
  • C=60H _FORK 子プロセスの起動
    ・出力レジスタ A=エラー番号 B=親プロセス ID
  • C=61H _JOIN 親プロセスへ戻る
    ・入力レジスタ B=親プロセス ID または 0
    ・出力レジスタ A=エラー番号 B=子プロセスのエラー番号
  • C=62H _TERM エラーコードを返して終了
    ・入力レジスタ B=終了エラー番号
  • C=63H _DEFAB アボート終了ルーチンの定義
    ・入力レジスタ DE=サポート処理ルーチンの番地 0 解除
    ・出力レジスタ A=0
  • C=64H _DEFER ディスクエラー処理ルーチンの定義
    ・入力レジスタ DE=ディスクエラー処理ルーチンの番地 0 解除
    ・出力レジスタ A=0
    Nextor では ディスクエラー処理ルーチンの番地 が HLDE になっています。
    (C の bit4 が 1)
  • C=65H _ERROR 直前のエラーコードの獲得
    ・出力レジスタ A=0 B=エラーコード
  • C=66H _EXPLAIN エラーコードの説明
    ・入力レジスタ B=エラーコード DE=64 バイトの領域
    ・出力レジスタ A=0 B= 0 説明出力可能 DE=エラーメッセージの番地
    Nextor では SET ERRLANG=EN の時漢字モードでも英語で出力します。
  • C=67H _FORMAT ディスクのフォーマット
    ・入力レジスタ B=ドライブ番号
     A=0 種類の選択 1~9 フォーマットの種類
     FEH パラメータの更新 (MSX-DOS1 標準へ更新)
     FFH ブートセクターの更新 (MSX-DOS2 標準へ更新)
    ・出力レジスタ A=エラー番号 B=選択文字列のスロット HL=選択文字列の番地
    Nextor では入力レジスタ A に次が追加されています。
     FBH クイックフォーマット
     FCH FAT12 は MSX-DOS2 ブートセクタ、
     FAT16 は Nextor ブートセクタへ更新
     FDH FAT12・FAT16 共 Nextor ブートセクタへ更新
  • C=68H _RAMD RAMディスクの作成あるいは破壊
    ・入力レジスタ A=0 消去 FFH サイズの検査
    1~FEH 作成するサイズ(16k 単位)
    ・出力レジスタ A=エラー番号 B=サイズ
  • C=69H _BUFFER セクタバッファの割り当て
    ・入力レジスタ B=0バッファ数の取得 1~ 要求バッファ数
    ・出力レジスタ A=エラー番号 B=バッファ数
  • C=6AH _ASSIGN 論理ドライブの割り当て
    ・入力レジスタ B=物理ドライブ番号 0=すべて(D=0)
     D=論理ドライブ番号 FFH=調査 0=解除
    ・出力レジスタ D=物理ドライブ番号
  • C=6BH _GENV 環境変数の獲得
    ・入力レジスタ HL=環境変数名の番号 DE=領域 B=DE 領域のサイズ
    ・出力レジスタ A=エラー番号 DE=環境変数の値
  • C=6CH _SENV 環境変数の設定
    ・入力レジスタ HL=環境変数名 DE=値
    ・出力レジスタ A=エラー番号
  • C=6DH _FENV 環境変数の検索
    ・入力レジスタ HL=環境変数名 DE=255 バイトの領域
    ・出力レジスタ A=エラー番号 DE=環境変数名の番地
  • C=6EH _DSKCHK ディスク検査状態の獲得・設定
    ・入力レジスタ A=0 取得 1 設定 B=0 有効(A=1)FFH 無効(A=1)
    ・出力レジスタ A=エラー番号 B=ディスク検索状態
  • C=6FH _DOSVER MSX-DOS のバージョン番号の獲得
    ・出力レジスタ A=エラー番号 BC=ROM バージョン DE=ディスクバージョン
    B が 2 未満の場合は MSX-DOS1 で C・D・E は不定
    バージョン表記は 0231H であれば 2.31 (BCD 形式)
    Nextor では Nextor のバージョン番号にも対応します。
    (下項目 Nextor ファンクションコール 参照)
  • C=70H _REDIR リダイレクション状態の獲得・設定
    ・入力レジスタ A=0 取得 1 設定 B=bit0 入力 bit1 出力(A=1)
    ・出力レジスタ A=エラー番号 B=状態

デバイスドライバー情報 (Nextor)

デバイスドライバー情報の取得 (C=78H) で得られる情報です。

  • 番地+0 デバイスドライバーのスロット番号
  • 1 デバイスドライバーのセグメント番号
    (Nextor・Nextor MSX-DOS 1 カーネル内デバイスドライバーは FFH)
  • 2 起動時割り当ての論理ドライブ数
  • 3 起動時割り当てドライブの一番若い番号
  • 4 bit7 が 0=Nextor の MSX-DOS 1 モード用デバイスドライバー
    (Nextor の MSX-DOS 1 カーネル内のとき)
    bit7 が 1=Nextor 用ドライバー
    bit1~6 未使用 (常に 0)
    bit0 が 0=Device-based のデバイスドライバー
    bit0 が 1=Drive-based のデバイスドライバー
  • 5 デバイスドライバーのメジャーバージョン番号
  • 6 デバイスドライバーのセカンダリバージョン番号
  • 7 デバイスドライバーのリビジョン番号
  • 8~39 デバイスドライバー名 (残りは 20H で埋める)
  • 40~63 予約 (現在は 0)

ドライブレター情報 (Nextor)

ドライブレター情報の取得(C=79H)で得られる情報です。 

  • 番地+0 ドライブの状態 0 未割り当て 2・3 未使用
    1 Nextor・Nextor MSX-DOS 1 モードのストレージデバイスとして割り当て
    4 RAM ディスクに割り当て (他のフィールドは 0)
  • 1 デバイスドライバーのスロット番号
  • 2 デバイスドライバーのセグメント番号
    (Nextor・Nextor MSX-DOS 1 カーネル内のデバイスドライバーは FFH)
  • 3 このデバイスドライバーで扱うドライブの数
    (Device-based デバイスドライバーは FFH)
  • 4 デバイス番号 (Drive-based・MSX-DOS1 モード用デバイスドライバーは 00H)
  • 5 論理ユニット番号
    (Drive-based・MSX-DOS1 モード用デバイスドライバーは 00H)
  • 6~9 最初のデバイスセクター番号
    (Drive-based・MSX-DOS1 モード用デバイスでは 00H)
  • 10~63 予約 (現在は 00H)

Nextor ファンクションコール

  • C=6FH _DOSVER バージョン番号の獲得
    ・入力レジスタ B=5AH HL=1234H DE=ABCDH IX=0
    ・出力レジスタ BC=0231h (=公式な MSX-DOS2 の最新バージョン 2.31)
     DE=NEXTOR.SYS バージョン番号
     HL=カーネル内の OS を示す文字列の番地
     IXH=1
     IXL=Nextor カーネルのメジャーバージョン番号 (2~15)
     IYH=Nextor カーネルのセカンダリバージョン番号 (0~15)
     IYL=Nextor カーネルのリビジョン番号 (0~255)
    MSX-DOS2 では IX の値を変えないため、
    入力レジスタを入れた場合でも IX=0 で返ります。これで判別が可能です。
    MSX-DOS1 モードの場合は A=01H BC=0100H IXH=01H となり、
    A・B・IXH で Nextor を判別できます。
  • C=71H _FOUT STROUT モードの切り替え
    ・入力レジスタ A= 0 モードの取得 1 モードの設定
     B=0 無効 (A=1) FFH=有効 (A=1)
    ・出力レジスタ A=エラー番号 B=モードの状態 0 無効 FFH=有効
  • C=72H _ZSTROUT ゼロ終了文字列出力
    ・入力レジスタ DE=文字列の番地
    ・出力レジスタ A=エラー番号
    C=09H は "$" がっ文字列の終了コードですが、
    C-72H では 0(ヌル)を終了コードにします。
  • C=73H _RDDRV セクタ直接読み出し
    ・入力レジスタ A=物理ドライブ番号
     B=読み出すセクタ数 HLDE=セクタ番号 (32bit)
    ・出力レジスタ A=エラー番号
    FAT12 に関係なく(FAT16 など)読み出し可能です。
  • C=74H _WRDRV セクタ直接書き込み
    ・入力レジスタ A=物理ドライブ番号
     B=書き込むセクタ数 HL:DE=セクタ番号 (32bit)
    ・出力レジスタ A=エラー番号
     FAT12 に関係なく(FAT16 など)書き込み可能です。
  • C=75H _RALLOC Reduced allocation information モード切り替え
    ・入力レジスタ A=0 モードの状態取得 1=モードの設定
     HL=bit0 A: bit1 B: …… ビット毎に 0 無効にする (A=1)  1 有効にする (A=1)
    ・出力レジスタ A=0 HL=物理ドライブのモード状態 bit0 A: bit1 B: ……
  • C=76H _DSPACE 総容量・空き容量の取得
    ・入力レジスタ E=論理ドライブ番号 A=0 空き容量の取得 1 総容量の取得
    ・出力レジスタ A= エラー番号 HLDE=容量 (k バイト) BC=容量の余り (バイト) 
    BC は HLDE による k バイト未満の容量を返します。
    この値は Reduced allocation information モードの影響を受けず、常に正しい値になります。
  • C=77H _LOCK ドライブのロック確認・設定
    ・入力レジスタ E=物理ドライブ番号 A=0 状態の取得 1 状態の設定
     B=0 ロック解除へ設定 (A=1) FFH=ロックへ設定 (A=1)
    ・出力レジスタ A=エラー番号
     B=0 ロックされていない FFH ロックされている
  • C=78H _GDRVR デバイスドライバー情報の取得
    ・入力レジスタ A=0 スロット・セグメント設定 1~ インデックス番号
     D=スロット番号 (A=0) HL=64 バイトの領域
     E=セグメント番号または FFh (Nextor MSX-DOS 1 カーネル内) (A=0)
    ・出力レジスタ A=エラー番号 HL=デバイスドライバー情報 (上項目参照)
  • C=79H _GDLI ドライブレター情報の取得
    ・入力レジスタ A=物理ドライブ番号 HL=64 バイトの領域
    ・出力レジスタ A=エラー番号 HL=ドライブレター情報 (上項目参照)
    MSX-DOS1 モードでも動作可能です。
  • C=7AH _GPART パーティション情報の取得
    ・入力レジスタ A=スロット番号
     B=セグメント番号 もしくは FFh (Nextor MSX-DOS 1 カーネル内のとき)
     D=デバイス番号 E=論理ユニット番号
     H=プライマリパーティション番号 (1~4)
     L=拡張パーティション番号 (プライマリマーティションでは 00h)
    ・出力レジスタ A=エラー番号 HLDE=パーティションの先頭セクタ番号
     B=パーティションタイプ 0 なし (パーティションタイプが存在しない)
      1 FAT12 4 FAT16 (旧設定 32MB 以下・廃止) 5 拡張パーティション
      6 FAT16 14 FAT16X (現在 Nextor では未対応) 
    MSX-DOS1 モードでも動作可能です。
  • C=7BH _CDRVR デバイスドライバー内のルーチンの直接呼び出し
    ・入力レジスタ A=スロット番号
     B=セグメント番号 もしくは FFh (Nextor MSX-DOS 1 カーネル内のとき)
     DE=ルーチン番地 HL=ルーチンに渡す引数 (8 バイト) のある領域の番地
    ・出力レジスタ A=エラー番号 BC・DE・HL ルーチンの戻り値
     IX=ルーチンの戻り値 AF の値
    MSX-DOS1 モードでも動作可能です。
  • C=7CH _MAPDRV ドライブレターの割り当て
    ・入力レジスタ A=物理ドライブ番号
     B=0 割り当て解除 1 起動時状態に戻す 2=割り当て
     HL=マップデータ (8 バイト) 領域の番地 (B=2)
      HL+0 スロット番号 1 デバイスドライバーのセグメント番号
       (Nextor・Nextor の MSX-DOS 1 カーネル内のデバイスドライバーは FFh)
      2 デバイス番号 3 論理ユニット番号 4~7 先頭セクタ番号
    ・出力レジスタ A =エラー番号
    MSX-DOS1 モードでも動作可能ですが制限があります。
  • C=7DH _Z80MODE Z80 アクセスモードの設定
    ・入力レジスタ A=デバイスドライバーのスロット番号
     B=0 モードを取得 1=モードを設定
     D=0 モード無効に設定 (B=1) FFH=モード有効を設定 (B=1)
    ・出力レジスタ A=エラー番号 D=現在の Z80 アクセスモード 0 無効 FFH 有効
    MSX turbo R のみ動作します。