English
HARDWARE ManualSCUユーザーズマニュアル
戻る進む
SCUユーザーズマニュアル/第2章 動作説明

 ◆具体的使用例

●直接モード
 アドレス2000000H(A-Bus領域)からアドレス6000000H (ワークRAM)へレベル0のDMAで1KByte転送する場合を考えます。次の手順で操作す ると、DMA(直接モード)が実行できます。

  1. 読み込みアドレス(2000000H)を読み込みアドレスレジスタD0Rに書 き込みます。
    (CPUからアドレス25FE0000Hに読み込みアドレスをロードします。)

  2. 書き出しアドレス(6000000H)を書き出しアドレスレジスタD0Wに書 き込みます。
    (CPUからアドレス25FE0004Hに書き出しアドレスをロードします。)

  3. 転送バイト数(400H)を転送バイト数レジスタD0Cに書き込みます。
        (CPUからアドレス25FE0008Hに転送バイト数をロードします。)

  4. アドレス加算値(101H)をアドレス加算値レジスタD0ADに書き込み ます。
    (CPUからアドレス25FE000CHにアドレス加算値をロードします。 アドレス加算値の詳細は本項のアドレス加算値に記載します。通常のDMAで、 アドレス加算値は101Hを指定します。)

  5. DMAモードを0、アドレス更新ビットとDMA起動要因は必要に応じて設定し、 モード・アドレス更新・DMA起動要因レジスタD0MDに書き込みます。 例えば、アドレス更新を保持モードとし、V-ブランク-INを起動要因とした 場合、D0MDには0を書き込みます。
    (CPUからアドレス25FE0014Hに0をロードします。)

  6. DMAイネーブルビットに1をセットし、(5)で設定した起動要因が発生した 場合、DMAが起動され、アドレス2000000H(A-Bus領域)からアド    レス6000000H(ワークRAM)へレベル0で1KByteのデータを転送します。

  7. DMA終了後、(5)で設定された起動要因が発生するたびに、DMAが起動されま す。その際、動作は読み込みアドレス更新ビット(D0RUP)と書き出しアドレス 更新ビット(D0WUP)の値によって変わります。図2.7にアドレス更新ビットに よるDMA動作の違いを示します。

但し、(1)〜(5)は順不同でかまいません。(起動要因をDMA起動ビットに 設定してある時には、CPUでDMA動作ビットを1にセットするごとにDMAが起動 されます)

図2.7 アドレス更新ビットによるDMA動作の違い

D0RUP=0
D0WUP=0の場合

D0RUP=0
D0WUP=1の場合

D0RUP=1
D0WUP=0の場合

D0RUP=1
D0WUP=1の場合

 読み込みアドレス更新ビットが0の時は、1回目、2回目共に同じアドレスを参照 (読み込み)します。読み込みアドレス更新ビットが1の時は、2回目に参照する アドレスが、1回目の次のアドレスを参照するようになります。
 書き込みアドレス更新ビットが0の時は、1回目、2回目共に同じアドレスに書き 込みを行います。書き込みアドレス更新ビットが1の時は、1回目に書き込んだ次 のアドレスから、2回目の書き込を行います。

●間接モード
 間接モードは、1度の起動で複数回のDMA転送を実行したいときに使用します。 間接モードの場合は、直接モードのようにレジスタにセットするというのではな く、RAMを介してレジスタとアクセスしてDMAを実行するという方法をとります。 1例として、ワークRAM領域(6000000H)を介して次の3つのDMA転送を レベル0で連続的に実行したいという場合について考えます。

 次の手順で操作すると、DMA(間接モード)が実行できます。

  1. 図2.8に示すように、ワークRAM領域(6000000H)からロングワード単位でデータを書き込みます。

    図2.8 データ書き込み例

    6000000H┏━━━━━━━━━━┓ ┐
            ┃      20H ┃ │   ←(転送バイト数)
            ┠──────────┨ │
            ┃ 5C00000H ┃ │(a)←(転送元アドレス)
            ┠──────────┨ │
            ┃ 4000000H ┃ │   ←(転送先アドレス)
    600000CH┣━━━━━━━━━━┫ ┘
            ┃      10H ┃ │
            ┠──────────┨ │
            ┃ 6080000H ┃ │(b)
            ┠──────────┨ │
            ┃ 5E00000H ┃ │
    6000018H┣━━━━━━━━━━┫ ┘
            ┃      15H ┃ │
            ┠──────────┨ │
            ┃ 6081000H ┃ │(c)
            ┠──────────┨ │
            ┃ DA00000H ┃ │ ←8000000H+5A00000H
    6000024H┣━━━━━━━━━━┫ ┘  (終了コード) (転送先アドレス)
            ┃          ┃                     
    
    

  2. 書き出しアドレスレジスタ(D0W)にDMAパラメータソースアドレス(6000000H)を書き込みます。

  3. アドレス加算値(101H)をアドレス加算値レジスタD0ADに書き込みます。
    (CPUからアドレス25FE000CHにアドレス加算値をロードします。アドレス加算値の詳細 は本項のアドレス加算値に記載します。通常のDMAで、アドレス加算値は101Hを指定します。)

  4. DMAモードを1、アドレス更新ビットとDMA起動要因は必要に応じて設定し、 モード・アドレス更新・DMA起動要因レジスタD0MDに書き込みます。 例えば、アドレス更新を保持モードとし、V-ブランク-INを起動要因とした場合 、D0MDには1000000Hを書き込みます。
    (CPUからアドレス25FE0014Hに1000000Hをロードします。)

  5. DMAイネーブルビットに1をセットし、(4)で設定した起動要因が発生した場合 DMAが起動され、DMA終了コードを検出するまで、(a)〜(c)のDMA転送が順に実行 されます。DMA終了コードは、ワークRAM領域にのみ存在するDMA間接モードの   終了通知コードで、このビットの"1"が検出されない限り、DMA転送は続行され ます。

 但し、(1)〜(4)は順不同でかまいません。また直接モードで設定が必要であった 『読み込みアドレスレジスタ(D0R)』、『転送バイト数レジスタ(D0C)』は、 間接モードでは設定の必要はありません。
 さらに、メモリ内で下記のDMA転送を登録していたものとします。

 このときのワークRAM領域6000000Hからの内容は図2.9のようになります。
