CPU実験室

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

割込みテスト(3)

LEDのチカチカは最下位で75HzになっておりRST7.5の割込みは計算通り150Hzで入っていて正常に動作していると考えられます。
 
RST7.5はうまくいきましたが、RST6.5とRST5.5についても確認してみます。これらは割込みベクタが違うのはもちろんですが、トリガ条件が異なりRST7.5がエッジセンスだったのに対しRST6.5とRST5.5はレベルセンスになっています。
まずこれらに8155の/TIMEROUTを直接つなぐとうまくいかないのは容易に想像できます。
/TIMEROUTは文字通りタイムアウトするまではHレベルなので、割込み許可と同時に即割込みが発生し、ハンドラから抜けてきても依然としてHレベルなのでまたすぐに割込みが発生してしまいます。
 
i8155 TIMEROUT波形

イメージ 1


ところが/TIMEROUTを反転しておけば本当にタイムアウトした瞬間だけ正パルスが出て割込みが発生し、このパルス幅は入力クロックの1サイクル分しかないのでハンドラから抜けてくると間違いなくLレベルに戻っているので、再割込みはかからずタイマの一定周期だけで割込みがかけられエッジセンス割込みと同じ動きをすると考えられます。
/TIMEROUTを74LS04で反転させたのはそういう目論みがあっての事でした

プログラムはRST7.5のものとまったく一緒で割込みベクタだけが違います

イメージ 2

ところがこれを実行させてみるとたしかに周期的に割込みがかかっていてLEDがチカチカするのですが、何故かその速度が異様に遅く目でわかるくらいの周期でチカチカしています。
LEDチカチカの最下位ビットをプローブしてみると7.5HzでRST7.5のときの10倍。RST6.5割込みは15Hzで発生していると考えられます。
 
イメージ 3


もちろんTIMEROUTの出力は150Hzで変わっていません
 
なんでこんなに遅いのか?、なんでちょうど10倍なのか?  ・・・ということです