CPU実験室

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

シリアル入出力

コードの書き換えでエラーは完全になくなりましたが、これからが移植の本番です
先ずはシリアル通信ができないとデバッグが全く進みません
これも今になって気付いたのですが内蔵シリアルコントローラにはステータスレジスタが無く割込み駆動で使うようです。
割込み機構はCPUによってまちまちで仕組みも複雑だったりするので、初めて使うCPUでは最初は避けて通りたいところですが仕方ありません。
 
まず受信と送信の割込みベクタから割込みハンドラ本体にジャンプさせます
 
イメージ 1
ここはインターバルが8バイトしかないので基本的にJMP命令しか置けません。
うっかりここにハンドラ本体を書いて、次のベクタにオーバーラップしてしまったのですがアセンブラがエラーを出さなかったのでかなり悩みました
 
次に割込みハンドラ本体です
割込みの中で受信レディ、送信バッファエンプティのフラグをセットすることで外部からステータスの変化が見えるようになります
ただし受信時は受信バッファを読まないと次の割込みが受けられないようです
 
イメージ 2
これであたかもステータスフラグをポーリングするように制御できます。
1文字出力のPUTCHAR、1文字入力のGETCHARルーチンの記述です。
 
イメージ 3
 
このサブルーチンを呼ぶことでシリアルの連続出力ができるようになりました。
通信速度は内蔵のボーレートジェネレータで原振の1/512が得られ、メーカ指定の9.8304MHz水晶を使うと19200bpsとなりますが、ここでは10MHzちょうどの水晶を付けたので19531bpsとなります。
これは+1.7%で±5%の許容誤差以内なので19200bps設定のターミナルで受けられるはずです
 
 
イメージ 4