レジスタ
SPC700プロセッサの内部レジスタについて説明します。

レジスタの概要
レジスタとは、プロセッサに直結した、読書きを非常に高速に行うことのできるメモリの一種です。ここには、プロセッサでの演算結果やプロセッサ自身が動作するためのデータが保持されており、そのため容量は非常に少量です。
SPC700には6つのレジスタが存在します。

レジスタ サイズ 用途
アキュムレータ
8bit
算術演算および演算結果の出力
インデクスレジスタ(X/Y)
8bit
インデクスアドレッシング時に使用するポインタの保持
スタックポインタ
8bit
空きスタック領域の開始位置の指定
プログラムカウンタ
16bit
アセンブリの実行位置の保持
プログラムステータスワード
8bit
プロセッサの内部状態の保持

アキュムレータ
アキュムレータは8ビット幅の汎用レジスタで、主にCPUでの演算結果はこのレジスタに出力されます。
なお、後述するようにSPC700プロセッサは16ビット演算機能を備えており、その場合はY-インデクスレジスタとともに16ビットアキュムレータを構成します。
記号は A で表します。

インデクスレジスタ
インデクスレジスタは8ビット幅のレジスタで、主にインデクスアドレッシングで使用するためのインデクスポインタを保持するために使用します。
また、Y-インデクスレジスタは、汎用レジスタとしての機能を持っており、その場合はアキュムレータと連結して汎用レジスタとしてふるまいます。
記号は X, Y で表します。

Y, Aペア
一部の算術演算命令などにおいて16ビットデータを扱う場合に、Aレジスタにその下位8バイト、Yレジスタにその上位8バイトを格納し、Y, A レジスタの組を汎用レジスタとして使用することができます。
記号は YA で表します。

スタックポインタ
スタック領域の最初の空き番地を指定するためのレジスタです。スタックは1ページに置かれ、そのためスタック領域は $0100 - $01FF の256バイトとされます。
記号は SP で表します。

プログラムステータスワード
プロセッサの内部状態を保持するためのレジスタで、異なる8つのフラグのセットです。
記号は PSW で表します。
 
ビット フラグ 記号 内容
7
ネガティブフラグ
N
演算結果が負の場合にセット。ゼロ以上の場合クリア。
6
オーバーフローフラグ
V
算術オーバーフローが発生した場合にセット。
5
ダイレクトページフラグ
P
ダイレクトページの切替。
クリア時0ページ、セット時1ページ。
4
ブレークフラグ
B
割込処理の実行時にセットされ、割込処理からの復帰時にクリアされる。
SNES APUではSPC700の割込はサポートされないためアクセス不可。
3
ハーフキャリーフラグ
H
算術演算実行後、ビット3からビット4への繰上りがあった場合、もしくは繰り下がりがなかった場合にセット。
直接操作できないが、CLRV命令でオーバーフローフラグとともにクリア可能。
2
割込禁止フラグ
I
割込要求を許可するかどうかを規定する。クリア時IRQ禁止。
SNES APUではSPC700の割込がサポートされないためアクセス不可。
1
ゼロフラグ
Z
演算結果がゼロの場合セット。
0
キャリーフラグ
C
算術演算で繰上りがあった場合、もしくは繰り下がりがなかった場合にセット。