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

📄 upsample.s

📁 samsung 9908DVD源代码,
💻 S
📖 第 1 页 / 共 2 页
字号:
.include "Karaoke_def.h"



.if KARAOKE_MIXER_SUPPORTED == 1

.extern XDelayBuf_me
.extern	Up_ReadOffset
.extern	Up_writeOffset
.extern	Mix_readOffset
.extern	coeb_add
.extern	coea_add
.extern	coe_b8
.extern	coe_a8
.extern	coe_b32
.extern	coe_a32
.extern	coe_b441
.extern	coe_a441
.extern	coe_b48
.extern	coe_a48
.extern	mi_output

.extern	output
.extern	output2

.extern	upsamplefre
.extern	skip_samples

.extern	x
.extern	y
.extern coe_b
.extern coe_a
.extern	output3
.extern Mic_volume_value

.extern _MicEcho
//.extern	_load_table
//.extern	_mac_init


sec_ResampleCode	section code, AFTERADDR POST_CODE_BASE
	sec_ResampleCode

//======================================================
//r0:Sampling Rate
//r2:Valid data size
//r3:Frame Size
//======================================================
_upsample_main::
		push	r0	,r1
		push	r2	,r3
		push	r4	,r5
		push	r6	,r7
		push	a13	,a14

		eld		a, #0
		eld		msr0, a
		eld		msr1, a
		eld		msr2, a
		
		es		psh1
		es		opm
		er		op
		
		eld		sd1	,#0x1010
		eld		sd2	,sd1

		ldw		A11, @[A10+iPOST_PARAMETER_PTR]			; 4B
		ldw		r1	,@[a10+iPOST_START_FLAG]
		cmp		eq	,r1	,#0
		jpt		init_upsampler
		
//Upsampling Main Start=====================================
up_start:
		esec2	#1
		ld		a13	,#SFR_BASE
		ldw		r2	,@[a13+rCONFIG0]
		and		r2	,#0xf0
		or		r2, #(SBF0_R16lsb_z | SBF1_W16msb)
		or		r2, #0x8800							// SBL0/1 Ring mode
		ldw		@[a13+rCONFIG0]	,r2
		
		ldw		r0	,@[A10+iPOST_MIC_IN_BUF_START_PTR]
		ldw		r2	,@[A10+iPOST_MIC_IN_BUF_START_PTR+2]
		ldw		@[a13+rSBL0BEGIN+0] ,r0
		ldw		@[a13+rSBL0BEGIN+2] ,r2
		ldw		@[a13+rSBL1END+0] ,r0
		ldw		@[a13+rSBL1END+2] ,r2

		ldw		r0	,@[A10+iPOST_MIC_IN_BUF_END_PTR]
		ldw		r2	,@[A10+iPOST_MIC_IN_BUF_END_PTR+2]
		ldw		@[a13+rSBL0END+0] ,r0
		ldw		@[a13+rSBL0END+2] ,r2
		
		ld		r0	,#0
		ldw		@[a13+rSBL1BEGIN+0] ,r0
		ldw		@[a13+rSBL1BEGIN+2] ,r0

		ldw		r2	,@[a10+iPOST_OUT_BUF_OFFSET+2]
		ldw		@[a13+rSBL1OFF+0] ,r0
		ldw		@[a13+rSBL1OFF+2] ,r2
		
		ldw		r0, @[a10+iPOST_MIC_IN_BUF_RD_PTR+0]
		ldw		r2, @[a10+iPOST_MIC_IN_BUF_RD_PTR+2]
		ldw		@[a13+rSBL0OFF+0] ,r0
		ldw		@[a13+rSBL0OFF+2] ,r2	
			
		ld		r0, #SBF0_FILL
		ldw		@[a13 + rSBFCON], r0
		
		and		r2	,#0x2
		brt		aligned4
		
		eld		rp0	,#0x7FFE
		eld		b	,@rp0+s0

aligned4:		
		ldw		r4	,@[a10+iPOST_NUM_OF_SAMPLES]
		ldw		r0	,@[a10+iPOST_SAMPLE_RATE+2]
		
		cmp		eq,	r0, #0x1F40		;8000Hz
		brf		fre_11025
		
		eld		rp1, #upsamplefre
		eld		a,	 #0x7D00
		ecld	r0, a
		eld		@rp1+d1, a
		eld		a, #3
		eld		@rp1+d1, a
		
		add		r4	,r4
		brad	Valid_data
		add		r4	,r4
		
fre_11025:		
		cmp		eq,	r0, #0x2B11		;11052Hz
		brf		fre_12000
		
		eld		rp1, #upsamplefre
		eld		a,	 #0xAC44
		efz8	a
		ecld	r0, a
		eld		@rp1+d1, a
		eld		a, #3
		eld		@rp1+d1, a
		
		add		r4	,r4
		brad	Valid_data
		add		r4	,r4
		
fre_12000:		
		cmp		eq,	r0, #12000		;12000Hz
		brf		fre_16000
		
		eld		rp1, #upsamplefre
		eld		a,	 #0xBB80
		efz8	a
		ecld	r0, a
		eld		@rp1+d1, a
		eld		a, #3
		eld		@rp1+d1, a
		
		add		r4	,r4
		brad	Valid_data
		add		r4	,r4		
		
fre_16000:
		cmp		eq,	r0, #0x3E80		;16000Hz
		brf		fre_22050
		
		eld		rp1, #upsamplefre
		eld		a,	 #0x7D00
		ecld	r0, a
		eld		@rp1+d1, a
		eld		a, #1
		eld		@rp1+d1, a
		
		brad	Valid_data
		add		r4	,r4

fre_22050:
		cmp		eq,	r0, #0x5622		;22050Hz
		brf		fre_24000
		
		eld		rp1, #upsamplefre
		eld		a,	 #0xAC44
		efz8	a
		ecld	r0, a
		eld		@rp1+d1, a
		eld		a, #1
		eld		@rp1+d1, a
		
		brad	Valid_data
		add		r4	,r4

fre_24000:

		cmp		eq,	r0, #0x5DC0		;24000Hz
		brf		fre_32000
		
		eld		rp1, #upsamplefre
		eld		a,	 #0xBB80
		efz8	a
		ecld	r0, a
		eld		@rp1+d1, a
		eld		a, #1
		eld		@rp1+d1, a
		
		brad	Valid_data
		add		r4	,r4

fre_32000:		;32000, 44100, 48000
		
		eld		rp1, #upsamplefre
		ecld	a, r0
		efz8	a
		eld		@rp1+d1, a
		eld		a, #0
		eld		@rp1+d1, a


Valid_data:
		eld		rp0	,#UPInput_add		;resample input
		
		eld		b	,Up_writeOffset
		ecld	r2	,b
		eld		b	,Mix_readOffset		
		ecld	r3	,b
		
//		ldw		r0	,@[a10+iPOST_SAMPLE_RATE+2]
		
		cmp		ge	,r2	,r3
		brf		Brotate
		
		brad	Valid_check
		sub		r2	,r3					;Number of valid data
		
Brotate:
		cmp		eq	,r0	,#0x7D00		;32000
		brf		size_freq441
		
		ld		r6	,#OutputSize32
		bra		size_calcu
		
	size_freq441:
		cmp		eq	,r0	,#0xAC44		;32000
		brf		size_freq48
		
		ld		r6	,#OutputSize441
		bra		size_calcu
		
	size_freq48:
		ld		r6	,#OutputSize
		
	size_calcu:		
		sub		r6	,r3
		add		r2	,r6

Valid_check:
		ld		r3	,r4
		cmp		ge	,r2	,r3
		brf		Check_Rate
		
		cmp		eq	,r0	,#0x7D00		;32000
		brf		output_441
		
		ld		r4	,#OutputSize32
		bra		start_Mix
		
output_441:
		cmp		eq	,r0	,#0xAC44		;44100
		brf		output_48
		
		ld		r4	,#OutputSize441
		bra		start_Mix
		
output_48:
		ld		r4	,#OutputSize
		bra		start_Mix
		
Check_Rate:
.if KARAOKE_MIC_ECHO_SUPPORTED == 1
		jsr		_MicEcho
.endif
		eld		rp0	,#mi_output
		
		cmp		eq	,r0	,#0x7D00		;32000
		brf		Up_441Start
		
		jsr		_resamp_32
		
		ld		r6	,#320
		eld		rp1	,#output2
		eld		rp2	,#output3
		eld		a	,Up_writeOffset
		erpn	rp2	,a
		jsr		_LFE_pass

		add		r2	,#320
		eld		rp1	,#Up_writeOffset
		eld		a	,@rp1+s0
		eadd	a	,#320
				
		ecp		a	,#OutputSize32
		bra		ec2	,Cbuff32

		eld		a	,#0

Cbuff32:
		ld		r4	,#OutputSize32
		
		brad	Up_End
		eld		@rp1+d0	,a


Up_441Start:
		cmp		eq	,r0	,#0xAC44		;44100
		brf		Up_48Start

		jsr		_resamp_441

		ld		r6	,#441
		eld		rp1	,#output2
		eld		rp2	,#output3
		eld		a	,Up_writeOffset
		erpn	rp2	,a
		jsr		_LFE_pass

		add		r2	,#441
		eld		rp1	,#Up_writeOffset
		eld		a	,@rp1+s0
		eadd	a	,#441
		
		ecp		a	,#OutputSize441
		bra		ec2	,Cbuff441

		eld		a	,#0

Cbuff441:
		ld		r4	,#OutputSize441
		
		brad	Up_End
		eld		@rp1+d0	,a


Up_48Start:
;		cmp		eq	,r0	,#0xBB80		;48000
;		brf		UP_Error_End

		jsr		_resamp_48

		ld		r6	,#480
		eld		rp1	,#output2
		eld		rp2	,#output3
		eld		a	,Up_writeOffset
		erpn	rp2	,a
		jsr		_LFE_pass

		add		r2	,#480
		
		eld		rp1	,#Up_writeOffset
		eld		a	,@rp1+s0
		eadd	a	,#480
		
		ecp		a	,#OutputSize
		bra		ec2	,Cbuff48

		eld		a	,#0

