forked from brooke/mandel-6502
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
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue