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

📄 me.s

📁 samsung 9908DVD源代码,
💻 S
字号:
.include "Karaoke_def.h"

.if KARAOKE_MIC_ECHO_SUPPORTED == 1

.extern DelayFactor_me
.extern DecayFactor_me
.extern _DelayCount
.extern XDelayBuf_me
.extern YDelayBuf_me
.extern InScale, MixScale_me
.extern DelayCount_me
.extern _s0_base_ptr_pscon

.extern	mi_output

.extern Echo_gain_me
.extern LowpassBuf_me
.extern Coeff_lpf_me
.extern noisecount

sec_MicEchoCode	section code, AFTERADDR POST_CODE_BASE
	sec_MicEchoCode

_MicEcho::
// Add EJY===============================================================
			push	a12, a14
			push	a8, a9
			push	r0, r1
			push	r2, r3
			push	r5, r6
			push	r4, r7
// ======================================================================
			
			eld		sd0	,#0x1010
			eld		sd3	,sd0
			
			ldb		r0, @[a11+ME_Init]
			cmp		eq, r0, #0
			brf		%f1
			eld		c, #0
			ld		r6, #3200
			eld		rp0, #XDelayBuf_me
			bnzd	r6, $
			eld		@rp0+d1, c	
			ld		r0, #1	
			ldb		@[a11+ME_Init], r0

%1:
// Add EJY===============================================================
			ldw		r4,	@[a10+iPOST_MIC_CENTER]
			ld		r7, #0x80
			sub		r7,	r4					;r7 = difference
			ldw		r4,	@[a10+iPOST_MIC_VARIATION]
			ld		r12, #0x80
			ld		r8, #0x80
			sub		r12, r4
			add		r8, r4
// ======================================================================

			ldb		r1, @[a11+ME_Onoff]
			cmp		eq, r1, #0
			brt		No_Echo

			eld		c, #0
			ldb		r0, @[a11+ME_delay]		// Delay
			eld		rp3, #DelayFactor_me
			ecld	c, r0
			erpn	rp3, c
			eld		d, @rp3   ;m
			ecld	r5, d
			sub		r5, #1

			ldb		r0, @[a11+ME_decay]		// Decay
			ecld	c, r0
			eld		rp3, #DecayFactor_me
			erpn	rp3, c
			eld		y1, @rp3    ;g
			
			ldb		r0, @[a11+ME_gain]     ;echo gain
			ecld	c, r0
			eld		rp3, #Echo_gain_me
			erpn	rp3, c
			eld		a, @rp3
			eld		MixScale_me+1, a

			ld		a9, #StartAddress_Xmem_Calm
			ld		r9, #DelayCount_me
			sl		r9
			ldw		r1, @[a9]
			ecld	c, r1

			eld		rp0, #XDelayBuf_me
			erpn	rp0, c
			eld		rp2, #YDelayBuf_me
			erpn	rp2, c
			
			eld		rp1, #mi_output
			eld		rp3, #MixScale_me
			
			esd0	s0, #0
			esd0	d0, #1
			esd2	s0, #0
			esd2	d0, #1
			esd1	d0, #1	
			esd3	s0, #1	
			esd3	s1, #-1		
			
			ebk		#1111b			
// Add EJY For reduce noise==============================================			
			eld		rp1, #noisecount			
			eld		c,	@rp1+s0
			ecld	r0, c			
// ======================================================================
			eld		rp1, #0x7ffe
			eld		rp0, #LowpassBuf_me    ;delay buffer
			eld		rp3, #Coeff_lpf_me     ;coefficient
			
			esd0	s0, #1
			esd0	s1, #-1
			esd0	d0, #1
			esd0	d1, #-1
			esd3	s0, #1
			esd3	s1, #-2
			esd1	s0, #0
			
			ld		r6, #110
loop:			
			ebk		#1111b			
			eld		a, @rp1+s0   ;input
			esra8	a
