📄 gaecfba.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"
;-------------------------------------------------------------------------
.global _gaec_fb_snd_analysis
;-------------------------------------------------------------------------
_gaec_fb_snd_analysis
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
; S16 *psIn
;
stlm a, ar2
ssbx sxm
nop
mvdk *sp(1), ar3
;
; shift old data
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.asSbuf)
mvmm ar2, ar5
mar *+ar5(#GAEC_tDb.asSbuf+GAEC_FR_SZ)
rpt #(GAEC_SBUF_SZ-GAEC_FR_SZ)-1
mvdd *ar5+, *ar4+ ; from -> to
;
; add new data
mvdk *sp(2), ar5
rpt #GAEC_FR_SZ-1
mvdd *ar5+, *ar4+
;
; 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.asSbuf)
mvmm ar3, ar7
mar *+ar7(#GAEC_tSc.aasSin)
stm #_GAEC_aasFBS, ar2
stm #GAEC_BLKS-1, ar6
stm #GAEC_BLKS, ar0
mar *+ar3(#GAEC_tSc.u.asTmp)
F10
;
; symmetric
mvmm ar4, ar5
mar *+ar5(#(GAEC_FBS_SZ-1))
stm #GAEC_FBS_SZ/2-1, brc
rptb F11-1
add *ar4+, *ar5-, a
sth a, *ar3+
F11
mar *+ar3(#(-GAEC_FBS_SZ/2))
mar *+ar4(#(-GAEC_FBS_SZ/2))
stm #GAEC_BANDS-1, brc
rptb F12-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)
F12
;
; asymmetric
mvmm ar4, ar5
mar *+ar5(#(GAEC_FBS_SZ-1))
stm #GAEC_FBS_SZ/2-1, brc
rptb F13-1
sub *ar4+, *ar5-, a
sth a, *ar3+
F13
mar *+ar4(#(-GAEC_FBS_SZ/2))
mar *+ar3(#(-GAEC_FBS_SZ/2))
stm #GAEC_BANDS-1, brc
rptb F14-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)
F14
.if 0
.endif
mar *+ar7(#-(GAEC_BLKS*(2*GAEC_BANDS)-1))
mar *+ar4(#GAEC_BLK_SZ)
mar *+ar2(#-GAEC_FBS_SZ*GAEC_BANDS)
banz F10, *ar6-
andm #~1, *(pmst)
popm ar7
popm ar6
ret
;-------------------------------------------------------------------------
.global _gaec_fb_rcv_analysis
;-------------------------------------------------------------------------
_gaec_fb_rcv_analysis
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
; S16 *psIn
;
stlm a, ar2
ssbx sxm
nop
mvdk *sp(1), ar3
;
; 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.asRbuf)
mvdk *ar2(#GAEC_tDb.psRcv), ar7
mar *+ar7(#GAEC_RCV_SZ-GAEC_BLKS)
stm #_GAEC_aasFBR, ar2
stm #GAEC_BLKS-1, ar6
stm #GAEC_RCV_SZ, ar0
mar *+ar3(#GAEC_tSc.u.asTmp)
F20
;
; symmetric
mvmm ar4, ar5
mar *+ar5(#(GAEC_FBR_SZ-1))
stm #GAEC_FBR_SZ/2-1, brc
rptb F21-1
add *ar4+, *ar5-, a
sth a, *ar3+
F21
mar *+ar3(#(-GAEC_FBR_SZ/2))
mar *+ar4(#(-GAEC_FBR_SZ/2))
stm #GAEC_BANDS-1, brc
rptb F22-1
rptz a, #(GAEC_FBR_SZ/2)-1
mac *ar3+, *ar2+, a
add #1, 14, a
sth a, 1, *ar7+0
mar *+ar3(#-GAEC_FBR_SZ/2)
F22
;
; asymmetric
mvmm ar4, ar5
mar *+ar5(#(GAEC_FBR_SZ-1))
stm #GAEC_FBR_SZ/2-1, brc
rptb F23-1
sub *ar4+, *ar5-, a
sth a, *ar3+
F23
mar *+ar4(#(-GAEC_FBR_SZ/2))
mar *+ar3(#(-GAEC_FBR_SZ/2))
stm #GAEC_BANDS-1, brc
rptb F24-1
rptz a, #(GAEC_FBR_SZ/2)-1
mac *ar3+, *ar2+, a
add #1, 14, a
sth a, 1, *ar7+0
mar *+ar3(#-GAEC_FBR_SZ/2)
F24
.if 0
.endif
mar *+ar7(#-(GAEC_RCV_SZ*(2*GAEC_BANDS)-1))
mar *+ar4(#GAEC_BLK_SZ)
mar *+ar2(#-GAEC_FBR_SZ*GAEC_BANDS)
banz F20, *ar6-
andm #~1, *(pmst)
popm ar7
popm ar6
ret
.if 1
;-------------------------------------------------------------------------
.global _gaec_fb_synthesis
;-------------------------------------------------------------------------
_gaec_fb_synthesis
; S16 ppsErr[][GAEC_ERR_SZ] = a /ar5
; S16 *psSout = sp(1) / ar7
;
pshm ar7
pshm ar6
pshm ar1
stlm a, ar5
ssbx sxm
orm #1, *(pmst)
mvdk *sp(1+3), ar7
stm #(GAEC_BLKS-1), ar6
stm #(GAEC_ERR_SZ - GAEC_LFCTR+1), ar0
stm #0, bk
; cycle for blks
F30
stm #(GAEC_BLK_SZ/2-1), ar1
stm #(_GAEC_aasFBX + GAEC_FBZ_SZ* 0), ar3;
stm #(_GAEC_aasFBX + GAEC_FBZ_SZ*GAEC_BANDS), ar4;
F31
; cycle for k within the blk
mvmm ar5, ar2
stm #(2*GAEC_BANDS-1), brc
ld #0, a
ld #0, b
rptb F32-1 ; cycle for bands
.loop (GAEC_LFCTR-1) ; cycle for n
mac *ar3+, *ar2, a
mac *ar4+, *ar2+, b;
.endloop
mac *ar3+, *ar2, a
mac *ar4+, *ar2+0%, b
F32
; round & save results
add #1, 14, a
add #1, 14, b
sth a, 1, *ar7+
sth b, 1, *ar7+
banz F31, *ar1-
mar *ar5+;
mar *+ar3(#(-GAEC_FBZ_SZ*GAEC_BANDS))
mar *+ar4(#(-GAEC_FBZ_SZ*GAEC_BANDS))
banz F30, *ar6-
andm #~1, *(pmst)
popm ar1
popm ar6
popm ar7
ret
.else
;-------------------------------------------------------------------------
.global _gaec_fb_snd_synthesis
;-------------------------------------------------------------------------
_gaec_fb_snd_synthesis
; GAEC_tDb *pDb = a
; S16 ppsErr[][GAEC_ERR_SZ] = sp(1) /ar0
; S16 *psSout = sp(2) / ar1
;
pshm ar7
pshm ar6
pshm ar1
ssbx sxm
orm #1, *(pmst)
stm #-GAEC_BLK_SZ, ar0
stm #GAEC_BLKS-1, ar7
stm #0, bk
mvdk *sp(4), ar4
mvdk *sp(5), ar1
F43
stm #_GAEC_aasFBZ + (GAEC_FBZ_SZ - GAEC_BLK_SZ), ar2
stm #GAEC_BLK_SZ-1, ar6
F42
stm #GAEC_BANDS*2-1, brc
ld #0, a
rptb F41-1
rpt #GAEC_LFCTR -1
mac *ar4+, *ar2+0%, a
;
; next band
mar *+ar4(#GAEC_BLKS-1)
mar *+ar2(#(GAEC_FBZ_SZ+GAEC_LFCTR*GAEC_BLK_SZ))
F41
add #1, 14, a
sth a, 1, *ar1+
;
; next tap in out blk
mar *+ar2(#-GAEC_FBZ_SZ*2*GAEC_BANDS+1)
mar *+ar4(#-GAEC_ERR_SZ*2*GAEC_BANDS)
banz F42, *ar6-
;
; next blk in output
mar *ar4+ ; start from the next element
banz F43, *ar7-
andm #~1, *(pmst)
popm ar1
popm ar6
popm ar7
ret
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -