PC-98x1/disk/int 1Bh,AH=0Eh

PC-98x1/disk/int 1Bh,AH=0Eh

まとまらないメモ。

動作内容

テクニカルリファレンス(BIOS 編)上に説明がほとんど存在しない。
というか DISK BIOS の章にある「●2.5インチ内蔵固定ディスク」の項にある

従来(SASI)20M バイト固定ディスクにあった,厚型/薄型のインターフェース(MODE SET コマンド)もサポートする.

というのがおそらくこれに関する唯一の記述。おわかり頂けるだろうか、肝心の MODE SET コマンドに関する記述は一切ないんですよ…。

undoc1 によると、SASI/IDE のモード設定を行う、らしい…。

  • int 1Bh, AH=8Eh, AL=DA/UA:薄型モードに設定
  • int 1Bh, AH=0Eh, AL=DA/UA:厚型モードに設定

設定を行うと、システム共通域内にあるフラグが変更される。undoc2:memsys.txt 参照。

DA/UA フラグ
80h 0000:0481h bit0
81h 0000:0481h bit1
82h 0000:0590h bit0
83h 0000:0590h bit1

手持ちの実機(PC-9821Xc)で実行してみたが、int 1Bh, AH=8Eh を呼び出すと、対応する DA/UA のフラグが 0 になった。 AH=0Eh だと 1 になった。 つまり AH の bit7 と逆になる。 ちなみに呼び出し前の 0000:0481 bit1-0 は 11、0000:0590 bit1-0 は 00 だった。

なお、システム共通域(0000:0400〜0000:05FF)のメモリ内容はこのフラグ以外なにも変わらなかった。

ちなみに「EPSON PCシステムガイド」には載っていた。AH の bit7が「0:標準モード 1:拡張モード」となっている。bit6〜4はdon't care。 ただし標準モードと拡張モードの違いに関しては、20MBハードディスクのヘッド値(標準で8、拡張で4)以外の説明がない。

なお純粋なSASIインターフェースのBIOSの場合、DISK_PRM0(0000:05E8)とDISK_PRM1(0000:05EC)に設定されるディスクパラメータ(を指すポインタ)が変わる場合があるようだ…(変わらない場合もある。というか20Mバイトの場合以外は変わらない気もする…)

厚型と薄型の違い

正直よくわからん…テクニカルリファレンスの固定ディスク BIOS コマンドの説明を読むと 20M ディスクのシリンダ/ヘッド番号に薄型と厚型両方の数字が載っている。 一例として AH=06h (READ DATA) のレジスタ説明…

レジスタ 説明
AL DA/UA (80h〜81h)
BX データの長さ
256×n:PC-9801-27
512×n:XL/XA内蔵インターフェース
CX シリンダ番号
DH ヘッド番号
DL セクタ番号
ES:BP バッファ先頭アドレス

で、シリンダ番号とヘッド番号の範囲…

ディスク容量 シリンダ ヘッド
5M 0〜152 0〜3
10M 0〜309 0〜3
20M(厚型) 0〜307 0〜7
20M(薄型) 0〜614 0〜3
40M 0〜614 0〜7

MS-DOS の HDD (SASI/IDE) 用 IPL には int 1Bh, AH=8Eh を呼び出すコードが含まれている(disktut 参照)。 ためしに実機で int 1Bh, AH=0Eh/8Eh を呼び出さずにディスクアクセスを行おうとすると BIOS はエラーを返した。 エラーコードは 40h:Equipment Check、つまり BIOS 的には未サポートユニット扱いとなる。 ハードディスクを BIOS 的に叩き起こす意味でも重要な BIOS コマンドではある。

新SENSE さえもサポートされてないクソ古い SASI(あるいは最初期の98NOTE)あたりだとパラメータ変更に意味があるような気もするが…

めも