Cbuff48:
		ld		r4	,#OutputSize
		eld		@rp1+d0	,a
		
Up_End:
		eld		rp0	,#UPInput_add		;resample input
	
		cmp		ge	,r2	,r3
		brf		Check_Rate


start_Mix:
		eld		sd0	,#0x1010
		eld		sd3	,#0x1010
		er		op
		
		ld		a13	,#SFR_BASE

		ldw		r0, @[a10+iPOST_OUT_BUF_OFFSET+0]
		ldw		r6, @[a10+iPOST_OUT_BUF_OFFSET+2]
		
		ldw		@[a13+rSBL1OFF+0],	r0
		ldw		@[a13+rSBL1OFF+2],	r6
		
		add		r0,		#0x28
		ld		e13,	r0
		ld		r13,	r6


//Mic volume Add=========================================================
			ldw		r0,	@[a11+Mic_Volume]
			eld		rp3, #Mic_volume_value
			ecld	c,	r0
			efz8	c
			erpn	rp3, c
			eld		y0, @rp3
// ======================================================================

		eld		rp1	,#skip_samples
		eld		c	,@rp1+s0							;skip_samples
		ecld	r3	,c
		add		r3	,#1

		eld		rp1	,#output3
		eld		rp3	,#0x7FFF
		eld		a	,Mix_readOffset
		erpn	rp1	,a
		ecld	r7	,a
		
		ldw		r6	,@[a10+iPOST_NUM_OF_SAMPLES]
;		sub		r6	,#1

		ldb		r0	,@[a11+Main_AudioOnOff]
		cmp		eq	,r0	,#0
		brf		NomainAudio	
		
Mixer_main:		
		cmp		eq	,r7	,r4
		brf		Mix_str
		
		eld		rp1	,#output3
		ld		r7	,#0

Mix_str:
		eld		x0	,@rp1+s1		;rp1 : mic output
		erpn	rp1, c
		emul	x0y0
		emld	ma0, x0y0
		
		;;;;; esla ma0:mic volume 2X....
		
		;esla	ma0
		;esla	ma0
		;esla	ma0					;mic out * volum * 8
		eld		ma1, ma0			;mic out * volum * 8
		
		ldw		r0, @[a13+0]
		ecld	a, r0
		esla8	a
		eld		ph, a
		
		eadd	ma0, p
		eld		a, ma0h
		eld		@rp3+d0	,a			;Left 

.if	OUTPUT_MODE == OUT_2CH
		ldw		r0, @[a13+2]
.endif

.if	OUTPUT_MODE == OUT_6CH
		ldw		r0,	@[a13+2]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;LS 
		
		ldw		r0,	@[a13+4]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;C

		ldw		r0, @[a13+6]
.endif

.if	OUTPUT_MODE == OUT_8CH
		ldw		r0,	@[a13+2]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;L 
		
		ldw		r0,	@[a13+4]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;LS

		ldw		r0, @[a13+6]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;C
		
		ldw		r0, @[a13+8]
.endif
		
		ecld	a, r0
		esla8	a
		eld		ph, a
		
		eadd	ma1, p
		eld		a, ma1h
;		eadd	a	,b
		eld		@rp3+d0	,a			;R
		
.if	OUTPUT_MODE == OUT_2CH
		add		a13, #4		
.endif		
		
.if	OUTPUT_MODE == OUT_6CH
		ldw		r0,	@[a13+8]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;RS 
		
		ldw		r0,	@[a13+10]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;W

		add		a13, #12
.endif

.if	OUTPUT_MODE == OUT_8CH
		ldw		r0,	@[a13+10]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;R 
		
		ldw		r0,	@[a13+12]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;RS

		ldw		r0, @[a13+14]
		ecld	a,	r0
		esla8	a
		eld		@rp3+d0	,a			;W
		
		add		a13, #16
.endif
;		bnzd	r6	,Mixer_main
		dt		r6	
		brfd	Mixer_main
		add		r7, r3

		bra		upsampleEnd

NomainAudio:
		ld		r0	,#0

Nomix_main:
		cmp		eq	,r7	,r4
		brf		Mix_strNo
		
		eld		rp1	,#output3
		ld		r7	,#0

Mix_strNo:


		eld		x0	,@rp1+s1		;rp1 : mic output
		erpn	rp1, c
		emul	x0y0
		emld	ma0, x0y0
		
		;;;;; esla ma0:mic volume 2X....
		
		;esla	ma0
		;esla	ma0
		;esla	ma0					;mic out * volum * 8
		eld		ma1, ma0			;mic out * volum * 8
		
;		ldw		r0, @[a13+0]
;		ecld	a, r0
;		esla8	a
;		eld		ph, a
;		eadd	ma0, p
		eld		a, ma0h
		eld		@rp3+d0	,a			;Left 

;.if	OUTPUT_MODE == OUT_2CH
;		ldw		r0, @[a13+2]
;.endif

⌨️ 快捷键说明

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