FDCの概要

FDC を使うに当たって必要な外部と内部の仕様につい て説明します。本FDC はCPU システムの中でフロッ ピーディスクを使うときにFDD のコントロールを担う 目的で作りました。

 
   ハードウェアインターフェース
 
図14: FDC概観
FIG14.jpg(32432 byte)

FDC はCPU バスとFDD システムをインターフェースします、そのピンは 図14 のようなものがあります。


 
   CPUインターフェース

CPU からは6 個の8 ビットレジスタを持つ8 ビット デバイスとして機能します。 図16 を参照して下さい。 CPU と接続する信号は下記のものがあり、これらは概 ね 図15 のように接続します。

 
図15: CPUとの接続
FIG15.jpg(13320 byte)
 
図16: レジスタ構成
FIG16.jpg(24301 byte)



 
   DMAインターフェース

データ転送に外部のDMA コントローラなしでDMA 転送できます。メモリとは 図17 のように接続します。

 
図17: メモリとの接続1
FIG17.jpg(10399 byte)

 
   ローカルメモリ
 
図18: メモリとの接続2
FIG18.jpg(6366 byte)

FDC に専用のメモリを持たせてディスクのデータ転 送をFDC が単独で行えるようにしたものです、 図18 の様になります。ローカルメモリのデータをCPU から 読み出す場合はFDC を経由して行います。ほとんどの 信号はDMAインターフェースと共用していますがデー タバスは専用の DMD7〜0 を使います。


 
   システム選択
 
図19: システム選択
FIG19.jpg(6173 byte)

MD1,0 はFDCがディスクデータの転送で使用できる ハードウェアを明示する端子です。ディスクデータの転 送のハードウェアにはDMA とローカルメモリ(LMA) があります。 図19 を参照して下さい。システム選択に よって使用できるハードウェアがFDC の内部的にも決 まります、ハードウェアとシステム設定が合っていない とデータ転送ができません。DMA 転送はCPU のメモ リにデータを転送します、ローカルメモリはFDC が専 有するメモリにデータを転送します。システム選択は ハードウェアを使うデータ転送の選択肢を示すもので、 MD1,0 が「その他」の設定になっていたらDMAやロー カルメモリのハードウェアが存在しないことを示してい るだけです、システム選択がFDC の使用可能な機能を 制限することはありません。

 
   プログラム転送

  ポーリング転送


データ転送に特別のハードウェアを設けない方法で CPU が常にFDC のフラグを監視してデータのアクセ スをする転送です。

  割り込み転送


ポーリング転送にしておいてFDC の割り込みをイ ネーブルにすれば、フラグの変化で割り込みをかけられ ます、割り込み応答が十分に速いシステムでは実用にな ると思います。

 
   FDDインターフェース

FDD インターフェースは8 インチ、5 インチ、3.5 イ ンチの3 種類がありますが基本的に3.5 インチのFDD で使うものとします、設計上は対応していますが、8 イ ンチと5 インチについては現在、動作テストが出来ません。

  3.5インチ


 
図20: 3.5インチ
FIG20.jpg(20971 byte)

本稿で製作したロジックは、パソコン用のパーツとし て今でも簡単に入手できる3.5 インチドライブを自作の システムに使いたいと思ったことが発端です。 図20 のように接続します。



  5.25インチ


 
図21: 5.25インチ
FIG21.jpg(21547 byte)

現在は使わなくなった古いパソコンに使われているド ライブです。ディスクも市販されていませんが、 図21 のように接続します。



  8インチ


 
図22: 8インチ
FIG22.jpg(29116 byte)

私は使ったことはあるのですが、個人ではドライブ もディスクも持っていないので動作テストはできません が、 図22 のように接続します。



  インターフェース信号の概要


本章では、各ドライブとのインターフェースについて の詳細な説明は行いませんが、概要については表形式に してまとめてみました。FDD を3.5 インチ専用にする 場合に必要のない信号ピンもありますので 図23 を参照 して下さい。FDC の信号名との対応は 図24 を参照し て下さい。この 図24 の8 とはYED インターフェースです、 5.25 は2D/2DD/2HD タイプ共通ですが2DD/2HD の FDD では4 番ピンを In UseHead Load の切り替え で選択します。

 
図23: FDD の信号
FIG23.jpg(155908 byte)


 
図24: FDD とFDC の信号対応とピン番号
FIG24.jpg(64117 byte)

 
   ソフトウェアインターフェース
 
