SiI3124非公式 PC-9821BIOS


どういうものか

どういうものか

Silicon Image社製4チャンネルPCI-X-SerialATAコントローラSiI3124用のPC-9821向けDISK-BIOSです。SATA II対応ボードでは各社とも数万円の価格で競り合う中、例によって玄人志向が1万円を切る激安ボードを出して話題になりましたが、それ(SATA2RAID-PCIX)です。公式発表に良い意味で裏切られて、Windows98でも動作した(後述)ため、びっくりして98対応BIOSを書いてみたものです。PC-9821での性能はSiI3124ベンチマークPC-9821でWDC Raptorを使うをご覧下さい。後述するようにSiI3124は同じATA/ATAPI機器を制御するチップでありながらSiI680、3112、3512、3114とは石の構造が全く違う、はじめてみるきわめてインテリジェントな構造のものです。そのため、ドライブアクセス部は1から書き起こしたものであり、これまでとは別の不具合が生じている可能性があります。私の勘違いがあるとHDDのデータが即死します。当サイトでうpしているソフト中では危険なほうだと思います。なお、SATA IIの読み物は「分岐接続や冗長経路など豊富な接続形態をとれるシリアルATA II」とかが面白いのではないでしょうか。SiI3124はWindows98で動く点も加味し、総合点で相当いけてるチップではないかと思います。ATAPIドライブはUDMA転送になります。Port Multiplierとの間は3Gbps転送になります。α1.1は致命的な問題はなさそうですし、私的にかなり好印象のチップなので、メインマシンのXv20にATA133RAIDPCIからの置き換えでSATA2EI3-LPPCIを載せました。RvII26に乗せて常用しています。ちなみになんかXv20だとベンチマークがいまいち振るいません(汗)。P5機だと3114とか3512の方が速いです。P6機じゃないと性能発揮できない感じです。もう少しいじって問題がなければβ版扱いへと移行しようと思います。98本体はROM領域のRAM化が可能なマシンのみが対応となります。石の構造上、大きなテーブルを作成しないと行けないためです。

現状でのBIOSの評価

α1.0は予想以上に動作が良好でない、ごく限られた環境でしか動作しないようです。α1.0に数カ所の改善を加えたのがα1.1です。相性の悪いドライブとの相性は多少改善したような感触はあります。(変換アダプタ経由でUDMA4世代のエラー吐きまくりなHDDとかでもたまにこけつつもWindows98のインストールが完了できる。それが果たして良いことなのかどうかわかりませんが(汗))

対応デバイス

動作確認済みリスト

最近玄人志向から32bit PCI用のSATA IIインターフェースボードが沢山出てます。SiI3124には3GbpsのSiI3124-2と1.5GbpsのSiI3124-1の2種類があります。確かにPCI側は133MHzで頭打ちするのですが、port multiplierを使って分岐する予定がある場合はSiI3124-2が載っているボードが良いんではないでしょうか。

SATA2EI3-LPPCIとSATA2REI3-LPPCIはeSATAコネクタが外に出ており、便利そうです。しかし、スラリンさんから教えていただいたのですが、SATA2EI3-LPPCIはSiI3124-2が載っているものの、PMCのFLASHチップが載っており、FLASHERがこんな石知らんと弾くらしく、当時書き換えできないそうでしたのでPm39LV010を書きかえられるようにPCIFLASHを書いたわけです。

動作環境や書き換えについて

Windows2000

なんか最近のドライバは新規インストールでこけるみたいなので、起動時F6押しで入れるドライバには1.3.17.0辺りを使ってください。一回それでインストールが正常に終了してから必要に応じて最新のドライバにアップデートをかけてください。そうしないと1回目の再起動時に「INACCESIBLE_BOOT_DEVICE」でブルースクリーンに遭遇します。[24444] RvII26+SATAREI3-LPPCIでの起動不可でやまら〜さんが不具合報告されて、経緯があります。

動作OSWindows98SE

公式にはWindowsNT4.0/2000/XPとNT系統のみがサポートとなっております。しかし、一時期Silicon ImageではSiI3124.mpd,Silsupp.vxdの含まれるNon-RAID IDEドライバが配布されておりました。mpdとかvxdてWindows9x用ちゃうんかというのでINFをSiI3114のWindows98セクションのもので補充し、インストールしたところあっさり動作、ウマー(あっさりといってもバイナリにパッチ当てが不要という程度の意味で、自動検出ではクラスコードが違う関係上撥ねられますので、「特定の場所にあるすべての・・・」->「ディスク使用」と進んで怒られながらインストールします)。現在それらのアーカイブは入手できないようなので別の方法を探したところ、1.3.17.0辺りではSi3124.sysをSi3124.mpdにリネームし、SiI3114用のドライバに付属のSilsupp.vxdを使うことで行けることを確認しました。

PC/AT互換機のWindows98について

