as_init:\r
push hl\r
\r
- ld c,8 ;\r
- mlt bc ;\r
- ld hl,@ctbl+7 ;get baudrate index\r
- add hl,bc ;\r
+ ld c,8 ;\r
+ mlt bc ;\r
+ ld hl,@ctbl+7 ;get baudrate index\r
+ add hl,bc ;\r
ld a,(hl)\r
and 0fh\r
- add a,a\r
+ add a,a ;get factor\r
ld hl,bd150_tab\r
call add_hla\r
ld c,(hl)\r
dseg
cpu_frq:
- ld hl,tmr_rcv_msg_1
+ ld hl,0
+ ld d,h
+ ld e,l
call get_timer
+ push hl
+ push de
; delay ~8ms @ 18.432MHz --> 147456 clock cycles
; delay ~10ms @ 18.432MHz --> 184320 clock cycles
sbc hl,de ; 10
jr nz,dly_lp ; 6/8 -> 18
- ld hl,tmr_rcv_msg_2
+ pop de
+ pop hl
call get_timer
- ld hl,(stamp2)
- ld de,(stamp1)
- or a
- sbc hl,de
-; ld de,4 ; round
- ld de,5 ; round
+; ld hl,4 ; round
+ ld hl,5 ; round
add hl,de
ex de,hl
ld hl,0
get_timer:
push hl
- ld hl,timer_msg
- ld b,timer_msg_len
+ push de
+ ld hl,1*256 + 3 ; d = subcommand, e = command
+ push hl
+ ld hl,0
+ add hl,sp
+ ld b,6
call msg.sm
- pop hl
- ld b,tmr_rcv_msg_len ; max receive message len
- jp msg.recv
-
-
-timer_msg:
- db 3 ; timer/clock command
- db 1 ; subcommand (get timer)
-timer_msg_len equ $ - timer_msg
-
-
-tmr_rcv_msg_1:
- ds 1 ; len
- ds 1 ; command
- ds 1 ; subcommand
-stamp1:
- ds 4 ; return value
-tmr_rcv_msg_len equ $ - tmr_rcv_msg_1
-
+ dec sp
+ ld hl,0
+ add hl,sp
+ ld b,7 ; max receive message len
+ call msg.recv
-tmr_rcv_msg_2:
- ds 1 ; len
- ds 1 ; command
- ds 1 ; subcommand
-stamp2:
- ds 4 ; return value
+ pop bc
+ inc sp
+ pop de
+ pop hl
+ ret
;--------------------------------------------------------------------