最終回・430HXマシンに奥義をかます!


我が家に新しいマシンがやってきた。
その名も「PC-9821Xa13/W1P」。PCIブリッジに430HX(※1)を搭載したマシンである!

んで、後ろ側から見たのがこっち。
430HXマシンにはPCIが3スロットあるように見えるが、実際には98グラフィックス(※2) ボードであるので、これは抜いてはいけない。

430HXマシンは高性能なのはいいのだが、その代償として、
「メモリにはECC-EDOSIMMを使用する」
という制限があるのだ。

この制限を破ってECCでない、ただのEDOメモリをつけると、「MEMORY ERROR」なる
激しいエラー(※3)が発生する。

この制限を解除するにはどうすればよいのか?

ここでMEMORYERRORを出さないためには、以下の方法が考えられる。

1.すなおにECCメモリをつける
2.チップセットの設定でECCを使用しない設定にする

どこかで聞いたことのあるフレーズであるが、

1は、その手段が可能ならば迷わず行ってもらいたい。わざわざECCを使用する
 設定にしてくれてあるのだ。NECから我々に対する少しばかりの心遣いである。

2は、430HXの制御レジスタを制御し、チェックしない設定にすればよいのだが、
 ユーザーがいじれる状態になる前にシステムは停止する。

つまり、通常状態ではどうやってもいじることができないのである。
しかしまあ、それだけでは何なので、ちょいといじることにする。

ECCをコントロールする設定は、一般的なIntel系に共通しているところがある。
大体同じような部分を使用しているのであるが、その中身はチップセットの能力の違いで結構違いがある。
430HXでは、ECCかParityかの違いを制御する部分が同じPCIレジスタ50hにインプリメントされている。
レジスタ50hのBit7がECCかParityかの制御ビットであるが、チェックしないという設定ではない。
あくまでも「チェックするのはECCかParityか」の選択のみである。
チェックした結果、システムに通知するか、しないかの設定で制御するようだ。
エラーを通知するかどうかの設定は、SERR#を制御しているレジスタ90hにある。
ECCは複数ビットのエラーのときにエラーを訂正できない。
複数ビットのエラーが発生したときにエラーを通知する設定がこのレジスタに用意されている。

よって、エラー通知設定を解除すればよいわけだ。
ECCに設定したままではなんとなく気持ち悪いので、ついでにこいつも解除しておいた。

んで起動。
PARITY ERROR 000C0000
ぬぉっ!
これがうわさに聞いていたエラーかい(※5)

ここで奥義をかますことにする。
難物といわれた430HX。相手にとって不足はない。
気合弾6倍弾を装填し、一気にぶちかます! (※5)

結果としては、ITFが、「常にECCが有効である」事を前提にしているため発生(※6)していた。
その部分にも対策を施してやらないと、マシンは起動しない。
なお、対処する部分は1MB未満の部分と、プロテクトメモリの2ヶ所あるのでご注意。

これで、430HX搭載マシンに関してもECCでないEDOメモリをつける実験は成功した。
時に西暦2000年1月28日。RaII23の改造を行い始めてからちょうど1年のことであった。

なお、一応今回で改造講座は終了です。
真改造講座が始まるかも・・・?




※1
98にはいろいろなPCIチップセットが使われているが、430HXを搭載したマシンは比較的後発なためもあり、
98の中でも高性能な部類に入る。
また、この世代のマシンでは最初から100Baseを搭載している。
のだが、ネットワーク制御チップ(Intel82557)は非常に発熱しやすく、自身の熱で破壊されるものもあ
るようだ。

※2
98グラフィックスとは、98を98たらしめている基本グラフィックスである。
これがないと基本的な画像処理を行う事ができないので、たとえチェックをキャンセルしたとしても、
面倒なことになる。

※3
相変わらずカラフルで激しいエラーである。

※4
すでに430HXに対して実験を行っていた先人から聞いていた現象である。
結構びびるエラーが出るので、なるべくならお付き合いしたくないITFであったりする。

※5
なるべくスピーディーに時間をかけずにやらないと、焦げ臭くなってしまうので注意。

※6
こう書くと、ITFが悪いように聞こえるかもしれないが、
「430HXの構造がいただけない」というところも大きいと思われる。
両者の夢のコンビネーションアタックが、我々挑戦者に襲い掛かるのである!

問題点はECCなどのエラー通知レジスタと、そのエラーをクリアするためのステータスクリアレジスタが同一
であるというところに起因する。ECCエラーが発生したときに通知レジスタの特定のビットがセットされるわ
けだが、この状態をクリアするためには、クリアしたいビットをセットした値を、通知レジスタに書き込むこ
とでクリアされる構造になっている。問題は、このクリア動作がECCが有効になっていないと機能しないという
ことである。有効状態でないときは、書き込んだ値がそのまま保持されてしまう構造(!)なのだ。
つまり、エラーステータスをクリア>メモリ試験>エラー検査の一連の流れのうち、一番初めのクリアのための
動作がエラーを発生させてしまうという皮肉な結果になっているわけだ。
つまり、BIOSは、ECCを使用しないときにはそもそもこのレジスタに触れてはいけない(触れる必要がない)の
であるが、ECCを使用することを前提に組まれているITFでは、最初のクリア動作がそのままエラーを発生させる
原因となってしまうわけである。(値をセットすることがエラーを発生させているわけでなく、メモリ試験後の
エラー検査でセットされた値を見てしまうためにエラー扱いとなるわけである。念のため)

トップへ