Windows2000は起動中CPUから見たアドレスとメモリの物理アドレスが一致しているため、Virtual DMA Service(VDS)を利用しないBIOSでも起動できます。しかし、Windows98はそうではないのでVDS非対応のBIOSが触ると多分起動できません。拙作BIOSはVDSを利用してるのでアドレス変換の必要に応えられますが(Windows98でも起動できる設計になっている)、初期の純正のBIOSは確かVDS非対応であったと記憶しています(最近のは知りませんが)。DOSで1MB越えの空間にも転送できないんじゃないでしょうか。ただし、BIOSを切ればWindows98でも利用できる可能性は高いです。

書き換え手段

書き換え手段はTODO1ST.TXTをご覧下さい。第一の選択肢としてPCIFLASHを使って下さい。SiI3124のFLASH書き換えで試行錯誤に過去の話を移動しました。

トラブルが予想されること

現在まだ当BIOSがATAPI機器をうまく扱えてない印象があります。これはもっぱら私の側の問題です。NEC NR-9200AとかSW-9585とか一部のCD-ROMドライブしかDOSでアクセスできません。これは今後の課題とします。ただし、BIOSでハングアップさえしなければWindowsでは使用に問題ないです。ATAPI機器が基本的にUDMA転送なので、SiI680やSiI3112より大分いいです。

コマンドレジスタでMemory Write and Invaridate(MWI)=1となっておりますが、RvIIとの相性問題が出たときの原因切り分けのために、当該bitをクリアしてあります。そのためデフォではRvIIのReadは遅くでます。Configuration registerアドレスの04hがCFhになってると思いますが、これをDFhに書き換えるとフルに性能が出ます。intelチップセット機ではMWIは問題なく使えるようなので、440FX機では転送速度の差は見られませんでしたが、1にするとバス占有が減って少しばかり幸せになれるかもしれません。また、Cache line sizeが0のままだとWRITE速度が25MB/s程度で頭打ちするので、デフォルトで08hを設定しております。RvIIではMWI=1でかつCL=8hでもWindows98を無事インストールできております。

Aimさんが拙作BIOSで起動したボードで、Windowsドライバ(多分2000/XP用IDE Ver.1.3.0.16)をかなり徹底的にテストして下さいまして、化けなどは見られないとのことでした。私は現在1.3.17.0なドライバをXv20でWindows98SEで使っております。SSBさんから教えて頂いたのですがSiI3124で規則的データ化けが起きる?と言うのがあるようです。とりあえず気持ち悪いのですが、そこの環境でのみ起こる現象なのかと言う点(SiI3124に一般的なバグなのか、バグロットなのか、その石がたまたま駄目だったのか不明。また、ほかの人からの別のSiI3124での同様の追試報告がない)、その特定のバージョンのドライバなどで化けている可能性、などなどから、私はそのまま使いつづけています。なんかその後、「サポートに話したところBIOSアップデートで解決した」見たいなことが書いてあったので、拙作BIOSには関係無いかもしれません。なお、こっちの例はひどい初期不良ぽいので、保証期間内ならお店で交換してもらえるような気はします。SATA2RAID-PCIXはキワモノシリーズ扱いですから1週間以内に気がつかないと交換できないわけですが、もし石がバグ持ちとかということであれば、柔軟に対応してもらいたいものですね。

Port Multiplierの扱いについて

PC-9821でSerial ATAを使うに移しました。

PATA-SATA変換(ドングル)について

SiI3124は少なくともPC-9821で使っている限りでは、ドングルを通した場合、相性問題がSiI3112やSiI3114より激しい気がします。ほかのインターフェースでは問題のなかったように見える、同じドングルとドライブの組み合わせでも問題が出ることがあるようです。PC-9821でSerial ATAを使うをご覧ください。HDDについてはSiI3611あるいはSPIF3811採用のもの、ATAPI機器に関してはSPIF3811が良いです。相性問題が起きたときの具体的な不具合は、デバイス名が見えるのに、なぜかドライブにアクセスできないという現象があります。

ASPI

SiI3124は構造が優秀なので、BIOSサイズが劇的に小さくできます。なので、SATA2RAID-PCIXには従来の石よりも小さいFLASH-ROMが載ってるという不思議な状態(汗)。と思っていたらその後RAID5なBIOSが64KBでは収まらず載らなくなって、AT49LV512なボードは外れ扱いされているみたいです。まあ、でもアセンブラで書いてるとかなり小さく出来るので、ASPI本体をBIOS-ROM中に押し込めました。USB2.0が頑張ってるため可能性は薄いかもしれませんが、外付けATAPI機器は過去の外付けSCSI機器と同様にスキャナとか色々なものが市場に出てくるかもしれませんので、そうした場合ASPIの方が便利でしょうしね。3124ASPI.SYSはDOSドライバですが、BIOSを検索してそれをDOSに知らせるだけのものです。これはASPIMGR.SYSにリネームしてお使い下さい。MSCDEX.EXEをコメントアウトするとWindows98プロテクトモードドライバをインストール後でもMS-DOS互換モードにならなくて済みます。セットアップ中に止まる環境ではWindows98セットアップにはATAPI-CD-ROMは使えないようです。Xv20では止まりましたので、SiI3124に繋いだSiI3611で変換したNEC ND4550AからあらかじめWin98NディレクトリをコピーしてCABセットアップしました。

