割り込みハンドラ呼び出し時のカーネルスタックの状態 (2)

まだちょっとイメージできてない。その原因は

0771 call1:
0772    tst     -(sp)

です。344p にある 0772 行の解説が以下。

0772: スタックポインタを、PS のコピーをすでに含んでいる位置を指すよう調整する。
Lions' Commentary on UNIX より引用


意味不明。現時点で把握できてる部分を控えつつなんとかしようとしてみます。が、スタックに何かが積まれる前提なソレを理解できてないのが痛いのかもしれません。

trap から順に確認

や、逆からの方が分かり易いのか。以下なナニが_マスクされた新しい PS_なのかな。

0781   mov     4(sp),-(sp)
0782   bic     $!37,(sp)

ちなみに上記の部分がカーネルモードな場合のいっちゃん最後のスタック操作です。

0783   bit     $30000,PS
0784   beq     1f
(ry
0797 1:
0798   bis     $30000,PS
0799   jsr     pc,*(r0)+

以降は上記の通り、割り込みハンドラに飛んでいきます。
微妙な割り込みを入れてしまいましたが、巻き戻していきます。_前モードに対する古い SP_を push してるのが以下なのかな。

0780   mfpi    sp

342p にも解説があるんですがこの命令が実際どんな副作用があるのか、はデバッガで見てみたいです。その前の命令が以下で

0779   mov     r1,-(sp)

図 10.1 の記述ではl_古い r1_を push している模様。その直前なソレは以下。

0777   mov     PS,-(sp)

でもこれは call1 からの流れでは通過しない。あ、それが以下なのか。

0772   tst     -(sp)

成程、ここが上記で引用した 344p にある 0772 の記述になっているのか。なんとなくイメージできないんですが、これって

0762   jsr     r0,call1; _trap

でスタックがどうなるか、がポイントなのかどうなのか。
このあたりは正に実機確認な部分なんすかね。明日は一応朝練の日なので確認の方向で、ということで今日は置く。