IDE masterしか使えない機種でslaveを使う

まりも(DOSsoft)

2019年3月12日 作成 2024年4月14日改訂

■ IDEスレーブ接続を使おう

 PC-9801/9821でIDEインターフェイス2ポートのマスターとスレーブ接続のディスクドライブが使えるようになったのは、PCIバス搭載のXa/Cシリーズからです。それ以前の機種では2台あるいは1台までの接続で、スレーブのドライブはBIOSから認識されません。またノート機は空間的制約を別としてもマスターの1台しか認識できません。

 BIOSでの認識ではなく直接IDEポートにアクセスする場合は、スレーブのディスクドライブでも使用できますが、V33ファン氏作成のIDE_DISKというDOSデバイスドライバ(シェアウェア)しか知られていません。このほかATASPIというATAをSCSI ASPIに見立てるドライバを介して、Generic ASPIディスクドライバを使用する方法も考えられますが、DOSメモリ占有量が大きいことや、Win95OSR2のFAT32に対応しているものがまずないという問題があります。

 もしBIOSで認識できれば、DOSでも認識できブートもできる可能性がありますから、いろいろと自由度が大きくなります。そういうわけでBIOSでスレーブドライブを認識する方法を試みる人はいるでしょう。

■ スレーブが使える可能性は?

 IDE BIOSの内部をみますと、物理ドライブ(マスタ=0・スレーブ=1)を変数(スタック変数[bp+00])として扱っているところがあり、0で機能を呼び出せばマスター側の操作が行われます。というようにIDEデバイスを操作するルーチンではとくにマスター決め打ちとはなっていません。しかしどこかでスレーブを認識しない仕様にされています。おそらくはIDE BIOSが動き出す前の装置認識の段階であえてスレーブを無視しているのではないかと思われます。

 ディスクドライブに対してアドレスを伝える際に、CHSという方式とLBAという方式がありますが、CHSの際は1トラック(ヘッド)あたりセクタ数、1シリンダあたりヘッド数などのパラメータが必要となります。これはドライブの容量ごとに異なりうるものであるため、本来はディスクドライブごとに設定をBIOS内で記憶しておく必要があります。しかし98のIDE BIOSのうち、1台しか認識しないモデルではドライブごとのパラメータ記憶場所がないようです。このことはスレーブ認識の際に大きな問題となりえそうです。いっぽうPCIバス搭載機では4台分の個別のパラメータテーブルが用意されたBIOSとなっており、これに該当するBIOSの機種ではスレーブ認識が比較的容易であると考えられます。

 デスクトップ機についてIDE BIOSを接続台数や内部構造で大別すると、次のようになるでしょう。

これらのうち(3)はそもそもスレーブが使えます。(4)の機種は(3)とBIOSの構造はほぼ同じなのですが、あえてスレーブ認識ができなくされています。まずはこのスレーブを使えるようにしようというわけです。

