2019-04-20 22:54 — asano
カテゴリー:
ちょっと間があいてしまいました。
前回CRCエラーが出ているとはいえ一応セクタが読めるようになりました。データ転送のオーバランも発生していません。
FDCの回路を作るのは今回が初めてですが、8ビット時代に製作記事はよく読んでいました。そこではデータ転送が間に合うかどうかが大きな課題として扱われることが多く、ソフトウェアでステータスを見ながらでは取りこぼすということでいろいろな工夫がありました。
- 他の割り込みを禁止する
- DMA(Direct Memory Access)を利用する。これは速度の余裕ができてからもほかの理由で使われ続けました。
- ステータスをチェックしないでデータ転送する。そのままでは正常に転送できないので、ハードウェアでFDCへのアクセスを引き伸ばす。
それで当初は心配していたのですが、さすがに当時とはCPUの速度が一桁以上上がっているので余裕がありますね。
最初は外部バスのあるAT90S8515かATmega8515を考えていましたが、結局バスタイミングはソフトウェアで作っています。むしろいくつかnop
を入れないとHD63265のアクセスタイムを満たせないくらいです。
クロックも上限に近い19.2MHzにしていますがもっと下げても良かったかもしれません。
さて、残る大きな問題はリード時のエラーです。
原因はいろいろ考えられます。
- ドライブに異常がある
手近にあったPC用の3.5インチドライブを3つほど試しましたが違いはなさそうです。 - ディスクに異常がある
とりあえず何も書いていない(おそらく重要なものは入っていないだろう)ディスク2枚でテストしていますが、フォーマットの素性が不明です。 - モード切替が間違っている
上とも関連して8/#5やDENSEL, FDCのクロックをどうすればよいのかわからない。
FDCクロックは現状で16MHz固定になっているのですが、19.2MHzとの切り替え(当面はジャンパ、最終的にはソフトウェアからポートで)られるようにする必要がありそうです。
あとはディスクのフォーマットを調べる必要があります。1トラックのセクタ数とセクタサイズを読み取るのが早いかな。
(つづく)
コメントを追加