mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-02-05 21:34:30 +00:00
95 lines
1.7 KiB
ArmAsm
95 lines
1.7 KiB
ArmAsm
|
;============================
|
||
|
; wait for music pattern
|
||
|
; also check for keypress
|
||
|
;============================
|
||
|
; pattern # in A
|
||
|
wait_for_pattern:
|
||
|
cmp current_pattern_smc+1
|
||
|
bcc done_check_pattern_done ; blt
|
||
|
beq done_check_pattern_done ; ble
|
||
|
|
||
|
lda KEYPRESS
|
||
|
bpl done_check_pattern_notdone
|
||
|
bit KEYRESET
|
||
|
jmp done_check_pattern_done
|
||
|
|
||
|
;============================
|
||
|
; setup timeout of A seconds
|
||
|
;============================
|
||
|
setup_timeout:
|
||
|
sta SECOND_COUNTDOWN
|
||
|
lda #0
|
||
|
sta IRQ_COUNTDOWN
|
||
|
rts
|
||
|
|
||
|
;===========================
|
||
|
; countodown second timeout
|
||
|
; also check for keypress
|
||
|
;===========================
|
||
|
; carry set = done
|
||
|
check_timeout:
|
||
|
; check keyboard first
|
||
|
lda KEYPRESS
|
||
|
bpl timeout_not_keypress
|
||
|
bit KEYRESET
|
||
|
; lda #0 ; reset, is this necessary?
|
||
|
; sta IRQ_COUNTDOWN
|
||
|
; sta SECOND_COUNTDOWN
|
||
|
jmp done_check_timeout_done
|
||
|
|
||
|
timeout_not_keypress:
|
||
|
lda IRQ_COUNTDOWN
|
||
|
bne done_check_timeout_notdone
|
||
|
irq_countdown_zero:
|
||
|
lda SECOND_COUNTDOWN
|
||
|
beq done_check_timeout_done
|
||
|
|
||
|
; otherwise we need to decrement and update
|
||
|
dec SECOND_COUNTDOWN
|
||
|
lda #50
|
||
|
sta IRQ_COUNTDOWN
|
||
|
|
||
|
done_check_pattern_notdone:
|
||
|
done_check_timeout_notdone:
|
||
|
clc
|
||
|
rts
|
||
|
|
||
|
done_check_pattern_done:
|
||
|
done_check_timeout_done:
|
||
|
sec
|
||
|
rts
|
||
|
|
||
|
|
||
|
;==========================
|
||
|
; busy wait A * 1 50Hz tick
|
||
|
;==========================
|
||
|
wait_ticks:
|
||
|
sta IRQ_COUNTDOWN
|
||
|
wait_tick_loop:
|
||
|
lda IRQ_COUNTDOWN
|
||
|
bne wait_tick_loop
|
||
|
wait_tick_done:
|
||
|
rts
|
||
|
|
||
|
|
||
|
;====================
|
||
|
; busy wait A seconds
|
||
|
;====================
|
||
|
; exit early if key pressed
|
||
|
|
||
|
wait_seconds:
|
||
|
tax
|
||
|
|
||
|
wait_seconds_loop:
|
||
|
lda #50 ; wait 1s
|
||
|
jsr wait_ticks
|
||
|
|
||
|
lda KEYPRESS
|
||
|
bmi wait_seconds_done
|
||
|
|
||
|
dex
|
||
|
bpl wait_seconds_loop
|
||
|
wait_seconds_done:
|
||
|
bit KEYRESET
|
||
|
rts
|