📄 dtmfasm.s54
字号:
mar *+ar5(#(-DTMF_HI_DFT_SZ))
rptz b, #DTMF_HI_DFT_SZ-1
mac *ar3+0%, *ar5+, b
mar *+ar3(#(-DTMF_HI_DFT_SZ*2))
rpt #DTMF_HI_DFT_SZ-1
mac *ar2+0%, *ar5+, b
mar *+ar2(#(-DTMF_HI_DFT_SZ*2))
mar *+ar5(#(-DTMF_HI_DFT_SZ))
rpt #DTMF_HI_DFT_SZ-1
mas *ar3+0%, *ar5+, a
mar *+ar3(#(-DTMF_HI_DFT_SZ*2))
sth b, *sp(1)
squr a, b
squra *sp(1), b
ld b, a
en2log 0
stl a, *ar4+
L_dtmf_dft_hi_main
ret
;-------------------------------------------------------------------------
.global _dtmf_lo_dft_dev
_dtmf_lo_dft_dev
;-------------------------------------------------------------------------
;DTMF_tDb *pDb,
;DTMF_tSc *pSc
;
ssbx sxm
mvdk *sp(1), ar2
mar *+ar2(#(DTMF_tSc.asLoData)); psI
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asLoData+1)); psQ
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.asLoDevEn)); psOut
ld #__apsLoDev, a
mvdk *sp(1), ar0
add *ar0(#(DTMF_tSc.sLoFreqNo)), a
stlm a, ar0
nop
nop
mvdk *ar0, ar5
stm #0, bk
stm #2, ar0
stm #4-1, brc
rptb L_dtmf_dft_lo_dev - 1
rptz a, #DTMF_LO_DFT_SZ-1
mac *ar2+0%, *ar5+, a
mar *+ar2(#(-DTMF_LO_DFT_SZ*2))
mar *+ar5(#(-DTMF_LO_DFT_SZ))
rptz b, #DTMF_LO_DFT_SZ-1
mac *ar3+0%, *ar5+, b
mar *+ar3(#(-DTMF_LO_DFT_SZ*2))
rpt #DTMF_LO_DFT_SZ-1
mac *ar2+0%, *ar5+, b
mar *+ar2(#(-DTMF_LO_DFT_SZ*2))
mar *+ar5(#(-DTMF_LO_DFT_SZ))
rpt #DTMF_LO_DFT_SZ-1
mas *ar3+0%, *ar5+, a
mar *+ar3(#(-DTMF_LO_DFT_SZ*2))
sth b, *sp(1)
squr a, b
squra *sp(1), b
ld b, a
en2log 0
stl a, *ar4+
L_dtmf_dft_lo_dev
ret
;-------------------------------------------------------------------------
.global _dtmf_hi_dft_dev
_dtmf_hi_dft_dev
;-------------------------------------------------------------------------
;DTMF_tDb *pDb,
;DTMF_tSc *pSc
;
ssbx sxm
mvdk *sp(1), ar2
mar *+ar2(#(DTMF_tSc.asHiData)); psI
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asHiData+1)); psQ
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.asHiDevEn)); psOut
ld #__apsHiDev, a
mvdk *sp(1), ar0
add *ar0(#(DTMF_tSc.sHiFreqNo)), a
stlm a, ar0
nop
nop
mvdk *ar0, ar5
stm #0, bk
stm #2, ar0
stm #4-1, brc
rptb L_dtmf_dft_hi_dev - 1
rptz a, #DTMF_HI_DFT_SZ-1
mac *ar2+0%, *ar5+, a
mar *+ar2(#(-DTMF_HI_DFT_SZ*2))
mar *+ar5(#(-DTMF_HI_DFT_SZ))
rptz b, #DTMF_HI_DFT_SZ-1
mac *ar3+0%, *ar5+, b
mar *+ar3(#(-DTMF_HI_DFT_SZ*2))
rpt #DTMF_HI_DFT_SZ-1
mac *ar2+0%, *ar5+, b
mar *+ar2(#(-DTMF_HI_DFT_SZ*2))
mar *+ar5(#(-DTMF_HI_DFT_SZ))
rpt #DTMF_HI_DFT_SZ-1
mas *ar3+0%, *ar5+, a
mar *+ar3(#(-DTMF_HI_DFT_SZ*2))
sth b, *sp(1)
squr a, b
squra *sp(1), b
ld b, a
en2log 0
stl a, *ar4+
L_dtmf_dft_hi_dev
ret
;-------------------------------------------------------------------------
.global _dtmf_lo_freq
_dtmf_lo_freq
;-------------------------------------------------------------------------
;DTMF_tDb *pDb,
;DTMF_tSc *pSc
;
ssbx sxm
mvdk *sp(1), ar4 ; ar4 = pSc
mvdk *ar4(#(DTMF_tSc.sLoFreqNo)), ar0; ar0 = sLoFreqNo
mvdk *sp(1), ar2 ; ar4 = pSc
mar *+ar2(#(DTMF_tSc.asLoDevEn)) ; ar2 = psDev
stm #__aasLoDevFlt, ar3
mar *ar3+0
mar *ar3+0 ; ar3 = psDevFlt
ld *ar2(#3), 16, a
sub *ar2(#0), 16, a
add *ar2(#2), 16, a
sub *ar2(#1), 16, a
mpya *ar3+
ld b, -16, a
ld #170*5, b
min a
ld #-170*5, b
max a
stl a, *ar4(#(DTMF_tSc.sLoFreqDev))
;
squr *ar4(#(DTMF_tSc.sLoFreqDev)), a ; a = dev^2
stlm a, t ; t = LO(a)
nop
mpyu *ar3, b ; b = uns(LO(a))*coef; because coef>0 always
ld b, -16, b
maca *ar3 ; b+= HI(a)*coeff
mar *ar4+0
add *ar4(#(DTMF_tSc.asLoMainEn)), b
mar *ar4-0
stl b, *ar4(#(DTMF_tSc.sLoMaxFreqEn))
ret
;-------------------------------------------------------------------------
.global _dtmf_hi_freq
_dtmf_hi_freq
;-------------------------------------------------------------------------
;DTMF_tDb *pDb,
;DTMF_tSc *pSc
;
ssbx sxm
mvdk *sp(1), ar4 ; ar4 = pSc
mvdk *ar4(#(DTMF_tSc.sHiFreqNo)), ar0; ar0 = sHiFreqNo
mvdk *sp(1), ar2 ; ar4 = pSc
mar *+ar2(#(DTMF_tSc.asHiDevEn)) ; ar2 = psDev
stm #__aasHiDevFlt, ar3
mar *ar3+0
mar *ar3+0 ; ar3 = psDevFlt
ld *ar2(#3), 16, a
sub *ar2(#0), 16, a
add *ar2(#2), 16, a
sub *ar2(#1), 16, a
mpya *ar3+
ld b, -16, a
ld #170*5, b
min a
ld #-170*5, b
max a
stl a, *ar4(#(DTMF_tSc.sHiFreqDev))
;
squr *ar4(#(DTMF_tSc.sHiFreqDev)), a ; a = dev^2
stlm a, t ; t = LO(a)
nop
mpyu *ar3, b ; b = uns(LO(a))*coef; because coef>0 always
ld b, -16, b
maca *ar3 ; b+= HI(a)*coeff
mar *ar4+0
add *ar4(#(DTMF_tSc.asHiMainEn)), b
mar *ar4-0
stl b, *ar4(#(DTMF_tSc.sHiMaxFreqEn))
ret
;-------------------------------------------------------------------------
.global _dtmf_lo_sort
_dtmf_lo_sort
;-------------------------------------------------------------------------
; DTMF_tDb *pDb,
; DTMF_tSc *pSc
;
; local vars
; ar2 = pSc
; ar3 = psIn
; ar4 = curr idx
; ar0 = idx of max
;
ssbx sxm
mvdk *sp(1), ar2
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asLoMainEn))
stm #0, ar4
stm #0, ar0
ld *ar3+, a
stm #4-2, brc
rptb L1_dtmf_sort_lo - 1
ld *ar3+, b
max a ; if b > a, c = 1
mar *ar4+
nop
xc 1, c
mvmm ar4, ar0
L1_dtmf_sort_lo
mvkd ar0, *ar2(#(DTMF_tSc.sLoFreqNo))
;
mar *+ar3(#-4)
stm #0, ar4
ld #-32767, a
stm #4-1, brc
rptb L2_dtmf_sort_lo - 1
cmpr 0, ar4
ld *ar3+, b
mar *ar4+
xc 1, ntc ; if (curr != max)
max a
L2_dtmf_sort_lo
stl a, *ar2(#(DTMF_tSc.sLoNextEn))
ret
;-------------------------------------------------------------------------
.global _dtmf_hi_sort
_dtmf_hi_sort
;-------------------------------------------------------------------------
; DTMF_tDb *pDb,
; DTMF_tSc *pSc
;
; local vars
; ar2 = pSc
; ar3 = psIn
; ar4 = curr idx
; ar0 = idx of max
;
ssbx sxm
mvdk *sp(1), ar2
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asHiMainEn))
stm #0, ar4
stm #0, ar0
ld *ar3+, a
stm #4-2, brc
rptb L1_dtmf_sort_hi - 1
ld *ar3+, b
max a ; if b > a, c = 1
mar *ar4+
nop
xc 1, c
mvmm ar4, ar0
L1_dtmf_sort_hi
mvkd ar0, *ar2(#(DTMF_tSc.sHiFreqNo))
;
mar *+ar3(#-4)
stm #0, ar4
ld #-32767, a
stm #4-1, brc
rptb L2_dtmf_sort_hi - 1
cmpr 0, ar4
ld *ar3+, b
mar *ar4+
xc 1, ntc ; if (curr != max)
max a
L2_dtmf_sort_hi
stl a, *ar2(#(DTMF_tSc.sHiNextEn))
ret
;-------------------------------------------------------------------------
.global _dtmf_frame_en
_dtmf_frame_en
;-------------------------------------------------------------------------
; DTMF_tDb *pDb,
; DTMF_tSc *pSc
;
ssbx sxm
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.as2kData))
rptz a, #IDTMF_FR_SZ-1
squra *ar3+, a
mvdk *sp(1), ar2
dst a, *ar2(#(DTMF_tSc.slFrameEn))
ret
;-------------------------------------------------------------------------
.global _dtmf_move_data_out
_dtmf_move_data_out
;-------------------------------------------------------------------------
; DTMF_tDb *pDb,
; DTMF_tSc *pSc
stlm a, ar3
ssbx sxm
nop
mvdk *sp(1), ar2
dld *ar2(#(DTMF_tSc.slFrameEn)), a
dadd *ar3(#(DTMF_tDb.v.slFrameEn)), a
ld a, -3, a
en2log 0
stl a, *ar3(#(DTMF_tDb.v.sZFrameEn))
dld *ar2(#(DTMF_tSc.slFrameEn)), a
dst a, *ar3(#(DTMF_tDb.v.slFrameEn))
mvmm ar2, ar4
mvmm ar3, ar5
mar *+ar4(#(DTMF_tSc.as2kData + IDTMF_FR_SZ))
mar *+ar5(#(DTMF_tDb.as2kDataSav))
rpt #DTMF_2KFLT_SZ-1
mvdd *ar4+, *ar5+
mvmm ar2, ar4
mvmm ar3, ar5
mar *+ar4(#(DTMF_tSc.asBpData + DTMF_BPFR_SZ))
mar *+ar5(#(DTMF_tDb.asBpDataSav))
rpt #DTMF_BPFLT_SZ-1
mvdd *ar4+, *ar5+
mvmm ar2, ar4
mvmm ar3, ar5
mar *+ar4(#(DTMF_tSc.asLoData + DTMF_DFR_SZ*2))
mar *+ar5(#(DTMF_tDb.asLoDataSav))
rpt #DTMF_LOSD_SZ-1
mvdd *ar4+, *ar5+
mvmm ar2, ar4
mvmm ar3, ar5
mar *+ar4(#(DTMF_tSc.asHiData + DTMF_DFR_SZ*2))
mar *+ar5(#(DTMF_tDb.asHiDataSav))
rpt #DTMF_HISD_SZ-1
mvdd *ar4+, *ar5+
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -