DSP/BIOSの割り込みディスパッチャー

こんにちはuzakadeuです。


今回はDSP/BIOSの割り込みディスパッチャーについてお話しします。
昔使ったDSPは記憶が曖昧なので、直近で携わったテキサス・インスツルメント社のC64x+の話をします。


前回DSPの割り込み - uzakadeuのブログで割り込みベクタについてお話ししました。
各割り込みベクタ用に確保された領域はけっこう小さい(4〜16命令分くらい)ので、たいていの場合は別に用意したもっと複雑なユーザルーチンへ分岐させます。


このユーザルーチンは各割り込み用に個別に用意してもいいのですが、ユーザルーチンではレジスタコンテキスト保存/復帰、個々の割り込みをdisable/復帰させる、NRP/IRPへ制御を戻す、など共通の処理が多くあります。同じ処理を何度も書くのは時間とプログラムメモリの無駄です。この無駄を省くために、DSP/BIOSがこの共通の処理を含んだ割り込みディスパッチャーを用意しているので、これを利用するのが楽です。

つまり各割り込みベクタには共通の割り込みディスパチャーへの分岐命令を書いておき、割り込みディスパッチャーから個別のユーザルーチンを関数コール*1するのです。


割り込みベクタ、割り込みディスパッチャー、ユーザルーチンの関係は下の図も参照してください。

*1:ここでは、制御が行ったきりの分岐ではなく、制御が戻ってくる関数コールを使う