SiI3124の特長

私はどこの社員でもないので、一応事情を知らない第三者です。ただし、一応BIOSを書く程度にはこの石の程度を分かっているつもりです。その人間のたわごとと思って読み流してもらえると幸いです。公式な文書はSiI 3124 SATALink PCI-X to 4-Port Host Controllerが出てます。

ベースアドレスレジスタからみる従来型ATAコントローラとの違い

PC/AT互換機用サウスブリッヂ、SiI680、SiI3114などのATAコントローラ(従来型のATAコントローラとここでは書きます)ではIO空間を5領域に渡って要求し、バスマスタコントロールレジスタがBAR4が16バイト境界、コマンドブロックレジスタをマップするBAR0とBAR2は8バイト境界、コントロールブロックレジスタをマップするBAR1とBAR3は4バイト境界に見えます。SiI3124のボードを挿してまりも様のPCILISTで見てみると、64BITのメモリ空間のベースアドレスレジスタ(BAR)が2本と16BITのIO空間のBARが1本見えます。Windows上では全部MMIOなんですかね。おかげでIO空間のBARが一本だけしか使ってないんです。このように、リソース自体がすでに違うわけです。

従来型ATAコントローラSiI3124
BAR08バイト境界 IO空間(Primary Command Block)Memory mapped IO[1] 下位32BIT
BAR14バイト境界 IO空間(Primary Control Block)Memory mapped IO[1] 上位32BIT
BAR28バイト境界 IO空間(Secondary Command Block)Memory mapped IO[2] 下位32BIT
BAR34バイト境界 IO空間(Secondary Control Block)Memory mapped IO[2] 上位32BIT
BAR416バイト境界 IO空間(バスマスタDMAコントローラ)16バイト境界 IO空間
BAR5Memory mapped IO空間(SiIの石以外にはないみたい)なし

よりインテリジェントなATAインターフェース

では、BAR4にただ上記のレジスタを詰め込んでいるだけなのか?色々調べてみるとSiI3124は従来型のATAコントローラのようにHDDのレジスタをHDDの都合に合わせてCPUが直接読み書きする構造ではなく、相当インテリジェントになっているようです。従来型のATAコントローラはバスマスタDMAエンジンを除くとただのアドレスデコーダでしかなく、CPUがHDDのお守りをしていたもんで、SCSI愛好家からはIDEはCPU負荷が高い安物と揶揄されてきたわけです。しかし、SiI3124は、CPUがメインメモリ中にコマンド・パラメータ(この2つを記述した構造体がFIS)・転送アドレス(PRD)等からなるテーブルを作成してアドレスを渡すと、SiI3124がバスマスタDMAでこれをとりに来てHDDとの交渉をし、転送はPIO転送プロトコル・DMA転送プロトコルを問わず、全てSiI3124がバスマスタDMAでメインメモリとやり取りするというものになっております(例えばPIOプロトコルであるIDENTIFY DEVICEなんかでもCPUの知らん間に石が勝手にメモリに書きこむ)。
従来型ATAコントローラ
SiI3124

これまでの知見から考察するSiI3114との性能比較

HDDの転送性能がまだSCSI優位なので、現在はHDDではまだ勝てませんが、CPU負荷、転送速度ともにSCSIに迫る可能性があります。時代の流れですかね。事実、iRAMなんかだと環境次第ではランダム・シーケンシャルともにSCSI-HDDを超えます。金がかかるのと容量が小さいのと電気食いなのと挿し場所が難点ですけどね。SiI3114はIO空間を用いて石にアクセスしていたときはmaster slave emulationを行っていた(つまり独立2チャネル)でしたが、SiI3124はIO空間を使う転送で対等な4チャネルのようです。リリースノートによると一チャネル辺りのバッファも256バイトから2048バイトに増加しております。HDDが4台繋げる点では一緒ですが、SiI3114より基本性能は上がっていると想像されます。他にもSATA II対応なのでNCQとかport multiplierとかも対応しますので、HDDも沢山接続できます。あんな高いものはまだまだ普及に時間がかかると思いますが、いずれはUSBハブのような価格帯で、そうした感覚で使えるようになったりするんでしょうか。PORT MULTIPLIERで台数制限が緩和されるとデータ保護のために冗長化したくなりますが、PC-98対応のRAID-BIOSは書ける気がしません。


Valid HTML 4.01 Strict