アキュームレータとインデックスレジスタはそれぞれ独立して 8 ビット幅と 16 ビット幅に設定できる。 転送するデータの幅は、転送先レジスタによって決定される。 可能な組み合わせを次の表に示す。
転送元 | 転送先 | 設定 | 転送幅 | 注 |
8 ビット A | 8 ビット Index | m=1,x=1 | 8 ビット | |
8 ビット A | 16 ビット Index | m=1, x=0 | 16 ビット | *1 |
16 ビット Index | 8 ビット A | m=1, x=0 | 8 ビット | *2 |
8 ビット Index | 16 ビット A | m=0, x=1 | 16 ビット | *3 |
16 ビット A | 8 ビット Index | m=0,x=1 | 8 ビット | *4 |
16 ビット A | 16 ビット Index | m=0,x=0 | 16 ビット | |
16 ビット S | 8 ビット X | x=1 | 8 ビット | *5 |
8 ビット X | 16 ビット S | x=1 | 16 ビット | *6 |
アクセスフラグ : 読書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
d | a | - | i | f | t | t | t |
値 | モード | 内容 |
000 | 1レジスタ1書き込み | 1 バイト: p |
001 | 2レジスタ1書き込み | 2 バイト: p, p+1 |
010 | 1レジスタ2書き込み | 2 バイト: p, p |
011 | 2レジスタ2書き込み(それぞれ) | 4 バイト: p, p, p+1, p+1 |
100 | 4レジスタ1書き込み | 4 バイト: p, p+1, p+2, p+3 |
101 | 2レジスタ2書き込み(交互) | 4 バイト: p, p+1, p, p+1 |
110 | 1レジスタ2書き込み | 2 バイト: p, p |
111 | 2レジスタ2書き込み(それぞれ) | 4 バイト: p, p, p+1, p+1 |
HDMA転送中にこのレジスタに書き込みを行うと、未知の動作をするか、 あるいは次の転送時に変更が適用される。 このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。
参照 : DMAとHDMA
アクセスフラグ : 読書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
p | p | p | p | p | p | p | p |
このレジスタは、アクセスするBバスアドレスを、 $00:2100 ~ $00:21ff の間で指定する。 2~4個のレジスタを操作するモードでは、0x21ff → 0x2100 に ラップされる。0x2200 にアクセスされるわけではない。
HDMA転送中にこのレジスタに書き込みを行うと、未知の動作をするか、 あるいは次の転送時に変更が適用される。 このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。
参照 : DMAとHDMA
アクセスフラグ : 読書下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
l | l | l | l | l | l | l | l |
A1TxL・A1TxH・A1Bxはセットで使用する。
アクセスフラグ : 読書上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
h | h | h | h | h | h | h | h |
A1TxL・A1TxH・A1Bxはセットで使用する。
アクセスフラグ : 読書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
b | b | b | b | b | b | b | b |
A1TxL・A1TxH・A1Bxはセットで使用する。 これらは、DMA転送用の「アドレス」開始位置に バスAアドレスを指定するか、もしくは HDMA転送用にHDMAテーブルの開始位置を指定する。 バスAはバスBレジスタにアクセスしない。 このアドレスに$00:2100を指定した場合、オープンバスの値が返る。
HDMA転送中にこのレジスタに書き込みを行うと、未知の動作をする。 今のところ、0x43x4のみが転送に影響するだろうと考えられている。 値の変更は、次のHDMA初期化時に適用される。
DMA転送中は、0x43x4 の設定でアドレスが固定されていない場合、 0x43x0 に設定された方向で 0x43x2/3 の値が インクリメントまたはデクリメントされる。 これらのレジスタはHDMAには影響しない。
このレジスタは、電源オン時に 0xFF にセットされる。リセット時は変更されない。
参照 : DMAとHDMA
アクセスフラグ : 読書下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
l | l | l | l | l | l | l | l |
DASxL・DASxH・DASBxはセットで使用する。
アクセスフラグ : 読書上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
h | h | h | h | h | h | h | h |
DASxL・DASxH・DASBxはセットで使用する。
アクセスフラグ : 読書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
b | b | b | b | b | b | b | b |
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
アクセスフラグ : 読書下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
a | a | a | a | a | a | a | a |
A2AxL・A2AxHはセットで使用する。
アクセスフラグ : 読書上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
a | a | a | a | a | a | a | a |
A2AxL・A2AxHはセットで使用する。 フレーム開始時、0x43x2 ~ 0x43x3 の値は全てのアクティブなHDMAチャネルにコピーされ、 テーブルの値が読み込まれてこのレジスタの値は更新される。 HDMAをフレーム処理中に開始しようとした場合 (もしくはテーブルをフレーム処理中に変更した場合)、 このレジスタに値が書き込まれている必要がある。 フレーム処理中にこのレジスタに書き込まれた内容は、 次のスキャンラインで適用される。
このレジスタはDMAでは使われない。
このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。
参照 : DMAとHDMA
アクセスフラグ : 読書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
r | c | c | c | c | c | c | c |
注(奇妙な動作) : このレジスタは、r の状態と c が 0 になっているかをチェックする前に デクリメントされる。 なので、0x80 をこのレジスタにセットすると、"0行を繰り返し有り" で 実行するのではなく、"128行を繰り返し無し" で実行してしまう。 同様に、0x00 の指定は "チャネルの停止" を意味せず、 "128行を繰り返し有り" で実行してしまう。
このレジスタは、V-Blank 終了時にアクティブな全てのHDMAチャネルで初期化される。 フレーム処理中にHDMAを開始しようとした場合、このレジスタを初期化しなければならない。 HDMA転送処理中に行カウント値か繰り返しフラグを変更した時は、 次のスキャンラインで変更が適用される。 繰り返しフラグは、次の転送期間の終了まで変更が適用されないので注意すること。
このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。
参照 : DMAとHDMA
アクセスフラグ : 読書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
? | ? | ? | ? | ? | ? | ? | ? |
0x43xB と 0x43xF は同じレジスタを指す。
このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。
アクセスフラグ : 読書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
? | ? | ? | ? | ? | ? | ? | ? |
0x43xB と 0x43xF は同じレジスタを指す。
このレジスタは、電源オン時に0xffにセットされる。リセット時は変更されない。
]]>アクセスフラグ : 書バ強VH?
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
n | - | y | x | - | - | - | a |
いくつかのゲームはここから値を読み込もうとしますが、 オープンバス値が読み込まれているものと考えられます。
このレジスタは、電源 ON 時、リセット時に 0x00 に初期化されます。
アクセスフラグ : 書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
a | b | x | x | x | x | x | x |
基本的にこれは 8 ビットの I/O ポートですが、 'b' はコントローラポート 1 の 6 ピンに接続されていて、 'a' はコントローラポート 2 の 6 ピンと、PPU のラッチラインに接続されています。 'a' が 1 の時に 0 を書き込むと、0x2137 読み込み時のように、 H・Vカウンタがラッチされます (0 に遷移する時にラッチが起こる)。 'a' が 0 の時は、ラッチは起こりません。
このレジスタの他の変化は不明です。 0x4213 は、この I/O ポートの対になる入力用ポートです。
IO ポートは電源 ON 時に全て 1 が入っているかのように初期化されます。 リセット時はたぶん変化ありません。
アクセスフラグ : 書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
m | m | m | m | m | m | m | m |
アクセスフラグ : 書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
m | m | m | m | m | m | m | m |
0x4202 に書き込みした後、 0x4203 に書き込む。 0x4203 に書き込んだ 8 "マシンサイクル" (およそ 48 マスターサイクル) 後に、 乗算した結果を 0x4216 ~ 0x4217 から読み込むことができる。 この動作で 0x4202 は変化することはなく、 そのままリセットせずに 0x4203 に違う値を書き込むと、 新しい結果が得られる。
乗算は unsigned の値で行われる。
電源ON時に 0x4202 は 0xff で初期化され、 リセット時には変化しない。
アクセスフラグ : 書下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
d | d | d | d | d | d | d | d |
アクセスフラグ : 書上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
d | d | d | d | d | d | d | d |
アクセスフラグ : 書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
b | b | b | b | b | b | b | b |
0x4204, 0x4205 に書き込んでから 0x4206 に書き込みます。 0x4206 に書き込んだ 16 "マシンサイクル" (およそ 96 マスターサイクル) 後に、 除算結果の商を 0x4214 ~ 0x4215 から、 余りを 0x4216 ~ 0x4217 から読み込むことができます。 0x4202 と同様に、たぶん 0x4204, 0x4205 もリセットされません。
除算は unsigned の値で行われます。 0 を除数に割り算した時 (Division by 0) は、商が 0xFFFF になり、 余りが 0x4204, 0x4205 の値になります。
電源ON時に、0x4204, 0x4205 は 0xffff で初期化されます。 リセット時には変化しません。
アクセスフラグ : 書下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
h | h | h | h | h | h | h | h |
アクセスフラグ : 書上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
- | - | - | - | - | - | - | h |
0x4200 のビット 4 がセット、ビット 5 がクリアになっていて、 H カウンタがこのレジスタに設定された値に達した時、 スキャンライン毎に IRQ が発生します。 ビット 4, 5 が両方ともセットされている時は、 V カウンタが 0x4209 ~ 0x420a にセットされた値と同じ時だけ IRQ が発生します。
H カウンタは 0 ~ 339 の範囲で変化します。 これより大きい値がセットされた時には、IRQ は発生しません。
電源ON時に、HTIME は 0x1ff で初期化されます。 リセット時には変化しません。
アクセスフラグ : 書下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
v | v | v | v | v | v | v | v |
アクセスフラグ : 書上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
- | - | - | - | - | - | - | v |
0x4200 のビット 5 がセット、ビット 4 がクリアになっていて、 V カウンタがこのレジスタに設定された値に達した時に IRQ が発生します。 ビット 4, 5 が両方ともセットされている時は、 V カウンタがこのレジスタにセットされた値と同じ、 かつ H カウンタが 0x4207 ~ 0x4208 で設定した値に 達した時に IRQ が発生します。
テレビの方式が NTSC の時、V カウンタは 0 ~ 261 の値を取ります。 (他の全てのフレームでインターレスモードが有効の時、262 にもなる) PAL の時は 0 ~ 311 の値を取ります (インターレス時 312?)。 これらより大きい値を設定した時、IRQ は発生しません。
電源ON時に、VTIME は 0x1ff で初期化されます。 リセット時には変化しません。
アクセスフラグ : 書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
詳細は 0x43x0 ~ 0x43xA を参照してください。
DMA転送中にHDMAの初期化または転送が発生した場合、 DMAはその間停止されます。 現在使用中のDMAチャネルと同じチャネルでHDMAが発生した場合は、 DMAはすぐさま停止され、その時使われていたレジスタの値を使って HDMAは転送を継続します。他のDMAチャネルは影響を受けません。
電源ON時、リセット時にこのレジスタは 0x00 で初期化されます。
アクセスフラグ : 書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
詳細は 0x43x0 ~ 0x43xA を参照してください。
DMA転送中にHDMAの初期化または転送が発生した場合、 DMAはその間停止されます。 現在使用中のDMAチャネルと同じチャネルでHDMAが発生した場合は、 DMAはすぐさま停止され、その時使われていたレジスタの値を使って HDMAは転送を継続します。他のDMAチャネルは影響を受けません。
フレーム処理中にHDMAチャネルが有効になった場合、 そのチャネルは次のHDMAポイントで開始されます。 HDMAレジスタの初期化処理は、スキャンライン 0 の HDMAポイントの 前でのみ発生するので、HDMA を有効にする前に これらのレジスタを手動で初期化する必要があります。 フレーム中にすでに停止されているチャネルは、 この方法によって再度開始することはできません。
チャネル指定ビットに 0 を書き込むとき、現行の HDMA チャネルは停止されます。 この転送は、1 を書き込むことで再開することができます。
電源ON時、リセット時にこのレジスタは 0x00 で初期化されます。
アクセスフラグ : 書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
- | - | - | - | - | - | - | f |
電源ON時(リセット時も?)に、このレジスタは 0x00 で初期化されます。 詳細は memmap.txt を参照してください。
アクセスフラグ : 読バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
n | - | - | - | v | v | v | v |
電源ON時またはリセット時に、NMI はクリアされる。
'-' になっているビットはオープンバス。
アクセスフラグ : 読バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
i | - | - | - | - | - | - | - |
説明はないが、他のドキュメントでは このレジスタが読み込み/書き込み可能と書かれている。
電源ON時、リセット時に IRQ はクリアされる。
'-' のビットはオープンバス。
アクセスフラグ : 読バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
v | h | - | - | - | - | - | a |
説明はないが、他のドキュメントでは このレジスタが読み込み/書き込み可能と書かれている。
アクセスフラグ : 読バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
a | b | x | x | x | x | x | x |
このレジスタは、I/O ポートからデータを読み込む時に使う。 0x4201 から 0 をセットした時、このレジスタから 0 が読み込まれる。 0x4201 から 1 をセットした時は、このレジスタから 0 または 1 が読み込まれる。 これは、I/Oポートに接続されたデバイスがこのビットに 0 をセットするかどうかに 関連している。
'b' はコントローラポート 1 の 6 ピンに接続されていて、 'a' はコントローラポート 2 の 6 ピンと、PPU のラッチラインに接続されています。
0x4201 は、この I/O ポートの対になる出力用ポートです。
アクセスフラグ : 読下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
q | q | q | q | q | q | q | q |
アクセスフラグ : 読上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
q | q | q | q | q | q | q | q |
0x4204,0x4205 に書き込んだ後に 0x4206 に書き込んだ時、 0x4206 への書き込みから 16 マシンサイクル (およそ 96 マスターサイクル) 後に このレジスタから除算結果の商を読み込むことができる。 剰余は 0x4216,0x4217 から読み込む。
除算は、unsigned で行われる。
アクセスフラグ : 読下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
x | x | x | x | x | x | x | x |
アクセスフラグ : 読上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
x | x | x | x | x | x | x | x |
0x4202 に書き込んだ後に 0x4203 に書き込んだ時、 0x4203 への書き込みから 8 マシンサイクル (およそ 48 マスターサイクル) 後に このレジスタから乗算結果 (積) を読み込むことができる。
0x4204,0x4205 に書き込んだ後に 0x4206 に書き込んだ時、 0x4206 への書き込みから 16 マシンサイクル (およそ 96 マスターサイクル) 後に このレジスタから除算結果の余り (剰余) を読み込むことができる。
乗算、除算ともに unsigned で行われる。
アクセスフラグ : 読下強VH常
アクセスフラグ : 読上強VH常
アクセスフラグ : 読下強VH常
アクセスフラグ : 読上強VH常
アクセスフラグ : 読下強VH常
アクセスフラグ : 読上強VH常
アクセスフラグ : 読下強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
a | x | l | r | 0 | 0 | 0 | 0 |
アクセスフラグ : 読上強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
b | y | e | t | U | D | L | R |
上の表は、ジョイパッドの時のみ当てはまる (ジョイパッド以外のものを接続した時には当てはまらない)。 自動ジョイパッド読み込みは、0x4016,0x4017 を 16 回読み込み、 0x4218 ~ 0x421F に値をセットする。
0x4200 のビット 0 の、自動ジョイパッド読み込みフラグが 有効になっている時のみこれらのレジスタの値が更新される。 更新中は、0x4212 のビット 0 の、 自動ジョイパッド読み込みステータスがセットされる。 この間に読み込み操作を行うと、不正な値が返る。
詳しくは コントローラ の項目を参照してください。
アドレスと名前の中の 'x' には、DMAのチャネル番号が入る。 DMA・HDMA共に 0 ~ 7 の 8 個のチャネルがある。
]]>アクセスフラグ : 読書バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
- | - | - | - | - | - | c | a |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
- | - | - | - | - | - | - | l |
アクセスフラグ : 読?バ強VH常
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
- | - | - | 1 | 1 | 1 | d | b |
これらのレジスタは、本体前面のコントローラポートに直接繋がっている。
注 : 0x4017 の 1になっているところは Gnd に繋がっており、常に1になる。
普通のジョイパッドは次の順番でデータを返す。 B, Y, Select, Start, Up, Down, Left, Right, A, X, L, R, 0, 0, 0, 0 ラッチされると順番はクリアされる?
参照
Wikipediaより
]]>