CPU実験室

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

シリアルテスト

アセンブラでの開発環境が使えそうなので少し長いプログラムもコーディングできます。モニタが載せられるようにシリアル入出力を確認しておくことにします。

チェックの仕方は毎回同じですがLEDチカチカループに1文字出力ルーチンUART_SENDを組み込んだだけです。

f:id:O3I:20210626102201j:plain

 

最初に1回だけやるシリアルコントローラ8251への初期化ルーチンUART_INITはこの通り。コードこそ違いますが他のCPUボードで行っているのと全く同じです。3回ダミー「00」を書いてリセット、モード、コマンドの順で書込みの「00/00/00/40/4E/37」というコマンドチェインはもう暗記してます。

コマンド間にはリカバリタイムのつもりでNOPを4回挿入しました。

f:id:O3I:20210626102212j:plain

それにしてもこのように固定されたI/Oを連続してアクセスするプログラムを書くと、やはりデータ空間にマッピングできれば良かったと後悔してます。データ空間であればI/Oアドレスを即値で指定出来て可読性が良くなるし、データもPXを経由する煩わしさもないわけですが後の祭り。サブルーチンにして隠蔽化しておきます。

 

・・さてアセンブル、ROM化は問題なくできて電源ON!となりましたが、いつものように案の定というか全く動作しません。シリアル送信のエンプティ待ちでマイナーループしているようでシリアルが出て行かない。そもそも初期化ルーチンでONにしている/DTR,/RTSにつないだインジケータも点灯しないので初期化自体ができてないようです。