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

 *上記のコードは、変数名とループカウンタが変更されています。

f:id:chien1956:20200115095804p:plain