PC-98オンボードIDEでCompact Flashを使えるのか PC-98オンボードIDEで漫然とCompact Flashを使ってはいけない
2024年3月3日改訂
PC-9800シリーズのストレージ、とくにIDEハードディスクの置き換えとして、Compact Flash(以降CFと略します)が使われているのを見かけます。しかし正常に使えることは本質的に極めて希であり、デメリットだらけなのです。ハードディスクに対してCFのメリットは、耐衝撃性、低消費電力、軽量コンパクトとたくさんあるのですが、データが記憶できないようなことになればそれらのメリットは吹っ飛びます。
何が問題なのか
次のような問題があります。なかにはあまり知られていない事象もあるでしょう。
- 1.「CFリセット」を引きおこす
- 2.「リムーバブル属性」のためWindows NT/2000はインストール時認識拒否する
- 3.そもそも書き換え寿命がSSDほどにはない
- 4.転送速度が遅い
- 5.容量変更ができない
■1.CFリセット
CFリセットとは何かを正確に理解する必要はありません。知りたい方には後述します。CFリセットで何が問題となるかと言うと、記憶メディアの論理アドレスが変わってしまい、以前に書いたデータが読み出せなくなる(恒久的なものではなくシステム起動時には戻る)ということです。CFリセットは、産業用と銘打ってあってATAデバイス互換を謳っている超高価な製品でもない限り、起こりえます。「そんなの経験したことが無い」と言い張る人もいますが単に運が良いだけです。個人の根拠無い経験よりも集合知を尊重してください。。ちなみにATAPIのCD-ROMドライブを併用するとデバイスドライバや機種によっては必ずATAデバイスへのリセットが発生します。そのときCFリセットも起こります。
CFリセットを見かけ上回避する方法としては、リウ様(twitter@drachen6jp)の作られたLBA_IDE というBIOSパッチです。このリンク中のIDE-BIOS-LBA-Patch.zipを使うか、わたしが公開しているEXIDEシリーズ(ROMアプリケーション)を導入するという手段がいまのところ有望です。なお4351MiB上限のない最後期のPCIバス搭載機種では、8GB〜32GBのCFであれば、これらのソフトウェアを使わずともCFリセットの致命的問題を回避できます。
【2024年3月3日重要な追記】CFの一般的な仕様に関して、FreeDOS(98)移植で知られる方の下記サイトで非常に重要な示唆を与える記事が掲出されました。
bauxite/チラシの裏/PC-98x1/misc/PC-98の内蔵IDEドライブを換装したいけど…/問題点A:メディアのハードウェア特性に起因する問題CFにはATAコマンドのset feature 66h を発行すると、「パワーオン時にデフォルトパラメータとなることを無効にする」という機能があるということです。詳しくは後述しますが、これにより一部の(主にSandisk製の)CFに関しては完璧にCFリセットを防ぐことが可能となりました。
■ 2.リムーバブル属性とWindows 2000/NT
CFはそもそもリムーバブルメディアなので、大半のCFではATAの属性として「Removable」となっています。Windows NT/2000ではリムーバブルディスクへのインストールは拒否されます。これはWindowsのインストーラやドライバにパッチでもしないかぎりどうにもなりません。ごく一部のCFではファームウェアの書き換えによりFixedに出来るものが有るそうですが、CFの使用には他の問題もあるのですからお薦めはしません。またCFに限らずHDDでも問題になりますが、Windows NT 4.0ではドライブの容量の制限があります。
■ 3.書き換え寿命
一般的なCFはSSDほどの書き換え寿命を持っていませんし、古い・安価なCFでは、ウェアレベリングもさほど賢く機能しません。したがって書き込みを頻繁に行う使用環境ほどCFは適しません。Windows、とくにWindows NT/2000では仮想記憶域の書き込みが頻繁にあります。Windows 95/98でもメモリを豊富に積んで仮想記憶不使用にでもしないかぎりは、ファイルを書き込んだつもりがなくても相当に書き込みが起こります。CFは MS-DOSやN88-BASICでの運用にとどめておくべきです。
■ 4.転送速度が遅い
UDMA7の転送速度を謳ったCFもありますが、PC-98のIDE BIOSではなんの意味もありません。PIO転送にされてしまいます。少なくともDISK BIOSでアクセスする限りは、通常のHDDがPIOモード3で転送するのに対して、大概のCFではさらに遅くPIOモード1程度にされてしまいます。まあ2/3くらいに遅いです。これはご存じでない方も多いようです。下の画像のようにHDDでは4900KB/秒程度あるのにCFでは2600KB/秒程度までしか出ません。
転送速度を改善するには、本体IDEインターフェイスに働きかける必要があります(デバイスにではない)。拙作EXIDEにはそのようなオプションがあります。転送速度を改善してもなおHDDよりは少し遅いです。細かいサイズのアクセスほど顕著です。
■ 5.容量変更
PC-98のIDE BIOSでは4351MiBの壁があるため、容量を縮小すれば使えるという場面はあるわけですが、CFではそれができません。みかけ容量変更コマンドが通るCFもあったりしますが、中途半端なATAコマンド実装の産物であり、実際に容量の変更ができるわけではありませんでした。もしかすると産業用のCFには対応する物があるのかもしれませんが、当てにするだけのコストメリットはありません。
ではCFはどうすればいいの?
ここまでCFを使う上での不都合を述べました。よくCFの相性、CF-IDEアダプタの相性などと言われたりしますが、後者などは相性すらありません。単に製品に不良があるかどうか(わりと半田付け不良が多い)です。CFの形はしていないがIDEのコネクタに挿せる 「Disk on module」のような物もありますが、CFリセットと同様の問題を起こさないことを確認する必要があるでしょう。
既に述べたように、98オンボードIDEへの対応の問題であれば、LBA-IDE BIOSパッチかEXIDEである程度なんとかなります。ただしそれはデータにアクセスできなくなるという致命的な問題が解消するだけであって、CFリセットが起きている以上、他になにか問題はあるかもしれません。この文章の最初のほうで「見かけ上」と書いたのはその意味です。たとえばバッファローのRCFシリーズ、Green Houseの何かのCFなどではおかしな事象が確認されています。
SDなどの記憶メディアをCFに変換する装置もありますが、これはもっと分が悪く、98のIDE BIOSが発行するATAコマンド(現在はとっくに廃止となったコマンドセットがある)を処理できません。通常の使い方ではまったく使えないのです。
テーマ違いになりますが、SCSI-IDE-CF変換については別問題であり、これはCFリセットのような問題は関係ないため、UDMA転送可能なCFであれば案外大丈夫なものが多いです。
しかしいずれも本質的にCFであることは回避できませんから、書き換え寿命やデータ蒸発を気にしながら、なるべく無用な書き込みを押さえつつ注意深く運用することになります。
SSDは使えるのか?
CFがダメならSSDを使えば良いのですが、これにもいくつか問題がありますので書き出してみます。「使える物は使えます」が答えです。
■ SSDの問題1.対応ATAコマンドセットの廃止
SD-CF変換器と同じ問題になります。Sandisk、TranscendのSSDのいくつかは大丈夫なようです。
98で使用できないSSDというのは、領域確保やフォーマットをしようにも正常にできませんのですぐにわかります。CFリセットのように突然偶発的に起こるのではなく、ある意味電源投入後からずっとCFリセットと等価の状態といってよいでしょう。ATAデバイスの振る舞いを設定するコマンドセットが、最近のSSDでは廃止されているのが原因です。98で使えるSSDを探し出すのはだんだん難しくなってきています。m2.SATAの変換などはまず使えないと思ってよいでしょう。いまどきのSSDメーカはもともとがHDDメーカではないからです。HDDメーカとしてメジャーであったWestern Digitalの製品は期待が持てそうですが、どうでしょうか。わたしは使えるかどうかまだ確認していません。
したがって最近のSSDについてはPC-98オンボードIDEで動作したかどうかの報告は、情報価値が非常に高いのです。もし試したSATA-SSDがあるなら、ぜひSNSや掲示板で発信すべきです。オークションなどで、SATA接続に限らず真のSSD(CFのことをSSDと表記していないもの)を装着して出品しているものもあります。それで売られているSSDはとりあえず動作するはずですが、過去の出品状況などから信頼性を判断することになるでしょう。出品者にどういうSSDであるかを質問すると価値ある情報を引き出せます。それでブロックされるならその程度の出品者・出品物です。(それ自体が情報商材なのかもしれませんが)
■ SSDの問題2.SATA-IDE変換器
現在売られている変換チップには概ね二種類あります。marvellのチップかjMicrionのチップかです。多く流通しているのは後者です。「98オンボードIDEとSATAデバイスの間の変換」に関して言えばどちらでも問題なく動作します。またSATAのHDDは容量変更コマンドが効きます。IDE変換経由でも変更できます。ですから積極的にSATA-IDEの変換器を導入して SATA-HDDを使うべきでしょう。SATA-SSDでも98で使えることが確かめられている製品なら、CFよりも遙かに安心して使えます。SATAでは2.5インチでもコネクタが同様に使えるので、IDEの2.5インチのような煩わしさが全くありません。わたしは98用には2.5インチSATA-HDDを使っています。
但し話はズレますが、「98オンボードIDEとSATAの変換」ではなく、[ホスト]SCSI-IDE-SATA[デバイス]のような二段階の変換となるとjMicronチップのは不可解な動作をします。そのような構成のときは避けた方がよいでしょう。
CFリセットについて詳しく知りたい
「CFリセット」とは具体的に何が起こって何が問題なのかを知る前に、IDEディスクデバイスに対するアドレスの出し方に、CHSという方式とLBAという方式があるということを知っておいてください。CHSというのはシリンダ・ヘッド・セクタという番地の組で与える方式で、大昔のHDDでは機構的なものがそれと一致していました。しかし現在では架空のものとなり互換性維持のためにCHSのモードが存在しているだけです。その互換性もそろそろ尽きているというのが、98では問題となっています。いっぽうLBA方式にしておけば現行のものですから問題ありませんが、98のBIOSでは頑としてCHS、さらにはOSのドライバまでCHSでのアクセスを要求してしまっているのです。
PC-98のIDE BIOSでは、ディスクデバイス側にヘッド数・セクタ数を設定するコマンド(initialize device parameters )を発行しますが、CFリセットを起こすと、ディスクデバイス側に一時記憶されるそのパラメータが飛んでしまって、98のIDE BIOSではアクセスできなくなってしまいます。また既に述べたCF-SD変換器や一部のSSDのように、このコマンド自体が削除となっているものもあるのです。現行の製品ではそれが普通となりつつあります。CFリセットも、98で使えないSSDも、根っこは同じなのです。「相性」という言葉で語られるような不可解な事象ではもう無くなりました。
「CFリセット」という、多くの人には耳慣れない言葉が初めて使われたのは、つい最近、2019年3月末です。某掲示板でのやりとりが発端で、わたしがそういう言葉を発案しました。その後リウ様が詳しく検証し、CFリセットの問題回避も含めた形でディスクのアドレッシングの方法をLBAに総取り替えするBIOSパッチ(Windowsドライバへのパッチもある)を作成していらっしゃいます。CFリセットのより詳しい説明や再現法についてもこちらの文書 に詳しくは書かれていますから、一読してください。
【2024年3月3日追記】既に述べたように、CFにあるコマンドを発行することでCFリセットに対抗できることが判明しました。ただしその通りになるCFはSandisk製、一部のTranscend製のものに限られるようです。今後CFリセットを回避できるCF製品、ブランドが判明して行くことと思いますが、あまり期待できないかもしれません。
CFリセットを防止できるかどうかを判別するには、 リウ様が作成した【強制CFリセット】のうち、set66h.comを実行後に CFreset.comを実行し、CHSパラメータが変動したかどうかを見ることです。変動しなければATAリセットに対抗できるCFだということになります。より手軽に判別するためのソフトウェアとして、拙作IDEDEV バージョン3.50も2024年3月3日に公開しました。CFが接続されているIDEのポート番号n (n=0..3 )に、idedev /Cn を実行したあと、もういちど idedev /rn を実行し、表示されるcurrent C/H/Sが変動しなければ、ATAリセットに対抗できるCFです(ただし4.3GB以下のものの場合)。
98本体起動時からCFリセットを起こさないようにしたい場合、機種が対応するもの(PCIバス搭載のPC-9821かPC-9821Xe10、PC-9801BX4)であればEXIDECB,EXIDE55x,EXIDEBX4の各ROMアプリケーションを使うとよいです。IDE BIOSが高速転送するモードをオンにする機能もあり、CFにしてはかなり高速な転送速度にできます。とくにmultipule sector read/writeに対応したSandiskのCFでは効果が大きく現れます。
2022-4-17初稿, 2022-4-18,2024-3-3,2024-9-8改訂 まりも (連絡先メールアドレスはホームページ上で) [戻る]