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

📄 upsample.s

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

.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
		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
		dt		r6	
		brfd	Nomix_main
		add		r7, r3

upsampleEnd:
		ecld	b	,r7
		efz8	b
		eld		rp1	,#Mix_readOffset
		eld		@rp1+d0	,b

		ld		a13	,#SFR_BASE
		ldw		r0	,@[a13+rSBL0OFF+0]
		ldw		r2	,@[a13+rSBL0OFF+2]
		ecld	ah	,r0
		ecld	a	,r2
		eld		Up_ReadOffset, a


Up_Mix_end:
		er		psh1
		er		opm

		pop		a14	,a13
		pop		r7	,r6
		pop		r5	,r4
		pop		r3	,r2
		pop		r0	,r1

		ret


//======================================================================
//9.45KHz(110 sample) => 32KHz(320 sample)
//189 sample => 567 sample
//(8*3+7)*18 + 9 = 567
//(9*3+8)*18 + 10 = 640
//Input:rp0
//Output: output_L2 and output_R2
//======================================================================
_resamp_32::
		push	r6	,r7
		
		eld		sd0	,#0x1010
		eld		rp1	,#output
		
		ld		r6	,#(110-1)
upsample_F32:	
		eld		a		,@rp0+s1		;L side
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		bnzd	r6		,upsample_F32
		eld		@rp1+d1	,a
//L side===============================		
		eld		rp1		,#output
		eld		rp2		,#output2
		
		ld		r6		,#10
loop_32:

		ld		r7		,#(16-1)
loop_32_01:		
		eld		a		,@rp1+s1
		eld		@rp2+d1	,a
		eld		a		,@rp1+s1
		bnzd	r7		,loop_32_01		;9*3
		eld		@rp2+d1	,a

		erpn	rp1		,#1

		dt		r6
		brf		loop_32				;(9*3+8)*18

		pop		r7, r6
		ret



//======================================================================
//9.45KHz(189 sample) => 44.1KHz(882 sample)
//189*4 = 756		882-756 = 126	756/126=6
//6*126 = 756
//7*126 = 882
//Input:rp0
//Output: output_L2 and output_R2
//======================================================================
_resamp_441::
		push	r6	,r7

		eld		sd0	,#0x1010		
		eld		rp1	,#output
		
		ld		r6	,#(110-1)
upsample_F441:	
		eld		a		,@rp0+s1
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		bnzd	r6		,upsample_F441
		eld		@rp1+d1	,a

//L side===============================		
		eld		rp1		,#output
		eld		rp2		,#output2
		
		ld		r6		,#(110-1)	;220/2
loop_441:
		eld		a		,@rp1+s1
		eld		@rp2+d1	,a
		eld		a		,@rp1+s1
		bnzd	r6		,loop_441
		eld		@rp2+d1	,a
		
		eld		@rp2+d1	,a
		
		ld		r6		,#(110-1)	;220/2
loop_4412:
		eld		a		,@rp1+s1
		eld		@rp2+d1	,a
		eld		a		,@rp1+s1
		bnzd	r6		,loop_4412
		eld		@rp2+d1	,a
		
		pop		r7, r6
		
		ret


//======================================================================
//9.45KHz(189 sample) => 48KHz(960 sample)
//189*5 = 945		960-945 = 15	945/15=63
//63*15 = 945
//64*15 = 960
//Input:rp0
//Output: output_L2 and output_R2
//======================================================================
_resamp_48::
		push	r6	,r7
		
		eld		sd0	,#0x1010
		eld		rp1	,#output
		
		ld		r6	,#(110-1)
upsample_F48:	
		eld		a		,@rp0+s1
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		bnzd	r6		,upsample_F48
		eld		@rp1+d1	,a


//L side===============================		
		eld		rp1		,#output
		eld		rp2		,#output2
		
		ld		r6		,#40
		
loop_48:
		ld		r7		,#(5-1)	;10/2

subloop_48:
		eld		a		,@rp1+s1
		eld		@rp2+d1	,a
		eld		a		,@rp1+s1
		bnzd	r7		,subloop_48		;62
		eld		@rp2+d1	,a

		eld		a		,@rp1+s1
		eld		@rp2+d1	,a
		eld		@rp2+d1	,a				;64
		
		dt		r6
		brf		loop_48					;64*15

		pop		r7, r6
		ret


