CバスSCSIアダプタのBIOSの動作を高速化してみる

初版2004.7.29 最終更新2023.5.26  まりも

 CバスSCSIボードをいまさらMS-DOSで使ってみると、その遅さに愕然とすると思います。 それは単にSCSI転送速度が 10MB/sのFast SCSIどまりだからというだけでは ありません。Cバスボード上でのROMのアクセス速度は一般に非常に遅く設計されており、 BIOSコードの実行自体がそれにより遅くなっています。しかしRAM上で動かせば もっと速くなるのです。PC-9801RA以降のPC-9800シリーズでは、ROMの領域に シャドウRAMが存在しており、一部のSCSI専用スロットのアダプタ(PC-9821A-E10) ではシャドウRAMにROMがコピーされているため、動作が速くなっていることが 知られています。しかし一般のSCSIボードではそのような方式はとられていません。

 試しに、E10ボードと同様にCバスSCSIアダプタのBIOSをシャドウRAMに移すプログラム "SCSI_RAM"(ダウンロードは本文書の終わりで) を作ってみたところ、BIOSの動作の高速化が確認できました。拙作DOS版 ハードディスクベンチマークテストソフト"HDB98"を使って、本プログラムの 組み込みの有無などを変えて調べてみた結果を掲げておきます。 RAM化すると、とくに細かいディスクアクセスでの速度向上があり、これは体感でもわかります。 SMITボードの場合は高速化ユーティリティが付属していますが、 これと本プログラムは併用でき、さらに高速化することがわかります。 効果の度合いとしては、本プログラムのほうが大きいです。

 なお、EMM386を使ってSCSI BIOSをRAM化(movehdbiosオプションをつけるか、 それなりのユーティリティソフトが必要)した場合は、本ソフトはとくに 意味はなくなります。実はこれが最速です。仮想86モードでRAM化した場合が 速い理由は、そこで使われるメモリは1MB以上のアドレスで、リードライトともに キャッシュが効く場所だからです。本プログラムでRAM化した場合は、ROMと同じアドレス を使用していますが、拡張ROM領域のアドレスにはキャッシュが効かない うえに、シャドウRAMへのアクセス速度はメインメモリより遅くなっているようです。 単純に拡張スロット上のROMよりはオンボードのRAMはいくらか速いというだけの高速化です。

 ご注意:WindowsではデバイスドライバはRAM上で動作していますし、 BIOSは使用されませんので、BIOSをシャドウRAM化しても、Windowsでのディスクアクセスが高速化することにはなりません。


ベンチマーク結果

 ハードウェアはすべて同一条件で、本体はPC-9821An、使用ハードディスクは玄人志向YUによるIDE変換ドライブ(IBM IC35L 120GBを32GBクリップ)です。SCSIアダプタはメルコ製 SMIT 方式の IFC-NN BIOS ver. 1.10 です。


