CPU実験室

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

シリアル入出力

このボードもモニタを載せるためにシリアル入出力ルーチンの作りこみをやっていきます

先ずプログラムの先頭部分の疑似命令ですがインクルードファイルSTDDEF900H.INCTMP92CM22の内部レジスタの定義を記述した自作ファイル(ネット上で探せばどこかにあるかも)、MAXMODE ONは16Mバイト空間にプログラムコードを配置する宣言です。さらに今回追加したSUPMODE ONはCPUがスーパバイザモードになっていることを示しています。

ところがTLCS-900/H1のマニュアルを読んでみるとMAX/MINモード、SYSTEM/NORMALモード(=スーパバイザ/ユーザモード)の切替えがあるのはTMP96C141(TLCS-900無印)特有の機能のようでTLCS-900/H1でははじめからMAXモード、SYSTEMモード固定で切替ができなくなっていました。

つまりこれらの宣言は本来不要なのですがTLCS-900無印アセンブラを流用する以上入れておかないと64kbyte以上のコード領域や特権命令である割込み関係の命令でワーニングが出てしまいます。

 

この環境下でコーディングしていきますが、シリアルコントローラは以前いじったTLCS-90と同じで、送受信は割込みで駆動するようになっています。また苦手な割込みですがこれはTLCS-90に倣って記述しました。

まずベクタエリアはFFFF00HからFFFFFFHの256バイトにリセットを含む64タイプの割込みアドレスが並んでいますがここに受信割込みINTRX、送信割込みINTTXのアドレスをセットします

 

割込みサービスルーチンはRAM上の仮想的なフラグ(受信レディRXRDY、送信バッファエンプティTXEMPTY)をセットするだけです

 

このフラグを参照することであたかもハード的なステータスレジスタをポーリングするような1文字入出力ルーチンが用意できました