■ どうやって認識するのか

 少なくともOSが起動する前にはBIOSで扱えるようにしておく必要があります。それができるのは、(@)拡張ROMブートの段階、(A)HDまたはFDのIPL起動の段階 の2つですが、別途のハードウェアを必要としない後者のほうが汎用性がありコストもかかりません。HDDのIPLではIPLwareというものが使用できますので、問題はディスクドライブやBIOS本体またはその作業域にどのような操作を加えるIPLwareを作るかということに絞られます。

 結論としては、実際に作った「リウ」さんという方がいらっしゃいますので、その方の作品を見た方が早いと思います。リウさんは98エミュレータの改良も手がけており、Twitterでも活動していらっしゃいます。

 リウさんの Google driveIDE-SL完成2.7z Google driveIDE-LBAパッチに統合

 作成のきっかけとなったのは、 掲示板でのやりとりです。

 意外なことに、BIOSのワークエリアのうち SASI/IDEディスクドライブの存在をbitで記憶しておくワークエリア0000:055Dを騙すだけで、BIOSルーチンはスレーブへのアクセスを開始するようです。これはBIOSの基本ルーチンがマスター決め打ちとはなっていなかったからこそ可能となっています。

 しかしそれだけではダメで、正しいアドレスに読み書きができません。CHSに関するパラメータは、BIOSにもありますが、ディスクドライブのファームウェアにも通知しておかなければなりません。しかしスレーブ接続のディスクドライブではその設定がなされない状態にあります。PC-98のIDEでは4.3GBまでのディスクドライブは8ヘッド17セクタで設定されるのですが、それがデフォルトの値のままとなっています。このデフォルト値は多くは16ヘッド63セクタですが、基本的にはデバイス依存です。これを8:17に設定するルーチンも必要ということになりました。

 ちなみにCompact Flash(CF)やSSDにおいては様々な値のものが存在し、しかもCHSが設定できないものがあります。そのようなCFやSSDでは98ではまったく認識できず、繋いだだけでハングアップします。98でまったく認識もできないCFというのはこれに該当していると筆者は考えています。また多くのCFでは、何かの拍子でATAデバイスにリセットが行われたときに、CHSパラメータが初期値に戻ってしまう事象(CFリセット)を引きおこします。

 IDE BIOSのタイプ(4)についてはこのほか接続ディスクドライブごとのCHSパラメータテーブルの設定も必要となります。またディスクドライブの諸元を読み出した情報の格納領域もドライブ毎に存在します。これらの格納エリアを正しく設定すれば、(4)の機種では問題なくIPLwareでスレーブが活性化できるようです。

■ 注意すべき点

 (3)と(4)の機種では、接続ポート昇順にデバイス/ユニット番号(DA/UA)が割り振られます。DA/UAはBIOSをコールする際のディスクドライブの識別子となります。IPLwareでスレーブをあとから認識させると、これが昇順でなくなる可能性があります。そうなるのは、
