📄 cgencode.asm
字号:
CGENCODE_DEBUG .SET 0
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
.IF CGENCODE_DEBUG
.version 50
.mmregs
.MLIB "MAC.LIB"
.BSS ACCBUF,2
.BSS GINDEX,1
.BSS TOPCGAIN,1
.DATA
CGAIN_TAB .INT 1,3,13,35,64,98,136,178,224, 278,340,418,520, 660,870,1330
.TEXT
CALL C50_INIT
LDP #ACCBUF
CALL CGENCODE
HERE B $
.ENDIF
;=======CODE TOPCGAIN AND GET GINDEX ==============================
;AR0,AR1
;ACC,ACCB,BRCR
;TOPCGAIN,GINDEX
;======================================================
.BSS CG_TEMP,1
CGENCODE
LACC TOPCGAIN
ABS
SACL CG_TEMP
;=====================================
; low = dist = fabs(input - *pitch2max5);
; *index = 0;
;=====================================
ZAP
SACL GINDEX
LAR AR0,#CGAIN_TAB
MAR *,AR0
LACC CG_TEMP
SUB *+
ABS
SACB
;=====================================
; for (i = 1; i < 16; i++)
; { dist = fabs(input - pitch2max5[i]);
; if (dist < low)
; { low = dist; *index = i; }
; }
;=====================================
LACC #14
SAMM BRCR
LAR AR1,#0
LACC CG_TEMP
RPTB CGENCODE_FOR-1
SUB *+,0,AR1
ABS
CRLT
MAR *+,AR0
XC 2,C ;EXECUTE IF DIST<LOW
LAMM AR1
SACL GINDEX
LACC CG_TEMP
CGENCODE_FOR
;=====================================
; return (pitch2max5[*index]);
;=======ARP==0==============================
LACC #CGAIN_TAB
ADD GINDEX
SAMM AR0 ;PIPELINE
BIT TOPCGAIN,0 ;PIPELINE
LACC GINDEX
XC 2,TC
add #1
NEG ;DO IF TOPCGAIN<0
ADD #16
SACL GINDEX
LACC *
XC 1,TC
NEG
SACL TOPCGAIN
RET
;=====================================
.IF CGENCODE_DEBUG
.INCLUDE "C50_INIT.ASM"
.ENDIF
;=============================================
;float pitchencode(float input, int *index)
;{ int i;
; float dist, low;
; low = dist = fabs(input - *pitch2max5);
; *index = 0;
; for (i = 1; i < 32; i++)
; { dist = fabs(input - pitch2max5[i]);
; if (dist < low)
; { low = dist; *index = i; }
; }
; return (pitch2max5[*index]);
;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -