0(ゼロ)の除算エラー

1987年から1997年にかけての古いPCやソフトウェアの情報を扱う「OS/2 Museum」のメディアマスターであるMichal Necasek氏が下記のような実証実験結果を発表しました。
[[[ Those Win9x Crashes on Fast Machines…(Windows9xは高速マシン上でクラッシュします)]]]

友人から「Windows for Workgroups 3.11が仮想マシンで起動しない」という話を聞いたとのこと。Intel製CPUである「Core i7-2600」ではまれに起動に失敗し、AMDの「Ryzen 7 3800X」では毎回失敗するという状況でした。

OSのカーネルをデバッグしてみると、ゼロによる除算が発生し、システムをダウンさせていることが判明。さらに詳しく調査すると、Windows ではネットワーク機能にアクセスするためのプログラムであるNDIS内部で、下記の処理が行われていることが原因だったとのこと。
処理内容は
1:現在の時刻を取得する
2:LOOP命令を104万8576回実行する
3:実行後に時刻を再度取得し、1で取得した時刻との差を計算する
4:104万8576回を計算した差分で除算することで、ミリ秒あたりのLOOP命令実行回数を計算する
つまり、高速CPUでは処理に1ミリ秒も掛からないため0で除算するこになりエラーになります。
これはOSのインストール時にも言える事です。
この事から見方を変えるとPCに内蔵されている時計が止まっていれば当然最初の時刻取得時の時刻と再取得した時刻は同じなので「0による除算・・・」エラーになります。
また、時計が止まっているという事は『バックアップ用電池が切れている』と言い換えることもできます。
よくネット上で見かける『「0による除算・・・」エラーになったらバックアップ用電池を新品に交換しろ』というのはこの様な理由からです。
※記事の原文はこちらです。
古いPCはバックアップ用電池が切れている事は当り前で、私の愛機のPC98は20年~30年前のものですから新しいバックアップ電池に交換しないと「0による除算」の洗礼を受けてしまいます。
Windows11 の時代に Windows3.1 や Windows95 を使っている人はいないかもしれませんが私は古いPCに Windows 3.1 や Windows 95 をインストールして使っていますので覚え書きとして残しておきます。

PC-9801 FA

私の所有する PC-9801 FA には Panasonic(松下電器産業株式会社が2008年10月1日付で社名変更) VL2330 というボタン電池が付いています。
このボタン電池を交換します。
このボタン電池がある場所はマザーボードの本体正面向かって左奥のプリンタインターフェースの手前にあります。
このボタン電池はマザーボードに半田付けされていて簡単には交換できませんがPC本体を分解しマザーボードを取り出しボタン電池から出ている足をマザーボードの裏側より半田ごてで溶かしボタン電池を取り外します。
ここに新しいボタン電池をを取り付ければいいのですが将来のことを考え少し改造を加えます。
将来のことと言っても大袈裟なことではなく、ボタン電池の寿命は使い方にもよりますが3年~5年と言われています。
PC-9801 FA が今後どれだけ使えるかは分かりませんが、もし3年~5年後も使っていたら再度ボタン電池の交換作業をしなくてはならないので少し改造を加えることにしました。
ボタン電池の足を引き抜いた後の穴にリード線を差し込み半田で固定します。
このリード線の反対側にカプラを取り付け新しいボタン電池の足に差し込みます。

後は適当な場所に張り付ければ完成です。

尚、将来足つきのボタン電池が入手不可能になっても同規格のリード線付ボタン電池等もカプラ加工を行えば取り付けることも可能です。
※ 追記
タカチ電機工業と言うところから発売されているコイン電池ホルダー BCR20H5 を偶然見つけたのでリード線を外し付け替えました。
この商品はホルダーの下部よりプラス・マイナスの2本の足が出ていて直接マザーボードに取り付ける事ができます。
但し、周りのコンデンサ等が干渉してしまうのでヤスリ等で少し削ることが必要になります。
※併せて『コンデンサ交換』もお読み下さい。