PC-9821のSocket7にMIIを載せる。 改造と言われるようなハンダごてを使ってあれやこれやできない私ですが CPUの載せ替えくらいはさすがにできます。ピンの方向を間違えないように挿して電源ONです。 前置き さて表題のMIIです。このCPUは一般的にはK6に比べて低性能ですから、CPUの入れ替え候補としてはどちらかというと低価格での売られ方をしていました。 しかしPentiumPro以降でしか解釈できないCMOV命令を使えます。これはAMDのCPUではK6-3+でも不可能です。 実際私はこれを使ってPC/AT互換機でWindows2003とQuadroの組み合わせでフルHDの動画再生支援をさせて遊んだことがあります。 https://www.youtube.com/watch?v=okUHCGkBw10&pp=ygUNc29ja2V0NyAxMDgwcA%3D%3D これはLinuxだとK6でも可能だったのですがWindows用ソフトに関しては(私には)自前コンパイルができなかったためCMOVが必須なのでした。 MIIの電源仕様 Socket7用 電源は3.3Vと2.9Vのデュアルボルテージです。 PC-98ではMMXPentiumのSocket7はこの仕様と一致します。 非MMX時代のSocket7は3.3V単一です。壊すのを恐れる私は挿しません。もっと前のSocket5はピン穴が足りません、折りたくないです。 socket横にVRMを刺せる機種ではきちんとしたVRMを使えば無改造でも刺せるかもしれません。 自分でレギュレータ回路を組んだりしても動作可能かもしれません、がそのことについて私には知識がありません。 やる人は自己責任でやってください。 ではPC-98で使えるのか? ということでPC-9821V166D2を持っています。こいつはMMXPentium166MHzの機種ですからあっさり差し替えられます。 電源を入れるとピポります。(内蔵スピーカーはありませんがつなげばちゃんと鳴ります。) MS-DOSも起動できます。FreeBSD/pc98はCPU判定を間違えるので普通には起動できません。(手元のやつは修正していますが公開していません。) しかしWindowsのGUIがまったく起動してきません。 ということで世の中のwebページをあれやこれや検索するとA20MASKが問題だ、などと書かれていたりします。 そんなことはありません。IOF2hもIOF6hも正しく動作します。プロテクトモードへの行き帰りに問題は発生しません。 プロテクトモードで仕事をするFreeBSDもしっかり動作しました。 が、電源ボタンによる電源断ができません。ヒントはこれでした。 SMIという仕組みが正しく動作しないようです。ということでソフトウェア的解決を計ろう、というお話です。 SMIについて 詳しくないので語れません。Intelのマニュアルが詳しいです。 とにかく割り込みがかかるとOSにも通知せずに完全にハードウェアだけで処理を完了させようとする仕組みです。 電源処理まわりで使われることを想定して作られたようでi386SLから存在するらしいです。 しかもA0000hからのメモリを使って使い終わったら隠れる、というとてもデバッグ(ハッキング)しにくい場所で仕事をしやがります。 さらにITF内で何度も呼び出します。ここを突破できない形のBIOSでは単純に載せ替えてもOS起動までたどり着けません。(V166D2はたまたま大丈夫なだけ) MIIとSMIについて datasheetによるとSMIを有効にするためのレジスタがあるのですがそこを弄っても結局きちんと動作させることができませんでした。 (12/7 方法だけは理解) ので私はSMIを呼び出すBIOSにパッチをあてて呼びにいかないようにしました。 するとWindows98SeのGUIが起動できました。 ということで機種依存です。汎用の仕組みとしての公開はできません。 しかし情報公開には意味があると思うのでそれは公開します。 パッチ対象はAX=9A00のInt1Fです。 V166D2の場合はF680:00E8のEBh FEhの無限ループをEBh 02hと抜けさせることでMIIを載せてもAPMBIOSの呼び出しが無限ループ待ちせずに帰ってきます。 これをやるためにはIntelなPCIホストブリッジの59hを50hから30hに変更してから実際にBIOSにパッチをあて、もう一度30hから50hに戻すことが必要です。 Wildcat機でやる人はいないとおもいますが似たようなことをする必要があります。 MIIを載せずにAX=9A00のInt1Fを呼ぶとSMIが発生してデバッグできません。MIIを載せた状態でInt1Fをトレースすると良さそうな場所が見つかると思います。 何が嬉しいの? MIIではCMOV命令が使えます。ですのでPentiumPro以降限定のソース非公開プログラムをエラーなしで動作させられます。 Socket8,Slot1機種用としてコンパイルされてしまっている各種フリーソフト、商用ソフトが動作できる可能性があります。 それだけです。すでに10年前でも世の中はそこでとまらずにPentium4以降のSSE2を必須としていましたし、現在はもはや64bitCPUを使うことが普通になっています。 自己満足の極みです。(X86-Sがキャンセルになったことは勝手に喜んでいます。) CPU判定について CPUID命令を受け付けますがecxを0クリアせずに変な返事を返してしまうようで、持ってもいない機能を持ってるよ、と報告してしまいます。 https://ja.wikipedia.org/wiki/CPUID#cite_note-3 Windows2000くらいまでなら関係ないと思いますが気持ち悪い人はソフトでCPUIDに反応しなくなるようにもできます。 私はそれをやってからWindows98Seを立ち上げましたのでGUIのWindowsはCPUをCx486SLCと誤判定しています。 Cyrix型レジスタについて IO22hとIO23hでの設定です。PC-98ではカレンダLSIとIOが被っていますが"きちんと"操作すればPC-98でもコントロールできるようです。 Cyrix5x86用のARA5x86というプログラムが有名でしょうか? datasheetとBSDのソースにあれやこれやは載っているので設定自体は簡単にできます。 APMBIOSを止めよう。 ITF処理内で止まってしまってOS起動までたどり着けない場合は無理ですが、うちのV166D2はなんとかそこまではたどり着けます。 ですのでそれと同じタイプなら対処できる、と思いましたので汎用にAPMBIOSを止めるIPLWareを作りました。 ついでにMIIの関連レジスタを弄くっています。まあついでです。 Windows2000が起動できました。 注意点 Windows98Seの場合config.sysにHIMEM.SYSが登録されていると(通常そうなります。) IO.SYSが強制的に?登録したものの上に2重で登録されてしまうバグ?のような挙動が発生します。 Int1Fの90h以外がすべておかしくなります。原因はこのフックのはずですがconfig.sysからHIMEM.SYSを消してください。 消してもIO.SYSが強制的に呼び出しているはずですのでXMSは使えます。 BIOSパッチ型だと問題が起こりませんので Int1Fのフック場所(0000:0410h)に大問題があります。 STOPAPM.sのソースを読めばわかるように書いていますが、MII(Cyrix6x86MX)でないと判断した場合は何もしません。 SMI関連レジスタは弄っていません、弄ってもSMI割り込みをうけとってくれないという実験結果があります。(やり方間違えてるだけかも?) キャッシュをWBにしてIOwaitを0にしているだけです。writeallocateはやっていません。必要があれば適度に改造してください。 12-3追加 STOP_APM.COMの方がF000:30A0hを使おうとする方です。ここは空いていると思われますが残念ながらすべての機種を持っていないため不明です。 またUMBにF3を指定してはいけません。EMM386のHIGHSCANを使ってはダメです。 STOPAPM.COMの方は0000:0410hを使う方です。必ず空いていますがIPLWareで使うとHIMEMがバグります。 Wildcatと430FX以降機種用です。430NX,430LX機(EPSON機も)、知らないPCIチップセット機種で使うことは想定していません。 その場合0000:0410hを強制的に使う判定に飛びます。 Windows2000はその場所を使っていても大丈夫です。 フローチャート HIMEMのバグを気にしない or F000:30A0hが空いているか不安 WindowsNT系列は使わない->STOPAPM.COMをautoexec.batに登録 違うメモリマネージャを使う or F000:30A0hは空いている、F3はUMBにしない OSはあれこれ使う->STOP_APM.COMをIPLWare登録 です。不安なら改造してアセンブルしてください。 IPLWare登録せずに仮想86環境で実行するとMIIの初期設定を飛ばします。のでEMM386を使う前に実行した方がよいですが まあそこは運用でごまかしてください。基本はSTOP_APMをIPLware段階で登録です。 PCIバスにPCI-eのカードを挿す変換アダプタを複数持っていましたが見当たりません。 一応まだ手元にGeforce8500GTのPCI版があります。これがさくっと動けばDXVAで動画再生できるはずですが試していません。 私がやる前にやればsocket7なPC-98でのフルHD動画再生の世界初の称号はあなたのものです。 このような発表をwebで見つけました。 https://www5b.biglobe.ne.jp/~pika2/8500gtpci.html 12-7追加 SMIに入る方法が手元では実行できましたのでそのようにしました。 ですがCyrix製CPUはIntelと互換性のないSMMの使用法をしています。ですのでSMI内処理であるAPMBIOSをIntelの形のままで正しく動作させることは不可能です。 SMI内部処理をすべて自前で書く必要があり、さすがにそれは無理がありますので勘弁してください。 電源ボタンによる電源断ができるようにはなります。 ただそもそもMIIを載せていると電源投入1発目だけは何か変な状態になってしまうことがある?ようです。 Windows9xならすぐにCTRL-ALT-DELETEを押して再起動してください。IPLWare実行後リセットからは正常に動いているように見えます。 文責 リウ 2025-12-1 初版、あまりにも嬉しいので書いた。無改造PC-98と下駄なしMIIでWindowsのGUI画面を見たのは世界で自分だけと思い込んではしゃいでいる。 2025-12-2 誤字修正、関係プログラムを付け足し Windows2000のインストールが確認できたので公開 2025-12-3 STOP_APM.COMとSTOPAPM.COMに分離 2025-12-7 SMIに入れるようには変更(ただし電源ボタンが効くだけ 上記追記を参照) レジスタ操作部を遅くならない方に変更 2025-12-8 WB/WTがおそらく逆だったので差し替え修正