; version 1.0
; a=timeout in seconds
do_events: mov r4,#0
mov r5,a
mov tmp0,a
mov r6,#0
mov a,#t_wait
call tmr_int
mov r0,#srl_fifo
call fifo_clear
pop dph1
pop dpl1
de_lp1: call do_them
call read_serial
jc de_check
mov a,#t_wait
call tmr_zro
jnc de_lp1
mov dpl,dpl1
mov dph,dph1
de_lp2: clr a
movc a,@a+dptr
inc dptr
jnz de_lp2
inc dptr
inc dptr
clr a
movc a,@a+dptr
inc dptr
jnz de_lp2
jmp @a+dptr
de_check: mov r4,#0
mov r5,tmp0
mov r6,#0
mov a,#t_wait
call tmr_int
mov dpl,dpl1
mov dph,dph1
de_lp3: push dpl
push dph
call do_them
pop dph
pop dpl
mov r0,#srl_fifo
call fifo_pos
mov r1,a
de_lp4: clr a
movc a,@a+dptr
inc dptr
jnz de_lp4
mov a,r1
jnz de_jump
inc dptr
inc dptr
clr a
movc a,@a+dptr
jnz de_lp3
jmp de_lp1
de_jump: mov a,#1
movc a,@a+dptr
push acc
clr a
movc a,@a+dptr
push acc
ret
; tmp1=ptr tmp2=max tmp3=term
read_string: mov r0,#srl_fifo
call fifo_clear
call tmr_int_f
db t_wait,0,5,0
rst_lp1: call do_them
call read_serial
jnc rst_skip0
call get_chr
jc rst_skip1
rst_skip0: mov a,#t_wait
call tmr_zro
jnc rst_lp1
clr c
ret
rst_skip1: push acc
call tmr_int_f
db t_wait,0,5,0
pop acc
mov b,a
clr c
subb a,#' '
jnc rst_skip3
mov b,#' '
rst_skip3: mov a,b
cjne a,tmp3,rst_skip2
mov a,#' '
mov r0,tmp1
rst_lp2: mov @r0,a
inc r0
djnz tmp2,rst_lp2
setb c
ret
rst_skip2: mov r0,tmp1
mov @r0,a
inc tmp1
djnz tmp2,rst_lp1
setb c
ret