OSをつくろうpart3
■ このスレッドは過去ログ倉庫に格納されています
0166デフォルトの名無しさん
NGNG眺めてたんだけど、プロテクトモードに移行する時に
ハードウェア割りこみ(IRQ)のベクタを変更してる。
というのは、186以降で定義された無効命令とかの例外とベクタ番号が重なり
処理が面倒くさくなるから。
だから、8259Aを再初期化して、例外と重ならないように変更するといいかも。
で、例外もエラーコードをスタックに残すのと残さないのがあるから、
何種類かにハンドラを分類してるな。
それと、一般保護例外は特別扱いで、逆アセンブルして
ソフトウェア割りこみやHLT,I/Oポートの違反かを検出しているようだ。
(ページングをONにしているので、DMAアクセスはアドレス変換が必要だから)
その他の割りこみ等はリアルモードの処理ルーチンをセットしてiretdしてた(V86だから)。
特別な処理が必要ない場合は、ハンドラの先頭で
push imm ; ←割りこみ番号
jmp short INTR_Handler
みたいな感じでまとめてしまってる。
ハンドラの最後は必ずiretdしなければいけないからアセンブラになるけど、
その中からCのルーチンを呼ぶようにしておいて
実際の処理はC/C++で書くのが楽なんじゃないのかな。
■ このスレッドは過去ログ倉庫に格納されています