refactor countdown as a procedure call
This commit is contained in:
parent
fd954da47e
commit
fab2760394
1 changed files with 58 additions and 46 deletions
104
mandel.s
104
mandel.s
|
|
@ -1991,55 +1991,25 @@ update_status:
|
||||||
lda FR0 + 1
|
lda FR0 + 1
|
||||||
sta elapsed_work + 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
|
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
|
draw_string_const str_h
|
||||||
countdown 600, digits_zero
|
do_countdown 600, digits_zero
|
||||||
countdown 60, digits_zero
|
do_countdown 60, digits_zero
|
||||||
draw_string_const str_m
|
draw_string_const str_m
|
||||||
countdown 10, digits_zero
|
do_countdown 10, digits_zero
|
||||||
countdown 1, digits_zero
|
do_countdown 1, digits_zero
|
||||||
draw_string_const str_s
|
draw_string_const str_s
|
||||||
|
|
||||||
skipped:
|
skipped:
|
||||||
|
|
@ -2101,3 +2071,45 @@ loop:
|
||||||
jmp main_loop
|
jmp main_loop
|
||||||
|
|
||||||
.endproc
|
.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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue