パスワードを忘れた? アカウント作成
15432398 journal
日記

kitune-sanの日記: PC/XTのREADY信号 2

日記 by kitune-san

PC/XTの回路図SystemBord(2/10)は、ざっくり分けると
1. READY信号の生成(nRDY/WAIT, RDYTODMA)
2. DMA要求発生時の信号生成 (HLDA, AENBRD, /AEN, DMAWAIT, /DMAEN)
3. NMI信号生成
4. I/OCHECK信号生成
5. DMA用クロック信号生成(H幅の伸張) (DCLK)
に分かれると思うのだけれど、この内「1. READY信号の生成」がわかりにくくて理解するのに時間がかかってしまったため忘れる前にメモする。というか今でもあれ?となる。

まず、nRDY/WAIT信号は8284のnAEN1に入力される信号で、CPUへ送信するREADY信号を生成するために使用される。nRDY/WAIT=HでREADYはLOW(CPUはT3->Twステート)となる。
nRDY/WAIT信号は一つのフリップフロップから出力される。このFFのトリガはクロックではなく下記のの信号の論理の組み合わせとなっている。
¬/XIOW + ¬/XIOR + (/DACK0BRD ・ ¬/XMEMR ・ AENBRD)
※ AENBRDはLのときアドレスイネーブルとなることに注意
上記の入力がL->Hとなると、nRDY/WAIT=Lとなる。ただし、後述のCLR信号により、CPUクロックの立ち上がりエッジでHにもどる。
FFのPRにはI/OCHRDYが、CLRにはnRDY/WAITを入力としたもう一つのFF(クロック立ち上がりエッジ)の出力/Qが接続されている。
I/OCHRDY信号はバスを通して外部から制御でき、適切なアクセスタイミングでLOWに落とすことで外部のカードからREADY信号を要求することができる。

以上の情報から、nRDY/WAIT信号が発生する条件は以下のタイミングとなる。
1. I/Oアクセス直後 (/XIOWまたは/XIORが、H->Lとなった時)
2. 外部のカードがREADY要求している。
3. DACK0以外のDMAアクセス発生時 (・・・多分)

1,2はわかりやすいと思うのだけれども、3についてはわかりにくいと思う。そもそも、DMAの信号でも、/XIOWか/XIORどちらかがLとなるから(/DACK0BRD ・ ¬/XMEMR ・ AENBRD)いらなくね?と1日中考えていた。
それで、8237のデータシートを見ていたら、8237の書き込み信号は拡張設定をしなければ読み取り信号が出力されるタイミングよりも1クロックずれるということに気がついた。
つまりこの設定がなければ、/XMEMR=L, /XIOW=LのDMA動作の場合に本来8237がほしいタイミングでREADY信号(REDYTODACK)が来ないことになる。これを回避したかったのだろう。…ということで納得することにした。
DACK0を除いたのは、DACK0はDRAMリフレッシュですでに使用されており、不要だったのだろう。

で、これをFPGAで動かせるように実装してみたいと思ったのだが、FFのトリガがクロック以外であることに気が付き困ってしまった。
FPGAを最初に触った時、クロック以外の信号をトリガに入れまくってよくわからなくなったトラウマがあるため避けたい。少なくとも(どっちのエッジでもいいからとりあえず)クロック同期にしたかった。
で、アイディアとして8284内部の立ち上がりエッジのFFを取り出し(イメージ的にはこれをCLR信号のFFと統合して)、オリジナルのnRDY/WAIT信号生成FFを置き換えできないかと考えた。
で、作ったのがこれ。シュミレータで見た感じは思い通りになっている・・・と思う。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...