CPU > レジスタ

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

レジスタ一覧

レジスタ

名前
アキュームレータ (A) 下位 8 bit が A, 上位 8 bit が B, 16bit 全体は C
インデックスレジスタ (X) 8 bit または 16 bit
インデックスレジスタ (Y) 8 bit または 16 bit
ダイレクトページレジスタ (D) 16 bit
スタックポインタ (S) 16 bit
プログラムバンクレジスタ (PBR) 8 bit
データバンクレジスタ (DBR) 8 bit
プログラムカウンタ (PC) 16 bit
プロセッサステータスレジスタ (P) 8 bit

ステータスレジスタ

bit 7 6 5 4 3 2 1 0
N V M X D I Z C
E
  • N : ネガティブフラグ (1 = Negative)
  • V : オーバーフローフラグ (1 = Overflow)
  • M : メモリ/アキュームレータ選択フラグ (1 = 8-bit, 0 = 16 bit)
  • X : インデックスレジスタ選択フラグ (1 = 8-bit, 0 = 16-bit)
  • D : 10進モードフラグ (1 = Decimal, 0 = Binary)
  • I : IRQ 禁止フラグ (1 = Disabled)
  • Z : ゼロフラグ (1 = Result Zero)
  • C : キャリーフラグ (1 = Carry)
  • E : エミュレーションフラグ (0 = Native Mode)

注 : エミュレーションフラグには直接アクセスできない。 XCE 命令を使って、キャリーフラグと 値を交換することによってセットする。

ネイティブモード時

23-16 15-8 7-0
- アキュームレータ (A)
データバンクレジスタ (DBR) - -
- X
- Y
00000000 ダイレクトページレジスタ (D)
00000000 スタックポインタ (S)
プログラムバンクレジスタ (PBR) プログラムカウンタ (PC)

エミュレーションモード時

23-16 15-8 7-0
- - アキュームレータ (A)
データバンクレジスタ (DBR) - -
- - X
- - Y
00000000 ダイレクトページレジスタ (D)
00000000 00000001 スタックポインタ (S)
プログラムバンクレジスタ (PBR) プログラムカウンタ (PC)

リセット時の動作

  • E フラグと I フラグが 1
  • Dフラグは 0

E フラグは直接アクセスすることはできず、XCE 命令で C フラグと交換することでアクセスする。 また、エミュレーションモードの場合 M フラグと X フラグは 1 に固定され、変更不可能になる。

BCD演算が正常に動作するのは ADC 命令と SBC 命令のみ。

概要

アキュームレータ (A)

16bit レジスタ。 8bit, 16bit の切り替えが可能で、それぞれ独立して値を保存している。 ステータスレジスタの M フラグが 1 の時は 8bit モードで、 下位 8bit が A としてアクセス可能。上位 8bit は B で、 XBA 命令等を使用することで A と値を入れ替えることができる。 M フラグが 0 の時は 16bit モードで、 C を使用する。 エミュレーションモード時は 8 bit に固定される。

X, Y インデックスレジスタ

8bit と 16bit の切り替え可能。 ステータスレジスタの X フラグで切り替える。 X=1 の時は 8bit モード、X=0 の時は 16bit モード。 8 bit モード時は下位 8 bit のみ使用可能。 エミュレーションモード時は 8 bit に固定される。

ダイレクトページレジスタ (D)

6502 のゼロページと同じ使い方をする。 ダイレクトページレジスタは、最初のバンク (Bank 0) の、 64KB 範囲内でどこにでも置くことができる。 16~23 のバンク選択バイトは無視され、常に Bank 0 に置かれる。

スタックポインタ (S)

スタックは、ダイレクトページレジスタと同様に 最初の 64KB (Bank 0) に置かれる。 16~23 のバンク選択バイトは無視され、常に Bank 0 に置かれる。 ネイティブモードで動作している間は、スタック領域は 256 バイトに 制限されない。 エミュレーションモードで動作している間は (E=1)、 スタック領域は Bank 1 に固定される。

プログラムバンクレジスタ (PBR)

6502 の 64KB 制限 (16bit 制限) を超えるために使われるレジスタ。 PBR はバンク選択バイトとして、あるいはプログラムカウンタの 上位 8bit の値として使う。 フローコントロール命令の JSR と JMP は、 24bit のアドレスをフルに指定してジャンプすることができる。 しかし、相対ジャンプ命令はバンク境界を越えることができず、 0xFFFF より大きいアドレスを指定した場合、今指している バンクの最初に戻る。 プログラムカウンタも同様に、普通に進めた場合? バンク境界を越えることができず、今選択されているバンクの 0x0000 ~ 0xFFFF の間の値を取る。

データバンクレジスタ (DBR)

PBR とよく似たレジスタで、こちらはデータをアクセスするために使われる。 インデックスアドレスモードを使用する命令で 64KB 境界を越えた場合は、 一時的に DBR の値がインクリメントされる。

ステータスレジスタ

ステータスレジスタの、 7,6,3,2,1,0 (nvdizc) は、6502 と同じように使われる。 ネイティブモードでは、BRK 検出用の Break フラグ (B) は使われない。 代わりに、BRK 割り込みハンドラを使用する。 エミュレーションモードの場合は、Break フラグは 6502 と同じように使われる。