ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編

第31回

*今回は、TEST用プログラムの動作確認です。
【メインループとメインカウンタ】
*メインループとメインカウンタの動作の検証。

 

f:id:chien1956:20200118160026p:plain

【画像1】

 

*Hex Editor でZEROPAGEの$00番地が変化しているのでループは

正常に動いているのがわかる。

【ゼロページと変数】

*カウンタをゼロページに変数として定義(宣言が正しいか?)する,

プログラムでは$00になっているがゼロページ内ならどこでもいい、

下記のように名前をつけて書く。

 

.inesprg 1 ;プログラミングのバンク数。

.ineschr 1 ;キャラクターデーターのバンク数。
.inesmir 0 ;ミラーリング  0.水平  1.垂直
.inesmap 0 ;マッパーナンバー
;***************** zeropage **********************

Vram_add_hi     = $12

Vram_add_low   = $13

loc_x     =    $10

loc_y     =    $11
CT        =     $30

【VRAMアドレスの計算 locate 】

*サブルーチン locate をライブラリーに追加

locataは、loc_x(X座標).loc_y(Y座標)によってVRAMアドレスを

算出するサブルーチンです。

locate:
  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
  rts

『locateの使用例』

   lda #$20
  sta Vram_add_hi                       ;VRAMアドレス先頭アドレス上位
  lda #$00
  sta Vram_add_low                      ;VRAMアドレス先頭アドレス上位
  lda #15                            ;表示位置 X座標
  sta loc_x
  lda #14                           ;表示位置 Y座標
  sta loc_y
  jsr locate           ;サブルーチンコール
  lda Vram_add_hi       ;VRAMアドレスセット         
  sta $2006
  lda Vram_add_low
  sta $2006


  lda #1             ;文字DATAを転送
  sta $2007
  lda #2
  sta $2007
  lda #3
  sta $2007
  lda #3
  sta $2007
  lda #4
  sta $2007
  jsr scroll_zero          ;スクロールレジスタをリセット

*上のコードは X=15、Y=14の位置に HELLO と表示するプログラムです、

f:id:chien1956:20200118200810p:plain

【画像2】

*次回は、文字列表示のライブラリーを追加します。