80h プライマリ・マスター
81h セカンダリ・マスター
となっているところに
82h プライマリ・スレーブ
を認識させた場合です。本来は
80h プライマリ・マスター
81h プライマリ・スレーブ
82h セカンダリ・マスター
となっていなければなりません。物理ポートとDA/UAの対応が想定外となっていると、いくつかのディスクユーティリティでは齟齬が生じるかも知れません。拙作のツール類のうちかなりがそれに該当します。接続ディスクドライブリストが表示されるものがそれです。IDEの場合のみ、BIOSワークエリアから拾ったドライブ名称文字列を表示しますが、これがDA/UAと合わなくなりますので注意してください。DA/UAのほうを信用してください。

 なおMS-DOSのフォーマッタ(FORMAT.EXE, DISKINIT, FDISK,FORMAT.COMなど)はDA/UAに基づいた通しの「装置番号」(#1,#2,#3,,,)を使っているので、問題はないと考えられます。

■ さらなる展望

 既に理由を述べたように、1台および2台認識の(1)(2)の機種では、スレーブ認識はかなり難しいこととなります。とくに(2)の機種は厄介です。(1)の機種については、4.3GB以内ではCHSパラメータは8:17しかなくディスクドライブで異なることはありませんから、たんに存在フラグを立てるだけでもスレーブにアクセスできます。しかしシリンダ数のパラメータまでマスターと共用されてしまうので、問題が生じます。まったく問題が無いのは、マスターと完全に容量(総セクタ数)が同じドライブをスレーブに接続した場合です。

 これに関しては、容量の4.3GBあるいは543MB上限を取り除くためのBIOS改良と同時に対処するという方法が考えられます。CHSとLBAの変換で用いているCHSパラメータの格納場所を、2台別々のところに置かれるようにしてしまうことです。今後の課題としておきます。

■ スレーブ接続の意外な効用

 (1)の機種(An除く)と(2)の一部の機種では、マスターに接続した場合の容量の上限が543MBとなっています。しかし起動時にBIOSで無視されるスレーブ接続では容量過大でもハングアップしません。IPLwareで543MB壁のないようにしたあとは(*) 4.3GBまでは同一のCHSパラメータで扱うことができます。つまり容量の壁を大きくするという目的でもスレーブ使用の効用があります。
(*)IPLwareではないIPL組み込みソフトとして、REIが知られているほか、IPLwareとしてはEXIDE543があります(ただしノート機と9801USで動作しない)。

 PC-98で使うために容量を4.3GBなどに制限するツールとして、K.Takataさん作の「ICC」 あるいは拙作のICCfixがあります。これはディスクドライブを直接操作します。スレーブに接続しておけば起動時にハングアップすることがなく、ICCあるいはICCfixの適用が可能となります。PC/AT互換機に接続してICCを適用するという記事もありますが、いまどきのPC/AT互換機にはPATAのポートがないどころか、10年前頃の機種でもIDEポートの従来互換性が低下しておりICCが走りません。むしろスレーブ無視のPC-98で実行したほうが確実です。このときはICCあるいはICCfixの実行時に、デバイスオプション -d1 を付けてください。

■ CD-ROMやDVDドライブのスレーブ接続

 (1)の機種ではスレーブにCD-ROMドライブを接続することすら考慮されていません。当時CD-ROMドライブといえばSCSI接続があたりまえだったからです。(2)の機種ではセカンダリ・マスタにCD-ROMを接続するという仕様となっていました。しかしセカンダリ・マスタはHDDも認識できる貴重なポジションです。プライマリかセカンダリのスレーブにCD-ROMドライブを移設できればそれに越したことはありません。

 MS-DOS 6.2およびWindows 9xのインストールFDの中のDOS 7.xには NECCD*.SYSというデバイスドライバがあります。機種や接続位置ごとに使い分けなければならずかなり面倒なのですが、このうちNECCDM.SYSはどのポートのマスタ・スレーブに繋いでも認識できるという仕様になっています。とくにWindows 95OSR2付属のものは死角なしの最強版のようです。ただしノート機では認識できないポートがあり、ノート機であるかのBIOSフラグを騙した状態でないと全ての接続でOKとはならないようです。

 (2)の機種でもこのNECCDM.SYSやPATACD.SYS(試作品となっている)を使えば、スレーブでCD-ROMドライブをDOSで使用できるようになります。しかし(2)の機種の多くでは、セカンダリ・マスタのポジションに特定の(標準添付の、または指定のオプション品の)CD-ROMドライブを接続しないと、起動時に非常に長い時間(1分〜数分)待たされるという問題があります。案外素直なのは(1)の機種のプライマリ・スレーブにCD-ROMを繋いだ場合です。最初からCD-ROMドライブの接続を想定していないBIOSのため無用なアクセスが行われないのでしょう。

 スレーブに勝手にCD-ROMドライブを接続し、CD-ROM用のデバイスドライバを組み込んだ場合、前述の「CFリセット」が必ず発生するという問題があることも知っておいてください。そのほか転送速度が低下する問題も起こります。94年中期頃以降の98のIDEには高速転送モードが備わっているのですが、スレーブにHDD/SSDではないものがあると低速にされてしまいます。なおCFでなければこの問題は関係ありませ(SSDではたぶん問題ありません)。

■ MS-DOS以外のOSでのスレーブ認識の可能性

 現在この実験をされている方がいらっしゃるようですから、情報が集まるのを待ちたいと思います。Windows95,98はともかく、基本的にWindows NT,2000では厳しいようです。そもそもがBIOSを使わないドライバで動作しているので、BIOSのワークエリアをごまかしても通用し難く、もともとの仕様どおりにデバイスドライバは認識するようです。これはHDDに限らずCD-ROMドライブの場合でもそうです。

■ まとめ

 2024年現在、無理矢理スレーブにデバイスを接続することは、次の条件では可能ということが判明しています。

     2019-3-12  改訂2020-2-27, 2024-4-14 まりも(DOSsoft)

[戻る]