図25: レジスタ選択
FIG25.jpg(8359 byte)

CPU のプログラムからは、本FDC は 図16 のよう に6個の8 ビットレジスタに見えます。レジスタの選択は 図25 を参照して下さい。


 
   コマンドレジスタ

FDC に命令を与えるレジスタです、命令の内容につ いては 「命令セット」 を参照して下さい。


 
   ステータスレジスタ
 
図26: ステータスレジスタのビット
FIG26.jpg(18253 byte)

FDC の状態を示すレジスタです。 図26 を参照して下さい。

HR、RD ビットはFDD の状態を知る重要なビットです がFDC の動作を抑制することはありません。命令群U の命令発行は、これらのビットが1 になるのを待ってか ら行われるべきですが、プログラムによって制御して下 さい。


 
   エラーレジスタ
 
図27: エラーレジスタのビット
FIG27.jpg(12023 byte)

図27 を参照して下さい。ビットが1 のとき該当する エラーが発生しています。ビットのリセットは命令によ り行います、このとき全てのビットがリセットされます。


 
   パラメータレジスタ

FDC に与える命令にパラメータが伴う場合に、その 命令に先んじてパラメータを設定しておくレジスタで す。あるいはFDC の内部値の読み出しに使います。

 
   データレジスタ

ディスクから読み出されたデータが格納されるか、ま たは書き込むデータを格納するレジスタです。ステータ スレジスタの DR ビットが関連しています。

 
   割り込みマスクレジスタ
 
図28: 割り込みマスクレジスタのビット
FIG28.jpg(9408 byte)

図28 を参照して下さい。 IE はFDC の割り込み要 求許可を決定するビットです、1 でイネーブル、0 でディ セーブルと認識されます。それ以外のビットはそれぞれ の割り込み発生源ごとの許可ビットです、1 でマスク、0 で非マスクと認識されます。


 
   割り込みサービスレジスタ
 
図29: 割り込みサービスレジスタのビット
FIG29.jpg(5880 byte)

図29 を参照して下さい。割り込み発生をしたところ が1 になります、それ以外は0 です。このレジスタの任 意のビットを1 にした書き込みを行うことで、そのビッ トの割り込み要求を初期化します。


 
   命令セット
 
図30: 命令群T
FIG30.jpg(29121 byte)

