* 98のSCSI接続HDDのフォーマット互換性とNECチェックの話 *

(04-05-14修正)


 書き溜めているうちにちょっと長くなってしまいました・・・。要望があれば分割します。

● 標準でないSCSI?

● C/H/Sパラメータについて 04-05/14 追記

● CCSとベンダユニーク

● 92ボードと標準フォーマット

● SCSI-2規格の登場とフォーマット規格の乱立

● マルチベンダから92フォーマットへ

● 「nEC」の時代


標準でないSCSI?

 国際標準機としてPC98-NXが華々しく売り出されたのは97年の話ですが、一般的にはH98路線を捨てて(デスクトップで)IDEを採用した93年ごろから既に98のAT互換機化が始まり、翌年のMATE-Xシリーズでその流れが決定的となったと言われています。しかし一説によれば、そのはるか以前、SCSI規格という面で既に世界標準化が始まっていたとも言われます。ところがそんな国際標準規格でも、SCSIは当初からだいぶ規格のばらつきが見られたようなのです。独自色の強い当時の日本のPC業界で標準の地位にあったNECが、98において独自規格で補完していたという一面から来ていたのかもしれません。そういえば、NECのCD-ROMはパリティに対応していないことはよく言われていますが、ごく初期のものとなると、Windowsのネイティブドライバすら通らないことさえあります(DOS用ドライバで認識は出来ますが、当然AT互換機では使えません)。実際、当時のNECの独特なSCSI規格は、ドライブのメーカーの技術者たちにとって頭痛の種だったそうです。しかし、ユーザーを含めてもっとも混乱を招いたのはHDDのフォーマットパラメータでしょう。

 そこで、ここでは表題について私が過去の雑誌やweb上の情報などを読んで個人的に理解できたことをまとめてみます。お約束として、雑誌の記事というのは当時の最新情報ですので、今となってはわからない経緯が分かる反面、限られた時間で最新情報を探って書かれたものですから、とんでもない勘違いがあったり、よく分かっていないまま書かれることもあります。今となっては必ずしも鵜呑みに出来ない記事もあるかもしれません。ここに書かれていることは、あくまで私個人の理解で筋が通っていると見なせたものをまとめ、さらに一部個人的な予想も混ぜたものですので、若干の勘違いがあるかもしれませんが、その際はぜひご指摘ください。

C/H/Sパラメータについて

 もともとSASI時代から、HDDにアクセスするには、ディスクの物理的なシリンダ(C)、ヘッド(H)、セクタ(S)を別個に指定していました。これらはパラメータと呼ばれ、円筒座標でイメージすると分かりやすいかもしれません。BIOSまわりのインターフェースもこのC/H/Sの指定を介して行っていたそうです。それがSCSIのHDDになると、一括のリニアなアドレス(LBA:リニアブロックアドレス)方式でアクセスできるようになりました。しかし、少なくとも98ではSASIとの互換性のためにBIOSを介したアクセスはC/H/Sに変換して行う仕様となったようです。



CCSとベンダユニーク

 NECはSASIに代わるHDD I/FとしてPC-9801-55からのSCSIボードの規格を定める際、SCSIコマンドのモードセンスでHDDから得られるデータに、ドライブのC/H/Sパラメータを盛り込みました。HDD容量もこれらから計算できます。しかしこれはNEC独自の取り決めとなり、SCSI-1時代に制定された共通コマンドセット(CCS)の規格には含まれませんでした。当時はベンダユニークという概念があり、各社が独自のSCSI命令による拡張仕様を決め、同じメーカーのSCSIボード〜SCSI機器間でやり取りしていました。NECの、HDDに直接C/H/Sを問い合わせるという方式は、言わばベンダユニークコマンドだったのです。

 CCSでは、リードキャパシティというSCSIコマンドでLBAの最大アドレスを得ます。これとセクタサイズとの積をとればドライブ全体の容量が得られます。しかし、NECのHDDはこれを含め、いくつかのCCSコマンドにすら対応していませんでした。結果としてNECのSCSI仕様はCCSと違った扱いにくいものになっていました。そこでNECは、55系SCSIボードにドライブのNECベンダチェックを行わせ、自社製以外のHDDが繋がれていたらビープ音とともにPC起動を止めてしまうという対策を取りました。これがいわゆる悪名高いNECチェックというものです。実際、モードセンスデータに正しいC/H/Sパラメータを返さないHDDを繋ぐと正しく認識できないばかりか、下手にアクセスして大切なデータを失いかねませんから、安定性重視のNECらしい対策でした。しかし、サードパーティがうまくC/H/Sを返すようにHDDを作ってもNECのSCSIボードには使えないという仕様は評判が悪く、サードパーティがNECチェックを免れるために「NEC〜」で始まるベンダ名を使うことを認めたといいます。そういう意味ではNECチェックとは、まだSCSI規格が確定していない時代の暫定的な措置だったと考えられます。

