12:50:46とりあえず思いつきで一つ作りました。waitkbdoutの処理を書き足してみることにしました(バージョン2)。効果はあるでしょうか。興味のある方は実機テストをどうぞ。13:09:38バージョン1とバージョン2を両方適用して試してみましたが、真っ暗のままでした。環境によって現象が異なるみたいですねぇ。23:07:40またまた4012jで実験してみました。◇バージョン1+2でもリセットしてしまいました。0x00180000もやってみましたが効果ありませんでした。0.0.5.20060730」を試させて頂いたのですが、こちらは正常に起動しました。23:41:28バージョン2は的外れだったのかなあ。23:52:10a20gateは的はずれではないようです。mona2のコード入れたら動きましたw。18:50:07GT4012jでリセットすると言っている者ですが、原因に思い当たりました!BIOSでUSBキーボードやマウスをPS/2にエミュレーションする機能が有効になっていると問題が起きるようです。20:43:53昨日HiyOSを実行したとき、USBマウスでカーソルが動かせたので気づいたのですが、GT4012jは(多分)デフォルトでエミュレーション機能が有効なようです。※残念ながらBIOSメニューに設定項目が無く検証はできていません。20:44:32ですが、もともとはりぼてOSが動いていた別のマシンで裏づけを取りました。20:45:01連投失礼しました。なんだか微妙な原因で申し訳ないです。20:46:36tanakaさんの報告によると、どうやらMonaではA20GATEの設定直後に謎の設定をしているようです。いうことで、それを真似してみようと思います。22:08:53今週中には解決しそうですね。22:17:10準備しました。無事に改善するでしょうか。興味のある方は実機テストをどうぞ。22:18:304012jさんの指摘は今回の問題に関係があるかどうかまだ判断が付かないので、バージョン3の効果を確かめてから考えます。22:20:44harib27fにバージョン3を適用しましたが、真っ黒画面のまま止まってしまいました。22:46:25harib27f+バージョン3でも、リセットしてしまいました。AL,0x60が悪かったみたいです。コメントアウトしたところ、パッチなしでも起動に成功しました。09:21:33なんとすばらしい着眼点!・・・さっそくこれを公式パッチ候補としてまとめることにします。10:50:14まとめました。こんなわずかな修正で動くようになったらいいなあ。11:07:34バージョン4試しました。Athlon64x2マシンではまたリセットしてしまいました。21:44:02バージョン4で正常に動作しました。22:18:16みなさんありがとうございます。バージョン4とバージョン1とを組み合わせたらいいのかなあ。23:14:21bootpack.cでひよひよさんの真似してio_sti()の位置を変えたらAthlon64x2マシンで動きました!もっと早く試してればよかったですね。ちなみにバージョン4の変更はあっても無くても起動しました。位置が違いましたか・・・(自分でやったはずなのに忘れてました。改造版をアップしておきました。02:05:36ご報告ありがとうございます。バージョン5を作りました。バージョン1は多分なくてもOKな気がしてきたので、バージョン5には含まれていません。io_sti();の位置を変えればいいというのはたいへん有効そうですが、なぜ変えたら直るのかの合理的な説明が必要だと僕は感じたので、バージョン5はひよひよさんの変更とは少し違っています。興味のある方は実機テストをどうぞ。12:24:30うちのAthlon64x2環境ではバージョン5でもリブートしてしまいました。なんともデリケートですね。22:06:44ご報告ありがとうございます。どれか(もしくはすべて?)においても、CLI中にやらなければいけないということなんでしょうねえ。改造版をアップしておきました。22:53:21ご報告ありがとうございます。その結論はどうも受け入れられないので、とことんやるしかないかなと観念中です。・・・僕としては不本意なのですが、もうこうなったら1台買ってしまおうかなと(新品でも5万円台で買えるみたいなので・・・OSはいりませんしね)。開発のために何台か買っていますし、ハードウェア依存プログラム開発者の宿命かと。実機がないとデバッグしようがありませんからね。07:56:38役に立つか分かりませんが、私もAthlon64x2マシンで更に調べてみました。リセット>という結果になりました。IDT/PICの初期化をした後、[D]あたりでSTIするまで、一度も割り込み許可状態にしてはいけないみたいです。23:54:28わざわざ細かいテストをしてくださった上にご報告までしていただきありがとうございました。自力解析の際の足ががりとさせていただきます。00:13:13追加しました。リセット>/以上、追加試験してみましたが、なんとうちの環境ではリセットしました。リセットしてしまいました。マシンごとに微妙に割り込み禁止必須範囲が違うんでしょうか。動きませんでしたか・・・。09:47:03流れをよく読んでほしいのですが、Alphaさんに指摘されるまでもなく、どうすればいいのかという件についてはひよひよさんと4012jさんのおかげでほとんど分かっています。問題は「なぜそうでなければいけないか」なのです。そのヒントをつかむために、たくさん実験していただいているのです。ver.4.7(CD-R用)を起動させてみたところ、Athlon64x2マシンでも無事起動してしまいました。22:40:06ついに原因&対処法完全判明!(実機でたくさん実験してきました)。・・・でも疲れてしまったので、詳細は明日かあさってに書きます。18:35:46書き足しました。上記のバージョン6です。22:23:30うーん、僕としては今回のバージョン6には相当な自信を持っていますが、しかし誰からも何の報告もないと不安になります。テストしてみたかたは、うまくいった、うまくいかなかったなどの報告をこちらにいただけると幸いです。バージョン6を適用したharib27f改造版をアップしておきました。09:26:35ご無沙汰しております。前置きはさておき、早速試して無事起動することを確認できました!!本当に対応有難うございます。チップセット(?)共通の理由があったと分かってすっきりしました。22:44:09すいません。6600(2.40Ghz)」でチップセット「P965SS」だとはりぼてOS完成版にパッチを当てなくても動きました。18:34:34有識者の方に質問があります。AL,0x60」を削除することしています。削除する必要があるかは解説部分に記述されているため理解できます。自作本の執筆当初は、Kさんはこの記述が必要であると考えられていたかと思います。そこで、以下の2つの質問があります。12:32:51自分なりに考えてみました。(1)多少キーバッファがあっても、CPUのモードが変わっても取得するキーコードは変わらないし、32ビットモード移行後にHariMainが受けてくれるので問題ない。そもそも、本コードが実行される時点でキーバッファがたまっている可能性は低い。しても心配ならば、入力バッファがあるかどうかをKBCのステータスレジスタから自分で調べて、対応する。(2)マウスを初期化するときにキー入力のバッファを消す必要はないが(キーボードのことを考えると消してはだめ)、A20GATE信号線の有効化するときは、32ビットモードへの移行も控えており、16ビットモード時に入力されたキーはクリアしたほうがいい(取得するキーコードはCPUのモードが変わっても変わらないが意図しない入力バッファはなるべく排除しておいたほうがいいので)。12:33:25振り返ると、(1)と(2)に矛盾があるように感じたので質問した次第です。12:33:49回答いたします。考えられた質問だと思います。KBCのキーバッファをクリアしたい最大の理由は、PICを初期化することに関係があります。PICを初期化してしまうと、かりにそのときまでに未処理のIRQ1があったとしても、もう分からなくなってしまいます。キーバッファには未受信のデータが残ることになります。この状態で32bitモードになり、さらにユーザがキーを入力したとしても、普通は割り込みが起きないと思います。これを克服するには、PICの初期化後にKBCもリセットするか、もしくはmamezoさんのやり方でキーバッファが空になるまで空読みすることになると思います。18:56:47またA20GATE信号線制御に関しては、本来ならこの設定をやる前にKBCに対してキーボード無効コマンドを送り(マウス有効の逆をキーボードに対して行う)、キー入力があっても混乱しないようにするのが本来のやり方かもしれないという懸念もありました(そうやっているOSもある)。これだとA20GATEの設定が終わった後にまた有効化コマンドを送らなければならず、本の説明が長くてややこしくなるだけかもしれないと思い、カットしてしまいました。実際これが問題になることは無いようなので、これでよかったのかもしれません。・・・その代わりに暇なときに空読みさせて気休めにしていた次第です。19:05:21マウス有効化の際は、PICのリセットをする必要は無いので、キーバッファはそのままにしています。・・・ここからは余談です。PICの初期化時に保留していたIRQが分からなくなってしまうという問題は、PICというチップがバカだからなのではなく、PICに対する設定が「エッジトリガ」だからいけないのです。IBMのおじさんはAT互換機を設計するときにエッジトリガじゃないとうまく動作しなくなるようなずさんな回路を引きました。・・・KBCのリセットに関しても余談があります。KBCのリセット方法はチップセットなどによって細かな差異があるらしく、実は私自身が確実な方法(=どのチップセットでもうまくいく方法)をまだ把握していません。19:16:50質問範囲の「問題点」だけでなく、対処案やプラスアルファのご指導まで、詳細なご説明ありがとうございます。昨日から回答を何度も読み直して、かなり、もやもやが解消できました。21:56:29バージョン3でMonaOSがKBCに謎の0xffを送信していると書いてありますが、32ビットモードで送信するとPCが再起動するそうです(詳しい仕様は知らない(爆))。10:18:24おしいですね。再起動なら正解は0xfeでした。これはCPUのモードに限らず、キーボードコントローラを使ってCPUにリセット信号を送る方法です。・・・ということでMonaOSの挙動は謎です。16:29:090xfeですか。20:07:19OADGのリファレンスによると、KBCの出力ポートに6μsのパルスを発生させる(ビット0がリセット信号に接続されているので、0xfeで再起動)らしいです。場合はパルスをどこにも出さないので、ウェイトとして使っているのかも。Ld.で、C言語を導入したら再起動した問題は、ここのバージョン4のパッチを当てることで見事に起動しました。自分のPCの仕様書にはAthlon64X2機であるかとか、チップセットがi810かnForceかということが書いてなかったので、どのバージョンを当てればよいのか少し迷いましたが。10:15:54本文に間違いを発見しました。バージョン5「...から考えてみると、どうやらAlthon64X2...」=>「...から考えてみると、どうやらAthlon64X2...」であると思います。場所はバージョン5の「説明しよう!」のところです。