ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編
第28回
【変数とゼロページ】 について解説します。
*アセンブラで変数を扱うには、RAM上にDATA領域を確保
する必要があります、
ファミコンには、ゼロページという変数用の領域があり
高速に動作し準レジスタとして、扱うことができます。
『特徴』
1.アドレスが8bitで、指定できる
2.メモリーを直接インクリメント(+1)、
デクリメント(-1)できる。
3.アドレッシングモードが豊富。
4.256byte を変数として自由につかえる。
『ゼロページの使いかた』
*下のようにHEADERのすぐしたで定義する。
.inesprg 1 ; - プログラムにいくつのバンクを使うか。今は1つ。
.ineschr 1 ; - グラフィックデータにいくつのバンクを使うか。今は1つ。
.inesmir 0 ; - 水平ミラーリング
.inesmap 0 ; - マッパー。0番にする。
;*******************************************************************************
.bank 1 ; バンク1
.org $FFFA ; $FFFAから開始
.dw main000 ; VBlank割り込み
.dw Start ; リセット割り込み。起動時とリセットでStartに飛ぶ
.dw IRQ
;*******************************************************************************
loc_x = $12
loc_x = $13
Vram_add_hi = $14
Vram_add_low = $15
;********************************************************************************
『VRAMとアドレス』
*計算式は $2000+32*y+x になります。
*Vram_add という2byteの領域を確保し
$2000(Vram先頭アドレス)を格納しておく。
*前回のコードの修正版です。
lda loc_y ;Y座標
tax ;カウンターをセット
lp:
lda Vram_add_low ;アドレス下位
clc ;キャリーフラグリセット
adc #$20 ;VRAMの横幅(32)を加算する。
sta Vram_add_low
lda Vram_add_hi ;アドレス上位
adc #$0 ;繰り上がり分を加算する。
sta Vram_add_hi
dex ;Xを-1する。
bne lp
lda Vram_add_low
clc ;キャリーフラグリセット
adc loc_x ;x座標
sta Vram_add_low
*上記のコードは、変数名とループカウンタが変更されています。