6502
https://gyazo.com/c94ce29e300431d5ce631b0b7842c011
MOS Technology が 1975 年に開発した8ビット CPU。 私が初めてプログラミングした CPU。
6502 は超シンプル!洗練されている
汎用のレジスタは3種類
A レジスタ:アキュムレータ、演算結果の格納用
X レジスタ:インデックスレジスタ、メモリアクセス用
Y レジスタ:インデックスレジスタ、メモリアクセス用
たしか 8080 が A, B, C, D, E, H, L だったから、6502 は当時としてもレジスタが少ない。 私としては、レジスタが多いということは CPU のステートの組み合わせも多いわけだから、ステート管理が複雑そうに感じる。
8080 の H, L が、6502 の X, Y に相当するかな。
レジスタは少ないが、ゼロページの概念がある
ゼロページ:$00 ~ $FF の 256 バイトのメモリ空間。
ゼロページのみ、他の 16 ビットメモリ空間よりも高速にアクセスできた。
そのため、ゼロページは一時的な演算領域に使うことが多い。
スタックポインタが8ビット
つまりスタック領域が 256 バイトしかない。
この点 8080 はスタックポインタが 16 ビットあったので安全。
命令も限られる
有名な話、ADD 命令がない
ADD: キャリーフラグ(桁上がり)を無視して加算する。
CLC: キャリーフラグをクリアする。
ADC: キャリーフラグを加味して加算する。16 ビット以上の加算をするときは、ADC 命令を複数回実行して行う。
ADD 命令は CLC + ADC と等価であるため、6502 では削除された。
加算するたびに CLC を前置きする必要がある。2 クロック喰う。
採用されたマシン
Apple Ⅱ
全体的に低価格、ホビー向けの CPU だったのかな。
6502 で作ったゲーム
残念ながら、ソースコードはフロッピーディスクとともに失くしてしまった。 過去を思い出しながら作った。