ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編
【アセンブラ基礎知識編】
*メモリーの構成をメモリーマップといいます、ファミコンのメモリーマップは
下の様になっています。
$0000~$07ff :RAM
$0800~$1fff :RAMミラー
$2000~$2007 :PPU I/O レジスタ
$2008~$3fff :PPU I/O レジスタミラー
$4000~$4017 :APU・OAMDMA(サウンド・スプライト)
$4018=$401f :(通常は無効)
$4020~$ffff :カートリッジ側で構成される領域(ROM)
【アセンブラ入門編】
〖アドレッシングモード〗
*6502はレジスタの数は少ないですが、アドレッシングは比較的豊富です。
アドレッシングとは、オペコードの操作対象になるものです。
1.Implied :暗黙的省略
2.Accumulator :Aレジスタが対象
3.Immediate :8bit即値(IM8)
4.Zeropage :ゼロページが対象
5.Zeropage, X :ゼロページ+Xレジスタ
6.Zeropage, Y :ゼロページ+Yレジスタ
7.Relative :符号付8bit即値アドレスへ分岐
8.Absolute :16BITアドレスのメモリーが対象
9.Absolute, X :インデックス付き16ビット即値アドレス
10.Absolute, Y :インデックス付き16ビット即値アドレス
11.[Indirect] :16ビット即値アドレスにジャンプ
12.[Indirect, X] :8bitアドレス+Xレジスタにかかれた16BITアドレスの
8bitの値
13.[Indirect], Y :8bitアドレスにかかれた16ビットアドレス+yレジスタの
8bitの値。
〖アドレッシングモードの詳細前編〗
7⃣ Relative
☆Relativeとは、ブランチ命令の符号付8bit即値アドレスへ分岐
8⃣ Absolute
☆16BITアドレスのメモリーが対象(通常はラベルを使用)
LDA $0200、STA DATA 等
9⃣ Absolute, X
☆Xレジスタのインデックス付き16BITアドレスのメモリーが対象
⑽ Absolute, Y
☆Yレジスタのインデックス付き16BITアドレスのメモリーが対象
⑾ [Indirect]
☆16ビット即値アドレスにジャンプ
JMP [$8000]
⑿ [Indirect, X]
☆8bitアドレス+Xレジスタにかかれた16BITアドレスの8bitの値
⒀ [Indirect], Y
☆8bitアドレスにかかれた16ビットアドレス+yレジスタの8bitの値。
〖使用例〗
LDA #$20 :Immediate (即値)
LDX <$00 :Zeropage
LDY <$00,x :Zeropage, X
STA <$00,y :Zeropage, Y
LDA $e000 :Absolute
LDA $e000,x :Absolute, X
LDA $e000,y :Absolute, Y
LDA [<$00,x] :[Indirect, X]
LDA [<$00],y :[Indirect], Y
⁂次回は、トランスファー命令と条件分岐命令です。