NT3.51スレ SP1
Microsoft最後の真のNTの為のスレ
MS-DOS、Win3.1、NT4.0、Win95、Win98、Win2000、WinXP、Win2003sのカキコは禁止
無論、Mac、UNIX、BeOS、Tron、MSX、CP/M、Human68kとかもダメぽ
※前スレ
NT3.51スレ
http://mevius.2ch.net/test/read.cgi/win/1063187554/ PC-98版のNT3.51とNT4.0のHLT(CPU idle)が有効にならない問題を解析できる猛者はいない?
PC-98版NT3.50ではHLTは有効なのは確認している。
PC-98版NT3.50ではHALが1つしかないが、NT3.51とNT4.0は複数種類あるのでその辺に
ヒントがありそう この辺の記事と関係ありそうですね
NT4, Citrix Metaframe 1.8, and SMP under VMware - CPU Hogging Solution
https://communities.vmware.com/docs/DOC-11700 同様の問題について語っているWebで入手可能な多数の記事はすべて、HLT命令に基づいています。 私はお気に入りの逆アセンブラでHALAPIC.DLLを開き、次のエクスポートとアセンブリを見つけました。
HalProcessorIdle proc near
sti; 割り込みフラグを設定する
hlt; 停止状態に入る
retn; 近くの手順から戻る
HalProcessorIdle endp
わかりましたので、予想どおりにHLT命令を実行します。 HALMPS.DLLを開くと、次のことがわかりました。
HalProcessorIdle proc near
sti; 割り込みフラグを設定する
retn; 近くの手順から戻る
HalProcessorIdle endp N€CとMCRO$OFTの技術者は何考えてんだ?
ノート型PC-98にNT3.51やNT4.0を入れたら凄い勢いでバッテリー消耗するのに 但し私の技術力ではNT3.1(PC-98版問わず全般)のHLTが有効になたない
問題を解決する方法を持っていません。なぜならなWindows NT 3.1には
HalProcessorIdle関数が存在しない為 NT3.51及びNT4.0のHAL.DLL(np21/Wでは使われているであろう5MHz系HALのhal98up.dll)を
解析しみた結果
HalProcessorIdle proc near
sti; 割り込みフラグを設定する
nop; 何もしない
retn; 近くの手順から戻る
HalProcessorIdle endp
ということが判明しました。
これはどんなにエミュレーターの改良を使用ともNT3.51/NT4.0を使用時にホスト側CPUが
発熱・過熱することを意味します。
なのでバイナリエディタでNOP(0x90)をHLT(0xF4)に置き換えたのちPEチェックサムをあわせてみた
ものを使用した結果、ゲスト側のWinNTが高速作動する又はホスト側CPU負荷が軽減する結果が得られました。 唐突にエミュレーターを出ましたが、この調査の発端はPC-98エミュレーターで
NT3.51/NT4.0を使用時にホスト側のCPU負荷が高くなってしまう現象の調査の為に行いました。
(NT3.50/2000(NT5.0)の場合は適切にHLTが作動しているのとは対象的に) NT3.51の8HMz系HALのhal98oct.dllもパッチしてみたら、Anex86での作動がよりスムーズになりました。 871名無しさん@お腹いっぱい。2019/11/07(木) 17:39:51.77ID:bgxVah+m0
IDEBIOS使用時にNT3.51でセカンダリースレーブに繋ぐと
起動時の黒画面で固まってしまって使えないと思っっていたのですが、
IDEのInterrupt Delayを2000にしてしばらく待っていたら起動できました。
BX4のIDEBIOSで3台認識
https://i.imgur.com/4OZioj5.jpg