SCSI 8GB容量壁超え BIOSを試す

まりも(DOSsoft)

2020年2月27日 作成

■ SCSI BIOSに関する問題

 PC-98用CバスのSCSIアダプタのほとんどはHDD容量8GBまでしか対応しません。その理由として、

の二つがあり、前者については内部処理にパッチをあてる必要があります。BIOSのint1Bhインターフェイスは32bit用意されていますが、そのうち最高位の8bitをSCSIディスクに伝えておらず切り捨てられています。後者は「マルチベンダパラメータ」機能を使えば回避できる場合もありますが、多くのボードのBIOSではもっと小さな容量(1GBや2GB)に壁があります。いずれにしても8GBを超えようとすれば前者がとにかくネックとなります。

■ Genericな8GB超え

 BIOSがCHSとLBAの変換を行うところにまず問題があるわけですが、int1Bhのディスク読み書きなどの基本ファンクションをフックして、自前のLBA/CHS変換ルーチンを実行してしまえば問題は解決しますし、容量取得のint1Bhのファンクション84hでいかようなパラメータを返すこともできますから、容量が8GBを超えているときに8ヘッド128セクタを返すようにすれば8GB以上への対応はできることになります。

■ パッチをあてられるRAMは拡張ROM域にあるか

 Cバスの92/55互換SCSI BIOSのエリアは4KBしかなく、基本がROMですからパッチを当てる場所もありません。しかしレガシーな98(i486時代)ではDC00:0000の4KBはRAM化できることになっており、ROMをRAMにコピー後パッチをあてることはできます。拙作SCSI_RAMではそれを行っており、RAM化することで高速化したり、PC-9821A-E10については容量壁を1GBから8GBに引き上げています。しかし上記のようなint1Bhを乗っ取るようなパッチとなるとかなり大規模なものになり、そもそもパッチできる余白がほとんどありません。また4KBのRAM/ROM領域は同じアドレスの裏にもROMがあってそれが呼ばれることから、一般に全てのSCSI BIOSをRAM化しても正常に動作するわけではありません。

 そこをうまく解決したのが、「リウ」さんという方が作成した 「壁ごえSCSI」(SCSI.COM)です。IPLwareですのでIPLが実行されてから有効となります。詳細は作品を見た方が早いと思います。リウさんは98エミュレータの改良も手がけており、Twitterでも活動していらっしゃいます。

  リウさんのGoogle driveにある壁ごえSCSI.7z がそれです。

 このツールのポイントは、DC00:0000の裏に切り替えられてしまうところにもパッチをあて、DB00:0の隠しRAMに裏ROMをコピーしておき、そこに実行を移すというところにあります。レガシーな98ではセグメントD800〜DB00までの16KBはRAM化できるようになっており、前半部D800,D900にはIDE BIOS本体が、DA00にはIDE BIOS作業域が存在しています。しかしセグメントDB00は未使用だというわけです。

 ただしプラグ&プレイおよびノート機のBIOSは16KB全てをバンクを切り替えて使っており、残念ながら未使用ではありません。したがって壁ごえSCSIの適用機種は、デスクトップ機かつ非PnP機に限られます。具体的には初代A-mate,B-fellowから2代目A-mate(Ap2,As2,Af,非PnPのAn)およびB-mate, PC-9801BX2,BS2,BA2までです。Canbeでは Ce2/Cs2までかと思います。

 いっぽうPCI機では16KB単位で拡張ROM領域をRAM化できます。壁ごえSCSIではそのようにしてDC00使用時には地続きのセグメントDE00やDF00を使用しているようです。

 なお壁ごえSCSIの現在のバージョンでは、SCSI ID=1のディスクドライブのみの対応となっています。MOを使う人はMOドライブのIDを0にしてSCSI HDDの台数に依存しないようにすることが多く、結果的にHDDのIDを1からとするのが普通ですので、あまり問題はないと思います。

■ SCSI壁ごえの効果

 まず容量壁については、本当に無くなります。DOSでBIOSアクセスしている限りでは不具合は出ません。試した限りではPC-9801-92互換のパラメータモードをもつCバスSCSIボードは全てうまく動作しており、動作しなかったボードはみつかっていません。

 次に動作速度ですが、むしろこちらがすばらしいと言えます。ROMの全部がRAMに置かれることから、実行が高速化されており、BIOS経由アクセスのベンチマークはスコアが大幅にアップします。体感的にも高速化されたのがわかるほどです。とくに細かい単位のアクセス速度が向上し、7倍程度になる場合もあります。バスマスタ方式でもI/O転送でも高速化します。

■ MS-DOS以外のOSでの可能性

 Windows NT/2000では 8ヘッド32セクタ、8ヘッド128セクタを決め打ちしようとしますので、壁ごえSCSIはこの範囲内で使うのが簡単で良いと思います。しかし拙作conv98ATを適用してAT互換機フォーマット仕様に変換し、さらにブートセクタから先頭1BEh以降の情報を消し去ってしまえば、Windows NT/2000は98のディスクでは無いと判断し、どのようなCHSパラメータであってもアクセスできるようになります。この状態では不具合はBIOS無関係となりますので、BIOSのパッチがどうであっても問題は起こりません。またPC/ATでもそのまま使えますから、むしろ利便性はあがります。唯一の不都合は、そのディスクドライブから98のOSが起動できないというだけです。

■ 追記

 2020年9月現在、改良が進行中のようです。SCSI ID 1以外への対応、Compact Flash併用時の問題、RAM BIOSの使用域の変更などがあると思われます。

■ 追記 2021-4-11

 486機でDC000:0ゾーンの裏RAMの存在が明らかになったことから、使用されるセグメントの見直しなどの改良がなされました。t_scsi2というものに進化しています。

    まりも(DOSsoft)

[戻る]