(5)で設定された起動要因が発生するごとに、DMAは再起動されます。

図2.9 ワークRAM領域の内容
6000000H┏━━━━━━━━━━┓
        ┃      20H ┃
        ┠──────────┨
        ┃ 5C00000H ┃
        ┠──────────┨
        ┃ 4000000H ┃
600000CH┣━━━━━━━━━━┫
        ┃      10H ┃
        ┠──────────┨
        ┃ 6080000H ┃
        ┠──────────┨
        ┃ 5E00000H ┃
6000018H┣━━━━━━━━━━┫
        ┃      15H ┃
        ┠──────────┨
        ┃ 6081000H ┃
        ┠──────────┨
        ┃ DA00000H ┃
6000024H┣━━━━━━━━━━┫ ┐
        ┃      30H ┃ │
        ┠──────────┨ │
        ┃ 6090000H ┃ │(d)
        ┠──────────┨ │
        ┃ 5000000H ┃ │
6000030H┣━━━━━━━━━━┫ ┘
        ┃      25H ┃ │
        ┠──────────┨ │
        ┃ 60A0000H ┃ │(e)
        ┠──────────┨ │
        ┃ D100000H ┃ │ ←8000000H+5100000H
600003CH┣━━━━━━━━━━┫ ┘  (終了コード) (転送先アドレス)
        ┃          ┃

 再起動をかけた場合、DMAのモードが保持モードか更新モードかによって動作が 違います。間接モードの保持/更新モードの認識は、書き出しアドレス更新 ビットによって行い、判断します。

<保持モード(書き出しアドレス更新ビット=0)の場合>   
 1目のDMA転送終了後、パラメータをアクセスするアドレスが6000000Hで保持されるため、再度(A)〜(C)のDMA転送を実行します。

<更新モード(書き出しアドレス更新ビット=1)の場合>   
 1回目のDMA転送終了後、パラメータをアクセスするアドレスが6000024Hに更新されるため、(D)〜(E)のDMA転送を実行します。

●アドレス加算値
 通常DMAは、連続した領域に対してアクセスしますが、アドレス加算値を設定 することで一定間隔のアドレスに対してアクセスすることが可能となります。 この機能は、VDP1のコマンドテーブルのようにパラメータが連続して並んでいる ものに対し、その一部を変更したいときに有効です。例として、アドレス 5C00000Hから20Hバイトを1つのテーブルとしたブロックが32個存在するとします 。そのうち、それぞれのブロックの8バイト目のパラメータを1度に書き換えるこ とを考えます。変更用のパラメータはアドレス6000000Hから40Hバイトあるとし、 レベル0のDMAで転送をする場合、次の手順で設定をし転送処理を実行します。

  1. 読み込みアドレス6000000Hを読み込みアドレスレジスタD0Rに書き込みます。

  2. 書き出しアドレス5C00008Hを書き出しアドレスレジスタD0Wに書き込みます。

  3. 転送バイト数40Hを転送バイト数レジスタD0Cに書き込みます。

  4. アドレス加算値105Hをアドレス加算値レジスタD0ADに書き込みます。
    この中で、下3bit(5=101B)がアドレスを20Hずつ更新していくことを表してい ます。

  5. DMAモードを0、アドレス更新ビットとDMA起動要因は必要に応じて設定し、 モード・アドレス更新・DMA起動要因レジスタD0MDに書き込みます。例えば、 アドレス更新を保持モードとし、V-ブランク-INを起動要因とした場合、 D0MDには0を書き込みます。

  6. DMAイネーブルビットに1をセットし、(5)で設定した起動要因が発生した場合 DMAが起動され、図2.10に示す斜線の部分が1度に書き換わります。

図2.10 アドレス加算値設定によるDMA転送実行例

但し、(1)〜(5)は順不同でかまいません。


戻る進む
HARDWARE ManualSCUユーザーズマニュアル
Copyright SEGA ENTERPRISES, LTD., 1997