8257

non object

Intel社が8080A/8085用に開発したDMAコントローラが8257です。n-MOSプロセスで作成され、単一5 V電源で動作します。これ1個で4チャネルのDMAを扱え、オートロードモードがあってメインメモリ内の特定領域を周期的に転送するのにも使えます。たとえばuPD3301と組み合わせてメインメモリの特定領域の内容をCRT表示に利用することもできますし、ダイナミックメモリのリフレッシュに利用するというのもありましたね。ただ単にダイナミックメモリのリフレッシュに使用するのはもったいないですが、4チャネルありますから、CRT表示、フロッピーディスク用、予備、リフレッシュという具合に各チャネルに役割を割り与えれば、有効活用のひとつと考えられるでしょう。

8257
これはNECの互換品で高速版であるuPD8257-2です。

変わっているというか、少々時代を感じさせる機能の一つに、128 Byte転送するごとにマーク信号を出力する機能があります。通常、転送終了割り込みなどのために転送終了信号を出力する機能はありふれていますが、128 Byteごとというのは珍しいでしょう。これは、おそらくフレキシブルディスク(フロッピーディスク)とのインターフェース用に用意されたのでしょう。つまり、ディスクのセクタ区切りを表す信号ということで。初期のフレキシブルディスクは1セクタが128 Byteでした。そのため、1セクタ分の転送終了したよという信号があると、少しはフレキシブルディスクとのインターフェース回路が簡単になります。当時は集積度の高い高機能なフレキシブルディスクコントローラ用LSIが普及していなかったため、結構な個数の低集積度のICを組み合わせてインターフェース回路を作成していました。その回路を一部簡略化する補助的タイミング信号として使用されることを想定していたと思われます。シングルチップに集積されたFDCが開発されて普及すると、LSI内部で完全にそのあたりの制御が可能になってしまいましたし、さらに記録密度を増やし容量を増大させるため、1セクタを256, 512, 1024 Byteから選択できるようになります。さらに1セクタ分のデータ転送が終了すると、コントローラ用LSIから割り込み用の信号を発生する機能も集積されます。するとDMAC用のLSIにそのようなマーク信号発生機能を付加する理由がなくなりました。それで、8257以降のDMACにはマーク信号出力が存在しないのです。

ちなみに、初期の単密度のフレキシブルディスクでも1 Byteの転送時間は32 usなので、8080A時代のプロセッサ性能では単純なプログラムループでデータ転送を行うのはギリギリ。割り込み処理などが入れば無理なので、割り込み禁止でループを回すしかありません。仮にそうすると、1セクタが128 Byteで約4 msの割り込み禁止時間ができてしまいます。2400 bps程度のシリアル通信の割り込み処理すら怪しくなってしまうわけです。つまり8080AクラスのCPUでフレキシブルディスクを備えたPC的なものを構成しようとすると、なんらかのDMA制御が要求され、そのための初期のDMAコントローラが8257というわけです。