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

【第39回】

*今回は、string:の改造を行います、

 

string:
ldy #0
lp2:
lda str_data,x
sta str_buff,y
inx
iny
cmp #$ff
bne lp2
ldy #0
lp1:
lda str_buff,y
iny
cmp #$ff
beq exit
sta $2007
jmp lp1
exit:
jsr scroll_zero
rts

 

*今回は、8ビットの10進数変換済文字列を表示します。

  範囲(0~255)

1.100で割る、商が100の桁。

2.10で割る、商が10の桁。

3.余りが1の桁。

⁂下記のコードは、前回ののものを修正したものです。

deci100:

    cmp #100

    bcc deci10  ;dataが#100より小さい時ループを抜ける

    sec                ;キャリーフラグをセットする。

    sbc #100        ;減算する。

    inc <$91   ;100の桁をセットする。

    jmp deci100

deci10:

    cmp #10

    bcc deci1

    sec

    sbc #10

    inc $92                ;10の桁をセットする。

    jmp deci10

deci1:

    sta $93                ;1の桁をセットする。

 

*上記のコードで生成したDATAに文字コードのオフセットを加算します、

 現在のFONTコードは、数字$16~ですから #$16を加算し、

 str_buffに転送し、string:で表示。

 

decimal8:
  lda #$16                        ;buff初期化
  sta <$91
  sta <$92
  sta <$93
  lda #$ff
  sta <$94
  lda data       ;変換するDATA
decilp100:
  cmp #100
  bcc decilp10
  sbc #100
  inc <$91
  jmp decilp100
decilp10:
  cmp #10
  bcc deci1

  sbc #10
  inc <$92
  jmp decilp10
deci1:
  clc
  adc <$93
  sta <$93

  lda #$16
  cmp <$91
  bne ex
  lda #0
  sta <$91
  lda #$16
  cmp <$92
  bne ex
  lda #0
  sta <$92
ex:
    rts