

Intel 8237は、 MCS 85マイクロプロセッサファミリーに属するダイレクトメモリアクセス(DMA)コントローラです。DMA転送中にメモリに制御信号とメモリアドレス情報を提供することで、システムのメインプロセッサへの負荷を軽減しながら、メモリとI/O間のデータ転送を可能にします。
8237は4チャンネルデバイスで、任意の数のDMAチャンネル入力を追加して拡張できます。8237は、最大1.6メガバイト/秒の速度でDMA転送が可能です。各チャンネルは64kバイトのメモリセクション全体をアドレス指定でき、1回のプログラミングで最大64kバイトを転送できます。[ 1 ]
オリジナルのIBM PCおよびIBM XTでは、単一の 8237 が DMA コントローラとして使用されていました。IBM PC AT では、マスタースレーブ構成で別の 8237 が追加され、DMA チャネルの数が 4 から 7 に増加しました。[ 2 ]後期の IBM 互換パーソナルコンピュータには、下位互換性 のために 8237 の機能をエミュレートするチップセットが搭載されている場合があります。Intel 8237 は実際にはAMDによって設計されました(Am9517 [ 3 ]と呼ばれています)。これは、AMD が Intel プロセッサを製造することを許可するクロス ライセンス契約の一部であり、この設計は Intel も利用できるようになりました。そのため、Intel パッケージには "(C) AMD 1980" と印刷されています。3MHz および 5MHz で動作する 8237 は、バリアントとして説明されているように Intel によって製造されましたが、 NEC は10MHz で動作するバージョンの μPD71037 を開発しました。[ 4 ]
8237は、1サイクルあたりの転送バイト数と使用するICの数に応じて、4つの異なるモードで動作します。
メモリ間転送を実行できます。これは、あるメモリデバイスから別のメモリデバイスへデータを転送できることを意味します。チャネル0のCurrent Addressレジスタがデータ転送のソースとなり、チャネル1のCurrent Word Countレジスタが0になると転送が終了します。
自動初期化モードでは、プロセス終了(EOP)信号を受信すると、アドレスとカウントの値が復元されます。これはCPUの介入なしに行われます。これは最後の転送を繰り返すために使用されます。[ 5 ]
端末カウント(TC)は、ISAカードへの転送終了を知らせます。転送終了時には、設定に応じて自動初期化が実行されます。
シングルモードでは、要求ごとに 1 バイトのみが転送されます。転送ごとに、プログラムに応じてカウント レジスタがデクリメントされ、アドレスがインクリメントまたはデクリメントされます。カウント レジスタがゼロになると、端末カウントTC信号がカードに送信されます。[ 6 ] [ 7 ]
DMA要求DREQはカードによって発生され、DMA確認応答DACKによって確認されるまでアクティブな状態に維持されなければならない。[ 6 ]
転送はDREQによって開始され、 DACKによって確認されると非アクティブ化されます。転送は、プロセス終了EOP(内部または外部)がアクティブ化されるまで継続され、これにより端末カウントTCがカードにトリガーされます。このモードでは自動初期化をプログラムできます。[ 6 ]
転送はDREQによって開始され、 DACKによって確認応答され、 TC、外部EOP、またはDREQのいずれかが非アクティブになるまで継続されます。自動初期化がプログラムされている場合、 TCまたは外部EOPのみが自動初期化を開始できます。[ 6 ]
8237でデータ転送に使用される内部レジスタは以下のとおりです。
Intel MCS-85 デバイスファミリーの一員である 8237 は、16 ビットのアドレス指定が可能な 8 ビットデバイスです。ただし、8086 / 88マイクロプロセッサと互換性があります。IBM PC および PC XT モデル (マシンタイプ 5150 および 5160) は、8088 CPU と 8 ビットのシステムバスアーキテクチャを備えています。後者は 8237 に直接接続されますが、8088 は 20 ビットのアドレスバスを備えているため、アドレスカウンタを拡張するために、DMA チャネルごとに 1 つずつ、4 つの追加の 4 ビットアドレスラッチ (実際にはすべて単一の 74LS670 デバイスの一部) が 8237 の横に追加されています。ただし、これらの外部ラッチは 8237 のアドレスカウンタとは別であるため、DMA 操作中に自動的にインクリメントまたはデクリメントされることはなく、64 KiB のアドレス境界をまたぐ DMA 操作を実行することはできません。 DMA転送で64 KiB境界を越えようとすると、データは64 KiBのメモリブロック内で折り返されます。(例えば、DMAチャネルと関連するアドレスラッチが、アドレス0x3FF8Cから始まる昇順のアドレスに256バイトを転送するようにプログラムされている場合、0x3FF8Cから0x4008Bまでのアドレスに転送される代わりに、データは0x3FF8Cから0x3FFFFまで転送され、その後0x30000から0x3008Bまで転送されます。)
IBM PC は、8237 の 1 つのチャネルを使用して、 DMA チャネルの入力をシステムボードのタイマー カウンタの出力に接続することで、ダイナミック メモリを更新しました。この構成により、メモリ チップ上で定期的な読み出しサイクルが発生し、メモリが更新されました。[ 8 ]
IBM PC AT(マシンタイプ5170)および100%互換機は、80286 CPUと16ビットシステムバスアーキテクチャを採用しています。PCおよびXTモデルに搭載されている8237に加え、16ビットDMA転送用に2つ目の8237がカスケード接続されています。8237は8ビットデバイスですが、これはI/Oポートとメモリ間の転送を「フライバイ」転送として実行するためです。この転送では、ソースメモリまたはI/Oポートからバス上にデータが配置され、同時に宛先I/Oポートまたはメモリから8237による処理を経ずに直接読み取られます。この転送モードでは、データバスの幅は8237にとって実質的に重要ではありません(8237レジスタをプログラムするために、少なくとも8ビット幅のデータバスに接続されている限り)。 ATクラスPCの2番目の8237は、3つの16ビットDMAチャネル(チャネル1~3、PC ATではチャネル5~7と命名)を提供します。チャネル0( PC ATでは チャネル4と命名)は、カスケードモードで8ビットDMA用の8237をカスケード構成の「スレーブ」として接続するために使用されます。16ビットチャネルを提供する8237は「マスター」です。16ビットワードをアドレス指定できるように、アドレスバスには単一のアドレスではなく偶数アドレス(0、2、4、…)をカウントするように接続されています。最初の8237と同様に、4つのアドレス拡張レジスタが追加されています。ATクラスPCでは、8つのアドレス拡張レジスタすべてが8ビット幅であるため、80286アドレスバスのサイズである完全な24ビットアドレスを指定できます。どのチャネルでも、DMA転送は64 KiBの境界を越えることはできません。(16ビットDMAは32,768個の16ビットワードに制限されています。DMAチャネルは65536個のアドレスをカウントできますが、16ビットDMAチャネルのアドレスカウンタの最上位ビットは無視されます。)8237のメモリ間DMAモードは、ソースメモリ位置から8237内部の一時8ビットレジスタに1バイトを転送し、次に一時レジスタから宛先メモリ位置に転送することで動作するため、一時レジスタが十分に大きくないため、このモードを16ビットメモリ間DMAに使用することはできません。さらに、メモリ間16ビットDMAではチャネル4を使用する必要があり、8ビットDMAチャネルを処理する8237をカスケード接続するためにチャネル4を使用することと競合します。しかし、ATでは、8ビットDMAチャネル0はDRAMリフレッシュには使用されなくなり、専用のリフレッシュロジックに置き換えられたため、チャネル0と1を使用してDRAMリフレッシュを中断することなく8ビットのメモリ間DMAを実行できるはずです。
PC AT互換機の8237ベースのDMAの設計は、 32ビットCPUと32ビットシステムバスアーキテクチャへの移行に合わせて更新されませんでした。そのため、これらのマシンでは、8237 DMAコントローラとその付属のアドレス「ページ」拡張レジスタは、80286 CPUを中心とした元の設計に従って、16 MiBのメモリしかアドレス指定できないという制限があります。80286 CPU自体も同じアドレス指定の制限があります。[ 9 ]これは、他のメモリ領域の場合、データはまずI/Oデバイスから物理アドレス空間の最初の16 MiBの中間バッファにDMAで転送され、次にCPUによって最終メモリに移動される必要があることを意味します。または、逆方向では、最初のメモリから中間バッファにCPUによって転送されてから、そのバッファからI/OデバイスにDMAで転送される必要があります。この手法は「バウンスバッファ」と呼ばれます。一般的に、DMAに伴う全体的な速度上の利点は失われますが、厳しいタイミング要件やハードウェアインターフェースの柔軟性の欠如により、周辺機器へのアクセスにDMAを使用する必要がある場合は、必要となる場合があります。
PS/2シリーズのコンピュータにおいて、IBMは80386 CPUを搭載した一部のシステムで32ビットのデータとアドレスをサポートするためにDMAハードウェアを更新しましたが、これは8237を新しいDMAコントローラ設計に置き換えることによって実現されました。新しい設計には、PC ATとの下位互換性を確保するための8237互換モードが含まれています。
このデバイスは現代のパーソナルコンピュータシステムでは個別のコンポーネントとして登場しないかもしれないが、システムコントローラチップセット内には登場する。例えば、PIIXはISAバスDMA用に2つの8237コントローラを統合していた。[ 10 ] [ 11 ]