CPU実験室

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

NS32000割込み

マニュアルをぼちぼち読んでいたのですが、だんだんヤバそうなことに気付いてきました。

まずCPU:NS32032はマスカブル割り込みが発生すると、絶対アドレス0xFFFE00から8ビットのベクタ番号を読取るとあります。ベクタ番号を与えるのは外部接続したICUNS32202なわけで、このアドレスに窓のようにICUレジスタが見えなければいけない、ということになります。

いっぽうICU側のマニュアルを読むと、

f:id:O3I:20210813111023j:plain

ICU0xFFFE00から配置しろとちゃんと書いてありました。

これはやっちまいました・・マニュアルをよく読まずにハード設計しちゃったもので現状ICU/DIOCS)は0x800100~の割り付けになっています。もっともデコーダはGALだし、アドレス線も充分引き込んであるので他のI/O含めごっそり移動することはできるのですが・・(INTAサイクルのCPUステータスをデコードすればアドレスはどこでもいいとの記述もありますがジャンパ線を飛ばす必要があります)

f:id:O3I:20210813112154j:plain

実はGALのロジック設計にispLEVERの回路図入力を使ってたのです。単純なデコードのみなのでこの際CUPLで書き直せばいいのですがちょっと面倒。

 

さらにCPU側の割込みシーケンスの説明を読み進めるとその後の処理もえらい複雑です。取得したベクタ番号から割込みベクタテーブル(DISPATCH TABLE)を引き当てますがそこに書かれているのは割込みハンドラの実アドレスではなくモジュールのディスクリプタであり、さらに別のモジュールテーブルからハンドラのエントリーポイントを計算しなければならないようです。

f:id:O3I:20210813111047j:plain

これはOSや支援ルーチン無しでアセンブラのみでやるのは骨が折れるし、結果として得られるのもやっぱり単なるLEDチカチカなわけでいったんここで挫折します