iomap-00A4

ページ名:iomap-00A4

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入力が入る条件が現時点ではハッキリしていない

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