NES/ファミコンのアーキテクチャ

目次


CPUアーキテクチャ

ファミコンのプロセッサは米MOSテクノロジー社製MPUである6502に, PSG音源とDMA機能を追加し10進演算機能を削除したリコー製カスタムチップRP2A03 が搭載されている. コアの部分は6502と殆ど一緒です.

■レジスタ

記号名称説明
A アキュムレータ 汎用レジスタ. 演算など様々な用途に使う.
X,Y インデクスレジスタ 汎用レジスタ的な用途の他, メモリアクセスに使う.
P プロセッサステータスレジスタ 計算結果のフラグを保持しているレジスタ. 様々な分岐処理のために使います.
S スタック・ポインタ スタックのアドレスを保持しているレジスタ. スタックエリアは0100h-01FFhで、 下位8bitが保持されている(上位8bitは01hで固定).

■アドレシングモードと命令セット

「6502命令のセット」を参照.

■Pレジスタ詳細

Bit 記号 名称 説明
7 N ネガティブフラグ 直前の演算結果の最上位ビット(=符号ビット)が格納される
6 V オーバーフローフラグ 直前の演算結果が127を超えるか-128より小さくなった時にセットされる
5 未使用(常にセットされる)
4 B ブレイクフラグ BRK命令によってソフトウェア割り込みが発生した時にセットされる. BRK割り込みとIRQ割り込みの区別に使用する.
3 B デシマルモードフラグ このフラグがセットされるとBCD(2進化10進数)モードになるが. ファミコンのCPUでは BCDモードは削除されている. 慣習的にプログラムのはじめにクリアするようです.
2 I インタラプトフラグ このフラグがセットされると割り込みが禁止される.
1 Z ゼロフラグ 直前の演算結果が0であった場合にセットされる.
0 C キャリーフラグ 加算でキャリーが発生したとき、または減算でボローが発生しなかったときにセットされ, そうでない 場合はクリアされる. またシフト・ローテート命令でも使用される.


■割り込み

次の3種類がある。
名称 説明
NMI VBlankの時に発生。NTSCでは1/60秒毎に、PALでは1/50秒ごとに1回発生する。
RESET 電源投入時とリセット時に発生
IRQ/BRK ハードウェア割り込み(IRQ割り込み)とソフトウェア割り込み(BRK)によって発生

各割り込みが発生した時には特定のメモリ位置にハンドルされた 割り込みルーチンにジャンプする。割り込みから復帰するにはRTI命令を使う。 ファミコンの場合、各割り込みで参照される割り込みハンドラは下表。
NMI $FFFA
RESET $FFFC
IRQ/BRK $FFFE

見ての通りIRQとBRKは割り込みハンドラを共有しています。 つまりIRQとBRKが発生した時では同じ割り込みルーチンに ジャンプします。では、IRQ割り込みとBRK割り込みを区別するにはどうすればいいかというと、 先述したようにPレジスタのブレイクフラグをチェックします。


メモリマップ

ファミコンには64KBのメモリが搭載されています (アドレスにして$0000〜$FFFF)。
そのメモリマップは 以下のようになっています。
アドレス サイズ 内容
$0000 $0800 RAM
$0800 $0800 RAM($0000-$07FFのミラー)
$1000 $0800 RAM($0000-$07FFのミラー)
$1800 $0800 RAM($0000-$07FFのミラー)
$2000 $0008 I/Oレジスタ
$2008 $1FF8 I/Oレジスタ($2000-$2007のミラー×$03FF)
$4000 $0020 I/Oレジスタ
$4020 $1FE0 拡張ROM用
$6000 $2000 バッテリーバックアップRAM
$8000 $4000 プログラムROM
$C000 $4000 プログラムROM




戻る