92ボードと標準フォーマット

 やがてNECはPC-9801-92というSCSIボードではNECチェックの仕様を若干変更し、ベンダ名チェックでNECと返さないSCSI-HDDに対しては8ヘッド/32セクタと見なし、シリンダ数は上記のCCSのリードキャパシティコマンドで求めた総容量をもとに計算します。このようにすることで、55ボードの方式では正しいC/H/Sを得られない(結果として容量が正しく認識できない)他社製HDDに対しても、シリンダ数(この場合は16bit)の許す限り、ほぼ正しい容量で認識することが出来ます。セクタのサイズが512バイトの場合、512Bx65536x8x32で、8GBまで認識できます(それ以上のドライブは無視され、Windows上などでだけ使用可)。なお、PCI版の純正(アダプテックからのOEM)SCSIでは、8GBを超えるHDDに対しては128セクタと見なし、32GBまで使用できます。

 余談ですが、文献によっては92ボードまではNECチェックがあったとするものと、92ボードではNECチェックがなくなったとするものがあります。今述べたように、92ボードもNECのベンダチェックは行っています。なぜならリードキャパシティを使えないNEC製HDDを区別する必要があるからです。しかし一般的にはNECチェックとは、NEC以外のHDDを使えなくするものという風潮がありますので、92ボードにはNECチェックは無いと言えば無いし、あると言えばあるのです。なお92ボードと同時期のPC-9821A-E10(SCSI専用スロット用)や、PC-H98-B12(NESAバス用)でも92と同様ですが、同じ時期でも9821無印/CeオンボードSCSIは55相当でした。

 C/H/SはどのみちLBAに変換してしまうので、HDDの物理的なC/H/Sと一致していなくても普通に使用できます。ただ、SCSI I/Fの種類によってこの値が異なると、フォーマットが異なってアクセスできません。これは結果として98のC/H/Sを介すアクセス方法が、各社ごとのSCSIボードでフォーマットの互換性がとれない問題を引き起こしました。そこで、ある程度新しいSCSIボードでは92ボードのフォーマットパラメータが標準フォーマットである、と見なされるようになりました。しかしそこにたどり着くまでには以下のようにまだまだ険しい道程があったのでした。

SCSI-2規格の登場とフォーマット規格の乱立

 やがてSCSI-2規格が囁かれはじめるようになりますと、モードセンスデータのC/H/Sパラメータが正式にSCSI-2コマンドに取り込まれました。しかしながらその後も市場にはまだベンダユニークなドライブがあり、各社ごとのHDDでSCSIコマンドに対する振る舞いが違うため、どのようにC/H/Sパラメータを割り振るか、各社は頭をひねりました。それまでに出していた製品の中には55時代のNEC方式との互換性を考慮して作られたものもありましたから、問題は複雑になりました。SCSIボードとHDDでメーカーが違うと正しい容量を認識できないなんてことになれば、サードパーティ製品として価値がありません。実際より小さい容量に認識すれば明らかに損ですし、実際より大きい容量に認識すればフォーマット中にエラーとなりまったく使用できませんから、さらに性質が悪いです。そこで各社ともまず総容量はCCSのリードキャパシティコマンドで求めることにしました。ここから先は55ボードとの互換性を取るか否かで大まかに2通りに分かれました。

 一つは55ボードと同様にモードセンスのデータからC/H/SのうちHとSを得る方法です。そして総容量(ブロック数)をHとSで割り、Cの数を求めます。割り切れない余りは切り捨てますが、こうすることで、C/H/Sを正しく返さないドライブに対しても、それなりに総容量に近い容量で認識できますし、うまくいけば55ボードとフォーマットに互換性がとれるかもしれません。
 もうひとつは92ボードでも採用された方式であり、SCSIボード側で勝手にHとSを決めてしまうものです。この場合はHDDの総容量を元にC/H/Sを決めることが出来るため、割り切れない余り、すなわち無駄な領域を少なくなるようにH/Sを決めることも出来ました。しかしながら各社でH/Sを決める方法に互換性がなかったため、結局は各社ごとにフォーマットがまちまちで、SCSIボードの交換とともにフォーマットし直すことになりました。

 これら二つの方法は、どちらも総容量を元にしているため、最低限、容量を間違うことは無いと思われました。しかしながらHDDの大容量化とともに、計算されるC/H/Sパラメータのいずれかが桁あふれを起こすようになり、98の、C/H/Sを元に容量が計算されるシステムでは結局、各社独自のパラメータ設定では結局正しい容量は得られなくなっていきました。詳しく言うと98のC/H/Sパラメータには2種類のモードがあり、それぞれ12bit/8bit/8bitで管理する場合と、16bit/4bit/8bitで管理する場合です。古いBIOSは前者固定が多いのか、シリンダ数4096に壁を持つものが多いそうです。逆にヘッド数16の壁もあるかもしれません。もちろんBIOSが大容量を想定していれば、これらをうまく切りかえることで対応は出来ました。しかし統一パラメータ形式があればHDD容量の壁も画一化できることになります。これには前述のように92フォーマットの普及を待たなければなりませんでした。

