CPU > レジスタ

レジスタ一覧

レジスタ

名前
アキュームレータ (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 と同じように使われる。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2017年02月20日 16:57