アドレスと名前の中の 'x' には、DMAのチャネル番号が入る。 DMA・HDMA共に 0 〜 7 の 8 個のチャネルがある。

0x43x0 - DMAPx (DMAチャネル調整)

アクセスフラグ : 読書バ強VH常

D7D6D5D4D3D2D1D0
da-ifttt
  • d : 転送方向 0の時、CPUメモリから読み込み、PPUレジスタに書き込む。 1の時はその逆。 このビットはHDMAに影響する。 普通にテーブルを読み込んで、バスBからバスAに書き込む時に 間接モードがより使いやすくなる。 読み込みカウントをテーブルから読んで、値をテーブルに書き込もうとするとき、 直接モードも動くと思う。
  • a : HDMAアドレッシングモード 0の時、HDMAテーブルに転送用データが入る(直接モード)。 1の時、HDMAテーブルにポインタが入る(間接モード)。 このフラグは、DMAには影響しない。
  • i : DMAアドレスインクリメント 0の時、1バイトごとにDMAアドレスがインクリメントされる。 1の時はデクリメントされる。 このフラグは、HDMAには影響しない。
  • f : DMA固定転送 0の時、ビット4で指定された値にアドレスが固定される。 1の時、DMAアドレスは固定されない。 このフラグは、HDMAには影響しない。
  • ttt : 転送モード
    モード内容
    0001レジスタ1書き込み1 バイト: p
    0012レジスタ1書き込み2 バイト: p, p+1
    0101レジスタ2書き込み2 バイト: p, p
    0112レジスタ2書き込み(それぞれ)4 バイト: p, p, p+1, p+1
    1004レジスタ1書き込み4 バイト: p, p+1, p+2, p+3
    1012レジスタ2書き込み(交互)4 バイト: p, p+1, p, p+1
    1101レジスタ2書き込み2 バイト: p, p
    1112レジスタ2書き込み(それぞれ)4 バイト: p, p, p+1, p+1

HDMA転送中にこのレジスタに書き込みを行うと、未知の動作をするか、 あるいは次の転送時に変更が適用される。 このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。

参照 : DMAとHDMA

0x43x1 - BBADx (DMA転送先B-バスアドレス)

アクセスフラグ : 読書バ強VH常

D7D6D5D4D3D2D1D0
pppppppp

このレジスタは、アクセスするBバスアドレスを、 $00:2100 〜 $00:21ff の間で指定する。 2〜4個のレジスタを操作するモードでは、0x21ff → 0x2100 に ラップされる。0x2200 にアクセスされるわけではない。

HDMA転送中にこのレジスタに書き込みを行うと、未知の動作をするか、 あるいは次の転送時に変更が適用される。 このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。

参照 : DMAとHDMA

0x43x2 - A1TxL (DMA転送元A1テーブルアドレス下位)

アクセスフラグ : 読書下強VH常

D7D6D5D4D3D2D1D0
llllllll

A1TxL・A1TxH・A1Bxはセットで使用する。

0x43x3 - A1TxH (DMA転送元A1テーブルアドレス上位)

アクセスフラグ : 読書上強VH常

D7D6D5D4D3D2D1D0
hhhhhhhh

A1TxL・A1TxH・A1Bxはセットで使用する。

0x43x4 - A1Bx (DMA転送元A-バステーブルバンク)

アクセスフラグ : 読書バ強VH常

D7D6D5D4D3D2D1D0
bbbbbbbb

A1TxL・A1TxH・A1Bxはセットで使用する。 これらは、DMA転送用の「アドレス」開始位置に バスAアドレスを指定するか、もしくは HDMA転送用にHDMAテーブルの開始位置を指定する。 バスAはバスBレジスタにアクセスしない。 このアドレスに$00:2100を指定した場合、オープンバスの値が返る。

HDMA転送中にこのレジスタに書き込みを行うと、未知の動作をする。 今のところ、0x43x4のみが転送に影響するだろうと考えられている。 値の変更は、次のHDMA初期化時に適用される。

DMA転送中は、0x43x4 の設定でアドレスが固定されていない場合、 0x43x0 に設定された方向で 0x43x2/3 の値が インクリメントまたはデクリメントされる。 これらのレジスタはHDMAには影響しない。

このレジスタは、電源オン時に 0xFF にセットされる。リセット時は変更されない。

参照 : DMAとHDMA

0x43x5 - DASxL (DMAサイズ/HDMA間接アドレス下位バイト)

アクセスフラグ : 読書下強VH常

D7D6D5D4D3D2D1D0
llllllll

DASxL・DASxH・DASBxはセットで使用する。

0x43x6 - DASxH (DMAサイズ/HDMA間接アドレス上位バイト)

アクセスフラグ : 読書上強VH常

D7D6D5D4D3D2D1D0
hhhhhhhh

DASxL・DASxH・DASBxはセットで使用する。

0x43x7 - DASBx (HDMA間接アドレスバンクバイト)

アクセスフラグ : 読書バ強VH常

D7D6D5D4D3D2D1D0
bbbbbbbb

DASxL・DASxH・DASBxはセットで使用する。

DMAの時、0x43x5/6 は転送バイト数を指す。 1が指定された場合、転送モードで2か4のレジスタの転送が 指定されている時でも、1バイトのみ転送される。 (5が指定された場合、最初の転送で4つのレジスタが転送され、 2回目は1つだけが転送される。) 0x0000が指定された場合は、0x10000バイトの転送を指す。 0回ではないので注意。

DMA転送中は 0x43x5/6 がデクリメントされ、 完了時にはいつも0になる。

HDMAの時、0x43x7には間接アドレッシングモードのバンクバイトを指定する。 間接アドレスは 0x43x5/6 にコピーされ、インクリメントされる。 直接HDMAの時には、これらのレジスタは使用されない。

間接HDMAの最中に 0x43x7 に値が書き込まれた時、変更は次の転送時に適用される。 0x43x5/6 に書き込まれた場合も、同じように次の転送時に適用されるように動作するが、 こちらの場合は、繰り返しモードが指定された時にのみ適用される。 (普通のモードの場合、間接アドレスは転送開始前にテーブルから読み込まれる) 直接HDMAモードでは何も起こらないだろう。

このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。

参照 : DMAとHDMA

0x43x8 - A2AxL (HDMA用A2テーブルアドレス下位バイト)

アクセスフラグ : 読書下強VH常

D7D6D5D4D3D2D1D0
aaaaaaaa

A2AxL・A2AxHはセットで使用する。

0x43x9 - A2AxH (HDMA用A2テーブルアドレス上位バイト)

アクセスフラグ : 読書上強VH常

D7D6D5D4D3D2D1D0
aaaaaaaa

A2AxL・A2AxHはセットで使用する。 フレーム開始時、0x43x2 〜 0x43x3 の値は全てのアクティブなHDMAチャネルにコピーされ、 テーブルの値が読み込まれてこのレジスタの値は更新される。 HDMAをフレーム処理中に開始しようとした場合 (もしくはテーブルをフレーム処理中に変更した場合)、 このレジスタに値が書き込まれている必要がある。 フレーム処理中にこのレジスタに書き込まれた内容は、 次のスキャンラインで適用される。

このレジスタはDMAでは使われない。

このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。

参照 : DMAとHDMA

0x43xA - NLTRx (HDMA転送行数)

アクセスフラグ : 読書バ強VH常

D7D6D5D4D3D2D1D0
rccccccc
  • r : 繰り返し選択 1の時、HDMA 転送はスキャンライン毎に繰り返される。 ほとんどの場合、このレジスタの値はテーブルからロードされる。 このバイト(と間接HDMAアドレス)の値は、カウンタ値が0に到達した時に テーブルからリロードされる。
  • ccccccc : 行カウント この値は、スキャンライン毎にデクリメントされる。 0に到達した時、このレジスタに対してHDMAテーブルから1バイト分ロードされる。 (そして、可能であれば間接HDMAアドレスは 0x43x5/6 からロードされる。)

注(奇妙な動作) : このレジスタは、r の状態と c が 0 になっているかをチェックするに デクリメントされる。 なので、0x80 をこのレジスタにセットすると、"0行を繰り返し有り" で 実行するのではなく、"128行を繰り返し無し" で実行してしまう。 同様に、0x00 の指定は "チャネルの停止" を意味せず、 "128行を繰り返し有り" で実行してしまう。

このレジスタは、V-Blank 終了時にアクティブな全てのHDMAチャネルで初期化される。 フレーム処理中にHDMAを開始しようとした場合、このレジスタを初期化しなければならない。 HDMA転送処理中に行カウント値か繰り返しフラグを変更した時は、 次のスキャンラインで変更が適用される。 繰り返しフラグは、次の転送期間の終了まで変更が適用されないので注意すること。

このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。

参照 : DMAとHDMA

0x43xB - ????x (不明)

アクセスフラグ : 読書バ強VH常

D7D6D5D4D3D2D1D0
????????

0x43xB と 0x43xF は同じレジスタを指す。

このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。

0x43xF - ????x (不明)

アクセスフラグ : 読書バ強VH常

D7D6D5D4D3D2D1D0
????????

0x43xB と 0x43xF は同じレジスタを指す。

このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-10-27 (日) 15:53:03 (2889d)