//======================================================LPF
//r6:1 frame size. 32KHz:640 44.1KHz:882 48KHz:960
//rp1:Input
//Rp2:Output
//
//==========================================================
_LFE_pass::
		push	r6, r7
		
		eld		sd0, #0x20f0
		eld		sd3, #0x20f1
		
		esec0	#2
		esec1	#3
		
lfe_main:
		ld		r7, #9
		eld		rp0, #(x+1)
		eld		rp3, #(y+1)
		
coef_re:
		eld		x0, @rp0+s1
		eld		y0, @rp3+s1
		eld		@rp0+d1, x0
		bnzd	r7, coef_re
		eld		@rp3+d1, y0

		eld		a, @rp1+s1			;lfe_temp = (float) *lfe_str2++
		esra	a					;lfe_temp/2			;chnage EJY 20050621
		erpn	rp0		,#-1
		eld		@rp0+d0, a			;rp0 = x[10]
		
		ld		r7, #9
		eld		rp0, #(x+10)
		
		eld		a,	coeb_add
		eld		rp3, a				;#coe_b
		ecr		ma0					;ma0 = y[10]
		
		eld		x1, @rp0+s1, y1, @rp3+s0
		emul	x1y1, x1, @rp0+s1, y1, @rp3+s0
filter_bx:
		bnzd	r7, $
		emad	ma0, x1y1, x1, @rp0+s1, y1, @rp3+s0
		
		eadd	ma0, p
		
		ld		r7, #8
		eld		rp0, #(y+9)
		
		eld		a,	coea_add
		eld		rp3, a				;#coe_a

		eld		x1, @rp0+s1, y1, @rp3+s0
		emul	x1y1, x1, @rp0+s1, y1, @rp3+s0
filter_ay:
		bnzd	r7, $
		emsb	ma0, x1y1, x1, @rp0+s1, y1, @rp3+s0
		
		esub	ma0, p						;Q19
		
		esla	ma0
		esla	ma0
		esla	ma0
		esla	ma0
		esla	ma0				;output/2	For Mixer
;		eld		@rp2+d1, ma0h
		esla	ma0
		eld		rp3, #(y+10)
		eld		@rp3+d0, ma0h
		esla	ma0				;chnage EJY 20050621
		eld		@rp2+d1, ma0h
		
		dt		r6
		brf		lfe_main
		
		pop 	r7, r6
		
		ret
		


init_upsampler:
.ifndef KARAOKE_INTEGRATED
		ld		r1	,#1
		ldw		@[a10+UP_CodecStartFlag]	,r1
.endif		
		ld		r6	,#6181-1	;2291 = X Memory size(9164)/4
		eld		a	,#0
		eld		rp1	,#XDelayBuf_me
		
;		ld		r6	,#200-1	;2291 = X Memory size(9164)/4

upmem_clear:
;		eld		@rp1+d1	,a
;		eld		@rp1+d1	,a
;		eld		@rp1+d1	,a
		bnzd	r6		,upmem_clear
		eld		@rp1+d1	,a
/*
		ld		r6	,#1800-1	;2291 = X Memory size(9164)/4
upmem_clear1:
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		bnzd	r6		,upmem_clear1
		eld		@rp1+d1	,a

		ld		r6	,#291-1	;2291 = X Memory size(9164)/4
upmem_clear2:
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		eld		@rp1+d1	,a
		bnzd	r6		,upmem_clear2
		eld		@rp1+d1	,a		
*/


//.ifndef KARAOKE_INTEGRATED		
		jsr		_load_table
		jsr		_mac_init
//.endif

		ldw		r1, @[a10+iPOST_MIC_IN_BUF_START_PTR+0]
		ldw		r0, @[a10+iPOST_MIC_IN_BUF_START_PTR+2]
		ecld	ah, r1
		ecld	a, r0
		eld		Up_ReadOffset, a
		
		eld		a, #0
		eld		b, a
	
		ldw		r0	,@[a10+iPOST_SAMPLE_RATE+2]
		
		cmp		eq,	r0, #0x1F40		;8000Hz
		brt		table_8
		
		cmp		eq,	r0, #0x2B11		;11052Hz
		brt		table_441
		
		cmp		eq,	r0, #12000		;12000Hz
		brt		table_48
		
		cmp		eq,	r0, #0x3E80		;16000Hz
		brt		table_32
		
		cmp		eq,	r0, #0x5622		;22050Hz
		brt		table_441
		
		cmp		eq,	r0, #0x5DC0		;24000Hz		
		brt		table_48
		
		cmp		eq	,r0	,#0x7D00	;32000Hz
		brt		table_32
		
		cmp		eq	,r0	,#0xAC44	;44100Hz
		brt		table_441
		
		cmp		eq	,r0	,#0xBB80	;48000Hz
		brt		table_48

