CPU実験室

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

MSCで割込み

 
MicroSoftCで割込みを記述してみます。
 
と言っても簡単でMSC/C++にはinterrupt修飾子が用意されていて、これを関数名の前に付けてあげるだけです
 
イメージ 1
これをコンパイルしてアセンブラファイルを出力してみると関数の入り口で全レジスタをPUSH、出口で全レジスタをPOP、最後のリタンにIRET命令を使用していて割込みルーチンに必要な御膳立てをやってくれています。
サブルーチンなのでインストラクションポインタIPとコードセグメントCSは暗黙でPUSH/POPされるのは当然ですが、割込みではフラグレジスタもPUSHされさらにフラグレジスタに含まれる割込み許可フラグIFもクリアされ多重割込みを禁止します。
ルーチンを抜けるIRETで自動的にフラグレジスタもPOPされ割込みも再び許可状態になります。
 
 
イメージ 2
割込みベクタの設定も以下のような組込み関数がライブラリにあって最初これを使ってみたのですが動きません。
 
イメージ 3
関数の解説を見てみるとこれはDOSシステムコールINT25を使ってセットするみたいです。このボードでは動かないわけです。
なので今まで通りテーブルに直接関数へのポインタを埋め込みする自前の関数を用意

イメージ 4