Merge the EN version changes, 1.8 -> 1.9.
Submitted by: Houichi Hirose <shou@kt.rim.or.jp> Reviewed by: Mitsuru Iwasaki <iwasaki@jp.freebsd.org>
This commit is contained in:
parent
3bbf54681d
commit
8fdaddd1ed
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=2063
2 changed files with 478 additions and 264 deletions
|
@ -1,6 +1,6 @@
|
|||
<!-- $Id: dma.sgml,v 1.7 1997-08-25 05:13:25 max Exp $ -->
|
||||
<!-- $Id: dma.sgml,v 1.8 1997-10-14 03:49:10 max Exp $ -->
|
||||
<!-- The FreeBSD Japanese Documentation Project -->
|
||||
<!-- Original revision: 1.8 -->
|
||||
<!-- Original revision: 1.9 -->
|
||||
<!-- 日本語訳 鈴木康修 (yasu@hike.te.chiba-u.ac.jp) -->
|
||||
<!--
|
||||
<!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN" [
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
<p><em>原作: &a.uhclem;<newline>
|
||||
<newline>訳: &a.yasu;<newline>
|
||||
10 December 1996.</em>
|
||||
10 December 1996. 最終更新日 8 October 1997.</em>
|
||||
|
||||
<!-- Version 1(3) -->
|
||||
|
||||
|
@ -59,24 +59,26 @@
|
|||
なぜなら, CPUを使用してメモリ間のデータを動かす方が早いからです.
|
||||
</quote>
|
||||
|
||||
PCアーキテクチャでは, それぞれのDMAチャネルは, 通常そのDMAを
|
||||
使用するハードウェアがそのチャネルについてDRQを使って
|
||||
転送を要求した時のみ動作します.
|
||||
PCアーキテクチャでは, それぞれのDMAチャネルは, 通常
|
||||
与えられたDMAチャネルを使用するハードウェアがそのチャネルについて
|
||||
DRQ線を使って転送を要求した時のみ動作します.
|
||||
|
||||
|
||||
<sect1><heading>DMA転送の例</heading>
|
||||
|
||||
<p>これはDMA転送の手順の例です.
|
||||
<p>DMA転送の発生と処理の手順の例をあげてみましょう.
|
||||
この例では, フロッピーディスクコントローラ (FDC)が
|
||||
ディスケットから1バイト読み込んで, DMAを使って,メモリの0x00123456番地に
|
||||
格納したいとします. 処理は, FDCによって, DRQ2信号を有効にして
|
||||
DMAコントローラに要求を伝えることで開始します.
|
||||
格納したいとします. 処理は, FDCが, DRQ2信号(DMAチャンネル2に
|
||||
対するDRQ線)を有効にして
|
||||
DMAコントローラに要求を伝えることで開始されます.
|
||||
|
||||
DMAコントローラはDRQ2シグナルが有効になったことを記録します.
|
||||
するとDMAコントローラはDMAチャネル2がプログラムされ, 有効に
|
||||
なっていることを確認します.
|
||||
DMAコントローラはまた, 他のDMAチャネルがアクティブでないか, または
|
||||
より高い優先度を持っていないかを確認します.
|
||||
するとDMAコントローラはDMAチャネル2がプログラムされ, マスクが
|
||||
かかっていない(有効になっている)ことを確認します.
|
||||
同様に, DMAコントローラは, 他のDMAチャネルがアクティブまたは
|
||||
アクティブになろうとしていないこと, そしてより高い優先度を持って
|
||||
いないことを確認します.
|
||||
一旦これらのチェックが完了すると, DMACはDMACがバスを使うために
|
||||
バスを開放するようにCPUに要求します.
|
||||
DMACはCPUにHRQ信号を送ってバスを要求します.
|
||||
|
@ -115,7 +117,7 @@
|
|||
FDCはバイトデータが転送されたことを認識します.
|
||||
|
||||
DMAサイクルは1度に1バイトしか転送しないので,
|
||||
FDCはDRQ2信号を止めて, DMACに転送の終了を知らせます.
|
||||
FDCはDRQ2信号を止めて, DMACに転送が終了したことを知らせます.
|
||||
DMACは-DACK2信号を解除して, FDCはバス上へのデータ出力を
|
||||
停止しなくてはならないことを知らせます.
|
||||
|
||||
|
@ -132,24 +134,29 @@
|
|||
典型的なフロッピーディスクの1セクタについては, 上記のプロセスが
|
||||
それぞれのバイトについて1回行われ, 全部で512回繰り返されます.
|
||||
1バイト転送される毎に,DMAC内のアドレスレジスタはインクリメントされ,
|
||||
何バイト転送すればよいかを示すカウンタがデクリメントされます.
|
||||
同じくDMAC内にある, 何バイト転送すればよいかを示すカウンタが
|
||||
デクリメントされます.
|
||||
|
||||
カウンタが0になると, DMAはカウンタが0になったことを示すEOP信号を
|
||||
送り, DMAコントローラがCPUによって再びプログラムされるまで
|
||||
これ以上データは転送されなくなります.
|
||||
カウンタが0になると, DMAはEOP信号を送ります. この信号は
|
||||
カウンタが0であり, DMAコントローラがCPUによって再び
|
||||
プログラムされるまで, これ以上データは転送されないことを
|
||||
示すものです.
|
||||
|
||||
このイベントはターミナルカウント(TC)とも呼ばれます.
|
||||
EOP信号は1本しかありません. なぜならどんな時もただ1つのDMAチャネル
|
||||
のみをアクティブにすることができるためです.
|
||||
EOP信号は1本しかありません. そして, 一度にアクティブにできる
|
||||
DMAチャネルは一本だけなので, 現在アクティブであるDMAチャネルこそが,
|
||||
たった今処理を終了したDMAチャネルだと言うことができます.
|
||||
|
||||
もし, バッファの転送が完了した時に周辺機器から割り込みを発生させたい
|
||||
とき, 周辺機器は -DACK信号およびEOP信号の両方が同時に発信されたか
|
||||
どうかをテストします. それが生じると, DMACはCPUの介在がなければ
|
||||
これ以上はその周辺機器についての情報を転送しないことを意味します.
|
||||
すると周辺機器はプロセッサの注意を得るために割り込み信号のうちの1つを
|
||||
発信します. DMAチップ自身は割り込みを生じさせる能力は持っていません.
|
||||
とき, 周辺機器は -DACKn信号およびEOP信号の両方が同時に発信されたか
|
||||
どうかをテストします. その場合, DMACはCPUの介在がなければ
|
||||
これ以上はその周辺機器についての情報を転送しません.
|
||||
その後で, 周辺機器はプロセッサに割り込みを生じさせるために,
|
||||
何らかの割り込み信号を発生させることができます. PCアーキテクチャ
|
||||
においては, DMAチップ自身が割り込みを生じさせることはできません.
|
||||
周辺機器とそれに関連するハードウェアが割り込みを生成する責任を
|
||||
持ちます.
|
||||
持ちます. また, DMAを使用する周辺機器が割り込みを使用しない
|
||||
可能性もあります.
|
||||
|
||||
DMACが要求を出したときにはCPUは常にバスをDMACに開放しますが,
|
||||
この動作は, DMACがアクティブになった時にプロセッサが命令を実行するのに
|
||||
|
@ -173,13 +180,13 @@
|
|||
IBM PCが64k以上のメモリをサポートしていたため,
|
||||
DMACが64kを越えるメモリ番地に読み込み又は書き込みを行うために
|
||||
変更を行う必要が生じました.
|
||||
この問題を解決するためにIBMが行ったのは, それぞれのDMAチャネルに
|
||||
ついてラッチを追加することでした. つまり, 読み込む又は書き込む先の
|
||||
アドレスの上位ビットに保持するためのものです.
|
||||
この問題を解決するためにIBMが行ったのは, それぞれのDMAチャネルに,
|
||||
読み込み元または書き込み先のアドレスの上位ビットを保持するための
|
||||
外部的なラッチを追加することでした.
|
||||
DMAチャネルがアクティブな時はいつでも,
|
||||
このラッチの内容はアドレスバスに書かれて, そのチャネルのDMA操作が
|
||||
終了するまでそこに保持されます.
|
||||
これらのラッチは「ページレジスタ」と呼ばれます.
|
||||
IBMはこれらのラッチを「ページレジスタ」と呼んでいます.
|
||||
|
||||
そのため上記に示した例では, DMACはアドレスの0x3456の部分をバス上に
|
||||
置き, DMAチャネル2に対するページレジスタは, 0x0012xxxxをバス上に
|
||||
|
@ -188,25 +195,27 @@
|
|||
|
||||
ページレジスタのラッチはDMAチップとは独立であるので,
|
||||
読み込まれる又は書き込まれるメモリ領域は, 64kの物理的境界を
|
||||
またいではなりません.
|
||||
DMACがメモリの0xffff番地をアクセスすると, データの転送後,
|
||||
またいではなりません. 例えば, もし
|
||||
DMACがメモリの0xffff番地をアクセスした場合, データの転送後,
|
||||
DMACはアドレスレジスタをインクリメントし, 0x0000番地にある次のバイトを
|
||||
アクセスします. 0x10000番地ではありません.
|
||||
これはおそらく意図されたものとは異なっているでしょう.
|
||||
|
||||
<quote><em>注:</em> 「物理的な」 64Kの境界を 8086モードの
|
||||
64k「セグメント」と混同してはいけません. セグメントは, セグメント
|
||||
レジスタにオフセットレジスタを加算して作られるものです.
|
||||
ページレジスタにはアドレスのオーバーラップはありません. </quote>
|
||||
レジスタに数学的にオフセットレジスタを加算して作られるものです.
|
||||
ページレジスタにはアドレスのオーバーラップも無く,数学的に
|
||||
ORを取られることもありません. </quote>
|
||||
|
||||
さらに複雑なことには, PC/ATでは外部のDMAアドレスのラッチは
|
||||
8ビットしか保持しません. よって8+16で24ビットになり, これは
|
||||
DMAが0から16メガの間のメモリ番地しか指し示せないことを
|
||||
意味します. 16メガ以上のメモリを持ったより新しいマシンにおいても,
|
||||
PCコンパチブルなDMAでは16メガ以上のメモリ番地にはアクセスできません.
|
||||
標準的なPCコンパチブルなDMAでは16メガ以上のメモリ番地には
|
||||
アクセスできません.
|
||||
|
||||
この制限を避けるために, オペレーティングシステムは
|
||||
16メガ以下にある物理的な64kの境界をまたがない領域にバッファを
|
||||
16メガ以下にある物理的な64kの境界をまたがない領域にRAMバッファを
|
||||
予約します. そして, DMACはデータを周辺機器からそのバッファに
|
||||
転送するようにプログラムされます. 一旦DMACがこのバッファに
|
||||
データを動かすと, オペレーティングシステムは本当にデータを
|
||||
|
@ -219,6 +228,10 @@
|
|||
「バウンスバッファ」と呼ばれます. MS-DOSの世界では,
|
||||
これらは「スマートバッファ」などと呼ばれます.
|
||||
|
||||
<quote><em>注意:</em> 82374と呼ばれる8237の新しい実装においては,
|
||||
ページレジスタを16ビットで指定して, バウンスバッファを使用しなくても,
|
||||
32ビットのアドレス空間全体にアクセスすることが可能です.
|
||||
|
||||
|
||||
<sect1><heading>DMA操作モードとその設定</heading>
|
||||
|
||||
|
@ -235,8 +248,8 @@
|
|||
よって使用されます.
|
||||
周辺装置は次の転送の準備ができる毎にDMAを要求します.
|
||||
|
||||
フロッピーディスクコントローラは1バイトのバッファしか持たないので,
|
||||
このモードを使用します.
|
||||
標準的なPCコンパチブルなフロッピーディスクコントローラ(NEC 765)は
|
||||
1バイトのバッファしか持たないので, このモードを使用します.
|
||||
|
||||
|
||||
<tag>ブロック/デマンド転送モード</tag>
|
||||
|
@ -249,10 +262,10 @@
|
|||
|
||||
ブロック転送モードとデマンド転送モードの違いは, 一旦ブロック転送が
|
||||
始まると,転送カウンタか0になるまでそれが行われるところです.
|
||||
1バイト転送するにはDRQが -DACK が有効になるまでの間だけ
|
||||
有効であれば充分です.
|
||||
デマンドモードはDRQが有効な間は転送が続けられます.
|
||||
DMACが転送を一時中止した場合はバスを解放してCPUに返します.
|
||||
DRQは-DACKが有効になるまでの間は有効でなければなりません.
|
||||
デマンドモードはDRQが有効な間転送が続けられます.
|
||||
DRQが有効でなくなった場合, DMAはその時点で転送を中断し,
|
||||
バスを解放してCPUに返します.
|
||||
その後、DRQが有効になると, 転送は中断したところから再開されます.
|
||||
|
||||
データの転送, 特に転送に使われるメモリ番地が16Mを越える場合に,
|
||||
|
@ -264,35 +277,38 @@
|
|||
このメカニズムはDMAチャネルがバスを要求することを許可する
|
||||
ものですが, 接続されたデバイスはバス上のアドレス情報の配置に
|
||||
ついてDMACに代わって責任を持ちます.
|
||||
これはいわゆる「バスマスタ」というものです.
|
||||
これは「バスマスタ」と呼ばれる技術の実装に利用されます.
|
||||
|
||||
カスケードモードのDMAチャネルがバスのコントロールを受け取ると,
|
||||
DMAは通常行われるようなバス上のアドレスとI/Oコントロール信号の
|
||||
出力を行いません. 代わりに, DMAはこのチャネルの -DACK信号を
|
||||
出力を行いません. 代わりに, DMAはアクティブなチャネルの -DACK信号を
|
||||
有効にします.
|
||||
|
||||
この時点で, アドレスとバスコントロール信号の供給は
|
||||
DMAチャネルに接続されたデバイスが担当します.
|
||||
DMAチャネルに接続された周辺機器が担当します.
|
||||
周辺機器はシステムバスの完全なコントロールを行い,
|
||||
16メガ以下の任意のアドレスの読み込みおよび書き込みを行うことが
|
||||
できます. 周辺機器はバスの使用を終えると, DRQ線を無効にして,
|
||||
DMAコントローラはCPUもしくは他のDMAチャネルに制御を返します.
|
||||
できます. 周辺機器はバスの使用を終えるとDRQ線を無効にするので,
|
||||
DMAコントローラはCPUもしくは他のDMAチャネルに制御を返すことが
|
||||
できます.
|
||||
|
||||
カスケードモードは複数のDMAコントローラを相互接続するのに
|
||||
使われます. PC内ではDMAチャネル4がまさにこの用途に使われています.
|
||||
周辺機器がDMAチャネル0, 1, 2, 3でバスを要求すると,
|
||||
スレーブDMAコントローラは HLDREQ を有効にしますが,
|
||||
この線は実際にはプライマリDMAコントローラのDRQ4に接続されています.
|
||||
プライマリのDMAコントローラはその後 HLDREQ を使ってCPUにバスを
|
||||
要求します. バスが与えられると, -DACK4が有効になり,
|
||||
この線はCPUではなく, 実際にはプライマリDMAコントローラのDRQ4に
|
||||
接続されています.
|
||||
その後, チャンネル4になにか仕事があるものと見なしたプライマリの
|
||||
DMAコントローラは HLDREQ を使ってCPUにバスを
|
||||
要求します. バスが与えられると, -DACK4が有効になりますが,
|
||||
この線は実際にはスレーブDMAコントローラの HLDA信号に
|
||||
接続されています.
|
||||
スレーブDMAコントローラはその後要求したDMAチャネルに対して
|
||||
データを転送するか, SCSIコントローラのような
|
||||
スレーブDMAコントローラはその後要求したDMAチャネル
|
||||
(0, 1, 2, 3) に対してデータを転送するか, SCSIコントローラのような
|
||||
バスマスタリングを要求する周辺機器にバスを許可します.
|
||||
|
||||
このような配線がおこなわれているため, PC/ATシステムでは
|
||||
DMAチャネルは
|
||||
このような配線がおこなわれているため, PC/ATシステムの
|
||||
周辺機器ではDMAチャネルは
|
||||
0, 1, 2, 3, 5, 6, 7のみが使用できます.
|
||||
|
||||
<quote><em>注:</em>
|
||||
|
@ -355,9 +371,10 @@
|
|||
|
||||
<p>プログラムされるDMAチャネルは, 通常, 設定を行う前に
|
||||
「マスクする」べきです.
|
||||
これはハードウェアが予期せずDRQを有効にすると, たとえ全てのパラメータが
|
||||
これはハードウェアが予期せずそのチャンネルに対してDRQを有効に
|
||||
した場合, たとえ全てのパラメータが
|
||||
満たされてない場合や更新されていない場合でも, DMACは
|
||||
それに応答してしまうからです.
|
||||
それに応答してしまう可能性があるからです.
|
||||
|
||||
マスクを行ってから,ホストは転送の方向(メモリからI/O,
|
||||
もしくはI/Oからメモリ)と, 転送に使用するDMA操作のモード
|
||||
|
@ -373,14 +390,14 @@
|
|||
I/Oポートの別のセットを通してアクセスされます.
|
||||
|
||||
すべての設定ができると, DMAチャネルはマスクを解除することができます.
|
||||
そのDMAチャネルは「準備ができた」とみなされ, DRQが有効になると
|
||||
応答します.
|
||||
そのDMAチャネルは「準備ができた」とみなされ, そのチャンネルのDRQが
|
||||
有効になると応答します.
|
||||
|
||||
8237のプログラミングの正確な詳細については,
|
||||
ハードウェアデータブックを参照してください.
|
||||
PCシステムにおけるI/Oマップについても参照する必要があるでしょう.
|
||||
このマップにはDMAおよびページレジスタのポートがどこに位置するのかを
|
||||
書いてあります. 以下に完全な表を示します.
|
||||
書いてあります. 以下に完全なポートのマップテーブルを示します.
|
||||
|
||||
|
||||
<sect1><heading>DMAポートのマップ</heading>
|
||||
|
@ -397,44 +414,44 @@
|
|||
<verb>
|
||||
0x00 write Channel 0 starting address
|
||||
0x00 read Channel 0 current address
|
||||
0x02 write Channel 0 starting word count
|
||||
0x02 read Channel 0 remaining word count
|
||||
0x01 write Channel 0 starting word count
|
||||
0x01 read Channel 0 remaining word count
|
||||
|
||||
0x04 write Channel 1 starting address
|
||||
0x04 read Channel 1 current address
|
||||
0x06 write Channel 1 starting word count
|
||||
0x06 read Channel 1 remaining word count
|
||||
0x02 write Channel 1 starting address
|
||||
0x02 read Channel 1 current address
|
||||
0x03 write Channel 1 starting word count
|
||||
0x03 read Channel 1 remaining word count
|
||||
|
||||
0x08 write Channel 2 starting address
|
||||
0x08 read Channel 2 current address
|
||||
0x0a write Channel 2 starting word count
|
||||
0x0a read Channel 2 remaining word count
|
||||
0x04 write Channel 2 starting address
|
||||
0x04 read Channel 2 current address
|
||||
0x05 write Channel 2 starting word count
|
||||
0x05 read Channel 2 remaining word count
|
||||
|
||||
0x0c write Channel 3 starting address
|
||||
0x0c read Channel 3 current address
|
||||
0x0e write Channel 3 starting word count
|
||||
0x0e read Channel 3 remaining word count
|
||||
0x06 write Channel 3 starting address
|
||||
0x06 read Channel 3 current address
|
||||
0x07 write Channel 3 starting word count
|
||||
0x07 read Channel 3 remaining word count
|
||||
</verb>
|
||||
|
||||
DMA コマンドレジスタ
|
||||
|
||||
<verb>
|
||||
0x10 write Command Register
|
||||
0x10 read Status Register
|
||||
0x12 write Request Register
|
||||
0x12 read -
|
||||
0x14 write Single Mask Register Bit
|
||||
0x14 read -
|
||||
0x16 write Mode Register
|
||||
0x16 read -
|
||||
0x18 write Clear LSB/MSB Flip-Flop
|
||||
0x18 read -
|
||||
0x1a write Master Clear/Reset
|
||||
0x1a read Temporary Register
|
||||
0x1c write Clear Mask Register
|
||||
0x1c read -
|
||||
0x1e write Write All Mask Register Bits
|
||||
0x1e read -
|
||||
0x08 write Command Register
|
||||
0x08 read Status Register
|
||||
0x09 write Request Register
|
||||
0x09 read -
|
||||
0x0a write Single Mask Register Bit
|
||||
0x0a read -
|
||||
0x0b write Mode Register
|
||||
0x0b read -
|
||||
0x0c write Clear LSB/MSB Flip-Flop
|
||||
0x0c read -
|
||||
0x0d write Master Clear/Reset
|
||||
0x0d read Temporary Register (新しいバージョンでは利用不可)
|
||||
0x0e write Clear Mask Register
|
||||
0x0e read -
|
||||
0x0f write Write All Mask Register Bits
|
||||
0x0f read Read All Mask Register Bits (Intel 82374にのみ存在する)
|
||||
</verb>
|
||||
|
||||
<sect2><heading>0xc0 - 0xdf DMA コントローラ #2 (Channels 4, 5, 6 and 7)</heading>
|
||||
|
@ -477,25 +494,115 @@ DMA
|
|||
0xd8 write Clear LSB/MSB Flip-Flop
|
||||
0xd8 read -
|
||||
0xda write Master Clear/Reset
|
||||
0xda read Temporary Register
|
||||
0xda read Temporary Register (Intel 82374には存在しない)
|
||||
0xdc write Clear Mask Register
|
||||
0xdc read -
|
||||
0xde write Write All Mask Register Bits
|
||||
0xde read -
|
||||
0xdf read Read All Mask Register Bits (Intel 82374にのみ存在する)
|
||||
0xdf read Read All Mask Register Bits
|
||||
</verb>
|
||||
|
||||
<sect2><heading>0x80 - 0x9f DMA ページレジスタ</heading>
|
||||
|
||||
<p><verb>
|
||||
0x87 r/w DMA Channel 0
|
||||
0x83 r/w DMA Channel 1
|
||||
0x81 r/w DMA Channel 2
|
||||
0x82 r/w DMA Channel 3
|
||||
0x87 r/w Channel 0 Low byte (23-16) page Register
|
||||
0x83 r/w Channel 1 Low byte (23-16) page Register
|
||||
0x81 r/w Channel 2 Low byte (23-16) page Register
|
||||
0x82 r/w Channel 3 Low byte (23-16) page Register
|
||||
|
||||
0x8b r/w DMA Channel 5
|
||||
0x89 r/w DMA Channel 6
|
||||
0x8a r/w DMA Channel 7
|
||||
|
||||
0x8f Refresh
|
||||
0x8b r/w Channel 5 Low byte (23-16) page Register
|
||||
0x89 r/w Channel 6 Low byte (23-16) page Register
|
||||
0x8a r/w Channel 7 Low byte (23-16) page Register
|
||||
0x8f r/w Low byte page Refresh
|
||||
</verb>
|
||||
|
||||
<sect2><heading>0x400 - 0x4ff 82374 Enhanced DMA Registers</heading>
|
||||
|
||||
<p>
|
||||
Intel 82374 EISA System Component (ESC)は1996年の初めに発表されました. この中
|
||||
には機能的には8237のスーパーセットであり, 1つのパッケージの中にその他の
|
||||
PC互換機のコアとなる周辺コンポーネントをも含んだDMAコントローラも含まれています.
|
||||
このチップはEISAとPCI両方のプラットホームをターゲットにしたものであり,
|
||||
scatter-gather I/O やリングバッファを始めとして, システムDMAをして32ビットの
|
||||
アドレス空間全体に直接アクセスする能力も提供しています.
|
||||
|
||||
<p>
|
||||
これらの機能を使用する場合でも, 過去16年間のPC互換機で利用されてきた
|
||||
同等機能を提供するコードも含めておく必要があります. 互換性の問題から, 82374の
|
||||
レジスタの一部は, 従来の8237のレジスタをプログラムした<em>後</em>に,
|
||||
転送の度にプログラムされる必要があります. 8237のレジスタに書き込みを行うとき,
|
||||
ソフトウェアの下位互換性のために, 82374で追加された一部のレジスタの内容が
|
||||
強制的に0にクリアされるからです.
|
||||
|
||||
|
||||
<p><verb>
|
||||
0x401 r/w Channel 0 High byte (bits 23-16) word count
|
||||
0x403 r/w Channel 1 High byte (bits 23-16) word count
|
||||
0x405 r/w Channel 2 High byte (bits 23-16) word count
|
||||
0x407 r/w Channel 3 High byte (bits 23-16) word count
|
||||
0x4c6 r/w Channel 5 High byte (bits 23-16) word count
|
||||
0x4ca r/w Channel 6 High byte (bits 23-16) word count
|
||||
0x4ce r/w Channel 7 High byte (bits 23-16) word count
|
||||
|
||||
0x487 r/w Channel 0 High byte (bits 31-24) page Register
|
||||
0x483 r/w Channel 1 High byte (bits 31-24) page Register
|
||||
0x481 r/w Channel 2 High byte (bits 31-24) page Register
|
||||
0x482 r/w Channel 3 High byte (bits 31-24) page Register
|
||||
0x48b r/w Channel 5 High byte (bits 31-24) page Register
|
||||
0x489 r/w Channel 6 High byte (bits 31-24) page Register
|
||||
0x48a r/w Channel 6 High byte (bits 31-24) page Register
|
||||
0x48f r/w High byte page Refresh
|
||||
|
||||
0x4e0 r/w Channel 0 Stop Register (bits 7-2)
|
||||
0x4e1 r/w Channel 0 Stop Register (bits 15-8)
|
||||
0x4e2 r/w Channel 0 Stop Register (bits 23-16)
|
||||
0x4e4 r/w Channel 1 Stop Register (bits 7-2)
|
||||
0x4e5 r/w Channel 1 Stop Register (bits 15-8)
|
||||
0x4e6 r/w Channel 1 Stop Register (bits 23-16)
|
||||
0x4e8 r/w Channel 2 Stop Register (bits 7-2)
|
||||
0x4e9 r/w Channel 2 Stop Register (bits 15-8)
|
||||
0x4ea r/w Channel 2 Stop Register (bits 23-16)
|
||||
0x4ec r/w Channel 3 Stop Register (bits 7-2)
|
||||
0x4ed r/w Channel 3 Stop Register (bits 15-8)
|
||||
0x4ee r/w Channel 3 Stop Register (bits 23-16)
|
||||
0x4f4 r/w Channel 5 Stop Register (bits 7-2)
|
||||
0x4f5 r/w Channel 5 Stop Register (bits 15-8)
|
||||
0x4f6 r/w Channel 5 Stop Register (bits 23-16)
|
||||
0x4f8 r/w Channel 6 Stop Register (bits 7-2)
|
||||
0x4f9 r/w Channel 6 Stop Register (bits 15-8)
|
||||
0x4fa r/w Channel 6 Stop Register (bits 23-16)
|
||||
0x4fc r/w Channel 7 Stop Register (bits 7-2)
|
||||
0x4fd r/w Channel 7 Stop Register (bits 15-8)
|
||||
0x4fe r/w Channel 7 Stop Register (bits 23-16)
|
||||
|
||||
0x40a write Channels 0-3 Chaining Mode Register
|
||||
0x40a read Channel Interrupt Status Register
|
||||
0x4d4 write Channels 4-7 Chaining Mode Register
|
||||
0x4d4 read Chaining Mode Status
|
||||
0x40c read Chain Buffer Expiration Control Register
|
||||
|
||||
0x410 write Channel 0 Scatter-Gather Command Register
|
||||
0x411 write Channel 1 Scatter-Gather Command Register
|
||||
0x412 write Channel 2 Scatter-Gather Command Register
|
||||
0x413 write Channel 3 Scatter-Gather Command Register
|
||||
0x415 write Channel 5 Scatter-Gather Command Register
|
||||
0x416 write Channel 6 Scatter-Gather Command Register
|
||||
0x417 write Channel 7 Scatter-Gather Command Register
|
||||
|
||||
0x418 read Channel 0 Scatter-Gather Status Register
|
||||
0x419 read Channel 1 Scatter-Gather Status Register
|
||||
0x41a read Channel 2 Scatter-Gather Status Register
|
||||
0x41b read Channel 3 Scatter-Gather Status Register
|
||||
0x41d read Channel 5 Scatter-Gather Status Register
|
||||
0x41e read Channel 5 Scatter-Gather Status Register
|
||||
0x41f read Channel 7 Scatter-Gather Status Register
|
||||
|
||||
0x420-0x423 r/w Channel 0 Scatter-Gather Descripter Table Pointer Register
|
||||
0x424-0x427 r/w Channel 1 Scatter-Gather Descripter Table Pointer Register
|
||||
0x428-0x42b r/w Channel 2 Scatter-Gather Descripter Table Pointer Register
|
||||
0x42c-0x42f r/w Channel 3 Scatter-Gather Descripter Table Pointer Register
|
||||
0x434-0x437 r/w Channel 5 Scatter-Gather Descripter Table Pointer Register
|
||||
0x438-0x43b r/w Channel 6 Scatter-Gather Descripter Table Pointer Register
|
||||
0x43c-0x43f r/w Channel 7 Scatter-Gather Descripter Table Pointer Register
|
||||
</verb>
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<!-- $Id: dma.sgml,v 1.7 1997-08-25 05:13:25 max Exp $ -->
|
||||
<!-- $Id: dma.sgml,v 1.8 1997-10-14 03:49:10 max Exp $ -->
|
||||
<!-- The FreeBSD Japanese Documentation Project -->
|
||||
<!-- Original revision: 1.8 -->
|
||||
<!-- Original revision: 1.9 -->
|
||||
<!-- 日本語訳 鈴木康修 (yasu@hike.te.chiba-u.ac.jp) -->
|
||||
<!--
|
||||
<!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN" [
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
<p><em>原作: &a.uhclem;<newline>
|
||||
<newline>訳: &a.yasu;<newline>
|
||||
10 December 1996.</em>
|
||||
10 December 1996. 最終更新日 8 October 1997.</em>
|
||||
|
||||
<!-- Version 1(3) -->
|
||||
|
||||
|
@ -59,24 +59,26 @@
|
|||
なぜなら, CPUを使用してメモリ間のデータを動かす方が早いからです.
|
||||
</quote>
|
||||
|
||||
PCアーキテクチャでは, それぞれのDMAチャネルは, 通常そのDMAを
|
||||
使用するハードウェアがそのチャネルについてDRQを使って
|
||||
転送を要求した時のみ動作します.
|
||||
PCアーキテクチャでは, それぞれのDMAチャネルは, 通常
|
||||
与えられたDMAチャネルを使用するハードウェアがそのチャネルについて
|
||||
DRQ線を使って転送を要求した時のみ動作します.
|
||||
|
||||
|
||||
<sect1><heading>DMA転送の例</heading>
|
||||
|
||||
<p>これはDMA転送の手順の例です.
|
||||
<p>DMA転送の発生と処理の手順の例をあげてみましょう.
|
||||
この例では, フロッピーディスクコントローラ (FDC)が
|
||||
ディスケットから1バイト読み込んで, DMAを使って,メモリの0x00123456番地に
|
||||
格納したいとします. 処理は, FDCによって, DRQ2信号を有効にして
|
||||
DMAコントローラに要求を伝えることで開始します.
|
||||
格納したいとします. 処理は, FDCが, DRQ2信号(DMAチャンネル2に
|
||||
対するDRQ線)を有効にして
|
||||
DMAコントローラに要求を伝えることで開始されます.
|
||||
|
||||
DMAコントローラはDRQ2シグナルが有効になったことを記録します.
|
||||
するとDMAコントローラはDMAチャネル2がプログラムされ, 有効に
|
||||
なっていることを確認します.
|
||||
DMAコントローラはまた, 他のDMAチャネルがアクティブでないか, または
|
||||
より高い優先度を持っていないかを確認します.
|
||||
するとDMAコントローラはDMAチャネル2がプログラムされ, マスクが
|
||||
かかっていない(有効になっている)ことを確認します.
|
||||
同様に, DMAコントローラは, 他のDMAチャネルがアクティブまたは
|
||||
アクティブになろうとしていないこと, そしてより高い優先度を持って
|
||||
いないことを確認します.
|
||||
一旦これらのチェックが完了すると, DMACはDMACがバスを使うために
|
||||
バスを開放するようにCPUに要求します.
|
||||
DMACはCPUにHRQ信号を送ってバスを要求します.
|
||||
|
@ -115,7 +117,7 @@
|
|||
FDCはバイトデータが転送されたことを認識します.
|
||||
|
||||
DMAサイクルは1度に1バイトしか転送しないので,
|
||||
FDCはDRQ2信号を止めて, DMACに転送の終了を知らせます.
|
||||
FDCはDRQ2信号を止めて, DMACに転送が終了したことを知らせます.
|
||||
DMACは-DACK2信号を解除して, FDCはバス上へのデータ出力を
|
||||
停止しなくてはならないことを知らせます.
|
||||
|
||||
|
@ -132,24 +134,29 @@
|
|||
典型的なフロッピーディスクの1セクタについては, 上記のプロセスが
|
||||
それぞれのバイトについて1回行われ, 全部で512回繰り返されます.
|
||||
1バイト転送される毎に,DMAC内のアドレスレジスタはインクリメントされ,
|
||||
何バイト転送すればよいかを示すカウンタがデクリメントされます.
|
||||
同じくDMAC内にある, 何バイト転送すればよいかを示すカウンタが
|
||||
デクリメントされます.
|
||||
|
||||
カウンタが0になると, DMAはカウンタが0になったことを示すEOP信号を
|
||||
送り, DMAコントローラがCPUによって再びプログラムされるまで
|
||||
これ以上データは転送されなくなります.
|
||||
カウンタが0になると, DMAはEOP信号を送ります. この信号は
|
||||
カウンタが0であり, DMAコントローラがCPUによって再び
|
||||
プログラムされるまで, これ以上データは転送されないことを
|
||||
示すものです.
|
||||
|
||||
このイベントはターミナルカウント(TC)とも呼ばれます.
|
||||
EOP信号は1本しかありません. なぜならどんな時もただ1つのDMAチャネル
|
||||
のみをアクティブにすることができるためです.
|
||||
EOP信号は1本しかありません. そして, 一度にアクティブにできる
|
||||
DMAチャネルは一本だけなので, 現在アクティブであるDMAチャネルこそが,
|
||||
たった今処理を終了したDMAチャネルだと言うことができます.
|
||||
|
||||
もし, バッファの転送が完了した時に周辺機器から割り込みを発生させたい
|
||||
とき, 周辺機器は -DACK信号およびEOP信号の両方が同時に発信されたか
|
||||
どうかをテストします. それが生じると, DMACはCPUの介在がなければ
|
||||
これ以上はその周辺機器についての情報を転送しないことを意味します.
|
||||
すると周辺機器はプロセッサの注意を得るために割り込み信号のうちの1つを
|
||||
発信します. DMAチップ自身は割り込みを生じさせる能力は持っていません.
|
||||
とき, 周辺機器は -DACKn信号およびEOP信号の両方が同時に発信されたか
|
||||
どうかをテストします. その場合, DMACはCPUの介在がなければ
|
||||
これ以上はその周辺機器についての情報を転送しません.
|
||||
その後で, 周辺機器はプロセッサに割り込みを生じさせるために,
|
||||
何らかの割り込み信号を発生させることができます. PCアーキテクチャ
|
||||
においては, DMAチップ自身が割り込みを生じさせることはできません.
|
||||
周辺機器とそれに関連するハードウェアが割り込みを生成する責任を
|
||||
持ちます.
|
||||
持ちます. また, DMAを使用する周辺機器が割り込みを使用しない
|
||||
可能性もあります.
|
||||
|
||||
DMACが要求を出したときにはCPUは常にバスをDMACに開放しますが,
|
||||
この動作は, DMACがアクティブになった時にプロセッサが命令を実行するのに
|
||||
|
@ -173,13 +180,13 @@
|
|||
IBM PCが64k以上のメモリをサポートしていたため,
|
||||
DMACが64kを越えるメモリ番地に読み込み又は書き込みを行うために
|
||||
変更を行う必要が生じました.
|
||||
この問題を解決するためにIBMが行ったのは, それぞれのDMAチャネルに
|
||||
ついてラッチを追加することでした. つまり, 読み込む又は書き込む先の
|
||||
アドレスの上位ビットに保持するためのものです.
|
||||
この問題を解決するためにIBMが行ったのは, それぞれのDMAチャネルに,
|
||||
読み込み元または書き込み先のアドレスの上位ビットを保持するための
|
||||
外部的なラッチを追加することでした.
|
||||
DMAチャネルがアクティブな時はいつでも,
|
||||
このラッチの内容はアドレスバスに書かれて, そのチャネルのDMA操作が
|
||||
終了するまでそこに保持されます.
|
||||
これらのラッチは「ページレジスタ」と呼ばれます.
|
||||
IBMはこれらのラッチを「ページレジスタ」と呼んでいます.
|
||||
|
||||
そのため上記に示した例では, DMACはアドレスの0x3456の部分をバス上に
|
||||
置き, DMAチャネル2に対するページレジスタは, 0x0012xxxxをバス上に
|
||||
|
@ -188,25 +195,27 @@
|
|||
|
||||
ページレジスタのラッチはDMAチップとは独立であるので,
|
||||
読み込まれる又は書き込まれるメモリ領域は, 64kの物理的境界を
|
||||
またいではなりません.
|
||||
DMACがメモリの0xffff番地をアクセスすると, データの転送後,
|
||||
またいではなりません. 例えば, もし
|
||||
DMACがメモリの0xffff番地をアクセスした場合, データの転送後,
|
||||
DMACはアドレスレジスタをインクリメントし, 0x0000番地にある次のバイトを
|
||||
アクセスします. 0x10000番地ではありません.
|
||||
これはおそらく意図されたものとは異なっているでしょう.
|
||||
|
||||
<quote><em>注:</em> 「物理的な」 64Kの境界を 8086モードの
|
||||
64k「セグメント」と混同してはいけません. セグメントは, セグメント
|
||||
レジスタにオフセットレジスタを加算して作られるものです.
|
||||
ページレジスタにはアドレスのオーバーラップはありません. </quote>
|
||||
レジスタに数学的にオフセットレジスタを加算して作られるものです.
|
||||
ページレジスタにはアドレスのオーバーラップも無く,数学的に
|
||||
ORを取られることもありません. </quote>
|
||||
|
||||
さらに複雑なことには, PC/ATでは外部のDMAアドレスのラッチは
|
||||
8ビットしか保持しません. よって8+16で24ビットになり, これは
|
||||
DMAが0から16メガの間のメモリ番地しか指し示せないことを
|
||||
意味します. 16メガ以上のメモリを持ったより新しいマシンにおいても,
|
||||
PCコンパチブルなDMAでは16メガ以上のメモリ番地にはアクセスできません.
|
||||
標準的なPCコンパチブルなDMAでは16メガ以上のメモリ番地には
|
||||
アクセスできません.
|
||||
|
||||
この制限を避けるために, オペレーティングシステムは
|
||||
16メガ以下にある物理的な64kの境界をまたがない領域にバッファを
|
||||
16メガ以下にある物理的な64kの境界をまたがない領域にRAMバッファを
|
||||
予約します. そして, DMACはデータを周辺機器からそのバッファに
|
||||
転送するようにプログラムされます. 一旦DMACがこのバッファに
|
||||
データを動かすと, オペレーティングシステムは本当にデータを
|
||||
|
@ -219,6 +228,10 @@
|
|||
「バウンスバッファ」と呼ばれます. MS-DOSの世界では,
|
||||
これらは「スマートバッファ」などと呼ばれます.
|
||||
|
||||
<quote><em>注意:</em> 82374と呼ばれる8237の新しい実装においては,
|
||||
ページレジスタを16ビットで指定して, バウンスバッファを使用しなくても,
|
||||
32ビットのアドレス空間全体にアクセスすることが可能です.
|
||||
|
||||
|
||||
<sect1><heading>DMA操作モードとその設定</heading>
|
||||
|
||||
|
@ -235,8 +248,8 @@
|
|||
よって使用されます.
|
||||
周辺装置は次の転送の準備ができる毎にDMAを要求します.
|
||||
|
||||
フロッピーディスクコントローラは1バイトのバッファしか持たないので,
|
||||
このモードを使用します.
|
||||
標準的なPCコンパチブルなフロッピーディスクコントローラ(NEC 765)は
|
||||
1バイトのバッファしか持たないので, このモードを使用します.
|
||||
|
||||
|
||||
<tag>ブロック/デマンド転送モード</tag>
|
||||
|
@ -249,10 +262,10 @@
|
|||
|
||||
ブロック転送モードとデマンド転送モードの違いは, 一旦ブロック転送が
|
||||
始まると,転送カウンタか0になるまでそれが行われるところです.
|
||||
1バイト転送するにはDRQが -DACK が有効になるまでの間だけ
|
||||
有効であれば充分です.
|
||||
デマンドモードはDRQが有効な間は転送が続けられます.
|
||||
DMACが転送を一時中止した場合はバスを解放してCPUに返します.
|
||||
DRQは-DACKが有効になるまでの間は有効でなければなりません.
|
||||
デマンドモードはDRQが有効な間転送が続けられます.
|
||||
DRQが有効でなくなった場合, DMAはその時点で転送を中断し,
|
||||
バスを解放してCPUに返します.
|
||||
その後、DRQが有効になると, 転送は中断したところから再開されます.
|
||||
|
||||
データの転送, 特に転送に使われるメモリ番地が16Mを越える場合に,
|
||||
|
@ -264,35 +277,38 @@
|
|||
このメカニズムはDMAチャネルがバスを要求することを許可する
|
||||
ものですが, 接続されたデバイスはバス上のアドレス情報の配置に
|
||||
ついてDMACに代わって責任を持ちます.
|
||||
これはいわゆる「バスマスタ」というものです.
|
||||
これは「バスマスタ」と呼ばれる技術の実装に利用されます.
|
||||
|
||||
カスケードモードのDMAチャネルがバスのコントロールを受け取ると,
|
||||
DMAは通常行われるようなバス上のアドレスとI/Oコントロール信号の
|
||||
出力を行いません. 代わりに, DMAはこのチャネルの -DACK信号を
|
||||
出力を行いません. 代わりに, DMAはアクティブなチャネルの -DACK信号を
|
||||
有効にします.
|
||||
|
||||
この時点で, アドレスとバスコントロール信号の供給は
|
||||
DMAチャネルに接続されたデバイスが担当します.
|
||||
DMAチャネルに接続された周辺機器が担当します.
|
||||
周辺機器はシステムバスの完全なコントロールを行い,
|
||||
16メガ以下の任意のアドレスの読み込みおよび書き込みを行うことが
|
||||
できます. 周辺機器はバスの使用を終えると, DRQ線を無効にして,
|
||||
DMAコントローラはCPUもしくは他のDMAチャネルに制御を返します.
|
||||
できます. 周辺機器はバスの使用を終えるとDRQ線を無効にするので,
|
||||
DMAコントローラはCPUもしくは他のDMAチャネルに制御を返すことが
|
||||
できます.
|
||||
|
||||
カスケードモードは複数のDMAコントローラを相互接続するのに
|
||||
使われます. PC内ではDMAチャネル4がまさにこの用途に使われています.
|
||||
周辺機器がDMAチャネル0, 1, 2, 3でバスを要求すると,
|
||||
スレーブDMAコントローラは HLDREQ を有効にしますが,
|
||||
この線は実際にはプライマリDMAコントローラのDRQ4に接続されています.
|
||||
プライマリのDMAコントローラはその後 HLDREQ を使ってCPUにバスを
|
||||
要求します. バスが与えられると, -DACK4が有効になり,
|
||||
この線はCPUではなく, 実際にはプライマリDMAコントローラのDRQ4に
|
||||
接続されています.
|
||||
その後, チャンネル4になにか仕事があるものと見なしたプライマリの
|
||||
DMAコントローラは HLDREQ を使ってCPUにバスを
|
||||
要求します. バスが与えられると, -DACK4が有効になりますが,
|
||||
この線は実際にはスレーブDMAコントローラの HLDA信号に
|
||||
接続されています.
|
||||
スレーブDMAコントローラはその後要求したDMAチャネルに対して
|
||||
データを転送するか, SCSIコントローラのような
|
||||
スレーブDMAコントローラはその後要求したDMAチャネル
|
||||
(0, 1, 2, 3) に対してデータを転送するか, SCSIコントローラのような
|
||||
バスマスタリングを要求する周辺機器にバスを許可します.
|
||||
|
||||
このような配線がおこなわれているため, PC/ATシステムでは
|
||||
DMAチャネルは
|
||||
このような配線がおこなわれているため, PC/ATシステムの
|
||||
周辺機器ではDMAチャネルは
|
||||
0, 1, 2, 3, 5, 6, 7のみが使用できます.
|
||||
|
||||
<quote><em>注:</em>
|
||||
|
@ -355,9 +371,10 @@
|
|||
|
||||
<p>プログラムされるDMAチャネルは, 通常, 設定を行う前に
|
||||
「マスクする」べきです.
|
||||
これはハードウェアが予期せずDRQを有効にすると, たとえ全てのパラメータが
|
||||
これはハードウェアが予期せずそのチャンネルに対してDRQを有効に
|
||||
した場合, たとえ全てのパラメータが
|
||||
満たされてない場合や更新されていない場合でも, DMACは
|
||||
それに応答してしまうからです.
|
||||
それに応答してしまう可能性があるからです.
|
||||
|
||||
マスクを行ってから,ホストは転送の方向(メモリからI/O,
|
||||
もしくはI/Oからメモリ)と, 転送に使用するDMA操作のモード
|
||||
|
@ -373,14 +390,14 @@
|
|||
I/Oポートの別のセットを通してアクセスされます.
|
||||
|
||||
すべての設定ができると, DMAチャネルはマスクを解除することができます.
|
||||
そのDMAチャネルは「準備ができた」とみなされ, DRQが有効になると
|
||||
応答します.
|
||||
そのDMAチャネルは「準備ができた」とみなされ, そのチャンネルのDRQが
|
||||
有効になると応答します.
|
||||
|
||||
8237のプログラミングの正確な詳細については,
|
||||
ハードウェアデータブックを参照してください.
|
||||
PCシステムにおけるI/Oマップについても参照する必要があるでしょう.
|
||||
このマップにはDMAおよびページレジスタのポートがどこに位置するのかを
|
||||
書いてあります. 以下に完全な表を示します.
|
||||
書いてあります. 以下に完全なポートのマップテーブルを示します.
|
||||
|
||||
|
||||
<sect1><heading>DMAポートのマップ</heading>
|
||||
|
@ -397,44 +414,44 @@
|
|||
<verb>
|
||||
0x00 write Channel 0 starting address
|
||||
0x00 read Channel 0 current address
|
||||
0x02 write Channel 0 starting word count
|
||||
0x02 read Channel 0 remaining word count
|
||||
0x01 write Channel 0 starting word count
|
||||
0x01 read Channel 0 remaining word count
|
||||
|
||||
0x04 write Channel 1 starting address
|
||||
0x04 read Channel 1 current address
|
||||
0x06 write Channel 1 starting word count
|
||||
0x06 read Channel 1 remaining word count
|
||||
0x02 write Channel 1 starting address
|
||||
0x02 read Channel 1 current address
|
||||
0x03 write Channel 1 starting word count
|
||||
0x03 read Channel 1 remaining word count
|
||||
|
||||
0x08 write Channel 2 starting address
|
||||
0x08 read Channel 2 current address
|
||||
0x0a write Channel 2 starting word count
|
||||
0x0a read Channel 2 remaining word count
|
||||
0x04 write Channel 2 starting address
|
||||
0x04 read Channel 2 current address
|
||||
0x05 write Channel 2 starting word count
|
||||
0x05 read Channel 2 remaining word count
|
||||
|
||||
0x0c write Channel 3 starting address
|
||||
0x0c read Channel 3 current address
|
||||
0x0e write Channel 3 starting word count
|
||||
0x0e read Channel 3 remaining word count
|
||||
0x06 write Channel 3 starting address
|
||||
0x06 read Channel 3 current address
|
||||
0x07 write Channel 3 starting word count
|
||||
0x07 read Channel 3 remaining word count
|
||||
</verb>
|
||||
|
||||
DMA コマンドレジスタ
|
||||
|
||||
<verb>
|
||||
0x10 write Command Register
|
||||
0x10 read Status Register
|
||||
0x12 write Request Register
|
||||
0x12 read -
|
||||
0x14 write Single Mask Register Bit
|
||||
0x14 read -
|
||||
0x16 write Mode Register
|
||||
0x16 read -
|
||||
0x18 write Clear LSB/MSB Flip-Flop
|
||||
0x18 read -
|
||||
0x1a write Master Clear/Reset
|
||||
0x1a read Temporary Register
|
||||
0x1c write Clear Mask Register
|
||||
0x1c read -
|
||||
0x1e write Write All Mask Register Bits
|
||||
0x1e read -
|
||||
0x08 write Command Register
|
||||
0x08 read Status Register
|
||||
0x09 write Request Register
|
||||
0x09 read -
|
||||
0x0a write Single Mask Register Bit
|
||||
0x0a read -
|
||||
0x0b write Mode Register
|
||||
0x0b read -
|
||||
0x0c write Clear LSB/MSB Flip-Flop
|
||||
0x0c read -
|
||||
0x0d write Master Clear/Reset
|
||||
0x0d read Temporary Register (新しいバージョンでは利用不可)
|
||||
0x0e write Clear Mask Register
|
||||
0x0e read -
|
||||
0x0f write Write All Mask Register Bits
|
||||
0x0f read Read All Mask Register Bits (Intel 82374にのみ存在する)
|
||||
</verb>
|
||||
|
||||
<sect2><heading>0xc0 - 0xdf DMA コントローラ #2 (Channels 4, 5, 6 and 7)</heading>
|
||||
|
@ -477,25 +494,115 @@ DMA
|
|||
0xd8 write Clear LSB/MSB Flip-Flop
|
||||
0xd8 read -
|
||||
0xda write Master Clear/Reset
|
||||
0xda read Temporary Register
|
||||
0xda read Temporary Register (Intel 82374には存在しない)
|
||||
0xdc write Clear Mask Register
|
||||
0xdc read -
|
||||
0xde write Write All Mask Register Bits
|
||||
0xde read -
|
||||
0xdf read Read All Mask Register Bits (Intel 82374にのみ存在する)
|
||||
0xdf read Read All Mask Register Bits
|
||||
</verb>
|
||||
|
||||
<sect2><heading>0x80 - 0x9f DMA ページレジスタ</heading>
|
||||
|
||||
<p><verb>
|
||||
0x87 r/w DMA Channel 0
|
||||
0x83 r/w DMA Channel 1
|
||||
0x81 r/w DMA Channel 2
|
||||
0x82 r/w DMA Channel 3
|
||||
0x87 r/w Channel 0 Low byte (23-16) page Register
|
||||
0x83 r/w Channel 1 Low byte (23-16) page Register
|
||||
0x81 r/w Channel 2 Low byte (23-16) page Register
|
||||
0x82 r/w Channel 3 Low byte (23-16) page Register
|
||||
|
||||
0x8b r/w DMA Channel 5
|
||||
0x89 r/w DMA Channel 6
|
||||
0x8a r/w DMA Channel 7
|
||||
|
||||
0x8f Refresh
|
||||
0x8b r/w Channel 5 Low byte (23-16) page Register
|
||||
0x89 r/w Channel 6 Low byte (23-16) page Register
|
||||
0x8a r/w Channel 7 Low byte (23-16) page Register
|
||||
0x8f r/w Low byte page Refresh
|
||||
</verb>
|
||||
|
||||
<sect2><heading>0x400 - 0x4ff 82374 Enhanced DMA Registers</heading>
|
||||
|
||||
<p>
|
||||
Intel 82374 EISA System Component (ESC)は1996年の初めに発表されました. この中
|
||||
には機能的には8237のスーパーセットであり, 1つのパッケージの中にその他の
|
||||
PC互換機のコアとなる周辺コンポーネントをも含んだDMAコントローラも含まれています.
|
||||
このチップはEISAとPCI両方のプラットホームをターゲットにしたものであり,
|
||||
scatter-gather I/O やリングバッファを始めとして, システムDMAをして32ビットの
|
||||
アドレス空間全体に直接アクセスする能力も提供しています.
|
||||
|
||||
<p>
|
||||
これらの機能を使用する場合でも, 過去16年間のPC互換機で利用されてきた
|
||||
同等機能を提供するコードも含めておく必要があります. 互換性の問題から, 82374の
|
||||
レジスタの一部は, 従来の8237のレジスタをプログラムした<em>後</em>に,
|
||||
転送の度にプログラムされる必要があります. 8237のレジスタに書き込みを行うとき,
|
||||
ソフトウェアの下位互換性のために, 82374で追加された一部のレジスタの内容が
|
||||
強制的に0にクリアされるからです.
|
||||
|
||||
|
||||
<p><verb>
|
||||
0x401 r/w Channel 0 High byte (bits 23-16) word count
|
||||
0x403 r/w Channel 1 High byte (bits 23-16) word count
|
||||
0x405 r/w Channel 2 High byte (bits 23-16) word count
|
||||
0x407 r/w Channel 3 High byte (bits 23-16) word count
|
||||
0x4c6 r/w Channel 5 High byte (bits 23-16) word count
|
||||
0x4ca r/w Channel 6 High byte (bits 23-16) word count
|
||||
0x4ce r/w Channel 7 High byte (bits 23-16) word count
|
||||
|
||||
0x487 r/w Channel 0 High byte (bits 31-24) page Register
|
||||
0x483 r/w Channel 1 High byte (bits 31-24) page Register
|
||||
0x481 r/w Channel 2 High byte (bits 31-24) page Register
|
||||
0x482 r/w Channel 3 High byte (bits 31-24) page Register
|
||||
0x48b r/w Channel 5 High byte (bits 31-24) page Register
|
||||
0x489 r/w Channel 6 High byte (bits 31-24) page Register
|
||||
0x48a r/w Channel 6 High byte (bits 31-24) page Register
|
||||
0x48f r/w High byte page Refresh
|
||||
|
||||
0x4e0 r/w Channel 0 Stop Register (bits 7-2)
|
||||
0x4e1 r/w Channel 0 Stop Register (bits 15-8)
|
||||
0x4e2 r/w Channel 0 Stop Register (bits 23-16)
|
||||
0x4e4 r/w Channel 1 Stop Register (bits 7-2)
|
||||
0x4e5 r/w Channel 1 Stop Register (bits 15-8)
|
||||
0x4e6 r/w Channel 1 Stop Register (bits 23-16)
|
||||
0x4e8 r/w Channel 2 Stop Register (bits 7-2)
|
||||
0x4e9 r/w Channel 2 Stop Register (bits 15-8)
|
||||
0x4ea r/w Channel 2 Stop Register (bits 23-16)
|
||||
0x4ec r/w Channel 3 Stop Register (bits 7-2)
|
||||
0x4ed r/w Channel 3 Stop Register (bits 15-8)
|
||||
0x4ee r/w Channel 3 Stop Register (bits 23-16)
|
||||
0x4f4 r/w Channel 5 Stop Register (bits 7-2)
|
||||
0x4f5 r/w Channel 5 Stop Register (bits 15-8)
|
||||
0x4f6 r/w Channel 5 Stop Register (bits 23-16)
|
||||
0x4f8 r/w Channel 6 Stop Register (bits 7-2)
|
||||
0x4f9 r/w Channel 6 Stop Register (bits 15-8)
|
||||
0x4fa r/w Channel 6 Stop Register (bits 23-16)
|
||||
0x4fc r/w Channel 7 Stop Register (bits 7-2)
|
||||
0x4fd r/w Channel 7 Stop Register (bits 15-8)
|
||||
0x4fe r/w Channel 7 Stop Register (bits 23-16)
|
||||
|
||||
0x40a write Channels 0-3 Chaining Mode Register
|
||||
0x40a read Channel Interrupt Status Register
|
||||
0x4d4 write Channels 4-7 Chaining Mode Register
|
||||
0x4d4 read Chaining Mode Status
|
||||
0x40c read Chain Buffer Expiration Control Register
|
||||
|
||||
0x410 write Channel 0 Scatter-Gather Command Register
|
||||
0x411 write Channel 1 Scatter-Gather Command Register
|
||||
0x412 write Channel 2 Scatter-Gather Command Register
|
||||
0x413 write Channel 3 Scatter-Gather Command Register
|
||||
0x415 write Channel 5 Scatter-Gather Command Register
|
||||
0x416 write Channel 6 Scatter-Gather Command Register
|
||||
0x417 write Channel 7 Scatter-Gather Command Register
|
||||
|
||||
0x418 read Channel 0 Scatter-Gather Status Register
|
||||
0x419 read Channel 1 Scatter-Gather Status Register
|
||||
0x41a read Channel 2 Scatter-Gather Status Register
|
||||
0x41b read Channel 3 Scatter-Gather Status Register
|
||||
0x41d read Channel 5 Scatter-Gather Status Register
|
||||
0x41e read Channel 5 Scatter-Gather Status Register
|
||||
0x41f read Channel 7 Scatter-Gather Status Register
|
||||
|
||||
0x420-0x423 r/w Channel 0 Scatter-Gather Descripter Table Pointer Register
|
||||
0x424-0x427 r/w Channel 1 Scatter-Gather Descripter Table Pointer Register
|
||||
0x428-0x42b r/w Channel 2 Scatter-Gather Descripter Table Pointer Register
|
||||
0x42c-0x42f r/w Channel 3 Scatter-Gather Descripter Table Pointer Register
|
||||
0x434-0x437 r/w Channel 5 Scatter-Gather Descripter Table Pointer Register
|
||||
0x438-0x43b r/w Channel 6 Scatter-Gather Descripter Table Pointer Register
|
||||
0x43c-0x43f r/w Channel 7 Scatter-Gather Descripter Table Pointer Register
|
||||
</verb>
|
||||
|
||||
|
|
Loading…
Reference in a new issue