refactor countdown as a procedure call

This commit is contained in:
Brooke Vibber 2025-06-28 13:43:43 -07:00
commit fab2760394

104
mandel.s
View file

@ -1991,55 +1991,25 @@ update_status:
lda FR0 + 1
sta elapsed_work + 1
;jsr IFP
;jsr FASC
;jsr draw_string
.macro countdown divisor, digits
.scope
; count the hours
ldx #0
countdown_loop:
lda elapsed_work + 1
cmp #.hibyte(divisor)
beq countdown_lobyte
bcc countdown_done
bcs countdown_inc
countdown_lobyte:
lda elapsed_work
cmp #.lobyte(divisor)
bcc countdown_done
countdown_inc:
sec
lda elapsed_work
sbc #.lobyte(divisor)
sta elapsed_work
lda elapsed_work + 1
sbc #.hibyte(divisor)
sta elapsed_work + 1
inx
jmp countdown_loop
countdown_done:
lda digits,x
eor #$80
sta elapsed_digit
lda #.lobyte(elapsed_digit)
sta INBUFF
lda #.hibyte(elapsed_digit)
sta INBUFF + 1
jsr draw_string
.endscope
.endmacro
draw_string_const str_space
countdown 36000, digits_space
countdown 3600, digits_zero
.macro do_countdown divisor, digits
ldx #.lobyte(divisor)
ldy #.hibyte(divisor)
lda #.lobyte(digits)
sta INBUFF
lda #.hibyte(digits)
sta INBUFF + 1
jsr countdown
.endmacro
do_countdown 36000, digits_space
do_countdown 3600, digits_zero
draw_string_const str_h
countdown 600, digits_zero
countdown 60, digits_zero
do_countdown 600, digits_zero
do_countdown 60, digits_zero
draw_string_const str_m
countdown 10, digits_zero
countdown 1, digits_zero
do_countdown 10, digits_zero
do_countdown 1, digits_zero
draw_string_const str_s
skipped:
@ -2101,3 +2071,45 @@ loop:
jmp main_loop
.endproc
; digit string in INBUFF
; divisor X/Y
; clobbers temp, calls draw_string
.proc countdown
divisor = temp
stx divisor
sty divisor + 1
; count the hours
ldy #0
countdown_loop:
lda elapsed_work + 1
cmp divisor + 1
beq countdown_lobyte
bcc countdown_done
bcs countdown_inc
countdown_lobyte:
lda elapsed_work
cmp divisor
bcc countdown_done
countdown_inc:
sec
lda elapsed_work
sbc divisor
sta elapsed_work
lda elapsed_work + 1
sbc divisor + 1
sta elapsed_work + 1
iny
jmp countdown_loop
countdown_done:
lda (INBUFF),y
eor #$80
sta elapsed_digit
lda #.lobyte(elapsed_digit)
sta INBUFF
lda #.hibyte(elapsed_digit)
sta INBUFF + 1
jsr draw_string
rts
.endproc