uPD765

多様なフォーマットに対応できるようになった第2世代のFDCのひとつがNECのuPD765です。1979年初期に発表されました。NECのPC9801シリーズやIBM PC系の標準のFDCとして採用されていたため、プログラミングした経験のある方も多いかもしれません。Intel社からは8272という型番で同じものが出荷されています。

uPD765A, uPD7265
uPD765AとuPD7265。

ただ、一部コマンドでトラック数が最大77を前提としたものがあり、3.5インチの80トラックフォーマットで技を使わないといけないといった欠点があり、コンパクトフロッピーディスクドライブにも対応したuPD7265で修正されました。
uPD765Aでは8インチディスケットを前提としたIBMフォーマットだったのが、uPD7265ではミニフロッピーフォーマットで採用されているECMA/ISO系のフォーマットを用いているなど、他にもuPD765と少々の違いがあります。また後にCMOS化したuPD72065もあります。

ときに、この型番は不思議な感じがします。この前後の型番は4 bit CPU系のLSIが並んでいるのです。なんでこんな型番になったのでしょうね。

uPD762 : uCOM-41用インターフェース
uPD763 : uCOM-47用シリアル入力ディスプレイ・コントローラ
uPD764 : uCOM-4, uCOM-41用信州精機CR-330プリンタ・コントローラ
uPD765 : これ
uPD766 : 電卓用4ビット・マイクロコンピュータ
実はこの前後に16 bitマイクロプロセッサ用のLSIがあるんですが、本当に出来上がった順番に番号を割り当てたみたいに思えます。

ディスクに対するさまざまな操作を指示する方法ですが、内蔵FIFOにコマンドパケットを放り込む形になっています。uPD7220とかuPD7210と同じような形式です。コマンドには

READ DATA
WRITE DATA
WRITE DELETED DATA
READ DIAGNOSTIC
READ ID
WRITE ID
READ DELETED DATA
SCAN EQUAL
SCAN LOW OR EQUAL
SCAN HIGH OR EQUAL
SEEK
RECALIBRATE
SENSE INTERRUPT STATUS
SPECIFY
SENSE DEVICE STATUS
の15種類があります。それぞれのコマンドに個別のパラメータがありますが、それらをすべてFIFOに投入した時点でコマンドの実行が始まり、コマンドの実行終了後はFIFOからコマンド実行後のステータスやドライブの状態(ヘッドの位置など)を読み取るようになっています。
コマンドとパラメータを書き込むのをコマンドフェーズ、実際のデータ転送や作業を行うのがエクゼキューションフェーズ、実行結果ステータスを読み出すのをリザルトフェーズと呼びます。基本的には、この3フェーズを順に経由して一つのコマンドを処理しますが、SEEKやRECALIBRATEコマンドのようにリザルトフェーズのないものやSENSE INTERRUPT STATUSなどのようにエクゼキューションフェーズのないコマンドも存在します。

READ DATAコマンドの場合、コマンドフェーズで、コマンド、物理ヘッド番号とデバイス番号、シリンダ番号、論理ヘッド番号、レコード(セクタ)番号、セクタ長、1トラック中の最終セクタ番号、ギャップ3の長さ、セクタ内の処理すべきデータ数の、以上9種類の情報、それぞれが1 Byte長ですから合計9 Byte分書き込みます。セクタ長パラメータで指定したデータ量だけエクゼキューションフェーズでデータ転送が行われ、リザルトフェーズではステータス1, 2, 3と更新されたシリンダ番号、論理ヘッド番号、レコード(セクタ)番号、セクタ長の、計7 Byteを読み出すことになります。
トラックをフォーマットするのはWRITE IDコマンドですが、このコマンドではコマンドフェーズでコマンド、物理ヘッド番号とデバイス番号、1セクタ当たりのデータ長、1トラック当たりのセクタ数、ギャップ3の長さ、データとして書き込むデータパターンの、各1 Byte、合計6 Byte書き込んだ後、エクゼキューションフェーズに入ります。エクゼキューションフェーズではセクタ数だけのID情報をuPD765に向けて転送して、その後でREAD DATAと同じリザルトフェーズに入り7 Byteを読み出します(ただしシリンダ番号、論理ヘッド番号、レコード番号は無意味)。ここで重要なのはギャップ3以外のギャップの長さなどフォーマットの基本部分はuPD765の中に格納されたマイクロプログラムによって決められていて、ディスクのサイズやセクタ長とか、インターリーブのつごうで変更したいところだけ特別にパラメータやID情報として与えるようになっている点です。FD179xでは、かなりイリーガルに近いフォーマットにすることも可能でしたが、uPD765ではあまり自由度がありません。それを利用してコピープロテクト用の特種フォーマットをFD179x系のFDCを用いたハードウェアで書き込んで、uPD765を採用した機種では検証ができるけど自分でフォーマットしてコピーすることができないようにしたものもあったと思います。

一般にはDMAコントローラ(8257や8237など)を併用してデータ転送にDMAを用いますが、ある程度の無理をすればプログラムだけで転送することも可能です。ただし、その場合にはデータの読み書き時などに割り込みが入るとオーバーランエラーになってしまうのでその期間は割り込み禁止にしなくてはならず、シリアルポートやLANなどの割り込みを取りこぼす結果となることもありました。今なら簡単なDMAコントローラなどコンピュータに搭載してもLSIの隅に集積するだけでたいしたコストアップになりませんが、1980年前後の低価格コンピュータにとってはかなりの投資になりますから、後の不便を予想できてもDMAコントローラを搭載しない設計も多かったのです。
DMA転送を行うのはエクゼキューションフェーズ中のデータ転送だけで、コマンドフェーズやリザルトフェーズのデータ転送時にはDMA要求が発生しません。
そのほか、ハードウェア面ではFD179xと異なり、他にI/Oポートなどを併用することなく4台までのドライブを制御・管理できるようになっています。I/Oポートを併用しなくてはならないのは、MOTOR ON信号を用いるドライブで、そのMOTOR ON信号の制御を行いたい場合くらいでしょうか。FD179xはドライブセレクトなどドライブインターフェースに必要な信号をパラレルI/O経由でコントロールしなくてはなりませんでしたから、uPD765の方が少しだけ楽です。

Return to IC Collection