📄 gaectxa.s54
字号:
*-------------------------------------------------------------------------*
* *
* THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY *
* INFORMATION. IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES: *
* "COPYRIGHT 2003 MICHAEL TSIROULNIKOV, ALL RIGHTS RESERVED" *
* *
*-------------------------------------------------------------------------*/
.mmregs
.include "gaeci.h54"
.sect ".ftext3"
_EN_CORR .set (-GAEC_1DB*3-GAEC_1DB/2); GAEC_DB(-3.5)
.ref _gaec_utl_en2log
.ref _gaec_utl_exp
;-------------------------------------------------------------------------
.global _gaec_tx_analysis
;-------------------------------------------------------------------------
_gaec_tx_analysis
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
; S16 *psIn
;
stlm a, ar2
ssbx sxm
nop
mvdk *sp(1), ar3
;
; shift old data in buffer
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.asTbuf)
mvmm ar2, ar5
mar *+ar5(#GAEC_tDb.asTbuf+GAEC_FR_SZ)
rpt #(GAEC_TBUF_SZ-GAEC_FR_SZ)-1
mvdd *ar5+, *ar4+ ; from -> to
;
; add new data to buffer
mvdk *sp(2), ar5
rpt #GAEC_FR_SZ-1
mvdd *ar5+, *ar4+
;
; shift old data in 2D array
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.aasT)
mvmm ar4, ar5
mar *+ar5(#GAEC_BLKS)
stm #GAEC_BLKS+1, ar0
stm #0, bk
stm #GAEC_BANDS*2-1, brc
rptb G15-1
rpt #GAEC_ERR_SZ-GAEC_BLKS-2
mvdd *ar5+, *ar4+
mvdd *ar5+0%, *ar4+0%
G15
;
; loop for all blks
; ar2 -> coeffs
; ar3 -> psTmp
; ar4 -> psFrom
; ar7 -> psTo
;
pshm ar6
pshm ar7
orm #1, *(pmst)
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.asTbuf)
mvmm ar2, ar7
mar *+ar7(#GAEC_tDb.aasT + GAEC_ERR_SZ-GAEC_BLKS)
stm #_GAEC_aasFBS, ar2
stm #GAEC_BLKS-1, ar6
stm #GAEC_ERR_SZ, ar0
mar *+ar3(#GAEC_tSc.u.asTmp)
G10
;
; symmetric
mvmm ar4, ar5
mar *+ar5(#(GAEC_FBS_SZ-1))
stm #GAEC_FBS_SZ/2-1, brc
rptb G11-1
add *ar4+, *ar5-, a
sth a, *ar3+
G11
mar *+ar3(#(-GAEC_FBS_SZ/2))
mar *+ar4(#(-GAEC_FBS_SZ/2))
stm #GAEC_BANDS-1, brc
rptb G12-1
rptz a, #(GAEC_FBS_SZ/2)-1
mac *ar3+, *ar2+, a
add #1, 14, a
sth a, 1, *ar7+0
mar *+ar3(#-GAEC_FBS_SZ/2)
G12
;
; asymmetric
mvmm ar4, ar5
mar *+ar5(#(GAEC_FBS_SZ-1))
stm #GAEC_FBS_SZ/2-1, brc
rptb G13-1
sub *ar4+, *ar5-, a
sth a, *ar3+
G13
mar *+ar4(#(-GAEC_FBS_SZ/2))
mar *+ar3(#(-GAEC_FBS_SZ/2))
stm #GAEC_BANDS-1, brc
rptb G14-1
rptz a, #(GAEC_FBS_SZ/2)-1
mac *ar3+, *ar2+, a
add #1, 14, a
sth a, 1, *ar7+0
mar *+ar3(#-GAEC_FBS_SZ/2)
G14
.if 0
.endif
mar *+ar7(#-(GAEC_ERR_SZ*(2*GAEC_BANDS)-1))
mar *+ar4(#GAEC_BLK_SZ)
mar *+ar2(#-GAEC_FBS_SZ*GAEC_BANDS)
banz G10, *ar6-
andm #~1, *(pmst)
popm ar7
popm ar6
.if 0
.endif
ret
;-------------------------------------------------------------------------
.global _gaec_tx_vad_sb
;-------------------------------------------------------------------------
_gaec_tx_vad_sb
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
stlm a, ar2
ssbx sxm
nop
mvdk *sp(1), ar3
mvdk *ar2(#GAEC_tDb.uAdfMode), ar5
stm #3, ar0
cmpr 01, ar5
;
; set ptrs
; ar3-> pSc->asVadTxEn
; ar4-> pDb->asVadTxNse
; ar5-> pDb->asVadTxCrit
frame #-2
_sDlt .set 0
_sMaxEn .set 1
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.asVadRinNse)
mvmm ar2, ar5
mar *+ar5(#GAEC_tDb.asVadRinCrit)
mar *+ar3(#GAEC_tSc.asRinEn)
;
; find smaxEn
stm #(GAEC_BANDS+1)-1, brc
ld #-32768, b
rptb G37-1
ld *ar3+, a
max b
G37
stl b, *sp(_sMaxEn)
mar *+ar3(#-(GAEC_BANDS+1))
stm #(GAEC_BANDS+1)-1, brc
rptb G35-1
ld *ar3, a
sub #GAEC_VAD_NSE_MIN, a, b
bc G34, bgt
ld *ar5, a
sub #GAEC_VAD_CRIT_THR, a
ld #GAEC_CRIT_MIN, b
max a
stl a, *ar5
b G31
G34
sub *ar4, a
stl a, *sp(_sDlt)
sub #GAEC_VAD_CRIT_THR, a
add *ar5, a
ld #GAEC_CRIT_MIN, b
max a
ld #GAEC_CRIT_MAX, b
min a
stl a, *ar5
bc G30, ageq
ld *ar4, a
xc 2, tc
add *sp(_sDlt), -3, a
xc 2, ntc
add *sp(_sDlt), -5, a
ld #GAEC_VAD_NSE_MAX, b
min a
ld #GAEC_VAD_NSE_MIN, b
bd G31
max a
stl a, *ar4
G30
ld *ar3, a
sub #GAEC_VAD_NSE_MAX, a
bc G31, ageq
ld *sp(_sMaxEn), a
sub #GAEC_VAD_NSE_MAX, a
bc G31, ageq
ld *ar4, a
add #1, a
xc 2, tc
add #9, a
stl a, *ar4
G31
;
; next band
mar *ar3+
mar *ar4+
mar *ar5+
G35
frame #2
ret
;-------------------------------------------------------------------------
.global _gaec_tx_vad
;-------------------------------------------------------------------------
_gaec_tx_vad
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
stlm a, ar2
ssbx sxm
nop
mvdk *sp(1), ar3
mvdk *ar2(#GAEC_tDb.uAdfMode), ar5
stm #3, ar0
cmpr 01, ar5
;
; set ptrs
; ar3-> pSc->sVadTxEn
; ar4-> pDb->sVadTxNse
; ar5-> pDb->sVadTxCrit
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.sVadRinNse)
mvmm ar2, ar5
mar *+ar5(#GAEC_tDb.sVadRinCrit)
mar *+ar3(#GAEC_tSc.sRinEn)
ld *ar3, a
sub #GAEC_VAD_NSE_MIN, a, b
bc G64, bgt
ld *ar5, a
sub #GAEC_VAD_CRIT_THR, a
ld #GAEC_CRIT_MIN, b
max a
stl a, *ar5
b G61
G64
sub *ar4, a
stl a, *sp(2)
sub #GAEC_VAD_CRIT_THR, a
add *ar5, a
ld #GAEC_CRIT_MIN, b
max a
ld #GAEC_CRIT_MAX, b
min a
stl a, *ar5
bc G60, ageq
ld *ar4, a
xc 2, tc
add *sp(2), -3, a
xc 2, ntc
add *sp(2), -5, a
ld #GAEC_VAD_NSE_MAX, b
min a
ld #GAEC_VAD_NSE_MIN, b
bd G61
max a
stl a, *ar4
G60
ld *ar3, a
sub #GAEC_VAD_NSE_MAX, a
bc G61, ageq
ld *ar4, a
add #1, a
xc 2, tc
add #9, a
stl a, *ar4
G61
ret
;-------------------------------------------------------------------------
.global _gaec_tx_att
;-------------------------------------------------------------------------
_gaec_tx_att
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
;
stlm a, ar2
ssbx sxm
nop
mvdk *sp(1), ar3
mvmm ar3, ar4
mar *+ar4(#GAEC_tSc.asAttRin)
mvmm ar3, ar5
mar *+ar5(#GAEC_tSc.aasErr0)
mar *+ar3(#GAEC_tSc.u.asTmp)
mar *+ar2(#GAEC_tDb.aasT)
stm #GAEC_BANDS, brc
rptb G41-1
ld *ar4+, a
neg a
call _gaec_utl_exp
stl a, *ar3+
G41
mvmm ar3, ar4
mar *+ar3(#-GAEC_BANDS)
rpt #(GAEC_BANDS-1)-1
mvdd *ar3+, *ar4+
mar *+ar3(#-GAEC_BANDS);
stm #GAEC_BANDS*2-1, ar4
G42
ld *ar3+, t
stm #GAEC_ERR_SZ-1, brc
rptb G43-1
mpy *ar2+, a
add #1, 11, a
sth a, 4, *ar5+
G43
banz G42, *ar4-
ret
;-------------------------------------------------------------------------
.global _gaec_tx_nse
;-------------------------------------------------------------------------
_gaec_tx_nse
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
;
stlm a, ar2
ssbx sxm
nop
mvdk *sp(1), ar3
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.asVadRinNse)
mvmm ar3, ar5
mar *+ar5(#GAEC_tSc.u.asTmp)
stm #GAEC_BANDS, ar0
G51
ld *ar5, a
sub #GAEC_1DB*6, a
ld *ar4+, b
min b
ld *ar5, a
add *ar2(#GAEC_tDb.Cfg.sWhiteThr), a
max a
add #GAEC_1DB*13, a
call _gaec_utl_exp
stl a, *ar5+
banz G51, *ar0-
mvmm ar5, ar4
mar *+ar4(#-GAEC_BANDS)
rpt #GAEC_BANDS-2
mvdd *ar4+, *ar5+
_MULT .set (31821)
_INC .set (13849)
;
; S16 *psSeed = a ; ar2
; S16 *psTo = sp(1) ; ar5
; S16 sLevel = sp(2) ; ar3->sLevel
mvmm ar3, ar5
mar *+ar5(#GAEC_tSc.aasErr0)
mar *+ar2(#GAEC_tDb.sNseSav)
mar *+ar3(#GAEC_tSc.u.asTmp)
orm #1, *(pmst)
stm #GAEC_BANDS*2-1, ar0
G53
stm #GAEC_ERR_SZ-1, brc
rptb G54-1
mpy *ar2, #_MULT, a
add #_INC, a
stl a, *ar2
mpy *ar2, *ar3, a
add *ar5, 15, a
add #1, 14, a
sth a,1, *ar5+
G54
mar *ar3+
banz G53, *ar0-
andm #~1, *(pmst)
.if 0
.endif
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -