CPU実験室

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

ベクタテーブル

uPD78C10ボードで割込みに対応するためベクタテーブルを追加してみました。デバイスのマニュアルを見るとメモリマップは以下のようになっています。

f:id:O3I:20210820074502j:plain

リセット(コールドスタート)が0000H番地でそれと同じページに割込みベクタが存在し、しかも場所を動かせないのでROM化した時に困るパタンですね

ここはRAMにロードされるユーザプログラムの先頭付近の適当なアドレスへ飛ばすようにしました。以前作ったMCS85ボードと同じ考え方です。

割込みを使わないならその領域はプログラムで潰してしまってよいし、必要ならそこに中継ぎのジャンプ命令を置くことになります

f:id:O3I:20210820074546j:plain

 

さてメモリマップをもう一度見ていると0x80からコールテーブルという領域があります。これはCALTという1バイト命令であらかじめ登録したサブルーチンを呼ぶためのテーブルです。Z80でいうRSTリスタート命令を汎化したような感じでちょっと便利そう。

 

f:id:O3I:20210820074516j:plain

 

最大32本エントリーでき、登録するサブルーチンは何でも良いですが、ここではモニタプログラムに含まれる汎用ルーチンとして使えそうなスイッチ読取、LED点灯、1文字入出力、文字列入出力などの先頭アドレスをセットしておきました。いわゆるROM内ルーチンであって実アドレスをソースファイルの先頭でdefineしても同じですが1バイトで呼び出せるのがミソです。DOS時代のサービスコールの感覚に近いかもしれません。

f:id:O3I:20210820074720j:plain