WD2793

第3世代というべきFDCがWestern Digital社のWD2791シリーズです。従来のFDCではデータセパレータという回路を外付けする必要がありました。このデータセパレータ回路は、PLL制御でドライブから送られるデータパルスに同期したクロック信号や他のタイミング信号を作成するもので、初期は10個以上のICが必要な、面倒な回路でした。しかし、パーソナルコンピュータなどにフロッピーディスクドライブが多数使われるようになると、データセパレータ回路を1チップIC化したものが作られます。そして、ついにデータセパレータ回路をFDCの中に集積してしまったのがWD2791シリーズです。
一部ピンの機能の違いでWD2791, WD2793, WD2795, WD2797のバリエーションがあります。

WD2793A, TMS2793, TMS2797
上からWestern Digital社のWD2793A, Texas Instrument社のTMS2793, 同じくTMS2797。

WD279xには5つのレジスタがあり、アドレス入力端子と読み書きの条件によって、次のようにアクセスできるレジスタが決まります。
A1 A0 read write
0 0 Status register Command register
0 1 Track register Track register
1 0 Sector register Sector register
1 1 Data register Data register

WD2791とWD2793のコマンド表。7 - 0はビット番号で7がMSB。
Type Command 7 6 5 4 3 2 1 0
I Restore 0 0 0 0 h V r1 r0
I Seek 0 0 0 1 h V r1 r0
I Step 0 0 1 T h V r1 r0
I Step-in 0 1 0 T h V r1 r0
I Step-out 0 1 1 T h V r1 r0
II Read Sector 1 0 0 m S E C 0
II Write Sector 1 0 1 m S E C a0
III Read Address 1 1 0 0 0 E 0 0
III Read Track 1 1 1 0 0 E 0 0
III Write Track 1 1 1 1 0 E 0 0
IV Force Interrupt 1 1 0 1 I3 I2 I1 I0

WD2795とWD2797のコマンド表。
Type Command 7 6 5 4 3 2 1 0
I Restore 0 0 0 0 h V r1 r0
I Seek 0 0 0 1 h V r1 r0
I Step 0 0 1 T h V r1 r0
I Step-in 0 1 0 T h V r1 r0
I Step-out 0 1 1 T h V r1 r0
II Read Sector 1 0 0 m L E U 0
II Write Sector 1 0 1 m L E U a0
III Read Address 1 1 0 0 0 E U 0
III Read Track 1 1 1 0 0 E U 0
III Write Track 1 1 1 1 0 E U 0
IV Force Interrupt 1 1 0 1 I3 I2 I1 I0

コマンド表の中で使用していたオプションフラグの意味をまとめてみました。
Type bit mne. description
I 0, 1 r1, r0: stepping motor rate 別表参照
I 2 V: track number verify flag V = 0: No verify
V = 1: Verify on destination track
I 3 h: head load flag h = 0: Unload head at beginning
h = 1: Load head at beginning
I 4 T: track update flag T = 0: No update
T = 1: Update track register
II 0 a0: data address mark a0 = 0: FB (data address mark)
a0 = 1: F8 (deleted data address mark)
II 1 C: side compare flag C = 0: Disable side compare
C = 1: Enable side compare
II & III 1 U: update side select out U = 0: Update SSO to 0
U = 1: Update SSO to 1
II & III 2 E: 15 ms delay E = 0: No 15 ms delay
E = 1: 15 ms delay (30 ms for 1 MHz clock)
II 3 S: side compare S = 0: Compare for side 0
S = 1: Compare for side 1
II 3 L: sector length flag 別表参照
II 4 m: multiple record flag m = 0: single record
m = 1: multiple record
IV 0 - 3 Ix: interrupt condition flags I0 = 1: Not Ready to Ready transition
I1 = 1: Ready to Not Ready transition
I2 = 1: Index pulse
I3 = 1: Immediate Interrupt, Requires a reset
I3 - I0 = 0: Terminate with No Interrupt

上の表にある別表参照分の表について、まずステッピングモータのステップレート表。
r1 r0 CLK = 2 MHz CLK = 1 MHz
0 0 3 ms 6 ms
0 1 6 ms 12 ms
1 0 10 ms 20 ms
1 1 15 ms 30 ms

次にセクタ長の表。
LSBs of Sector Length in ID Field 00 01 10 11
L = 0 256 512 1024 128
L = 1 128 256 512 1024

コマンド実行にしたがってステータスレジスタがどのような意味になるか、次の表にまとめました。
command 7 6 5 4 3 2 1 0
all type I commands Not Ready Write Protect Head Loaded Seek Error CRC Error Track 0 Index Pulse Busy
Read Address Not Ready 0 0 Record Not Found CRC Error Lost Data DRQ Busy
Read Sector Not Ready 0 Record Type Record Not Found CRC Error Lost Data DRQ Busy
Read Track Not Ready 0 0 0 0 Lost Data DRQ Busy
Write Sector Not Ready Write Protect 0 Record Not Found CRC Error Lost Data DRQ Busy
Write Track Not Ready Write Protect 0 0 0 Lost Data DRQ Busy

Return to IC Collection