このボードもモニタを載せるためにシリアル入出力ルーチンの作りこみをやっていきます
先ずプログラムの先頭部分の疑似命令ですがインクルードファイルSTDDEF900H.INCはTMP92CM22の内部レジスタの定義を記述した自作ファイル(ネット上で探せばどこかにあるかも)、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文字入出力ルーチンが用意できました