SBC6809でASSIT09 -- 検討編2020年09月23日 12:54

Vintage ChipさんのSCB6809でASSIST09を制限付きながら動かすことができました。 制限とはPTMが搭載されていないため、トレース機能が使えないことです。 誤動作します。SBC6809には、ACIAのクロックを生成するためにPIC12F1822が使われています。これで PTMの代替えができない物かと検討してみました。

ASSIST09で、PTMをどのように使っているのかを調べてみました。モトローラの 「MC6809-MC6809E マイクロプロセッサ プログラミング マニュアル」に掲載されている ASSIST09のリストを読むと、PTMは2カ所に出てきます。まずは、初期化のところ、
です。 コメントにあるように、PTMのチャネル1をシングルショット動作で8ビットの二つのカウンタとして使います。クロックはEクロックです。もう一カ所は、NMI割り込みが起きたときのルーチン、
です。 次の割り込みのために、カウンタのMSBに7をLSBに1をセットし、RTIでも取ります。この時のPTMの 動作は、モトローラの「M6800ファミリ8ビット・データブック」によると、
の下の図のようになります。 この図の中で、Mは"7"、Lは"1"ですので、Eクロックの立ち下がりを16エッジ((M+1)*(L+1)エッジ)検出すると動作が終わります。 この間、15クロックを検出したら、出力パルスが出力され、これを反転した信号をNMIに入りNMI割り込みが 発生します。LSBにセットされた"1"は、出力パルスの幅です。これをさっ引いた15クロックは何を示して いるのでしょうか?これは、STD命令に続くRTI命令の実行クロック数に一致します。すなわち、RTI命令の次の 命令の始まりでNMI割り込みを発生させることになります。この「次に命令」とは、次にトレースする命令です。 実にスマートなやり方でトレースを実現しています。

PIC12F1822で、STD命令でPTMに何かが書き込まれたら、Eクロックの立ち下がりをカウントし、15クロック目から 16クロック目にNMI割り込みパルスを発生させればなんとかなりそうです。

大筋が見えたので、PICをどう使うか検討しました。 PICに入れる信号は、/WE,/PTM(A000H),D0,E、出力は、/NMIです。Eは、TIMER#0でカウントすることにしました。 そのため、TIMER#0の入力ピンと従来のボーレイトクロックを出力するピンとぶつかるため、 ボーレイトはRA5から取り出すことにしました。その他はRA3が入力専用に注意して割り当てることに。

TIMER#0は、カウント値が"255"から"0"に変化するときに割り込みを発生させるので、これを引っ掛けて /NMIを出力すれば良いでしょう。

さて、結果はどうなるでしょうか。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://kida.asablo.jp/blog/2020/09/23/9298506/tb