📄 vadcheck.dsp
字号:
MR1=DM(MeanE);
MX0=DM(ENERGY);
MY0=1024;
MR=MR+MX0*MY0(SS);
DM(MeanE)=MR1;
MR0=0;
MR1=DM(MeanSZC);
MX0=DM(ZC);
MR=MR+MX0*MY0(SS);
DM(MeanSZC)=MR1;
// CNTR=M;
I2=^MeanLSF;
I3=^Enc_lsfnew;
CNTR=M;
DO cal_meanlsf UNTIL CE;
MR=0,MX0=DM(I3,M1);
MR1=DM(I2,M0);
MR=MR+MX0*MY0(SS);
cal_meanlsf: DM(I2,M1)=MR1;
set_parameter: NONE=AX0-AY0;
IF LT RTS;
IF NE JUMP direct_param;
M5=DM(less_count);
I5=^factor_fx;
MODIFY(I5,M5);
MX0=DM(MeanE);
MY0=PM(I5,M5);
I5=^shift_fx;
MODIFY(I5,M5);
MR=MX0 * MY0(SS),SE=PM(I5,M5);
SR=LSHIFT MR0 (LO);
SR=SR OR ASHIFT MR1 (HI);
DM(MeanE)=SR1;
MX0=DM(MeanSZC);
MR=MX0 * MY0(SS);
SR=LSHIFT MR0 (LO);
SR=SR OR ASHIFT MR1(HI);
DM(MeanSZC)=SR1;
// CNTR=M;
I2=^MeanLSF;
I3=^MeanLSF;
MX0=DM(I2,M1);
CNTR=M;
DO calc_meanlsf UNTIL CE;
MR=MX0 * MY0(SS);
SR=LSHIFT MR0 (LO),MX0=DM(I2,M1);
SR=SR OR ASHIFT MR1 (HI);
calc_meanlsf: DM(I3,M1)=SR1;
AX0=DM(MeanE);
AY0=2048;
AR=AX0-AY0;
DM(MeanSE)=AR;
AY0=2458;
AR=AX0-AY0;
DM(MeanSLE)=AR;
direct_param: AX0=DM(MeanSE);
AY0=DM(ENERGY);
AR=AX0-AY0;
DM(dSE)=AR;
AX0=DM(MeanSLE);
AY0=DM(ENERGY_low);
AR=AX0-AY0;
DM(dSLE)=AR;
AX0=DM(MeanSZC);
AY0=DM(ZC);
AR=AX0-AY0;
DM(dSZC)=AR;
AX0=DM(ENERGY);
AY0=3072;
MY1=NOISE;
AR=AX0-AY0;
AR=PASS AR;
IF LT JUMP not_makedec;
MX1=DM(dSLE);
AX1=DM(dSE);
AX0=DM(SD);
MX0=DM(dSZC);
CALL MakeDec;
not_makedec: DM(VadEncode)=MY1;
AX1=0; {v_flag}
DM(v_flag)=AX1;
AX0=DM(Enc_pastVad);
AY0=VOICE;
NONE=AX0-AY0;
IF NE JUMP adjust_1;
AX0=DM(VadEncode);
AY0=NOISE;
NONE=AX0-AY0;
IF NE JUMP adjust_1;
AX0=dm(dSE);
AY0=410;
NONE=AX0+AY0;
IF GE JUMP adjust_1;
AX0=DM(ENERGY);
AY0=3072;
AR=AX0-AY0;
AR=PASS AR;
IF LE JUMP adjust_1;
AR=PASS VOICE;
DM(VadEncode)=AR;
AX1=1;
DM(v_flag)=AX1;
adjust_1: AX1=1; {ad_flag}
AY1=DM(ad_flag);
NONE=AY1-1;
IF NE JUMP adjust_2-1;
AX0=DM(Enc_ppastVad);
AY0=VOICE;
NONE=AX0-AY0;
IF NE JUMP adjust_2;
AX0=DM(Enc_pastVad);
NONE=AX0-AY0;
IF NE JUMP adjust_2;
AX0=DM(VadEncode);
AY0=NOISE;
NONE=AX0-AY0;
IF NE JUMP adjust_2;
AX0=DM(prev_energy);
AY0=DM(ENERGY);
AR=AX0-AY0;
AR=ABS AR;
AY0=614;
NONE=AR-AY0;
IF GT JUMP adjust_2;
AX0=VOICE;
DM(VadEncode)=AX0;
AX1=1;
DM(v_flag)=AX1;
AR=DM(count_ext);
AR=AR+1;
DM(count_ext)=AR;
AR=AR-4;
IF LE JUMP adjust_2-1;
AX1=0;
DM(count_ext)=AX1;
DM(ad_flag)=AX1;
adjust_2: AR=DM(count_sil);
AX0=DM(VadEncode);
AY0=NOISE;
NONE=AX0-AY0;
IF EQ AR=AR+1;
DM(count_sil)=AR;
AY0=VOICE;
NONE=AX0-AY0;
IF NE JUMP adjust_3;
AY0=10;
NONE=AR-AY0;
IF LE JUMP adjust_3;
AX0=DM(ENERGY);
AY0=DM(prev_energy);
AF=AX0-AY0;
AX0=614;
NONE=AF-AX0;
IF GT JUMP adjust_3;
AX0=NOISE;
DM(VadEncode)=AX0;
AR=PASS 0;
DM(count_sil)=AR;
adjust_3: AX0=DM(VadEncode);
AR=DM(count_sil);
AY0=VOICE;
NONE=AX0-AY0;
IF EQ AR=PASS 0;
DM(count_sil)=AR;
AX0=DM(ENERGY);
AY0=614;
AR=AX0-AY0;
AY0=DM(MeanSE);
AF=AR-AY0;
AF=PASS AF;
IF GE JUMP adjust_4;
AX0=DM(Enc_Frame);
AR=AX0-128;
IF LE JUMP adjust_4;
AR=DM(v_flag);
AR=PASS AR;
IF NE JUMP adjust_4;
AX0=SI;
AY0=19661;
AR=AX0-AY0;
AR=PASS AR;
IF GE JUMP adjust_4;
AR=PASS NOISE;
DM(VadEncode)=AR;
adjust_4: AF=PASS AF;
IF GE JUMP adjust_5;
AX0=SI;
AY0=24576;
AR=AX0-AY0;
AR=PASS AR;
IF GE JUMP adjust_5;
AX0=DM(SD);
AY0=83;
NONE=AX0-AY0;
IF GE JUMP adjust_5;
CALL start_calmean;
adjust_5: AX0=DM(Enc_Frame);
AR=AX0-128;
IF LE RTS;
AX0=DM(MeanSE);
AY0=DM(Min);
AR=AX0-AY0;
AR=PASS AR;
IF GE JUMP cmp_count6;
AX0=DM(SD);
AY0=83;
NONE=AX0-AY0;
IF GE RTS;
JUMP cmp_count7;
cmp_count6: AR=AR-2048;
AR=PASS AR;
IF LE RTS;
cmp_count7: AR=DM(Min);
DM(MeanSE)=AR;
AR=PASS 0;
DM(count_update)=AR;
RTS;
/************************************************************************
* $$01/10/2000 used only in encoder *
* $$01/11/2000 move dm table to pm table area *
* Calling Parameters *
* MX1 : differential low band energy *
* AX1 : differential full band energy *
* AX0 : differential spectral distortion *
* MX0 : differential zero crossing rate *
* Return Values *
* MY1 : voice or noise detect flag *
* Altered Registers: MR,SR,AR,AF,AX0,AX1,AY0,AY1,MX0,MX1,MY0,MY1 *
* Computation Time : 18 cycles *
*************************************************************************/
MakeDec: MY1=VOICE;
I4=^SZC_coeff;
/*--------SD vs dSZC------------*/
MR0=H#C000;
MR1=H#E425; {8192*-28521}
MY0=PM(I4,M4);
MR=MR+MX0 * MY0(SS),AR=AX0;
SR=LSHIFT MR0 BY -8(LO);
SR=SR OR ASHIFT MR1 BY -8(HI);
AY0=SR0;
AY1=SR1;
SR=ASHIFT AR BY 0(HI);
DIS AR_SAT;
AR=SR0+AY0,MY0=PM(I4,M4);
ENA AR_SAT;
AY0=AR,AR=SR1+AY1+C;
AR=PASS AR;
IF LT JUMP makedec_1;
AR=AR OR AY0;
IF NE RTS;
makedec_1: MR0=H#8000;
MR1=H#ED02; {8192*-19446}
MR=MR+MX0 * MY0(SS),AR=AX0;
SR=LSHIFT MR0 BY -7(LO);
SR=SR OR ASHIFT MR1 BY -7(HI);
AY0=SR0;
AY1=SR1;
SR=ASHIFT AR BY 0(HI);
DIS AR_SAT;
AR=SR0+AY0,MY0=PM(I4,M4);
ENA AR_SAT;
AY0=AR,AR=SR1+AY1+C;
AR=PASS AR;
IF LT JUMP makedec_2;
AR=AR OR AY0;
IF NE RTS;
/*----------dSE vs dSZC-------------*/
makedec_2: MR0=H#0000;
MR1=H#1000; {8192*16384}
MR=MR+MX0 * MY0(SS),AR=AX1;
SR=LSHIFT MR0 BY -2(LO);
SR=SR OR ASHIFT MR1 BY -2(HI);
AY0=SR0;
AY1=SR1;
SR=ASHIFT AR BY 0(HI);
DIS AR_SAT;
AR=SR0+AY0,MY0=PM(I4,M4);
ENA AR_SAT;
AY0=AR,AR=SR1+AY1+C;
AR=PASS AR;
IF GT JUMP makedec_3;
AR=AR OR AY0;
IF NE RTS;
makedec_3: MR0=H#0000;
MR1=H#1333; {8192*19660}
MR=MR+MX0 * MY0(SS),AR=AX1;
SR=LSHIFT MR0 BY -2(LO);
SR=SR OR ASHIFT MR1 BY -2(HI);
AY0=SR0;
AY1=SR1;
SR=ASHIFT AR BY 0(HI);
DIS AR_SAT;
AR=SR0+AY0;
ENA AR_SAT;
AY0=AR,AR=SR1+AY1+C;
AR=PASS AR;
IF GT JUMP makedec_4;
AR=AR OR AY0;
IF NE RTS;
makedec_4: MR0=H#9000;
MR1=H#03C2; {1024*30802}
AR=PASS AX1,MY0=PM(I4,M4);
MR=MR+AR * MY0(SS),AR=AX0;
AF=PASS MR1,MY0=PM(I4,M4);
IF LT RTS;
/*---------dSE vs SD---------------*/
makedec_5: MR0=H#0A00;
MR1=H#0027; {64*19988}
MR=MR+AR * MY0(SS);
AR=PASS AX1,MY0=PM(I4,M4);
MR=MR+AR*MY0(SS),AR=AX0;
AF=PASS MR1,MY0=PM(I4,M4);
IF LT RTS;
makedec_6: MR0=H#8240;
MR1=H#FFE2; {32*-30199}
MR=MR+AR * MY0(SS),MY0=PM(I4,M4);
AR=PASS MR1,AY0=MR0;
IF LT JUMP makedec_7;
AR=MR1 OR AY0;
IF NE RTS;
/*-----------dSLE vs dSZC------------------*/
makedec_7: MR0=H#8000;
MR1=H#1666; {8192*22938}
MR=MR+MX0 * MY0(SS),AR=AX1;
SR=LSHIFT MR0 BY -2(LO);
SR=SR OR ASHIFT MR1 BY -2(HI);
AY0=SR0;
AY1=SR1;
SR=ASHIFT AR BY 0(HI);
DIS AR_SAT;
AF=SR0+AY0,MY0=PM(I4,M4);
ENA AR_SAT;
AF=SR1+AY1+C;
AF=PASS AF;
IF LT RTS;
makedec_8: MR0=H#0000;
MR1=H#0F6B; {4096*31576}
MR=MR+MX0 * MY0(SS),AR=AX1;
SR=LSHIFT MR0 BY -2(LO);
SR=SR OR ASHIFT MR1 BY -2(HI);
AY0=SR0;
AY1=SR1;
SR=ASHIFT AR BY 0(HI);
DIS AR_SAT;
AF=SR0+AY0,MY0=PM(I4,M4);
ENA AR_SAT;
AF=SR1+AY1+C,AR=AX1;
AF=PASS AF;
IF LT RTS;
makedec_9: MR0=H#7000;
MR1=H#043D; {2048*17367}
MR=MR+AR * MY0(SS),AR=AX0;
AF=PASS MR1,MY0=PM(I4,M4);
IF LT RTS;
/*----------dSLE vs SD----------------*/
makedec_10: MR0=H#CCC0;
MR1=H#0018; {32*25395}
MR=MR+AR * MY0(SS),MY0=PM(I4,M4);
MR=MR+MX1*MY0(SS),AR=AX1;
AF=PASS MR1,MY0=PM(I4,M4);
IF LT RTS;
/*----------dSLE vs dSE---------------*/
makedec_11: MR0=H#F200;
MR1=H#FF15; {256*-29959}
MR=MR+AR * MY0(SS),AR=MX1;
AY0=MR0;
AY1=MR1;
SR=ASHIFT AR BY 0(HI);
DIS AR_SAT;
AR=SR0+AY0;
ENA AR_SAT;
AY0=AR,AR=SR1+AY1+C;
IF LT JUMP makedec_12;
AR=AR OR AY0;
IF NE RTS;
makedec_12: MR0=H#DC00;
MR1=H#01B6; {512*28087}
AR=PASS AX1,MY0=PM(I4,M4);
MR=MR+AR * MY0(SS),AR=MX1;
AY0=MR0;
AY1=MR1;
SR=ASHIFT AR BY 0(HI);
DIS AR_SAT;
AF=SR0+AY0,MY0=PM(I4,M4);
ENA AR_SAT;
AF=SR1+AY1+C,AR=AX1;
AF=PASS AF;
IF LT RTS;
makedec_13: MR0=H#9800;
MR1=H#0399; {1024*29491}
MR=MR+AR * MY0(SS),MY0=PM(I4,M4);
MR=MR+MX1*MY0(SS);
NONE=PASS MR1;
IF LE RTS;
MY1=NOISE;
RTS;
/************************************************************************/
.ENDMOD;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -