0x4200 - NMITIMEN (割り込み有効フラグ)

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

D7D6D5D4D3D2D1D0
n-yx---a
  • n : NMI 有効フラグ 0 の場合、NMI は発生しません。 1 の場合、NMI は V-Blank 開始時に発生します。 NMI は V カウンタが 0xE1 (225) の時に若干遅れて発生します。 オーバースキャンが有効の時は、たぶん 0xF0 (240) で発生します。 詳しくは 0x2133 を参照してください。
  • x/y : IRQ 有効 0/0 => IRQ は発生しない 0/1 => V カウンタが 0x4209 〜 0x420a で設定された値に達した時 IRQ 発生 1/0 => H カウンタが 0x4207 〜 0x4208 で設定された値に達した時 IRQ 発生 1/1 => H カウンタが 0x4207 〜 0x4208 で設定された値に達し、かつ V カウンタが 0x4209 〜 0x420a で設定された値と同じなら IRQ 発生
  • a : 自動ジョイパッド読み込み有効 1 の時、0x4218 〜 0x421f は V カウンタが 0xE3 (227) の時に 自動的に更新されます。 (オーバースキャンが有効の時はたぶん 0xF2 (242))

いくつかのゲームはここから値を読み込もうとしますが、 オープンバス値が読み込まれているものと考えられます。

このレジスタは、電源 ON 時、リセット時に 0x00 に初期化されます。

0x4201 - WRIO (プログラマブルIOポート(出力))

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

D7D6D5D4D3D2D1D0
abxxxxxx

基本的にこれは 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 が入っているかのように初期化されます。 リセット時はたぶん変化ありません。

0x4202 - WRMPYA (乗算用の被乗数)

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

D7D6D5D4D3D2D1D0
mmmmmmmm

0x4203 - WRMPYB (乗算用の乗数)

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

D7D6D5D4D3D2D1D0
mmmmmmmm

0x4202 に書き込みした後、 0x4203 に書き込む。 0x4203 に書き込んだ 8 "マシンサイクル" (およそ 48 マスターサイクル) 後に、 乗算した結果を 0x4216 〜 0x4217 から読み込むことができる。 この動作で 0x4202 は変化することはなく、 そのままリセットせずに 0x4203 に違う値を書き込むと、 新しい結果が得られる。

乗算は unsigned の値で行われる。

電源ON時に 0x4202 は 0xff で初期化され、 リセット時には変化しない。

0x4204 - WRDIVL (除算用の被除数 (下位))

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

D7D6D5D4D3D2D1D0
dddddddd

0x4205 - WRDIVH (除算用の被除数 (上位))

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

D7D6D5D4D3D2D1D0
dddddddd

0x4206 - WRDIVB (除算用の除数)

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

D7D6D5D4D3D2D1D0
bbbbbbbb

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 で初期化されます。 リセット時には変化しません。

0x4207 - HTIMEL (Hカウントタイマー (下位))

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

D7D6D5D4D3D2D1D0
hhhhhhhh

0x4208 - HTIMEH (Hカウントタイマー (上位))

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

D7D6D5D4D3D2D1D0
-------h

0x4200 のビット 4 がセット、ビット 5 がクリアになっていて、 H カウンタがこのレジスタに設定された値に達した時、 スキャンライン毎に IRQ が発生します。 ビット 4, 5 が両方ともセットされている時は、 V カウンタが 0x4209 〜 0x420a にセットされた値と同じ時だけ IRQ が発生します。

H カウンタは 0 〜 339 の範囲で変化します。 これより大きい値がセットされた時には、IRQ は発生しません。

電源ON時に、HTIME は 0x1ff で初期化されます。 リセット時には変化しません。

0x4209 - VTIMEL (Vカウントタイマー (下位))

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

D7D6D5D4D3D2D1D0
vvvvvvvv

0x420A - VTIMEH (Vカウントタイマー (上位))

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

D7D6D5D4D3D2D1D0
-------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 で初期化されます。 リセット時には変化しません。

0x420B - MDMAEN (DMA有効)

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

D7D6D5D4D3D2D1D0
76543210
  • 7/6/5/4/3/2/1/0 : 指定された DMA チャネルを有効にします。 CPU は全ての DMA の転送が終わるまで一時停止されます。 DMA は(たぶん) 0 〜 7 の順番で実行されます。

詳細は 0x43x0 〜 0x43xA を参照してください。

