ドラクエ風RPGファミコンプログラム講座
第12回
新年あけましておめでとうございます。
今年も、ファミコンプログラミングはじめましょう。
【アセンブラ入門編③】
1.アドレッシング
⑴ ld命令とアドレッシング
lda #100
lda #$64
lda $7000(ラベル)
lda $7000,x
lda $7000,y
lda <$00
lda <$00,x
lda <$00,y
⑵ ld命令と、st命令。
*lda のaは、レジスタ名 ldxならxは対象はXレジスタになります。
sta の場合も同じです。
stx $2000 は、Xレジスタを$2000にコピーする命令です。
*$7000、xは $7000番地にXレジスタを加えた番地を示しています。
*<$00は、ZEROPAGEを表しています。
*#は、数値を示し、$がつくと16進数 なにも付かないのが10進数です。
[アドレッシング1欄]
Implied TAX AをXにコピー
Accumulator LSR A Aを左に1bitシフト
Immediate LDA #IM8 即値IM8をAにロード
Zeropage LDA IM8 アドレス「IM8」の8bit値をAにロード
Zeropage, X LDA IM8, X アドレス「IM8 + X」の8bit値をAにロード
Zeropage, Y LDA IM8, Y アドレス「IM8 + Y」の8bit値をAにロード
Relative BEQ IM8 ステータスレジスタZがオンの時、アドレス「PC + IM8」へジャンプ
Absolute LDA IM16 アドレス「IM16」の8bit値をAにロード
Absolute, X LDA IM16, X アドレス「IM16 + X」の8bit値をAにロード
Absolute, Y LDA IM16, Y アドレス「IM16 + Y」の8bit値をAにロード
(Indirect) JMP (IM16) アドレス「アドレス「IM16」の16bit値」へジャンプ
(Indirect, X) LDA (IM8, X) アドレス「アドレス「IM8 + X」の16bit値」の8bit値をAにロード
(Indirect), Y LDA (IM8), Y アドレス「アドレス「IM8」の16bit値 + Y」の8bit値をAにロード
$0000-$07FF RAM
$0800-$1FFF RAM ミラー
$2000-$2007 PPU I/O レジスタ
$2008-$3FFF PPU I/O レジスタ ミラー
$4000-$4017 APU/OAMDMA/コントローラ I/O レジスタ
$4018-$401F 没機能レジスタ (通常は無効)
$4020-$FFFF カートリッジ側で構成
*00-$FF は「ゼロページ」と呼ばれ、準レジスタ的な
存在といえます。ゼロページは基本的に、
作業用変数や頻繁にアクセスされる変数が置かれる。
*$FFFA-$FFFFの6バイトは、割り込みベクターといい、
CPUの割り込み時のアドレスを起動する特別なエリア。
アセンブラの疑似命令では、(bank 3)に分類される。
$0000-$0FFF パターンテーブル LOW
$1000-$1FFF パターンテーブル HIGH
$2000-$23BF 画面1 ネームテーブル
$23C0-$23FF 画面1 属性テーブル
$2400-$27BF 画面2 ネームテーブル
$27C0-$27FF 画面2 属性テーブル
$2800-$2BBF 画面3 ネームテーブル
$2BC0-$2BFF 画面3 属性テーブル
$2C00-$2FBF 画面4 ネームテーブル
$2FC0-$2FFF 画面4 属性テーブル
$3000-$3EFF 未使用
$3F00-$3F0F BGパレットテーブル
$3F10-$3F1F スプライトパレットテーブル
$3F20-$3FFF 未使用
$4000-$FFFF 未使用
【アセンブラ実習編】
1.基本プログラム
*これからの実習につかう、TESTプログラムです。
エディターに記述して、保存しておいてください。【画像5】
【画像5】
⁂上記のファイルをコンパイルし、FUECXを起動し実行します。
2.デバッグ
*Debug から Debuggerを起動します、【画像5】
$8000番地から書いたプログラムであることが分かるとおもいます。
78、D8、A2、FF とあるのは機械語です。
その後ろにあるのが、逆アセンブルといって機械語をアセンブリソースに
変換したものです、この先よく使うので覚えておいてください。
【画像5】
⁂>の印は現在プログラムが、停止している位置です、jmp命令で$8005に
無限ループしているのが分かります、無限ループはプログラムのストッパー
として使いデバッグの必需品です。
*次回からは、パレットの設定とキャラクターDATAの設置を目標に進めていきます、
当面はCPUの命令は全て覚える必要はありません、必要に応じて習得していけば
いいのです。