EPSON PC-9800互換機にはWindows98をインストールすることがそれなりに面倒です。 まずはこの人が色々解明してくれています。 https://web.archive.org/web/20190331124304/http://www.geocities.co.jp/SiliconValley-Bay/2776/index.html 間違いだってありますが、こうやって偉そうに書いてる私も間違いだらけです。 それを指摘しても意味はありません。 原因不明とされていた部分や、当時解決できていなかった部分に対して書き残してみよう という意気込みです。 1.Windows98は640x400の16色の画面モードを持たない EGCN4.DRVという名前でWindows95までは準備されています。 Windows98に付属しているこのファイルはどうもダミーデータに思えます。(言い訳 逆アセンブルしていません。感想です。) そのためセーフモードですら640x480の256色のモードを必要としています。 これは本家NECのPC-9801系列でも同様の問題を抱えています。 PC-9821Bシリーズ内蔵アダプタと同等品のPC-9801-96ボードを挿しておく、という解決法を先ほどのかたは提案していました。 で、私のとった解決法です。 インストールCD内Win98nディレクトリをHDDの適当な場所にコピーします。 Windows95付属のEGCN4.DRVを使うことは変わりません。これを日付を最近にした状態(バイナリエディタで保存しなおすだけで日付は上書きできます。) でwin98nディレクトリのコピー先に放り込みます。さらにPEGCV8.DRVという名前でも保存します。 Windows3.1やWindows95からsetup.exeを実行するとそのまま画面が表示可能の状態でインストールが続けられるはずです。 (日付を新しくしておく以外には先ほどの方のやり方とほとんど変わりありません。) 起動後、Windows\systemに中身がWindows95版のEGCN4.DRVなPEGCV8.DRVが残っていることを確認します。 残っていたらセーフモードでそれが使われて640x400の画面で操作可能です。残っていなければ再度上書きしてください。 さて、DOSからインストールする場合は面倒です。 mini.cab mini1.cab mini2.cab mini3.cabの中身を全部解凍します。 そこにWindows3.1から持ってきた(Windows95のmini.cabから持ってきても構いません。)EGCN4.DRVを上書きコピーした上で、PEGCV8.DRVという名前でも上書き保存します。 解凍されたファイルと今の上書きファイルをまとめてMicrosoftCabinet形式で圧縮します。ファイル名はMINI.CABにします。 私はLinuxなのでlcabというコマンドを使いました。WindowsやDOSで使えるツールは各自調べてください。 さて有名な話ですが、このMINIに入っているファイルたちは実質Windows3.1です。 元々のMINI.CABを消さないように避けて新しいMINI.CABをsetup.exeと同じ場所に配置します。 後はsetup.exeを実行すると(中身がEGCN4のPEGCV8が強制的に読み込まれ)640x400の画面でWindows3.1もどきが実行でき、同じように操作が続きます。 画面は崩れませんからキーの入力も穏やかな気持ちでできます。 再起動後はこのMINIは捨て去られます。Windows9xに切り替わります。 ここでどうやら9821の256色対応機種ではPEGCV8.DRVが読まれ、非対応機種ではEGCN4.DRVが読まれるのですが Windows98のEGCN4にはおそらくダミーデータが入っているだけのため画面表示がまともにされません。 ここでWindows95から持ってきたEGCN4が読まれているとインストール作業が綺麗な画面で行えます。 日付を新しくしていたためおそらく上書きされずに残っているはずです。残っていなければ画面がぐちゃぐちゃになっています。 2度目の再起動後、画面設定が為されていません、の警告が出ます。キャンセルを選び続けてください。 それでデスクトップにたどり着きます。 後はPEGCV8.DRVがEGCN4.DRVの名前を変えただけのものになっているかを確認してください。なってなければ上書きしてください。 これでセーフモードも640x400で起動できます。 2.EMM386を登録しておくとWindows終了後リセットボタンすら効かなくなる。 https://weblabo.griffonworks.net/dorlog/2nddorcom/epson98/2378.html 状況は少し違うのですが、手元で同様のことを起こせました。 PC-586MVにはL2キャッシュが載っています。これのキャッシュ吐き出し方法はまだ解析されていません。 が、PCIRAMの操作方法はすでに解明されています。そこでキャッシュを有効にしたままPCIRAMを弄ったのちに 適当なIO操作を行うと同じ現象が発生します。 どうやらライトバックキャッシュを全部書き終わったあとにRAMをROMに戻さないと不具合が発生するようです。 LBA_IDEPではキャッシュの吐き出しはメインメモリの640-64kBの512kB以上の読み書きを行い、C0000hより上のデータは全部吐き出させているつもりでやっています。 3.16MBシステム空間 手元の機種は気にしなくていいのでよくわかりませんが、言われてるとおりにしておいた方がよいと思います。 ここの1MBを使わないと困る状況ならWindows98なんて重いOSは使わない方がいいです。 4.486でインストールしようとすると0除算エラーが発生する 逆アセンブルをするとCPUチェックでした。CPUFamilyNumberが4の時だけ通るルーチン内で発生します。 emulatorでCPUを486DX設定にするとこのエラーメッセージを再現できます。 DOSからインストールするときには無視を押せませんので紹介したページではWindows95からアップデートして無視ボタンを押せ と指示をしています。 さて無視して良さそうなのかをコードをしっかり読みきれていませんが、 オプションの/NMをつけると発生しなくなる、とは先に書きました。(これは改訂版) そうするとこんな話が見つかりました。 https://weblabo.griffonworks.net/dorlog/2nddorcom/pc-98/17393.html 最後に66MHz以上のプロセッサ要求のエラーメッセージの話が出てきます。 ということでここはCPUの周波数計測をやっているところと思えます。 そこでNECの9801BXにDX2の50MHzを載せてインストールしてみると(上記EGCモード必須) このエラーメッセージが表示されました。0で除算しました、のエラーメッセージは出ません。 また9821Xe10にDX2の66MHzを載せてインストールしてみました。すんなりとインストールが続行できる状態にたどり着きました。 何かのフラグを見ているかそれともNECとEPSONでタイマー精度に違いがあるのかわかりませんがNEC機では起こらないようです。 EPSON機だけでなくemulatorでも再現しますが、とりあえずはCPUの判別ルーチンの中で起こることは確かなようです。 検証 0000:045BhにARTIC搭載フラグがあります。このARTICの分解能は3.26usです。 EPSON機は実際にはこの機能があるにも関わらずこのフラグを立てていないようです。 で、Windows98には66MHz未満を拒否する計測部分があります。 そのときにNEC機はこのARTICを使って計測しています。 が、EPSON機(古いNEC機も同様でしょう。286機に486アクセラレータを載せるなどした場合)では i8253のタイマー(RS-232CやBEEP、Int1Chに使われているもの)を使います。 このタイマーは8MHz系では1.99MHz 5MHz系では2.45MHzです。 ですがインターバルタイマとして使われているチャンネル0はモード3で分周されてますから実際の分解能は Int1Chで使われている通り10msです。明らかに精度が悪いですね。 これでCPUの60MHz(nsオーダー)の計測をしようとするのですからCPUが十分進んだ状態でもタイマが進んでいないことはありえます。 すると差分をとっても0でしょう。その値で割り算をしてしまうので0除算です。 そういったことが起こったと決めつけます。(決め付けましたが予想は外れました。バグと指摘します。) Xe10でARTICのフラグを落としてインストールを実行すると予想どおり0除算が発生しました。 そこでPC-486系でDOSからインストールしたい人用にARTICフラグを有効にするだけのプログラムも書きました。 一応IDE-BIOSのLBAパッチの中にファイルを入れておきました。インストール時以外にも何かの役に立つかもしれませんので。 ARTICをWindows98内部のものが使っているかはわかりませんがあるならフラグは立てておいた方がよいと思います。 ARTIC.COMのファイル名です。IPLWareにもなりますがまあwindows起動前に一度実行するだけでいいです。 効果を確かめたければnp21/wを486DX設定で起動し、 ARTIC.COMの実行の有無でWindows98のインストールの最初に0除算が発生するかどうかで確認してください。 ですがまあ/NMオプションの追加が一番楽です。 追加検証 8253のタイマーで計測してる部分の逆アセンブルをほぼ全部読みました。 その結果バグと思ったので書き換えてみたところ np21/wを486DX設定の60MHz未満では66MHz以上のプロセッサが必要です、のエラーメッセージが表示され それ以上の周波数に設定しておくとエラーなしでインストールが進もうとしました。 状況証拠ですがバグと決めつけます。 パッチ場所は以下の場所です。 Windows98seのw98setup.bin 0x8ECD 89h->8Bh 0x8EF9 89h->8Bh たった2バイトです。 Windows98無印のw98setup.bin 同様に 0x8EA9 89h->8Bh 0x8ED5 89h->8Bh の2バイトです。 計測時間を8253のモード2のカウンタで測っていますがそれを秒からカウンタ数に直そうとしている式に見えましたが、最初からカウンタ数だと思いました。 その直そうとしている部分の計算を無効にしてみただけです。(そのため8MHz系で少し計測値がずれるようです。完全修正ではありません。) 上側が8MHz系のパッチ場所で下側が5MHz系の場所です。 NMオプションの方が楽ですが、多分インストーラのバグです。 ARTICが存在しなくてARTICフラグも立たないような機種では、このパッチでNMオプションを使わなくてもインストールできます。 周波数の値はそれなりに合ってそうですから気持ち悪くもないです。 5.DOSプロンプト関連 起動に時間がかかる、という問題とそれを起動すると突然パフォーマンスが上がる、という話題が存在します。 理由はさっぱりわかりません。妄想すら不可能です。再現できたらまた何かを書こうと思います。 これでまあドライバ以外の話についてはなんとかなったかなと思います。 ということをここ何日かでやっていました。 内蔵機器用ドライバが全く準備されていない、という問題は各自解決するしかありません。 EPSON版のWindows95には付属していたらしいですが、それ以外に提供されなかったそうです。 IDEに関する問題はNECも同様に抱えてますから私のIDE-BIOSパッチの文章も参照してください。 2024-10-23 初版 一番面倒な画面に対しての解決策が見つかったのでその勢いにまかせて書いた。 10-25 486でDOS(もしくはWin3.1)からインストールする際にはNMオプションをつければよい。それですり抜けられる。 10-25夜 486での問題を実機で起きたことに併せた話に書き換えた。 10-26 検証終わり、EPSON機での除算0エラーはタイムスタンパ搭載フラグが降りているためであった。無視してもよい。 ARTICフラグを有効にするだけのプログラムも書いた。 10-28 Windows98の66MHz計測部のバグと思う部分の指摘をした。DOSプロンプトを一度起動するとパフォーマンスが上がる、という現象について紹介だけした。 10-29 8253のモード1を使っているのにモード2と書いてしまった部分を修正 11-4 8253のモード2を使っているのにモード1と書いてしまった部分を修正