ドラクエ風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

 

⁂次回は、トランスファー命令と条件分岐命令です。