SIMMチェックプログラム

memtst(memtst00, memtst55) Version 0.03

  Copyright(C)2003 まりも

ダウンロードするmemtst03.lzh

1.プログラムの目的

 PC-9821の特定機種上でメモリのチェックを行ないます。Intel チップセット 430FX,430HX,440FX搭載のPC-9821デスクトップ機と、430MX搭載のノート機種限定です。その他の機種では動作しません。

2.使い方

 プログラムは2つあります。
memtst00.com は、ビットパターン00000000hとFFFFFFFFhのテストを行ないます。
memtst55.com は、ビットパターン55555555hとAAAAAAAAhのテストを行ないます。

明らかな不良があるメモリではどちらも結果は同じとなるはずです。やや不安定、つまり伝送系でデータバケがあるかもしれない場合は、結果は同じでないかもしれません。

 まずベースメモリ側スロットに、耐性抜群でエラーの無いことが分かっているメモリを、最低でも16MB(SIMMなら8+8MB)入れておきます。16MBに満たないと動作しません。これは「16メガシステム空間」のチェックがプログラム作成上面倒だったためで、仕様ということにさせてください。

 そして増設側スロットに調べたいメモリを入れておきます。ITFチェックで既にエラーがでてしまってシステムからメモリ設定が無視される機種の場合は、拙作"memsetup"をハードディスクのIPLに正しいメモリ容量設定でインストールし、これを有効にしてから起動して下さい。またパリティ/ECCビットのないメモリをテストするときは、memsetupを入れておくことは必須になります。

【注意】430FX,430HX機種以外ではmemsetupは使用できないので、ITFでまったく認識できないようなメモリのテストはできません。また430FX搭載機種(V7,V10の一部機種,Xb10)でBIOSリビジョンがVER01Fとなっているタイプが(ROMにシールがある)は、32MB×4枚載せたときに、本ソフトによる「範囲」の表示が不正になりますが、これは本ソフトのバグではなく、ITF側のバグが原因です。

 ハードウェアの設定が終わったら、EMM386やHIMEM.SYSのないDOSをまず起動します。仮想86モードでは動作しませんし、HIMEM.SYSがあると実行後のDOSに障害が発生しますから、config.sysをバイパスさせて起動して下さい。

 memtst00 か memtst55 をコマンドタイプして起動します。あとはエラー検出結果が表示されます(見つかればですが)。CPUの1次キャッシュを一時的に切ってチェックしていますので、実行にはやや時間が掛かります。開始アドレスやチェック範囲の表示が間違っていなければ、ひたすら待って下さい。32回表示したらプログラムを止めてしまうことにしています。チップレベルの不良判定にはそれで十分だと思います。なお、[ ECC/PARITY ERROR ]と表示される場合があります。これはECCビットなしのメモリを搭載しているか、またはECC機構が壊れている場合に出ます。これを避けるためには既に述べたようにmemsetupを入れておくのが基本ですが、そのまま再度実行することもできます。ただしPARITY ERROR割り込み(NMI)が出っぱなしのまま実行させることになるので、時間が非常にかかります。

3.結果の見方

 ここからが重要です。たとえばmemtst00を実行したときは下記のようなエラーが表示されます。数値はいずれも16進表記で32bitです。

addr:01000004  data:00400000/00000000

addr:01000010  data:FFFFFFFB/FFFFFFFF

....

 アドレスは物理アドレスで、32bit毎のチェックのため必ず4の倍数です。01000004というアドレスは、8で割って余り4となっています。これはSIMMスロットの組の後半(上位側)に接続されているSIMMにエラーがあったことを示します。01000010のほうは、8の倍数です。これは前半(下位側)のスロットにあるSIMMにエラーがあったことを意味します。問題のメモリをもう片方のスロットと入れ換えると、同じエラーでアドレスが4増えるかまたは減るはずです。DIMMの場合はアドレス上下の別はありません。64本のデータ線が来ています。

 次にデータの読み方です。アドレス01000004に発見されたデータ誤りの方は、本来全て0であるべきデータ値(/以降に示される)に対して、00400000という、22bit目(一番右を0から数える)が1に化けて読まれたことを意味しています。いっぽう01000010のほうは全bitが1であるべきところ、FFFFFFFBとなっており、2bit目に誤りがあるということを意味しています。ここでは2箇所に誤り(あるbitが必ずに0、または必ず1となってしまう不良)が検出されたということになります。

 上位側32bitのデータの22bit目に誤りがあるということは、CPUからみると、32+22すなわち 54bit目、ホストデータ(HD)54に誤りがあったということになります。このデータ線がどのメモリチップのデータ線DQに繋がっているかは、実際に導通テスタをあてて調べないと分かりませんが、それは大変です。下位32bit側の22bit目が、JEDEC standard に定義された 72pinn SIMMの DQ22と対応しているかも保証の限りではありません。表示例から不良チップを突き止める場合は、そのことに留意して下さい。

 結局一番手っ取り早いのは、1本のデータ線をプルアップ/ダウンしてエラーがでるようなSIMMを作成して、SIMMピン上のデータ線番号のどこを操作するとCPU上でどのbitにエラーが出るのかを、DQ0..31について調べることです。32本足上げは面倒なので、試みに2本ほど処理して確かめたところ、CPUのHD0は 確かに SIMMの DQ0と繋がっているという結果が得られましたが、HD54は 上位スロットの DQ22と対応していないという結果となりました。しかしこれはIntelのリファレンスマザーボードの配線とは一致していました。NECはintelのリファレンスに忠実に設計しているというわけです。(PC-9821 Xa/W[G8YEW-]および PC-9821RaII23[G8YKK-A] 調べ)

 なお16進数アドレス値にかんして念のために書いておくと、
01000000 は16MB、08000000 は128MB 、 10000000 は256MBです。

4.ご注意

 結果の読み方に関しては、ここに書いた以上の説明責任は負わないものとします。理解できない部分があればご自身で理解できるように努めて下さい。最低でも「ビット」や「バイト」の意味が分からないとどうしようもありません。

 プログラムソースは必要がある方にはお渡ししますので、そのときは改変してお使いになって構いません。また、バイナリパッチあてをしても構いません。例えば、チェックするビットパターン変数は、先頭から4バイト目にあります。データバケの発生がビットパターンに依存する場合もあるので、必要があればここを任意に書き換えてみて下さい。

 このプログラムでは、チェックは型どおりのもの、すなわち永久にデータが1や0になってしまっていることを検出する程度のことしか行なっていません。再現性が完全でない(不安定な)データバケを調べるためには、もっと変化に富んだ厳しいチェックを、しかも長時間に渡り行なう必要があります。さらにアドレス線のバケは一般にソフト側から調べるのは困難です。書き込み時のアドレスバケを調べるには、特徴的なデータパターンを用意し、それが所定のアドレス以外にも書かれたことがないか調べる必要があります。

5.更新履歴

2003-4-26 0.01 NMI trapの割り込みベクタ設定を間違えていたのを修正
      0.02 同じアドレスでテスト直後に反転ビットですぐテストするように変更
2003-5-12 0.03 チップセット430FX機種、ノートの430MX機種にも対応

[戻る]