PCエンジンやファミコンやAppleⅡのCPU 6502の本を探したが、値段が高騰していて買えないので、Kindleで英語の本を購入した。
Programming the 65816: Including the 6502, 65C02, and 65802 (English Edition) (Amazon)
(ついでに、NES Architectureというのも買ってみたのだが、内容が薄くあまり参考にならなかった。)
でべろ本では、6502というCPUについてよく分からなかった点があった。
でべろ本だと、CPUのレジスタとか命令の解説はあるのだが、アドレッシングモードとかの説明が無いので、X,Yレジスタがメモリを参照してアクセスするのに使うという説明がいきなり出てきても、レジスタが8bitなのに16bitのアドレス空間を指定しているのはどういうことなのか最初は分からなかった。
(追記 – アドレッシングモードの説明は でべろ本に少しだけあった。だが、これだけなのでこれで理解をするのは難しいと思う。)
Twitterで教えて頂いたのと、あわせて、購入した英語のKindle本を読んでいる。
このページのこの辺りを見て、少し分かった感じだ。
最後の2つ、
Zero Page Indirect Indexed with Y (Postindexed)と、
Zero Page Inddexed Indirect with X (Preindexed)とか、ややこしすぎて分かりにくい。
ゼロページというのは、64KBのメモリー空間のうち先頭の$0000から$00FFまでのことだ。
普通はここはRAMになっていて、レジスターみたいに使う。
そのために他の16bitアドレス値を使った命令とは別に、8bitのアドレス値のみを使った命令があり、そちらのほうが高速で、種類が多い。
LDA ($55),Y
というのは、
$0055番地のRAMから2バイト取り出して、Yレジスタの1バイトを加算した結果の数値をアドレスとして使って、そのアドレスのRAMから1バイトを取り出してAレジスタに入れる。という動作をする。
また、
LDA ($55,X)
の場合には、
$55という1バイトの数値(即値)とXレジスタの1バイトを加算した結果の数値をアドレスとして使って、そのアドレスのRAMから2バイトを取り出して、その値のアドレスのRAMから1バイトを取り出してAレジスタに入れる。
という動作をする。ややこしい。
この6502本の先のほうにはアドレッシングを解説している章があるので、あとでそちらをしっかり読む。