ドラクエ風RPGファミコンプログラム講座 アセンブラ入門編
第31回
*今回は、TEST用プログラムの動作確認です。
【メインループとメインカウンタ】
*メインループとメインカウンタの動作の検証。
【画像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 と表示するプログラムです、
【画像2】
*次回は、文字列表示のライブラリーを追加します。