// Add EJY For reduce noise==============================================
			ecld	r4,	a
			add		r4, r7				;r7 = difference
			cmp		ge, r4, r8
			brt		valid_value
			
			cmp		ge, r12, r4
			brt		valid_value
			
			add		r0, #1
			bra		valid_checkend
			
valid_value:
			ld		r0, #0

valid_checkend:
			cmp		ge, r0, #20
			brf		noreset
			
			ld		r4, #0x80
			ld		r0, #21

noreset:							//Overflow check====================
			cmp		ge, r4, #0x100
			brf		checkunder
			
			ld		r4, #0xFF
			bra		startecho

checkunder:
			cmp		ge, r4, #0
			brt		startecho
			
			ld		r4, #0
startecho:
			ecld	a, r4			
// ======================================================================
			eadd	a, #0x80
			esla8	a
			esla8	a

			eld		b, a
			esra	b            ;half
			eld		x1, a        ;x(n)
			
			/* low pass filter */			
			eld		y0, @rp3+s0 
			emul	x1y0, x0, @rp0+s0, y0, @rp3+s0 		
			emld	ma0, x0y0, x0, @rp0+s1, y0, @rp3+s1			
			emad	ma0, x0y0
			esub	ma0, p		
			eld		@rp0+d0, x1     //x(n-1)
			eld		@rp0+d1, ma0    //y(n-1)
			
			ebk		#0000b
			eld		x0, @rp2+s0   ;y(n-m)
			emul	x0y1          ;g*y(n-m)
			eld		x0, ma0
			emld	ma1, x0y1     ;g*x(n)
			esub	ma1, p
			eld		p, @rp0+s0    ;x(n-m)
			eadd	ma1, p        ;y(n)
			 			
			eld		@rp0+d0, ma0		
			eld		@rp2+d0, ma1
	
			eld		x0, b		
			eld		x1, ma1
			eld		y0, @rp3+s0
			emul	x0y0, y0, @rp3+s1
			emld	ma0, x1y0
			eadd	ma0, p

			esla	ma0
			cmp		eq, r1, r5
			brfd	%f1
			add		r1, #1
			eld		rp0, #XDelayBuf_me		
			eld		rp2, #YDelayBuf_me
			ld		r1, #0
%1:						
		;	esra	ma0						//Change EJY
			dt		r6
			brfd	loop
			eld		@rp1+d0, ma0
			
// Add EJY For reduce noise==============================================			
			eld		rp1, #noisecount
			ecld	c,	r0
			efz8	c
			eld		@rp1+d0, c
// ======================================================================			
			
			eld		sd0	,#0x1010
			eld		sd1	,sd0
			eld		sd2	,sd0
			eld		sd3	,sd0
			bra		loop_end

No_Echo:
// Add EJY For reduce noise==============================================			
			eld		rp1, #noisecount			
			eld		c,	@rp1+s0
			ecld	r0, c			
// ======================================================================

			eld		rp1, #0x7ffe
			eld		rp3, #mi_output

			ld		r6, #110-1
loopNo:
			eld		a, @rp1+s0		// MIC1
			esra8	a
// Add EJY===============================================================
			ecld	r4,	a
			add		r4, r7				;r7 = difference
			cmp		ge, r4, r8
			brt		valid_valueNo
			
			cmp		ge, r12, r4
			brt		valid_valueNo
			
			add		r0, #1
			bra		valid_checkendNo

valid_valueNo:
			ld		r0, #0

valid_checkendNo:
			cmp		ge, r0, #20
			brf		noresetNo
			
			ld		r4, #0x80

noresetNo:
			ecld	a, r4			
// ======================================================================
			eadd	a, #0x80
			esla8	a
			esla8	a
			bnzd	r6, loopNo
			eld		@rp3+d1, a
			
// Add EJY For reduce noise==============================================			
			eld		rp1, #noisecount
			ecld	c,	r0
			efz8	c
			eld		@rp1+d0, c
// ======================================================================