FDC の命令はコマンドレジスタR0 とパラメータレ ジスタR2 で発行します、その種類は 図30図31図32 のとおりです。命令の大まかな分類はT〜[になります。


 
図31: 命令群U〜Z
FIG31.jpg(107713 byte)

 
図32: 命令群[
FIG32.jpg(23986 byte)

T   FDD インタフェースコネクタにある信号を操作する 命令群です。ディスク装置と使う命令の関係を○で 表記しました、同じ項目について複数の命令で選択 する場合は同属の命令を↑で表記してあります。

U   本群の命令はFDC がFDD に対して複雑な動作を 実行することを指示するものです、また割り込みや DMA 動作などのデータ転送も行われます。本群の命令 が実行中であることはステータスレジスタの EX に示されます。

 
図33: FDD 規格値設定操作
FIG33.jpg(22733 byte)

V   FDD の規格値やディスクの仕様をFDC に設定する 命令群です。数値は本命令の発行の前にパラメータ レジスタに書き込んでおきます。3.5 インチドライ ブを例として 図33 の手順になります、FDC の初 期化後に1 回だけ設定します。ディスクの初期化や 読み出し、書き込みの前には必ず確定させておき ます。

W   ディスクの読み書きする位置を指定する命令群です。 位置は本命令の発行の前にパラメータレジスタに 書き込んでおきます。

X   エラー処理に関する命令群です。数値は本命令の発行 の前にパラメータレジスタに書き込んでおきます。

Y   FDD の状態を読み出す命令群です。FDD の状態は 本命令の発行後にパラメータレジスタから読み出 します。

Z   セクタのID やCRC を読み出す命令群です。ID や CRC の値は本命令の発行後にパラメータレジスタ から読み出します。

 
図34: システム設定
FIG34.jpg(8494 byte)

[   システム設定に関する命令群です。 b はパラメータ レジスタを使用する命令です。システム設定は主に データ転送の方法に関する設定です、ハードウェア に依存する方法と依存しない方法がありますが、依 存する方法は MD1MD0 の端子の設定で選択可 能な場合と不可能な場合があります。どちらの方法 も 図34 の組み合わせで可能であればコマンドレ ジスタへの命令発行で有効になります。

 
   モータ安定時間

モータの回転指令を発してから安定するまでの時間を 回転数で定義します。0〜255 の設定が可能です、300rpm の回転数で255 を設定した場合に約50 秒になります。 モータ起動時間は0.5〜2.0 秒程度の値です。

 
   ヘッド操作
 
図35: ヘッド操作
FIG35.jpg(18958 byte)

図35 を参照して下さい。

 
   再試行回数

ディスクの読み出し・書き込みでセクタ等のトラッ ク上の位置を探索しますが、見つけられなかった場合に は機械的インデックスが通過します。再探索の上限を機 械的インデックスの通過個数で設定します。

 
   FDDステータスリード

FDD の信号を読み出しますが命令の発行後にパラ メータレジスタに 図36 の様に置かれます。

 
図36: FDD ステータス
FIG36.jpg(17027 byte)
 
   ディスク初期化

ディスクの初期化はトラック単位で行います、ディス ク全体を初期化するには1.44MB で80 シリンダの両面 (×2)160 トラックを初期化するために、ヘッドを80 箇所 移動して、2 回ずつ命令を発行します。書き込み方式に はFM 方式とMFM 方式があり 図37 の仕様になって います。3.5 インチドライブに1.44MB ディスクを対象 とした目的トラック移動後の操作を 図38 に示します。

 
図37: トラック仕様
FIG37.jpg(18565 byte)

 
図38: ディスク初期化操作
FIG38.jpg(23045 byte)
 
   ディスク読み出し

ディスクの読み出しはセクタ単位で行います。まず、 目的のセクタのあるトラックにヘッドを位置させます、 この後に命令を発行します。 図39 の様な手順です。

 
図39: ディスク読み出し操作
FIG39.jpg(14650 byte)
 
   ディスク書き込み

ディスクの書き込みもセクタ単位で行います。手順 も「ディスク読み出し」と変わらず 図40 の様になり ます。セクタのデータが無効にされたことを示すデータ マークF8 を書き込む場合も同手順です。

 
図40: ディスク書き込み操作
FIG40.jpg(15030 byte)
 
   命令の使い方
 
   初期設定

最初に発行する命令はFDD の規格値をFDC に設定 する為のものです、命令群Vにあります。また3.5/5/8 インチのドライブの種類の中から選択する命令が命令群 Tの後部にあります。次にディスクデータの転送方法に ついての設定が必要です、命令群[ a にあります。

 
   機械的操作

ディスクの初期化や読み出しや書き込みでは準備段階 でFDD の選択やモータやヘッドの操作を行います、こ れらは命令群Tにあります。またFDD の機械的な状態 を読み出す命令などは命令群Yにあります。

 
   セクタ情報

ディスクの読み出しや書き込みではセクタのID フィー ルドを読み出して、目的セクタとの照合を行っています。 これらはFDC の機能で使用者が感知する必要はありま せんが、命令群Zで直近のセクタ情報が読み取れます。

 
   ディスク初期化

本節の「初期設定」が既に設定されていれば、ヘッド を目的トラックに移動させて、モータを起動します。初 期化のパラメータにはID フィールドに書き込むトラッ ク番号とヘッド番号(サイド) が必要です、他のパラメー タはFDC が自動生成します。この後にFDD が機械的 安定になるステータスレジスタR0 の HRRD ビット が 0 になるのを待ってディスク初期化命令を発行しま す。初期化命令の完了はステータスレジスタR0 の EX ビットが1→0 になったときです。

 
   命令群U

本群の命令実行中はステータスレジスタR0 の EX ビットが 1 になっています。本命令群の実行完了に限って割 り込みを発生させることができます、割り込みサービス レジスタR5 の CI1 になります。また本命令群の実 行を中断させる命令が本群中にあります。

 
   ディスク書き込み・読み出し

手順はディスク初期化とほぼ同じです、必要なパラ メータはセクタの番号と個数です、命令群Wにありま す。初期化と異なる点は時々刻々のデータ転送があるこ とですが次節で述べます。

 
   データ転送
 
   ポーリング転送

FDC のハードウェアがいかなる構成になっている場 合にでも使える方法です。FDC の割り込みは使わない 前提なので割り込みマスクレジスタR4 の IE ビットは 0 にします。

  読み出し


ステータスレジスタR0 の DR ビットを監視して 0→1 になったらディスクデータをデータレジスタR3 から読 み出します、次にエラーレジスタR1 の DE ビットが 0 ならデータは正常と見なして次のデータの読み出しに 備えてステータスレジスタR0 の監視を続けます。 DE ビットが 1 なら、データを読み出す前に次のデータが上 書きされて、読み出せなかったデータがあることを示し ます。 DE ビットの初期化は命令により行います、 DR ビットは割り込みサービスレジスタR5 の DI ビットへ 1 を書き込む事で 1→0 になります。最後はステータス レジスタR0 の EX1→0 になったら命令が完了した ことを示して終わりです。

  書き込み


ディスク書き込み命令の発行後のデータマーク(FB) のディスク書き込み後に DR ビットが 0→1 になります。 1 番目のデータについては命令発行前か発行直後に DR ビットとは無関係にデータレジスタR3 に書き込んでお いて、2 番目以降はステータスレジスタR0 の DR ビットを監視してデータを書き込む手順とします。データの 書き込み後は割り込みサービスレジスタR5 の DI ビットへ 1 を書き込んでステータスレジスタの DR ビットを 1→0 にします。これを1 セクタのデータ個数分繰り返 します、最後は「読み出し」と同じです。

 
   割り込み転送

FDC の割り込み端子がCPU システムに接続されて いれば使える方法です。手順はポーリングとほぼ同じで すが通常割り込み処理プログラム中に置かれると思いま す。割り込みマスクレジスタR4 の IE ビットは 1 にして割り込み要求可能にします、 DM ビットを 0 にしてマスクを解除します。

  読み出し


ディスクデータがデータレジスタR3 に置かれると割 り込みサービスレジスタR5 の DI0→1 になり割り 込みが要求されます、ステータスレジスタR0 の監視は 不用です。割り込みの解除は割り込みサービスレジスタR5 の DI ビットへ 1 を書き込むことで行います。

  書き込み


書き込みデータ必要になると「読み出し」と同様に割 り込みが要求されます。ステータスレジスタR0 の監視 は不用です、割り込み要求の解除は「読み出し」と同じ です。

 
   DMA転送

CPU バス上のメモリをディスクデータの転送の対象 にします。DMA の設定は「ディスク読み出し」、「ディ スク書き込み」命令の前に命令群[ b の命令で 図41 の様に設定しておきます、DMA 開始アドレスは1234h です。なおDMA 開始アドレスの設定はDMA 転送の選 択の前に行います、選択後はDMA 開始アドレスの設定 は保護の目的で無効にされます。「ディスク読み出し」、 「ディスク書き込み」の命令発行の後は命令実行の完了 までプログラムの介在するところはありません。DMA の方法はバイトデータごとにDMA要求と解放を行う単 一転送と1 回のDMA要求で命令実行の完了まで解放し ない連続転送があります。

 
図41: DMA 設定操作
FIG41.jpg(11943 byte)
 
   ローカルメモリ転送

FDC の持つCPU システムとは独立したメモリにディ スクデータを転送します。ハードウェアは本FDC の機 能に特化した形態を取っています。LMAの設定はDMA 設定とほぼ同じで命令群[ b の命令で 図42 の様に設定しておきます。本転送の選択後はDMA と同様にアド レスが保護されます。CPU がローカルメモリを読み書 きする際にも命令群[ b の命令を使います。 図43 はアドレス1234h に55h に書き込んで、同アドレスから 読み出す操作です。ローカルメモリのアドレスを読み出 すこともできます。

 
図42: LMA 設定操作
FIG42.jpg(11305 byte)
 
図43: ローカルメモリ操作
FIG43.jpg(16937 byte)