NoMaYさんのフレームワーク( Int_Hook_Vectors[]方式の場合 )についてのメモ (2022.06.29 ふぐりん) ---------- ベクタテーブルは以下の2つ ---------- 1. C$VECT (ROMエリア)  コンパイラが管理する本来のベクタテーブル。  #pragma interrupt や -vetcn により割込みルーチンが登録される。  プログラム開始時にINTBレジスタに登録されるが、NORTi_INT_HOOK_init()によってINTBレジスタの登録は解除される。  その後は、INT_COMMON_xxx()で 本来の割込みルーチンのアドレス一覧として参照される。 2. Int_Hook_Vectors[] (ROMエリア)  NoMaYさんのフレームワークが管理するベクタテーブル。  割込みベクタごとにNORTi対応ラッパーか非対応ラッパー(INT_ENTRY_xxx)が登録される。(どちらになるかはNORTi_interrupt.hで定義)  プログラム開始直後にNORTi_INT_HOOK_init()によって INTBレジスタに登録される。  その後は、割込みがかかったとき、NORTi対応ラッパーでは v3_ent_int()/v3_ret_int() を使った割込み処理を行い、非対応ラッパーは通常の割込み処理を行う。 ---------- ラッパーが呼ばれたときの割込み番号を検出する方法 ----------  hook_entry___0()から割込み番号の順番にみっちり隙間なく登録された関数の先頭からの相対アドレスから番号を割り出す。 ---------- ケースごとのレジスタ保存/復元(概念) ---------- NORTi対応ラッパー経由(INT_ENTRY_NORTi)  #pragma interrupt 定義の割込みルーチン(FIT/CGでNORTi使うときはこっち)   発生時 +PC/PSW   ラッパーのv3_ent_int +割込み時レジスタ保存(NORTi)   ラッパーがシミュレーション +PC/PSW   割込みルーチンの入口 +割込み時レジスタ保存(CC-RX)   割込みルーチンの出口 -割込み時レジスタ復元(CC-RX)   割込みルーチンのRTE -PC/PSW (ラッパーに戻るだけ)   ラッパーのv3_ret_int -割込み時レジスタ復元(NORTi)   ラッパーのv3_ret_intのRTE -PC/PSW (割込みから復帰) NORTi非対応ラッパー経由(INT_ENTRY_nonOS)  #pragma interrupt 定義の割込みルーチン(この中でNORTi使えません)   発生時 +PC/PSW   割込みルーチンの入口 +割込み時レジスタ保存(CC-RX)   割込みルーチンの出口 -割込み時レジスタ復元(CC-RX)   割込みルーチンのRTE -PC/PSW (割込みから復帰)  -vectn 登録の割込みルーチン(void hdr(void)でent_int/ret_int使用)   発生時 +PC/PSW   割込みルーチンのent_int +割込み時レジスタ保存(NORTi)   割込みルーチンのret_int -割込み時レジスタ復元(NORTi)   割込みルーチンのret_intのRTE -PC/PSW (割込みから復帰)