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

第32回
前回の予告では、文字列表示の予定でしたが
1文字出力ルーチンに変更しました。

*char_print:の仕様
書き込み位置のVRAMアドレスをBUFFにストア後、書き込むDATAを渡す
DATAの受渡し方法はなん通りかあるが、呼ぶ側のサブルーチンの構造に合わせて
使い分ける必要があります、最初のうちは2番目の方法が一番安全でかくじつです。

 

1.レジスタを使う方法。
2.変数を使う方法。
3.スタックを使う方法。

 

1)レジスタを使う方法。
*Xレジスタに書き込むDATAをロードーし受渡し
直前にtxaでAレジスタにロードする。


    ldx #$02

char_print:
    lda Vram_add_hi
    sta $2006
    lda Vram_add_low
    sta $2006
     txa                                     ;XレジスタをAレジスタにコピー
     sta $2007
     rts

2)変数を使う方法。
*Aレジスタに書き込むDATAをロードーしchr_buff
にストアする。

   lda #$02
   sta chr_buff

char_print:
   lda Vram_add_hi
    sta $2006
   lda Vram_add_low
   sta $2006
   lda chr_buff
   sta $2007
   rts

 

3)スタックを使う方法。
*Aレジスタに書き込むDATAをロードーしphp命令で
スタックに積み込む。

   lda #$02
   php

char_print:
   lda Vram_add_hi
   sta $2006
   lda Vram_add_low
   sta $2006
   pla
   sta $2007
   rts

*次回は、サブルーチンの検証をします。