table_8:
		eld		rp2		,#coeb_add
		eld		a		,#coe_b8
		efz8	a
		eld		@rp2+d1	,a
		eld		a		,#coe_a8
		efz8	a
		eld		@rp2+d1	,a
		
		jmp		Up_Mix_end
		
table_32:
		eld		rp2		,#coeb_add
		eld		a		,#coe_b32
		efz8	a
		eld		@rp2+d1	,a
		eld		a		,#coe_a32
		efz8	a
		eld		@rp2+d1	,a
		
		jmp		Up_Mix_end

table_441:		
		eld		rp2		,#coeb_add
		eld		a		,#coe_b441
		efz8	a
		eld		@rp2+d1	,a
		eld		a		,#coe_a441
		efz8	a
		eld		@rp2+d1	,a
		
		jmp		Up_Mix_end

table_48:		
		eld		rp2		,#coeb_add
		eld		a		,#coe_b48
		efz8	a
		eld		@rp2+d1	,a
		eld		a		,#coe_a48
		efz8	a
		eld		@rp2+d1	,a
		
		jmp		Up_Mix_end



.if	1				//ndef KARAOKE_MIXER_SUPPORTED

_mac_init::
			push	r0, r1
			push	a8, a9
			
			eld		a, #0
			eld		msr0, a
			eld		msr1, a
			eld		msr2, a
				
//SB init
			ld		a8, #ADM_BASE			;CONFIG0
			ldw		r0, @[a8+0]
			and		r0, #0xf0
			ld		r1	,#0xE600
			or		r0, r1
			ldw		@[a8], r0
			
			ld		r0, #0
			eld		a, #0
			eld		b, a

			//SB0 Init
			ldw		@[a8+rSB0OFF_H], r0		;init SB0 offset
			ldw		@[a8+rSB0OFF_L], r0
			
			ldw		@[a8+rSB0BEGIN_H], r0	;init SB0BEGIN_H
			ldw		@[a8+rSB0BEGIN_L], r0	;init SB0BEGIN_L
			
			ld		r1, #0x2000
			ldw		@[a8+rSB0END_H], r0		;init SB0BEGIN_H
			ldw		@[a8+rSB0END_L], r1		;init SB0BEGIN_L
			
			//SB1 Init
			ldw		@[a8+rSB1OFF_H], r0		;init SB1 offset
			ldw		@[a8+rSB1OFF_L], r0
			
			ldw		@[a8+rSB1BEGIN_H], r0	;init SB1BEGIN_H
			ldw		@[a8+rSB1BEGIN_L], r0	;init SB1BEGIN_L
			
			ld		r1, #0x2400
			ldw		@[a8+rSB1END_H], r0		;init SB1BEGIN_H
			ldw		@[a8+rSB1END_L], r1		;init SB1BEGIN_L
			
			pop		a9, a8
			pop		r1, r0
			
			ret


.extern |MEMORY$$y_memory_def$$LOAD|
.extern |MEMORY$$y_memory_def$$SIZE|
.extern |MEMORY$$y_memory_def$$START|

.extern	|KARAOKE_MEM$$sec_KaraokeTable$$LOAD|
.extern	|KARAOKE_MEM$$sec_KaraokeTable$$SIZE|
.extern	|KARAOKE_MEM$$sec_KaraokeTable$$START|

//load_table	section code
//	load_table

_load_table::
			push		R4, R6
			push		A11, A12
			push		A13
				
			ld			R6, #|KARAOKE_MEM$$sec_KaraokeTable$$SIZE|
			cmp			eq, R6, #0
			brt			$		; for debug
			sub			R6, #1
			ld			A11, #|KARAOKE_MEM$$sec_KaraokeTable$$LOAD|
			ld			A12, #0x220000+(TABLE_START_ADDRESS-0x8000)*2	
			ld			A13, #0x220000+(TABLE_START_ADDRESS-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
			
.endif /* ifndef KARAOKE_MIXER_SUPPORTED */

.endif /* if KARAOKE_MIXER_SUPPORTED == 1 */

.end

⌨️ 快捷键说明

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