マルチベンダから92フォーマットへ

 事実、92ボードが標準フォーマットと認知されるまでにはある程度の時間が必要でした。実際使われていたHDDはすでに非92フォーマットで運用されていたのですから、もし新しいHDDとSCSIボードを買っても、新しいSCSIボードで古いHDDをそのまま読みこむことができなければ、新しいフォーマットのHDDに環境を移せないわけですから、古いSCSIボードに頼り続けることになり、新しいSCSIボードは使い物になりません。CバスSCSIは公式には2枚挿しできない(少なくともBIOS上は想定されていない)ことになっているのも一因でした。こうした事情から、サードパーティ各社はユーザーが任意にC/H/Sパラメータを設定できるようにして、古いSCSIボードと同じC/H/Sパラメータで認識できるようにしました。もちろんSCSI-ID毎ですので、新しいフォーマットのHDDと併用できます。ベンダに依存しないことから、マルチベンダと呼ばれました。多くのものは自動でDOSの領域を読みこみ、C/H/Sパラメータを自動判断し、不揮発なROMに書きこんでおくことが出来ました。そして、新たにフォーマットするHDDに対しては92互換の標準フォーマットに出来たのです。マルチベンダSCSIボードの普及により、結果として92フォーマットの標準化が進み、いつしか92ボードは事実上のマルチベンダとさえ勘違いされるようになったのでした。ちなみにTEXA(TAXANやTEAC、ITECなどと混同しないように)は4ヘッド64セクタを採用していましたから、LBAに変換したとき92フォーマットと互換性があったそうです。

 なお92フォーマットの標準化の裏には、WindowsNTの存在もありました。NT上のSCSI-HDDは、なぜか標準(92)フォーマットしか認識できない仕様です。そのため、55ボードではHDDは使えず、SCSI-HDDの場合は92ボードのように「標準フォーマット」の使えるSCSIボードでしか起動HDDは使えなかったのです(IDEなら問題ありません)。この特徴はのちのWindows2000にも引き継がれています。そのとばっちりとして、NT/2KのSCSI-HDDでは、標準フォーマット最大容量である32GBを超えるHDDを起動ドライブに出来ません。BIOSを使わないWindowsでも、起動時はBIOSに頼らざるをえないからです。

「nEC」の時代

 そんなわけで、NT/2Kの普及とともに、かつての55フォーマットは事実上消え行く運命にありました。しかしそんな中、取り残されたのが何をかくそうかの「NEC」ベンダのHDDだったのです。92ボードの標準フォーマットでは、いまだにNECチェックを行っている都合で、NECベンダのHDDはNTでは使えないことになってしまいます。比較的新しいNEC製HDDに見られる「nEC」ベンダ名の理由については諸説あるかと思いますが、恐らくこのような理由でわざと(55ではなく92の)NECチェックに引っかかる必要があったのではないかと思われるのです。nECの時代にはHDDもOEM化するようになり、ベンダ名をNECにすることはできても、必ずしも55フォーマットのルーチンをうまく通るようにHDDが振舞う保証はありませんし、55のルーチン作成時には想定できなかったほどの大容量になれば、ドライブ本来の持つC/H/S値の情報はもはや当初の想定を越え、有名無実なのかもしれません。C/H/Sから正しい容量が得られなければ、リードキャパシティによるLBAな容量を得なければ何も始まりませんから、どうしても92フォーマットで認識する必要があることになるのです。


KAZZEZ

コラムへ


TOPへ