DMACアドレスレジスタ
対応モデル : 全モデル
I/Oアドレス : 00A4h (下位)
ビット構成 | ||||||||
---|---|---|---|---|---|---|---|---|
R/W | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
R/W | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
I/Oアドレス : 00A5h (中位)
ビット構成 | ||||||||
---|---|---|---|---|---|---|---|---|
R/W | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
R/W | A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 |
I/Oアドレス : 00A6h (上位)
ビット構成 | ||||||||
---|---|---|---|---|---|---|---|---|
R/W | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
R/W | A23 | A22 | A21 | A20 | A19 | A18 | A17 | A16 |
I/Oアドレス : 00A5h (最上位)
ビット構成 | ||||||||
---|---|---|---|---|---|---|---|---|
R/W | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
R/W | A31 | A30 | A29 | A28 | A27 | A26 | A25 | A24 |
A31-0 : DMA転送先開始アドレス(物理アドレス)
- チャネルごとにベースアドレスレジスタ,カレントアドレスレジスタが有る
- CPUからのアクセスはチャネルレジスタのBASEビットの設定により、ベースアドレスカウンタ or カレントアドレスレジスタが決定される
- 1回DMA転送を行う毎にカレントカウントレジスタの内容がインクリメントされ、0になると終了 ※
モードコントロールレジスタのW/Bビットで指定したデータ幅が、バイトの場合は1回の転送につきアドレスが±1,ワードの場合はアドレスが±2される(プラスなのかマイナスなのかはモードコントロールレジスタのADIRフラグで行う) - モデルME/MF/MA/MXより前の機種は、A23からA24への桁上りがDMACでは行われず、ソフトウェアで行う必要がる事に注意
- Towns OS V2.1 L20, L31, L51で確認した限りでは、IO.SYSは INT 93H AX=05C0H CH=FFH 以外の処理でSCSIチャンネルのアドレス最上位バイトを書き込まない。このため一度最上位バイトに0以外を書き込んでしまうと、明示的に0に戻しておかない限り以後のIO.SYSのSCSI読み込みがすべて失敗または正しくない場所に読み込まれることになる。TownsOSから使うコードでDMAを操作したときは使った後で最上位バイトを0に戻しておく必要がある。
※1 他の終了条件として、DMACのEND入力による終了(Abort?)がある。
MS-DOS6.2にて使用しているが、END入力が入る条件が現時点ではハッキリしていない
コメント
最新を表示する
NG表示方式
NGID一覧