2021-02-13 22:16 — asano
カテゴリー:
汎用ロジックによるI/Oポートが動いたので、次は本命の8251を接続してみます。
SN74LS138NはAB2~AB7をデコードして8251のCSを作成しています。
8251はその2のボードで作ったIOR/IOWをそのままRD/WRとして使えます。ちょっと変わっているのはコネクタのピンが足りなくなってRESETが接続されておらずプルアッププルダウン(2021年9月7日 修正)されていることでしょうか。リセットはソフトウェアで行ないます。
クロックもコネクタの問題で来ていないのでお馴染みSG-8002DCで2.458MHzを作って8251のCLKとして供給します。
シリアルの送受信クロックは上記CLKをSN74LS393Nで16分周して作ります。
もしピン数が足りてCPUのPHI(2MHz)が使えれば、CLKにはそのまま使用して送受信クロックは13分周すればちょうど9600bpsになります。
裏側はこんな感じ。コネクタから8251へまっすぐ繋ぐだけというのがわかると思います。
今回これだけの基板で3つもチョンボをしていました。
- 74LS393を16ピンと勘違いしてソケットを付けてしまったこと。四隅をハンダ付けした時点で気付いたので交換。
- GNDのPTFE線の配線忘れ2箇所、8251搭載前の電圧チェックで発覚。
- 8251のRESETを負論理と勘違いしてプルアップ、手動でレジスタ叩いているところで挙動がおかしいのでデータシート読み直していて発見。
ハードウェアができたら次はソフトウェアです。
まずは既存の(SUB8080基板上の)8251を使ってUniversal Monitorを動かし、I
/O
コマンドを使い手動で新しい8251を初期化してみます。ここで上記3.の問題を見つけました。そのまま1文字出力・1文字入力ができることを確認します。
ここまで動いたらUniversal Monitor用のコンソールドライバを書いてしまいます。メモリマップの場合はレジスタアクセスのためにDC0
レジスタが必要でその退避など考える必要がありましたが、I/Oマップならポートアドレスは直接指定なので短くシンプルになります。これは一発で動作しました。
これで一応の完成ですがまだ少し気になる点があるので次回はそこを取り上げてみたいと思います。
コメントを追加