⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 update.asm

📁 利用G.723协议在DSP实现音频信号的压缩与解压缩实验
💻 ASM
📖 第 1 页 / 共 2 页
字号:
end_dqsez11              
        stl      A, *AR2     ;*AR2=state_ptr->a[0]            
;-------------------------------------------------------
;		/* LIMD */
;		a1ul = 15360 - a2p;
;		if (state_ptr->a[0] < -a1ul)
;			state_ptr->a[0] = -a1ul;
;		else if (state_ptr->a[0] > a1ul)
;			state_ptr->a[0] = a1ul;
;-------------------------------------------------------
        ld       *SP(temp_a2p), B
        sub      #15360, B    ;B=-a1ul
        
        sub      B, A
        bcd      a1ul1, AGEQ
        add      B, A  
        nop
        stl      B, *AR2      
        b        end_a1    
a1ul1:
        add      B, A
        bc       end_a1, ALEQ 
        neg      B            ;B=a1ul  
        stl      B, *AR2
end_a1       
;-----------------------------------------------------------
;		/* UPB : update predictor zeros b[6] */
;		for (cnt = 0; cnt < 6; cnt++) {
;				/* for 40Kbps G.723 */
;				state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9;
;		
;			if (dq & 0x7FFF) {			/* XOR */
;				if ((dq ^ state_ptr->dq[cnt]) >= 0)
;					state_ptr->b[cnt] += 128;
;				else
;					state_ptr->b[cnt] -= 128;
;			                 }
;		                              }
;	}
;------------------------------------------------------------------
        mvmm     AR7, AR2
        mar      *+AR2(b)     ;AR2=state_ptr->b
        mvmm     AR7, AR4
        mar      *+AR4(dq)    ;AR4=state_ptr->dq
        stm      #5, AR3
cnt
        ld       *AR2, A
        sub      *AR2, -9, A   ;A=state_ptr->b[cnt]
        stl      A, *AR2 
        
        ld       *AR5, A       ;*AR5=dq 
        and      #0x7fff, A
        
        bc       cnt1, AEQ
        ld       *AR4+, A
        ;xor      *AR5, A
        ld       *AR5, B
        xor      B, A
        bc       b1, ALT
        ld       *AR2, A
        add      #128, A
        stl      A, *AR2+
        b        end_cnt
        
b1:  
        ld       *AR2, A     
        sub      #128, A
        stl      A, *AR2+
        b        end_cnt
cnt1:
        mar      *AR2+
       
end_cnt        
        banz     cnt, *AR3-


        
;----------------------------------------------------------------------
;	for (cnt = 5; cnt > 0; cnt--)
;		state_ptr->dq[cnt] = state_ptr->dq[cnt-1];
;	/* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
;----------------------------------------------------------------------
dqsez0:
        mvmm     AR7, AR4
        ;mar      *+AR4(dq+5)
        mar      *+AR4(dq+4)
        delay    *AR4-
        delay    *AR4-
        delay    *AR4-
        delay    *AR4-
        delay    *AR4-
;----------------------------------------------------------------------
;	if (mag == 0) {
;		state_ptr->dq[0] = (dq >= 0) ? 0x20 : 0xFC20;
;	              } 
;   else {
;		exp = quan(mag, power2, 15);
;		state_ptr->dq[0] = (dq >= 0) ?
;		    (exp << 6) + ( mag >>(exp-6) ) :
;		    (exp << 6) + ( mag >>(exp-6) ) - 0x400;
;	     }
;----------------------------------------------------------------------
        ld       *SP(temp_mag), A
        bc       mag1, ANEQ
        
        mvmm     AR7, AR4
        mar      *+AR4(dq)
        ld       *AR5, A        ;*AR5=dq
        ld       #0xfc20, B
        xc       1, AGEQ
        ld       #0x20, B
        stl      B, *AR4
        b        end_mag
mag1:  
        mar      *AR4+
        ld       A, B
        stm      #tab_power2, AR3
        pshm     AR5
        pshm     AR4
        call     quan  ;B=mag, AR3=power2   
                       ;return exp=B
        nop
        popm     AR4
        popm     AR5
        nop               
        stl      B, *SP(temp_exp)
        sub      #6, B
        neg      B
        stlm     B, T
        ld       *SP(temp_mag), A
        norm     A  ;A= ( mag >>(exp-6) ) 
        ld       *SP(temp_exp), B
        add      B, 6, A   
        ld       *AR5, B        ;*AR5=dq
        nop
        nop
        xc       2, BLT
        sub      #0x0400, A   
        stl      A, *AR4        ;*AR4=state_ptr->dq[0]
end_mag    
;-------------------------------------------------------------------                    
;	state_ptr->sr[1] = state_ptr->sr[0];
;	/* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
;	if (sr == 0) {
;		state_ptr->sr[0] = 0x20;
;	} else if (sr > 0) {
;		exp = quan(sr, power2, 15);
;		state_ptr->sr[0] = (exp << 6) + (sr >> (exp-6) );
;	} else if (sr > -32768) {
;		mag = -sr;
;		exp = quan(mag, power2, 15);
;		state_ptr->sr[0] =  (exp << 6) + ( mag >> (exp-6) ) - 0x400;
;	} else
;		state_ptr->sr[0] = 0xFC20;
;--------------------------------------------------------------------
        mvmm      AR7, AR4
        mar       *+AR4(sr)  ;*AR4=state_ptr->sr[0]
        delay     *AR4
        
        ld        *AR6, A   ;*AR6=sr
        bc        sr1, ANEQ
        st        #0x20, *AR4     ;*AR4=state_ptr->sr[0]
        b         end_sr      
sr1:   
        bc        sr2, ALEQ
        ld        A, B
        pshm      AR4
        stm       #tab_power2, AR3    
        call      quan   ;return exp=B
        popm      AR4
        nop
        stl      B, *SP(temp_exp)
        sub      #6, B
        neg      B
        stlm     B, T
        nop
        nop
        norm     A    ;A=sr 
        ld       *SP(temp_exp), B
        add      B, 6, A    
        stl      A, *AR4     ;*AR4=state_ptr->sr[0]                                                              
        b        end_sr
sr2:
        sub      #-32768, A
        bcd      sr3, ALEQ    
        add      #-32768, A
        ld       A, B
        neg      B         ;B=mag
        ld       B, A      ;B=mag
        pshm     AR4
        stm      #tab_power2, AR3
        call     quan   ;B=exp
        popm     AR4
        nop
        stl      B, *SP(temp_exp)
        sub      #6, B
        neg      B
        stlm     B, T
        nop
        nop
        norm     A    ;A=mag 
        ld       *SP(temp_exp), B
        add      B, 6, A  
        sub      #0x400, A 
        stl      A, *AR4     ;*AR4=state_ptr->sr[0]         
        b        end_sr
sr3:
        st       #0xfc20, *AR4       
end_sr 
        
;--------------------------------------------------------------------
;	/* DELAY A */
;	state_ptr->pk[1] = state_ptr->pk[0];
;	state_ptr->pk[0] = pk0;
;--------------------------------------------------------------------
       mvmm      AR7, AR4
       mar       *+AR4(pk)
       delay     *AR4
       ld        *SP(temp_pk0), A
       stl       A, *AR4
