[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 2674] Re: seldon0.
こんにちは、川合です。
Koyanagi Masaaki さんは 2001/12/11 00:44:36 の「[OSASK 2669] Re:
seldon0.」で書きました:
>でした。CS:EIP = 10:4597 で出た場合も EC = 13B です。
>エラーコードは全ての場合で同じで13Bでした。
ご報告ありがとうございました。
EC = 0x13B !
おお、これこそ、何とかできる望みです。エラーコードの最下位ビッ
トは、例外の発生原因場所を示していて、これが0だとその時走ってい
た命令に問題があり、これが1だとCPUの設定に問題があるということを
意味します。
小柳さんが示してくださったCS:EIPの場所の命令はどれも問題を起こ
しようがないほど単純だったので、僕はECのbit0が1であってほしいと
思っていました。そして、そうだったのです!・・・ああ良かった〜。
そして、このECの残りの31bitから、より詳しい事も分かりました。
まずかったのはIDT(割り込み用のジャンプテーブル)の設定不足で
す。IRQ7の設定がおかしいというものです。おかしいのは当然で、何も
設定していないんですから。
しかし、IRQ7が発生した原因は分かりません。分からないというか、
まあおそらくPIC(割り込みコントローラー)のエラー報告だと思うん
ですが、なんでPICがエラーを起こすんでしょうか?割り込みに関する
部分はいじっていないのに。むう。
ということで、もうしばらく僕の原因究明に協力していただけるでし
ょうか?
まず、seldon0.exeをバイナリーエディターにかけて、以下の部分を
確認してください。
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
-------------------------------------------------------
007D50 B0 0D 8A E1 BA D4 03 00 00 B1 0C 66 EF 8B C1 66
007D60 EF C3 00 00 00 00 00 00 00 00 00 00 00 00 00 00
確認できたら、007D5B, 007D5C, 007D5F, 007D60を90に書き換えて以
下のようにしてください。
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
-------------------------------------------------------
007D50 B0 0D 8A E1 BA D4 03 00 00 B1 0C 90 90 8B C1 90
007D60 90 C3 00 00 00 00 00 00 00 00 00 00 00 00 00 00
そしてこのバージョンをseldon0k.exeとして保存し、これを起動して
みてください。
seldon0kは、スクロールするためのI/O命令を実行しません。ですか
らもちろんスクロールはしません。でも、プログラムはスクロールした
つもりで動作し続けます。・・・もしこれでもEC=13Bの例外が出るよう
なら、I/O命令以外の部分に問題があることになります。逆にこれで例
外が出なくなれば、I/O命令に問題があることになります。
>800x600モードの時は、表示される画面が640x480なだけで、
>マウスを表示範囲外に動かしてウインドウをドラッグ
>して移動することはできました。
これについては、EC=13B問題が解決したら究明することにします(致
命的ではないので)。
それでは。
--
川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/