6502 再考

Haskellネタはひねり出すのが大変なので今日はお休み…
いろいろ中途になっているような気がしないでもないが、
まぁ、それはいつものことなので。


ということで脈絡無く6502の復習でも。
極個人的なメモになる予感。

  • 概要

8ビットCPU。
16ビットアドレス、1アドレス命令。
豊富な?アドレッシングモード。

Aレジスタ
アキュームレータ。8ビット。多くの命令の演算対象。
Xレジスタ
インデックスレジスタその1。8ビット。アドレッシングモードで使う。いくつかの演算にも使える。
Yレジスタ
インデックスレジスタその2。8ビット。Xとほぼ同じ。
ステータスレジスタ
各種フラグを含む。建前上8ビット。
  • C Flag キャリーフラグ
  • Z Flag ゼロフラグ
  • I Flag 割り込み有効/無効フラグ。セット時に無効。
  • D Flag セットされていると加減算がBCD演算になる。
  • B Flag BRK命令が実行されるとセットされる。
  • V Flag オーバーフローフラグ
  • S Flag サインフラグ
PC
実行中の命令のアドレス。16ビット
SP
スタックポインタ。8ビット
  • アドレッシングモード
Immidiate
即値。インストラクションに値が入ってる。
Absolute/Zero Page Absolute
絶対アドレス。absoluteには16ビットのアドレスを格納。zero pageには下位8ビットを格納。上位は0固定。
Implied
オペランドなし。
Accumulator
オペランドはAレジスタ
Indexed / Zero Page Indexed
絶対アドレス+インデックスレジスタ
Indirect
間接アドレス。格納されているアドレスにある値がオペランドのアドレス。
Pre-indexed Indirect
間接アドレス+インデックスレジスタ。インデックスレジスタを先に加算。
Post-indexed Indirect
同。:インデックスレジスタを最終的な値に加算。
Relative
PCからの相対アドレス。
  • 命令
  • Arithmetical

ADC,SBC,INC/X/Y,DEC/X/Y,
CMP,CPX/Y

  • Logical

AND,ORA,EOR,BIT

  • Shift

ASL,LSR,ROL,ROR

  • Jump/Call/Return

JMP,JSR,RTS,RTI

  • Conditional Branch

BEQ/NE/CC/CS/MI/PL/VC/VS

  • Transfer

TAX/XA/AY/YA/SX/XS

  • Store/Load

LDA/X/Y,STA/X/Y

  • Stack

PHA,PHP,PLA,PLP

  • Set/Clear Flag

CLC/D/I/V,
SEC/D/I

  • others

BRK,NOP


命令すくなっ。