address 129,163 175,340 比較 $4800-$4fff | **** **** | .... .... | >>>> >>>> $5000-$57ff | **** **** | .... .... | >>>> >>>> $5800-$5fff | **** **** | .... .... | >>>> >>>> $8000-$87ff | **** **** | ?*** **** | xx@@ @@@@ $8800-$8fff | **** **** | ?*** **** | xx@@ @@@@ $9000-$97ff | **** **** | ?*** **** | xx@@ @@@@ $9800-$9fff | **** **** | ?*** **** | xx@@ @@@@ $a000-$a7ff | **** **** | ?*** **** | xx@@ @@@@ $a800-$afff | **** **** | ?*** **** | xx@@ @@@@ $b000-$b7ff | **** **** | ?*** **** | xx@@ @@@@ $b800-$bfff | **** **** | ?*** **** | xx@@ @@@@ $c000-$c7ff | **** **** | .... ...* | >>>> >>>x $c800-$cfff | **** **** | .... .... | >>>> >>>> $d000-$d7ff | **** **** | .... .... | >>>> >>>> $d800-$dfff | **** **** | .... .... | >>>> >>>> $e000-$e7ff | .*** **** | ??** **** | <x@@ @@@@ $e800-$efff | ??** **** | **** **** | xx@@ @@@@ $f000-$f7ff | ..** **** | ..** **** | ..@@ @@@@ $f800-$ffff | **** **** | .... .... | >>>> >>>> [凡例] *: 有効 .: 無効 >: 129,163 では有効で、175,340 では無効 <: 175,340 では有効で、129,163 では無効 @: 役割が同じ x: 役割が異なるので注意するレジスタ
- data bit7:4 bit3:0 で区切る。
- 129,163 の $4800-$4fff は read も有効、それ以外は write only
- IRQ counter, generator
- internal RAM, interface
- sound generator
- nametable area ROM/RAM bank register
- nametable area mirroring control register
163, 175, 340 の機能を組み合わせているため、各レジスタに初期値を持っている(実機ではすべて不定値として、プログラム上で初期化している)。また、辻褄が合わない場合は ROM の checksum を見て個別対応ができる。
- nametable に関する仕様
- 基本的に nes header の H/V フラグを見て VRAM mirroring の値を初期化する
- $c000-$dfff のレジスタが書かれた場合には変更する
- 175 系のソフトで都合が悪ければ VRAM mirroing の書き込みは無視できるようにする
- external RAM に関する仕様
- $6000-$7fff には RAM が常に存在すると見なす
- $6000-$7fff への書き込みは常に有効にする
- .sav ファイルがないときは初期値としてデータを 0x00 で埋める
- internal RAM に関する仕様
- セーブデータ向け RAM と音源パラメータは別に管理する
- セーブデータが書かれて音源が誤動作する場合は出ないように細工する
- .sav ファイル(または相当するもの)がないときは初期値としてデータを 0x00 で埋める
- IRQ に関する仕様
- IRQ レジスタが初期化されない場合は、IRQ は必ず発生しないように初期値を設定する