DMA転送中にHDMAの初期化または転送が発生した場合、 DMAはその間停止されます。 現在使用中のDMAチャネルと同じチャネルでHDMAが発生した場合は、 DMAはすぐさま停止され、その時使われていたレジスタの値を使って HDMAは転送を継続します。他のDMAチャネルは影響を受けません。

電源ON時、リセット時にこのレジスタは 0x00 で初期化されます。

0x420C - HDAMEX (HDMA有効)

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

D7D6D5D4D3D2D1D0
76543210
  • 7/6/5/4/3/2/1/0 : 指定された HDMA チャネルを有効にします。 HDMA は(たぶん) 0 〜 7 の順番で実行されます。

詳細は 0x43x0 〜 0x43xA を参照してください。

DMA転送中にHDMAの初期化または転送が発生した場合、 DMAはその間停止されます。 現在使用中のDMAチャネルと同じチャネルでHDMAが発生した場合は、 DMAはすぐさま停止され、その時使われていたレジスタの値を使って HDMAは転送を継続します。他のDMAチャネルは影響を受けません。

フレーム処理中にHDMAチャネルが有効になった場合、 そのチャネルは次のHDMAポイントで開始されます。 HDMAレジスタの初期化処理は、スキャンライン 0 の HDMAポイントの 前でのみ発生するので、HDMA を有効にする前に これらのレジスタを手動で初期化する必要があります。 フレーム中にすでに停止されているチャネルは、 この方法によって再度開始することはできません。

チャネル指定ビットに 0 を書き込むとき、現行の HDMA チャネルは停止されます。 この転送は、1 を書き込むことで再開することができます。

電源ON時、リセット時にこのレジスタは 0x00 で初期化されます。

0x420D - MEMSEL (ROMアクセススピード)

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

D7D6D5D4D3D2D1D0
-------f
  • f : FastROM 選択 SNESはマスタークロックに 21.477 MHz (1.89e9/88 Hz) を使います。 標準では、ROMアクセスの度に 8 マスターサイクルの時間がかかります。 このビットがセットされている時、バンク 0x80 〜 0xFF に対する ROM アクセスは 6 マスターサイクルになります。

電源ON時(リセット時も?)に、このレジスタは 0x00 で初期化されます。 詳細は memmap.txt を参照してください。

0x420E - (未使用?)

0x420F - (未使用?)

0x4210 - RDNMI (NMIフラグと5A22のバージョン番号)

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

D7D6D5D4D3D2D1D0
n---vvvv
  • n : NMIフラグ このフラグは、V-Blank 開始時にセットされる (現時点では、Hカウンタの値が 0x28 〜 0x4E の間にある時だと考えている)。 読み込み時、または V-Blank 終了時にクリアされる。 おそらく、このレジスタは NMI の最中に読み込まれる必要があるだろう。 このフラグは、0x4200 のビット 7 には影響を受けない。
  • vvvv : 5A22チップバージョン番号 これまで 2 になっているものしか見たことないが、 1 もあるだろう

電源ON時またはリセット時に、NMI はクリアされる。

'-' になっているビットはオープンバス

0x4211 - TIMEUP (H/Vカウントタイマー用IRQフラグ)

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

D7D6D5D4D3D2D1D0
i-------
  • i : IRQフラグ このフラグは、IRQ が発行された後にセットされる (現在のところ、0x4210 の NMI フラグと同じような遅れが発生するように見えている)。 読み込み/書き込み時にクリアされる。 おそらく、このレジスタは IRQ ハンドラ内で読み込む必要があります。 このレジスタに対する読み込み操作が、CPU の IRQ ラインを 本当にクリアするのかどうか疑わしい。

説明はないが、他のドキュメントでは このレジスタが読み込み/書き込み可能と書かれている。

電源ON時、リセット時に IRQ はクリアされる。

'-' のビットはオープンバス

0x4212 - HVBJOY (H/V-Blankフラグとジョイスティック有効フラグ)

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

