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