2021-02-11 23:58 — asano
カテゴリー:
8251の前にまずは単純なポートを試してみることにします。
テスト用のボード、ブレッドボードで十分な気がしますがどうも好きになれないので作ってしまいました。
機能は単純です。
IORに対しては下部ジャンパで設定した値をSN74HC541N経由でデータバスに送り込みます。アドレスをデコードしていないのでアドレスは任意です。
IOWに対してはアドレスの下位4ビットとデータの上位4ビットをSN74ALS574NでラッチしてLEDを点灯します。当初データのみの予定でしたがアドレスも見られたほうが便利だろうと変更しました。
これでIN
/OUT
命令実行時の動作と波形を見てみます。ロジックプローブの信号の対応は以下のとおりです。
- D0~D3: AB0~AB3
- D4~D7: DB4~DB7
- D8: PHI
- D9: WRITE
- D10: ALE
- D11: IOR
- D12: IOW
一つ目のD9(WRITE)と同時にD10(ALE)が出ています。これがROMC=3のタイミングと思われます。この立ち上がりでD0~D3にアドレスがラッチされています。
次のD9でD11(IOR)が出ます。ジャンパは0CFHを設定していたのでD4~D7が"LLHH"にドライブされます。D11の立ち上がりとともにドライブは切れるはずですがバスの浮遊容量のおかげかそのままホールドされています。
右端でD4~D7が変化しているのは次のサイクル(ROMC=0)になってF3853がCPUREADを出してメモリがドライブしたためと思われます。
ALEは一緒です。
D12(IOW)に対してデータのセットアップ・ホールドは十分すぎるほどありますから、こちらはタイミングが問題になることはまずないでしょう。
これらの実験の中でUniversal Monitorのバグも一つ見つかっています。
I
, O
コマンドを使っているのですが、当初OUT
でラッチされる値が常に00Hになっていました。配線を疑ったりタイミングを確認しなおしたりしてもおかしなところはありません。もしやと思ってソフトのほうチェックしたらスクラッチパッドのアドレス間違えていていつも00Hを出していました。
次回は本命の8251を接続する予定です。
(続く)
コメントを追加