メモリーチェック爆速化のページです。




RvII26は、ECC(Error Correcting Code)対応、おまけにメモリーインターリーブ 採用ってことで厳重なメモリーチェックを起動時にITF(BIOS)で行っています。
メモリー実装288MBで、メモリーチェックに要する時間は3分を楽に超えてしまいます
一度立ち上げると止まるまで使用するのであれば全然問題ないのですが、普通に使っていくのであればストレスそのものです。
そこで、ITF内のメモリーチェック部分を書き換えて高速化にチャレンジです。


参考にさせていただいたサイト
powerx氏のホームページ「98改造講座」の中の「メモリーチェックを高速化する!」 こちら

「98改造講座」に書かれているアドレスはRaIIのアドレスなので、場所は違いますが、書かれている内容はまったくおなじです。
私の調べた限りでは同年代の他のマシンでも書かれている内容はほぼ同じでしたので、比較的探しやすいと思います。

さっそく、「メモリーチェックを高速化する!」に書いてある通り書き換えて電源を入れてみましたが、メモリーチェック後「MEMORY ERROR」赤い文字...
RvII26ではメモリーFillを潰してしまうとシステムエラー通知が発生してしまい、エラー処理されてしまうみたいです。

さてどうしたものか...

そんな時まりも氏からアドバイスをいただきました。
レジスタ46h( bit2)をdisableにすること、エラーステータスレジスタ47h (bit2)チェックを潰すことを教えていただき、メモリーチェック高速化は成功しました。
これにより、メモリー実装288MBでメモリーチェックに要する時間は30秒弱と、かなり高速化しました。
ですが、他のマシンよりまだ遅い...(^^ゞ

まりも氏からアドバイスしていただいた時にメモリーチェック爆速化の話をされていたのを思い出し、その事について改めてアドバイスをいただきました。
内容は、「128KBおきの 16バイト厳重チェックをしているルーチンを呼び出すループがあり、DX(レジスタ)をメモリチェックするアドレスの上位16bitとして使っていて、ループが回るたびに add dx,02 を行なっている」ということでした。
いろいろ調べてみて、それらしい箇所を発見することができました。
その箇所はメモリーチェックのサブルーチン群にあり、アドレス加算してはメモリーFillやチェックなどのルーチンに飛び、また戻ってくるといった事をしているみたいです。

その箇所をデバッグしてみると


:0008.8FA2 B80800                 mov ax, 0008
:0008.8FA5 8ED8                   mov ds, ax
:0008.8FA7 8006440002             add byte ptr [0044], 02
:0008.8FAC 8016470000             adc byte ptr [0047], 00
:0008.8FB1 6681C200000200         add edx, 00020000
:0008.8FB8 B070                   mov al, 70
:0008.8FBA E6A1                   out A1, al
:0008.8FBC B057                   mov al, 57
:0008.8FBE E6A3                   out A3, al
:0008.8FC0 B020                   mov al, 20
:0008.8FC2 E6A5                   out A5, al
:0008.8FC4 E4A9                   in al, A9
:0008.8FC6 A880                   test al, 80
:0008.8FC8 BCCE0F                 mov sp, 0FCE
:0008.8FCB E96BFC                 jmp 8C39

といった感じになります。(アドレスはデバッガの関係で1つずれていますので、07=0008です)
「add」は加算という意味で、「adc」は桁上がりの加算ですので、どうやら「 add byte ptr [0044], 02」の箇所らしいということになりそうです。

まりも氏のアドバイスを参考にすると、02は上位16bitなので16進数に直すと20000hになり、10進数に直すと128KBとなります。
ということは、このルーチンでアドレスを128KBずつ加算してメモリーFillのルーチンで128KB埋め込み&チェックをしている...つまり実装メモリー領域すべてを調べていることになります。
そのほかにもいろいろなチェックがありますので、メモリーチェックに時間が掛かるのもうなずけます。

それでは爆速化してみましょう。
方法は解ってしまうと単純で、128KBずつ加算をもっと大きくしてやります。
私は試しに1024KBずつに修正してみました。
1024KBずつにする、つまり1024*1024=1048576、これを16進数に直すと100000hとなりますから、02を10に変更する事となります。

ただ、ここだけ変えても凄まじいエラーの連発でまともに起動できませんでした。
原因を探ってみると、128KB加算する場所はここだけでなく他にもあり、サブルーチン群の中に比較検査らしき事をしている箇所が存在していて、このチェックに引っかかってエラーとなっているようです。
このチェックを回避するには、「 add byte ptr [0044], 02」の2つ下にあるedxに加算している箇所も同じ数に合わせてやる必要がありました。

これで、メモリー実装288MBでメモリーチェックに要する時間は3秒前後と、すこぶる快適な環境になりました。

ITFの書換は費用と時間を要しますが、ここまでの快適環境を手に入れることができましたので大満足です。


”必ずお読み下さい”
CPUチェック解除、メモリーチェック爆速化と話してきましたが、この通りやれば間違いなく出来るってものではありませんし推奨もいたしません。
この改造(ITF書換)はかなり危険で一つ間違えば二度と起動しなくなります。
マシン語の雑誌を買って勉強していけば数年でITFの内容はそこそこ理解できると思います。
しかしながら、数年後に書き換えに成功したとしても、そのマシンがその時に使用に耐えられるだけのスペックであろうはずもありません。
いま書き換えてPentium(R)IIIなどのCPUを搭載してみたいって皆さん思われるのは当然だと思いますが、Web上で入手可能な情報だけで書き換えをするのではなく、まず基礎知識を勉強され、Web上の情報やここに書いている事を実行されることをお願いしたいと思います。
私も今回書き換えにあたり、6冊の関係書を購入して勉強してきました。
ですので、これからトライされるお方は基礎知識の勉強をしっかりされて、失敗しても元に戻せる自信が出来てからトライされる事を願ってやみません



つづく..


戻る



GOホーム