D7D6D5D4D3D2D1D0
vh-----a
  • v : V-Blank フラグ V-Blank中はセットされている。V-Blankの外ではクリアされる。 セットされるタイミングは、Vカウンタが 0xE1(225) かつ Hカウンタが 0x16 〜 0x17 (22 〜 23) の時で、 クリアされるタイミングは、Vカウンタが 0 かつ Hカウンタが 0x1E (30) の時。
  • h : H-Blank フラグ H-Blank中はセットされている。H-Blankの外ではクリアされる。 セットされるタイミングは、Hカウンタが 0x121 〜 0x122 (289 〜 290) の時で、 クリアされるタイミングは、Hカウンタが 0x12 〜 0x18 (18 〜 24) の時。
  • a : 自動ジョイパッドステータス 自動ジョイパッド読み込み時にセットされる。 完了時にクリアされる。 典型的に、これは V-Blank 開始時にセットされ、 3 スキャンライン後に完了する。

説明はないが、他のドキュメントでは このレジスタが読み込み/書き込み可能と書かれている。

0x4213 - RDIO (プログラマブルIOポート(入力))

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

D7D6D5D4D3D2D1D0
abxxxxxx

このレジスタは、I/O ポートからデータを読み込む時に使う。 0x4201 から 0 をセットした時、このレジスタから 0 が読み込まれる。 0x4201 から 1 をセットした時は、このレジスタから 0 または 1 が読み込まれる。 これは、I/Oポートに接続されたデバイスがこのビットに 0 をセットするかどうかに 関連している。

'b' はコントローラポート 1 の 6 ピンに接続されていて、 'a' はコントローラポート 2 の 6 ピンと、PPU のラッチラインに接続されています。

0x4201 は、この I/O ポートの対になる出力用ポートです。

0x4214 - RDDIVL (除算結果の商 (下位))

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

D7D6D5D4D3D2D1D0
qqqqqqqq

0x4215 - RDDIVH (除算結果の商 (上位))

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

D7D6D5D4D3D2D1D0
qqqqqqqq

0x4204,0x4205 に書き込んだ後に 0x4206 に書き込んだ時、 0x4206 への書き込みから 16 マシンサイクル (およそ 96 マスターサイクル) 後に このレジスタから除算結果の商を読み込むことができる。 剰余は 0x4216,0x4217 から読み込む。

除算は、unsigned で行われる。

0x4216 - RDMPYL (乗算結果または除算結果の剰余 (下位))

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

D7D6D5D4D3D2D1D0
xxxxxxxx

0x4217 - RDMPYH (乗算結果または除算結果の剰余 (上位))

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

D7D6D5D4D3D2D1D0
xxxxxxxx

0x4202 に書き込んだ後に 0x4203 に書き込んだ時、 0x4203 への書き込みから 8 マシンサイクル (およそ 48 マスターサイクル) 後に このレジスタから乗算結果 (積) を読み込むことができる。

0x4204,0x4205 に書き込んだ後に 0x4206 に書き込んだ時、 0x4206 への書き込みから 16 マシンサイクル (およそ 96 マスターサイクル) 後に このレジスタから除算結果の余り (剰余) を読み込むことができる。

乗算、除算ともに unsigned で行われる。

0x4218 - JOY1L (コントローラポート 1 の Data1(下位))

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

0x4219 - JOY1H (コントローラポート 1 の Data1(上位))

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

0x421A - JOY2L (コントローラポート 2 の Data1(下位))

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

0x421B - JOY2H (コントローラポート 2 の Data1(上位))

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

0x421C - JOY3L (コントローラポート 1 の Data2(下位))

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

0x421D - JOY3H (コントローラポート 1 の Data2(上位))

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

0x421E - JOY4L (コントローラポート 2 の Data2(下位))

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

D7D6D5D4D3D2D1D0
axlr0000

0x421F - JOY4H (コントローラポート 2 の Data2(上位))

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

D7D6D5D4D3D2D1D0
byetUDLR

上の表は、ジョイパッドの時のみ当てはまる (ジョイパッド以外のものを接続した時には当てはまらない)。 自動ジョイパッド読み込みは、0x4016,0x4017 を 16 回読み込み、 0x4218 〜 0x421F に値をセットする。

  • a/b/x/y/l/r/e/t : A/B/X/Y/L/R/Select/Start ボタンのステータス
  • U/D/L/R : Up/Down/Left/Right の十字キーのステータス L/R の内、どちらかのみ、U/D の内、どちらかのみがセットされる。

0x4200 のビット 0 の、自動ジョイパッド読み込みフラグが 有効になっている時のみこれらのレジスタの値が更新される。 更新中は、0x4212 のビット 0 の、 自動ジョイパッド読み込みステータスがセットされる。 この間に読み込み操作を行うと、不正な値が返る。

詳しくは コントローラ の項目を参照してください。


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