IDEデバイスの緒元をATA の IDENTIFYコマンドの結果から拾って表示するプログラムはこれまでにも多数あります。 なかでも ideflags やideinf はよく知られているでしょう。
しかし実行後に一部の世代のIDE BIOSの機種ではハングアップしたかのようになることや、表示される情報の量が多すぎたり少なすぎたりということがありました。そこで実行後のフリーズを回避し、かつ98で利用する際に必要な程度の情報を表示することを目的として、本ツールを作成してみました。
解凍して得られる IDEDEV.EXEがMS-DOS実行プログラムです。
コマンドラインオプション無しで実行すると、タイトル表示のあと数秒間待ったあと、以下のように4つのIDEポートの接続一覧が表示されます。ただし初代B-FELLOW/B-mate,初代A-mate では最大2つまでの枠で表示されます。なお98画面上では罫線は半角2バイト文字で表示されています。
PORTのところはプライマリ/セカンダリ、マスタ/スレーブの4つです。TYPEのところは、通常のIDE HDDではHDDと表示されます。SATAの場合はIDEに変換していてもSATAと表示されます。Compact Flashの場合は CF と表示されますが、CF reset を起こしてアクセス不能になりやすい環境/デバイスであると判定された場合は、赤色の全角文字でCFと表示されます。CD-ROMドライブなどのATAPIデバイスは ATAPI と表示されます。その他HDDでなく不明なものはRmvと表示されます。なおアスタリスクがついているドライブは「BIG DRIVE」と呼ばれる、48bitのセクタ番地(128GiB以上)が使える潜在能力を持ちます。
MODEL NAMEのところは、本来40バイトの格納がありますが、表示画面の都合上18バイトまでとしています。ほとんどのデバイスでは20文字程度しか使っておらず以降は無駄な空白です。18文字で十分判別はつくと思います。ただしATAPIデバイスについては 右側の欄にはみ出して文字列の最後までを表示します(2.50から)。
native C/H/S は、IDEデバイスのファームウェアへの操作でCHSアドレスモードを使うときの標準状態の値です。この値はIDEデバイスへのinitialize device parameters コマンドの発行により変更可能です(最近のSSDを除く)。
Current C/H/Sは、それを表示します。PC-98の IDE BIOSによって事前に変更されており、一般に4351MB以下では S=17,H=8となっています。なお多くのCompact Flash デバイスでは、ATAリセットが起こるとこのパラメータが初期値に戻ってしまいます。
LBAは連続な論理ブロックアドレスでのセクタの総数です。そのため容量capacityにもなっていますが、メガバイト単位でないとわかりにくいので、MiBのところに容量値を情報MB単位で示しています。
デバイスごとに詳細を表示するモードです。コマンドラインオプションで/d番号 あるいは -d番号 のように、/か- のあと d か D を記述し、その次に数字(0~3)を指定します。0はプライマリマスタ、3はセカンダリスレーブに相当します。
このモードが指定されると、当該のポートに接続されているデバイスの詳細が表示されます。例えば SATA SSDですと 下記のようになります。SSDかHDDの区別はできません。とくに注意すべき点は次の技術的説明のところで述べます。
コマンドラインオプションで /f を記述すると、IDEデバイスから読みとった512バイト×4のデータブロックおよび4バイトの接続情報がファイルに保存できます。ファイルはカレントディレクトリ上に作られ、名前は IDENTIFY.BIN です。詳細を調べたいときはこのバイナリファイルの内容を読み取ることができます。格納順序はIDEポート順です。先頭から512バイトがプライマリマスタのデータです。接続がないポートには空のデータ(通常すべてゼロ)が詰まっています。ATAPIデバイスの場合は、IDENTIFY ATAPI コマンドで読みとった情報が入っています。4バイトの接続情報は末尾に付きます。01hはHDDなどのIDE,ATAデバイスの接続、80hはCDROMドライブなどATAPI接続のあることを示します。なおこの情報の仕様はバージョン2.00からとなり、それ以前とは異なります。
-x数字 <数字は0..3>
このオプションが指定されたデバイスをチェックしないようにします。指定できるのは1つだけです。複数回指定しても最後に記述されたもののみ有効です。動作の異常を引き起こすデバイスを避けたいときに使うとよいでしょう。
-r数字 <数字は0..3>
このオプションが指定されたデバイスにATAリセットを行います。バージョン3.50で追加されました。-h以外の他のオプションと同時使用できません。
-c数字 <数字は0..3>
デバイスがCFのときのみ使用してください。Sandisk製やいくつかのCFに対して、 ATAリセットとなったときに"パワーオン時デフォルトに戻さない"設定がされます。 これにより、いわゆるCFリセットが起こらなくなり、PC-98オンボードIDEで安定してCFが使用できるようになります。実行後にデバイスの諸元の表示は行われません。バージョン3.60で仕様が変更されました。-h以外の他のオプションと同時使用できません。
-z数字 <数字は0..3> 上記の設定の逆を行うものです。CFに対して、ATAリセットとなったときに"パワーオン時デフォルトに戻す"設定がされます。使い方は-cに準じます。バージョン3.60で追加されました。
-P -W -B のオプションはバージョン3.00で廃止されました。
このプログラムでは ATAのIDENTIFYコマンドを発行して512バイトの情報を読みとります。バージョン3.00ではこれまでと違い割込みを使いません。
IDEのハードウェアを操作する処理は、IDE BIOSが行う仕事と無関係のため、IDE BIOSが把握している状態と食い違ってしまう可能性があります。とくにIDE BIOSの第2~第3世代(B-fellowからX-mateの頃)の機種では、IDEのハードウェア操作のあとにIDE BIOSによるアクセスをすると、ハングアップしたかのようにフリーズします。実際には1分以上の程度の待ち時間のあと、初期化動作になり回復はします。しかし時間がかかって不便なうえ、CFを使っていれば「CFリセット」が発生してしまいます。
本プログラムバージョン3.00からは、セカンダリの接続デバイスを操作後にプライマリに戻すほか、スレーブに接続されているデバイスを操作したあとにプライマリに戻すという手順を入れています。また一部の古いATAPIデバイス(コマンド送出後ステータスレジスタに58hが返るもの)に対しては読み出し後にステータスレジスタを再度読み出しています。これらにより概ねIDE BIOSの把握する状態との不一致を回避できているようです。
CD-ROMドライバをインストールした状態での動作確認は取っていません。インストールされたCD-ROMドライバによっては、本プログラム実行後に異常が発生する可能性があります。
オプション -C番号 では、指定されたデバイスにSet Features sub command 66hを発行します。デバイスがCFのときのみ使用してください。Sandisk製やいくつかのCFに対して、ATAリセットとなったときに"パワーオン時デフォルトに戻さない"設定がなされます。
-dn オプションで表示される内容のうち、「WORD番号:」となっているものは、IDENTIFYで得たデータの何ワード目に当該の情報があるかを示しています。細かいことは歴代のATA規格の古い仕様書(英文)をお読み下さい。98に関連する事項は最新の規格書ではことごとく廃止(obsolete)とされてしまっています。ATA-2か3くらいまでの古い規格書のほうが役に立ちます。
本プログラムでは、98オンボードIDEに関連することのみを表示しています。いくつか注意点を挙げておきます。
LBA supported これが表示されないドライブは相当に古いもので、くせ者です。
IORDY supported. これが表示されないドライブは相当に古いもので、低速です。
この数値が表示されないかゼロの機種では、マルチセクタR/Wがなく遅いです。具体的にはIDE搭載初期から初代B-mate/B-FELLOW、初代A-mateまでの機種です。それ以外の機種では次の、
の数値と一致するはずです。ただしSSDやCFではこの機能がないか数値が低いものがあります。SSDでは待たずに読めるのでマルチR/Wは必要ないと判断されているようですが、そもそも転送速度の遅い98のI/O転送では問題になるかもしれません。実際SSDやCFはHDDより転送速度が遅いのですが、これも原因の一つかもしれません
この表示がないドライブは相当に古いもので、低速ですが、X-mateより前の機種では本体がこの転送モードを持たないので、さほど問題ありません。それ以降の機種では使うべきでないドライブといえます。
この数値が120のドライブは十分高速ですが、それより大きな値のものは遅い感じがするかもしれません。
これらは当該機能の有る場合のみ表示されます。[SET MAX]と[HPA]は容量の変更が可能なドライブを意味しますが、一部のSSDやCFのように、実際に容量の書き換えができない物(98で参照するCHSの容量が書き変わらない)ものあります。[SMART] は98のDOS上で表示できるソフトウェアは見たことがありません。普通はWindows機に繋いで crystal disk infoなどのソフトウェアで見ることが多いでしょう。なお[CFA]はCompactFlash属性を意味しますが、非常に旧くCFA規格制定以前に製造されたCFでは、これが表示されません。
これらが表示されるのはSATAのドライブだけです。SATAの規格も相当に遷移してきましたが、それらを示しています。基本的に98上で使う変換を介した場合、SATA 1.0a を満たしていれば十分なはずです。
ソースファイルが source35.zip のアーカイブに入っています。C言語で書かれたものとMSAM 6.0準拠のアセンブラで書かれた物があります。IDEDEV.C がメインのプログラムで、その他は別途コンパイルしてobjファイルを生成し、16itリンカーでリンクしてください。アセンブラやリンカーによっては、アセンブラソースで定義された関数やデータの名前解決ができないというエラーが出るかも知れませんが、各々の開発環境の詳細までは判りかねます。Cとアセンブラを併用したプログラムの開発に関わる問題は各自で解決してください。なおソース中の文字列ではPC-98依存の半角2バイト文字が使用されています。PC-98以外の処理系で開くと、不明なコードの文字としてエディタなどから警告が出る可能性があります。
このソフトウェアはフリーソフトウェアです。自由に使っていただいて構いません。
ソースファイルをこれを流用して何かを作ることは妨げません。ただし商用ソフトウェアにはしないで下さい。
プログラムは、ある程度のテストを経て公開していますが、動作が完璧に行なわれるということを、作者は保証するものではありません。
実行後にIDEドライブにアクセスできなくなるなどの不具合に付随した逸失利益、精神的損害について、作者である私は、一切責任は負わないものとします。これらの点を了承できない方には、使用(ソースファイル含む)を認めません。
このソフトウェアを、不特定多数のダウンロードできる場所へ無断転載することは、禁止とします(転載不可)。
年月日 | 版 | 内容 |
2023- 3- 8 | 0.98 | 新規 |
2023- 3-10 | 0.99 |
デバイス無接続時や特定CD-ROM接続時のハングアップを修正 デバイスが装備しない機能の数値は表示しないようにした LBAノンサポートのデバイスの容量はCHSで計算するようにした -dオプション時のモデル名が20文字で切られるのを修正 PCI機種ではATAPIも含む接続情報を参照するようにした |
2023- 3-12 | 1.00 |
一部のCompact Flashが ATAPIと表示されるのを修正 PCI機種でATAPIも含む接続情報F8E8:10は参照しないようにした PCI機種ではHDDのみの接続情報0:5BAを参照するようにした 除外オプション -X および ウェイトオプション -W を追加 |
2023- 3-14 | 2.00 |
BIOSで認識したデバイスの情報を一切使わない方法に変更した 割り込みを使わない オプション -p の追加, -w の仕様変更 |
2023- 3-20 | 2.01 |
割り込みを使わない オプション -p で割り込みを使っていたのを修正 ソースプログラムの記述にある些細だが多数の誤りの修正 |
2023- 3-21 | 2.50 |
タイムアウトを知らせる -B オプションの追加 |
2023- 4- 1 | 3.00 |
割込みを使用しない仕様に変更、-W -P -B オプション廃止 |
2023- 4- 4 | 3.01 |
スレーブ接続のATAPIデバイスが表示されないことがある問題を修正 |
2023- 4-20 | 3.02 |
CD-ROM4台接続時に途中経過の情報が画面に残る問題を修正 |
2023- 7- 1 | 3.04 |
ソースプログラムの修正 |
2024- 3- 3 | 3.50 |
CFのためにコマンドラインオプション -cn ,-rn の追加 |
2024- 3- 6 | 3.60 |
CFのためのコマンドラインオプション -cnの仕様変更, -zn の追加 |
2024- 3- 6 | 3.61 |
-cn,-znのときのenable/disable表示の誤りを修正 |