CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

割込みC化

GCCをバージョンアップして割込みが記述できるようになったので残りの部分も仕上げていきます。

まずinterrupt修飾した中身が空の関数void isr1(void)は次のようにコンパイルされました

たしかにRTEで終端されているのでこれはOKです。

次にROMの0番地から埋め込まれているベクタテーブルと同じ構造をRAM上に配置する必要があります。ここはvoid func(void)型関数へのポインタを配列で並べることで実現します。さらにaligned(4)修飾することで先頭アドレスをロングワード境界に合わせています。

ここではオートベクタ割込みLevel1~3に相当するベクタ番号25,26,27だけハンドラ本体のポインタをセットしています。この初期化の方法ですが指示初期化子で必要な要素にだけ代入していてこのようなベクタテーブルにはうってつけです。C99からサポートされた機能ですが初めて使いました

これをコンパイルするとこれも期待通り飛び先アドレスがlong型で配置され未初期化部分は0になっています

最後にこのベクタテーブルの先頭アドレスをVBRレジスタにセットする関数を用意すれば準備は完了です