loop_end:
			ldw		@[a9], r1    ;save

			ldw		r1, @[a13+rSBL0OFF+0]
			ldw		r0, @[a13+rSBL0OFF+2]
			
			ldw		r5, @[a10+iPOST_MIC_IN_BUF_START_PTR+2]
			cmp		eq,	r0,	r5
			brt		buffer_start_point
			
			sub		r0,	#1
			ldw		@[a13+rSBL0OFF+2], r0
			
			ld		r5, #SBF0_FILL
			ldw		@[a13 + rSBFCON], r5
			
			ld		r5, r0
			and		r5,	#0x3
			cmp		eq, r5, #0
			brt		buffer_start_point
			
			eld		rp1, #0x7ffe
			eld		a, @rp1+s0		// MIC1
//======================================================================For Simulator			
/*			ldw		r2,	@[a10+iPOST_MIC_IN_BUF_END_PTR+2]
			cmp		eq,	r0	,r2
			brf		No_bufferend
			
			ldw		r0, @[a10+iPOST_MIC_IN_BUF_START_PTR+2]
			ldw		@[a13+rSBL0OFF+2], r0
;			ld		r0, #SBF0_FILL
;			ldw		@[a13 + rSBFCON], r0
			
			
No_bufferend:		
*/	
//===================================================================================
buffer_start_point:
			ldw		@[a10+iPOST_MIC_IN_BUF_RD_PTR+0], r1
			ldw		@[a10+iPOST_MIC_IN_BUF_RD_PTR+2], r0

;			pop		r1
;			ldw		@[a13+rCONFIG0], r1

// Add EJY===============================================================
			pop		r7, r4
			pop		r6, r5
			pop		r3, r2
			pop		r1, r0
			pop		a9, a8
			pop		a14, a12
// ======================================================================

			ret

.ifndef KARAOKE_MIC_ECHO_SUPPORTED

.extern |ME_MEM$$me_coeff$$LOAD|
.extern |ME_MEM$$me_coeff$$SIZE|
.extern |ME_MEM$$me_coeff$$START|

load_me_coeff	section code
	load_me_coeff

_load_me_coeff::
				push		R4, R6
				push		A11, A12
				push		A13

				ld			R6, #|ME_MEM$$me_coeff$$SIZE|
				sub			R6, #1
				ld			A11, #|ME_MEM$$me_coeff$$LOAD|
				ld			A12, #0x220000+(StartAddress_Ymem_Mac-0x8000)*2
				ld			A13, #0x220000+(StartAddress_Ymem_Mac-0x8000)*2 + 0x10000

				ldc			R4, @A11
%1
				push		R4
				srb			R4
				ldb			@[A13+1], R4
				pop			R4
				and			R4, #0x00ff
				ldb			@[A12+0], R4
				add			A11, #2
				add			A13, #2

				ldc			R4, @A11
				push		R4
				srb			R4
				ldb			@[A12+1], R4
				pop			R4
				and			R4, #0x00ff
				ldb			@[A13+1], R4
				add			A11, #2
				add			A12, #2
				add			A13, #2

				ldc			R4, @A11
				ldw			@[A12+0], R4
				add			A11, #2
				add			A12, #2

				sub			R6, #1
				bnzd		R6, %b1
				ldc			R4, @A11

				pop			A13
				pop			A12, A11
				pop			R6, R4
				ret

_clr_me_buf::

			push	r6

			esd1	d0, #1
			eld		a, #0

			ld		r6, #1600-1
			eld		rp1, #XDelayBuf_me
			bnzd	r6, $
			eld		@rp1+d0, a

			ld		r6, #1600-1
			eld		rp1, #YDelayBuf_me
			bnzd	r6, $
			eld		@rp1+d0, a

			ld		r6, #1-1
			eld		rp1, #DelayCount
			bnzd	r6, $
			eld		@rp1+d0, a

			pop		r6
			ret

.endif /* ifndef KARAOKE_MIC_ECHO_SUPPORTED */

.endif /* if KARAOKE_MIC_ECHO_SUPPORTED == 1 */

.end

⌨️ 快捷键说明

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