CPU実験室

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

割込み処理

アドレス0番地から配置されているx86CPUの割込みベクタテーブルには
タイプ0からタイプ255までの割込み先のアドレスがセグメント:オフセットの
形で4バイトずつセットされます

そこで次の関数に割込みタイプと処理先の関数のアドレスを渡してテーブルに
セットしました。
/************************************************
*	set_vect:割込みベクタセット	     *
************************************************/
void set_vect(int no, void(far *func)())
{
  long far *vector;
	
  vector=(long far *)(0x00000000+no*4);
  *vector=(long)func;
}

ところがテーブルがセットされた後でもタイマ割込みがかかったとたん暴走してしまいます。
おそらく飛び先がおかしいのですが、考えてみればCPUはプロテクトモードで
動作しているわけで、ここにも修正がいりそうです