『作りながら学ぶOSカーネル』 Chapter 04を読んでのつぶやき

ソース4-2

cli
mov     al, 0xFF
out     0xA1, al

これだとスレーブだけ。もっとも cli を実行しているので割り込みが入らないのは同じ。

ソース4-2

isr_ignore:
(中略)
        pushfd

割り込み発生時は、eflagsレジスタもスタックに詰まれ、iret時で復帰するので不要だと思う。

ソース4-5

dw      0x00eb, 0x00eb

ウェイトだろうけど必要なのだろうか。
同じチップに対して連続アクセスする際に必要になるケースはあるけれど、ポートは別れているし。でもチップセットなので同じチップになるのかな。でも、本当の8259ではないしと悩む。

ソース4-6

isr_ignore:
(中略)
        pushfd
        mov     al, 0x20
        out     0x20, al

EOIの通知だけれど、実際のハード割り込みでなければ通知しないほうが正しいでしょう。それにスレーブPICだとスレーブ側にも通知が必要で

INT 0x00-0x1F EOIなし
INT 0x20-0x27 マスタPICにEOI
INT 0x28-0x2F マスタPICとスレーブPICにEOI
INT 0x30-0xFF EOIなし

になるはず。

p133

isr_zero_divideハンドラでiretしないでjmp $でその場で無限ループに入るからです。

これは正しいけれど、除算エラーはフォルトなので同じ命令に戻るはず。よってIRETしても再度フォルトが発生するんじゃないだろうか。