★例1 なにもしない場合
Machine name[83]: PC-9821 An(hires) K6-2 333MHz
Disk interface  : IFC-NN V1.10  ROM BIOS
Disk drive name : ATA→SCSI
[ SCSI固定ディスク   ID #0 A0h  総容量  32253(MB)]
Grain size:  32768   16384    8192    4096    2048    1024     512 (B)
------------------------------------------------------------------------
Speed(top):   2340    1880    1340     861     498     270     140 (KB/sec)
Speed(end):   2340    1880    1350     862     498     270     140 (KB/sec)
Seek time : 1193 points.

★例2 SMIT付属の高速化ソフトを使った場合
Machine name[83]: PC-9821 An(hires) K6-2 333MHz
Disk interface  : IFC-NN V1.10  FASTSMITのみ使用
Disk drive name : ATA→SCSI
[ SCSI固定ディスク   ID #0 A0h  総容量  32253(MB)]
Grain size:  32768   16384    8192    4096    2048    1024     512 (B)
------------------------------------------------------------------------
Speed(top):   3890    3380    2670    1880    1170     672     357 (KB/sec)
Speed(end):   3890    3380    2670    1880    1170     672     357 (KB/sec)
Seek time : 853 points.

★例3 本プログラムSCSI_RAMを使った場合
Machine name[83]: PC-9821 An(hires) K6-2 333MHz
Disk interface  : IFC-NN V1.10  SCSI_RAMによるRAMBIOS化
Disk drive name : ATA→SCSI
[ SCSI固定ディスク   ID #0 A0h  総容量  32253(MB)]
Grain size:  32768   16384    8192    4096    2048    1024     512 (B)
------------------------------------------------------------------------
Speed(top):   3900    3590    3080    2390    1650    1010     560 (KB/sec)
Speed(end):   3900    3590    3080    2390    1650    1010     560 (KB/sec)
Seek time : 859 points.

★例4 本プログラムとSMIT付属品を併用した場合(最も速い)
Machine name[83]: PC-9821 An(hires) K6-2 333MHz
Disk interface  : IFC-NN V1.10 RAMBIOS by SCSI_RAM and FASTSMIT
Disk drive name :
[ SCSI固定ディスク   ID #0 A0h  総容量  32253(MB)]
Grain size:  32768   16384    8192    4096    2048    1024     512 (B)
------------------------------------------------------------------------
Speed(top):   4300    4070    3670    3050    2260    1490     858 (KB/sec)
Speed(end):   4300    4070    3670    3050    2260    1490     858 (KB/sec)
Seek time : 836 points.

★例5 仮想86モード(EMM386)でBIOSをRAM化した場合
Machine name[83]: PC-9821 An(hires) K6-2 V86 mode
Disk interface  : IFC-NN V1.10 EMM386 RAMBIOS(4KB)
Disk drive name : ATA→SCSI
[ SCSI固定ディスク   ID #0 A0h  総容量  32253(MB)]
Grain size:  32768   16384    8192    4096    2048    1024     512 (B)
------------------------------------------------------------------------
Speed(top):   4340    4170    3830    3300    2550    1750    1030 (KB/sec)
Speed(end):   4340    4190    3830    3300    2550    1760    1030 (KB/sec)
Seek time : 833 points.

プログラム SCSI_RAM (バージョン 2.xx ,2020-9-8以降)の使い方と諸注意

SCSI_RAM のページに行く

 

 SCSI_RAM.BIN はIPLwareです。別途IPLware.exeを入手して、ハードディスクに組み込んで下さい。IPLwareアプリケーションの組み込み方などは、別途IPLwareのドキュメントを参照してください。ここではこれ以上説明しません。ハイレゾモードで使う場合は、IPLwareはバージョン3.31かそれ以上が必要です。

 SCSIアダプタのROMアドレスは、ノーマルモードでは DC000h〜に、ハイレゾモードではEE000h〜に設定してください(これはデフォルトです)。これ以外のアドレスにすると、本プログラムは動作しません。ROMアドレス以外のリソースは、競合が無い限り任意に設定できます。

 対応するSCSIアダプタについては、全てを所有しているわけではないのでなんとも言えませんが、基本的に55/92互換のSCSIアダプタのほとんどでSCSI_RAMは動作すると考えられます。2020年9月8日現在、取り消し線部は古い情報となったので削除します。

PC-9821An(K6-2 333MHz搭載)やPC-9801BX3(DX4)で動作した確認したのは、

です。古い製品の正常動作は期待しないほうがよいでしょう。PC-9801-55/L/UやPC-9801-92、およびその互換SCSIアダプタでは使用できず、ハングアップします。バスマスタと呼ばれる転送方式のCバスSCSIアダプタのほとんどでもおそらく使用できません。 バスマスタ世代やそれ以前のSCSIアダプタは、CPUが速いほど動作しない可能性が高いと思われますし、そもそも大容量のハードディスクを繋いだときに誤動作する可能性が高いです。

2018-11-10追記:PC-9801-92およびこれの完全互換品では、ROMバンク切り替わり動作があるため、RAM化はできないと考えられます。

 2019-6-3追記:一部の機種では、IDE BIOSが隠れてしまいハングアップしたり、サウンドBIOSが誤って出現するためにPARITY ERRORを引き起こしたりという不具合が発生する可能性があります。これは内蔵SCSIやIDE BIOSの実装方法が機種毎に大きく異なることによるものです。全ての機種を保有しているわけではないので完全な対応はできません。動作確認が取れているのは以下の機種です。

・PC-9801BX3(BA3もたぶんOK)
・PC-9821Xs(Xp,Xe,XnもたぶんOK)
・PC-9821An,Ap3(その他A-mnate全般に動作するはず)
・B-mate,Fellowなどでも動作するようになりました(バージョン1.10から)。

 2019-7-8追記:バージョン1.10となり、適用機種が拡大しました。適用でない条件の場合にハングアップしたり、サウンドBIOSが取り消されるなどの問題も解消されているはずで、IPLwareに入れっぱなしとしていてもほとんどの機種では問題ありません。H98では絶対に動作しませんのでH98を使う場合はIPLwareから取り外してください。

 2020-3-20追記:バージョン1.11ではH98で「正しく動作回避」されるようにしました。IPLwareに入れっぱなしでH98で使用しても構いません。

 2020-9-8追記:バージョン2.00では SCSI BIOS ROMの上位バンク側をRAM化する機構が判明したため、ほとんどの55/92互換のSCSIアダプタに対応となりました。i486アーキテクチャ機では、メモリウィンドウの9D00:0からの4KBに上位バンクのROMデータをコピーしておくと、SCSIアダプタ制御でROMバンク切り替えの要求(I/O CC0hに30h, CC2hに4xh)が来たときに、DC00:0に上位バンク側が出現するという機能があるようです。SCSIボードへの制御なのに98本体が応答するという謎の仕様ですが、よく作られていると思います。

 2021-12-30追記:システム共通域の利用でIDE_LBAと併用しやすくしました。本体内蔵のBIOS ROMのいずれかがRAM化されているときに勝手にRAM出現を取り消さないようになるはずです。

 2022-10-17追記:SCSI_RAMとE10PATを統合しました。

 このプログラムの著作権は主張しておきますが、基本的にフリーソフト ウェアです。各自の責任のもとお使い下さい。なおソースファイルも添付されて います。

←元に戻る