何とか庵日誌

本名荒井が毒にも薬にもならないことを書きつづるところ

カウンター改良した

Thunderboltさんからのコメントで「PUSH&POPの間に入ったRET Zで暴走する。」との指摘を受けたので、暴走しないようカウンタープログラムを改良してみました。アセンブルして動かしたら正常動作したので大丈夫だと思いますが、これならどうでしょう!(笑)


;--- カウンター 2

CHPUT: EQU 00A2H
POSIT: EQU 00C6H

DIGIT: EQU 0A003H
DIGITS: EQU 0A000H
SZAHYO: EQU 1400H

ORG 9000H

;--- ショキセッテイ

XOR A
LD HL,DIGIT
LD B,4
LOOP1: LD (HL),A
DEC HL
DJNZ LOOP1

;--- カウント

COUNT: LD B,4

LD HL,DIGIT
LD A,(HL)
INC A
LD (HL),A
COUNT2: CP 0AH
JR Z,CARRY
DJNZ COUNT2
JR PUTD

;--- クリアガリ

CARRY: XOR A
LD (HL),A
DEC HL
LD A,(HL)
INC A
LD (HL),A
LD A,(DIGITS)
CP 0AH
RET Z
LD A,(HL)
;ヨク カンガエタラ クリアガリ ゴ ノ A ノ ナイヨウ ハ メモリ ニ ホゾン ズミ ダッタ
JR COUNT2


;--- スウジ ヲ ヒョウジ スル

PUTD: LD HL,SZAHYO
CALL POSIT
LD B,4
LD HL,DIGITS
LOOP2: LD A,(HL)
ADD A,30H
CALL CHPUT
INC HL
DJNZ LOOP2
JR COUNT

END

; BASIC ニ スルト コウナル

;10 DEFINT A-Z
;20 DIM D(4):FOR I=1 TO 4:D(I)=0:NEXT
;30 D(4)=D(4)+1
;40 FOR I=4 TO 1 STEP -1
;50 IF D(I)>9 THEN D(I-1)=D(I-1)+1:D(I)=0
;60 IF D(1)>9 THEN END
;70 NEXT
;80 LOCATE 0,0:PRINT D(1);D(2);D(3);D(4)
;90 GOTO 30



スコアをカウント・表示する方法としてもひとつ考えている、16進数を10進数に変換する方法は、10の乗数による商を各桁の数値として順次メモリに保存し、余りを一の位として表示すれば良いのだろうと、ひとまず必要な処理を考えているところ。プログラミングとはパソコンにわかるように伝えることですよなぁ。