;--------------------------------------------------------------------
;	/* TONE */
;	if (tr == 1)		/* this sample has been treated as data */
;		state_ptr->td = 0;	/* next one will be treated as voice */
;	else if (a2p < -11776)	/* small sample-to-sample correlation */
;		state_ptr->td = 1;	/* signal may be data */
;	else				/* signal is voice */
;		state_ptr->td = 0;
;--------------------------------------------------------------------
       mvmm      AR7, AR4
       mar       *+AR4(td)
       ld        *SP(temp_tr), A
       sub       #1, A
       bc        tr11, ANEQ
       st        #0, *AR4   ;*AR4=state_ptr->td
       b         end_td      
tr11:       
       ld        *SP(temp_a2p), A
       sub       #-11776, A
       bc        tr22, AGEQ
       st        #1, *AR4
       b         end_td
tr22:
       st        #0, *AR4
end_td
;---------------------------------------------------------------------      
;	/*
;	 * Adaptation speed control.
;	 */
;	state_ptr->dms += (fi - state_ptr->dms) >> 5;		/* FILTA */
;	state_ptr->dml += (((fi << 2) - state_ptr->dml) >> 7);	/* FILTB */
;----------------------------------------------------------------------
     ld          *SP(temp_i), A
     add         #tab_fitab, A   
     stlm        A, AR4     ;*AR4=fi
     mvmm        AR7, AR3
     mar         *+AR3(dms)
     
     ld          *AR3, B
     sub         *AR4, B
     neg         B       ;B=  fi - state_ptr->dms
     ld          *AR3, A
     add         B, -5, A  
     stl         A, *AR3
     
     
     mvmm        AR7, AR3
     mar         *+AR3(dml)
     ld          *AR4, 2, B  ; B=fi << 2
     sub         *AR3, B
     ld          *AR3, A
     add         B, -7, A
     stl         A, *AR3  
;-----------------------------------------------------------     
;	if (tr == 1)
;		state_ptr->ap = 256;
;	else if (y < 1536)					/* SUBTC */
;		state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
;	else if (state_ptr->td == 1)
;		state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
;	else if (abs((state_ptr->dms << 2) - state_ptr->dml) >=
;	    (state_ptr->dml >> 3))
;		state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
;	else
;		state_ptr->ap += (-state_ptr->ap) >> 4;
;}
;------------------------------------------------------------
     ld          *SP(temp_tr), A
     sub         #1, A
     mvmm        AR7, ar3
     mar         *+AR3(ap)    
     bc          ap1, ANEQ
     st          #256, *AR3
     frame       #11
     ret         
ap1:
     ld          *SP(temp_y), A
     sub         #1356, A
     bc          ap2, AGEQ
     ld          #0x200, A
     sub         *AR3, A
     ld          *AR3, B
     add         A, -4, B
     stl         B, *AR3
     frame       #11
     ret
ap2:
     mvmm        AR7, AR4
     mar         *+AR4(td)
     ld          #1, A
     sub         *AR4, A
     bc          ap3, ANEQ
     ld          #0x200, A
     sub         *AR3, A      ;*AR3=state_ptr->ap
     ld          *AR3, B
     add         A, -4, B
     stl         B, *AR3
     frame       #11
     ret
ap3:
     mvmm        AR7, AR5
     mar         *+AR5(dms)     
     ld          *AR5, 2, A
     mvmm        AR7, AR6
     mar         *+AR6(dml)          
     sub         *AR6, A
     abs         A
     ld          *AR6, -3, B
     sub         B, A
     bc          ap4, ALT
     ld          #0x200, A
     sub         *AR3, A      ;*AR3=state_ptr->ap
     ld          *AR3, B
     add         A, -4, B
     stl         B, *AR3  
     frame       #11
     ret
ap4:
     
     ld          *AR3, A
     neg         A
     ld          *AR3, B
     add         A, -4, B
     stl         B, *AR3            
end_ap 
     frame       #11       
     ret      
     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -