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

📄 mpa_output.s

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

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:::::::::::::::::::[  channel config: STEREO  ]:::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
chmd_stereo		eld			a, rpd1.stereo
				ecp			a, #MONO
				ebra		ec0, chmd_mono

				esd0		s1, #MAX_CHANNEL-1
				cmp			eq, r2, #TRUE
				brf			chmd_stereo_2ch
				eld			a, rpd0.lfe
				ecp			a, #TRUE
				ebra		ec0, chmd_stereo_lfe

chmd_stereo_2ch	eld			a, @rp0+s0			; L
				eld			b, @rp0+s1			; R
	.if( OUPUT_2CH == 1 )
				eld			@rp3+d0, a			; L
				bnzd		r6, chmd_stereo_2ch
				eld			@rp3+d0, b			; R
	.else
				eld			@rp3+d0, a			; L(Lo)
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C
				eld			@rp3+d0, b			; R(Ro)
				eld			@rp3+d0, d			; Rs
				bnzd		r6, chmd_stereo_2ch
				eld			@rp3+d0, d			; Lfe
	.endif
				bra			end_audio_output

chmd_stereo_lfe	eld			a, @rp0+s0			; L
				eld			b, @rp0+s1			; R
				eld			ph, @rp2+s0			; LFE
				
				eld			@rp3+d0, a			; L(Lo)
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C
				eld			@rp3+d0, b			; R(Ro)
				eld			@rp3+d0, d			; Rs
				bnzd		r6, chmd_stereo_lfe
				eld			@rp3+d0, ph			; Lfe
				bra			end_audio_output


;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:::::::::::::::::::[  channel config: 5.1 CH  ]:::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
chmd_5ch_with_lfe
	.if( _DECODER_TYPE != MPEG_1_AUDIO )
				eld			a, rpd1.stereo
				ecp			a, #STEREO
				ebra		ec0, %f1
				eld			b, rpd0.surround
				ecld		r5, b
				cmp			eq, r5, #SECOND_STEREO	; 1/0 + 2/0 mode
				brt			chmd_mono_2ndST

%1				eld			a, rpd1.mc_channel
				ecp			a, #FALSE
				ebra		ec0, chmd_stereo
		
				esd0		s1, #MAX_CHANNEL-4
				cmp			eq, r2, #TRUE
				brf			chmd_5ch_no_lfe
				eld			a, rpd0.lfe
				ecp			a, #TRUE
				ebra		ec1, chmd_5ch_no_lfe

chmd_5ch_lfe	eld			a, @rp0+s0			; L
				eld			b, @rp0+s0			; R
				eld			c, @rp0+s0			; C
				eld			x0, @rp0+s0			; Ls
				eld			y0, @rp0+s1			; Rs
				eld			ph, @rp2+s0			; LFE

				eld			@rp3+d0, a			; L
				eld			@rp3+d0, x0			; Ls
				eld			@rp3+d0, c			; C				
				eld			@rp3+d0, b			; R
				eld			@rp3+d0, y0			; Rs
				bnzd		r6, chmd_5ch_lfe
				eld			@rp3+d0, ph			; Lfe
				bra			end_audio_output

chmd_5ch_no_lfe	eld			a, @rp0+s0			; L
				eld			b, @rp0+s0			; R
				eld			c, @rp0+s0			; C
				eld			x0, @rp0+s0			; Ls
				eld			y0, @rp0+s1			; Rs

				eld			@rp3+d0, a			; L
				eld			@rp3+d0, x0			; Ls
				eld			@rp3+d0, c			; C				
				eld			@rp3+d0, b			; R
				eld			@rp3+d0, y0			; Rs
				bnzd		r6, chmd_5ch_no_lfe
				eld			@rp3+d0, d			; Lfe
	.endif
				bra			end_audio_output


;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:::::::::::::::::::[  channel config: 7.1 CH  ]:::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
chmd_7ch_with_lfe
	.if( _DECODER_TYPE != MPEG_1_AUDIO )
				cmp			eq, r2, #TRUE
				brf			chmd_7ch_no_lfe
				eld			a, rpd0.lfe
				ecp			a, #TRUE
				ebra		ec1, chmd_7ch_no_lfe

chmd_7ch_lfe	eld			a, @rp0+s0			; L
				eld			b, @rp0+s0			; R
				eld			c, @rp0+s0			; C
				eld			x0, @rp0+s0			; Ls
				eld			y0, @rp0+s0			; Rs
				eld			x1, @rp0+s0			; Lc
				eld			y1, @rp0+s0			; Rc
				eld			ph, @rp2+s0			; LFE

				eld			@rp3+d0, a			; L
				eld			@rp3+d0, x0			; Ls
				eld			@rp3+d0, c			; C				
				eld			@rp3+d0, x1			; Lc
				eld			@rp3+d0, b			; R
				eld			@rp3+d0, y0			; Rs
				eld			@rp3+d0, ph			; Lfe
				bnzd		r6, chmd_7ch_lfe
				eld			@rp3+d0, y1			; Rc
				bra			end_audio_output

chmd_7ch_no_lfe	eld			a, @rp0+s0			; L
				eld			b, @rp0+s0			; R
				eld			c, @rp0+s0			; C
				eld			x0, @rp0+s0			; Ls
				eld			y0, @rp0+s0			; Rs
				eld			x1, @rp0+s0			; Lc
				eld			y1, @rp0+s0			; Rc

				eld			@rp3+d0, a			; L
				eld			@rp3+d0, x0			; Ls
				eld			@rp3+d0, c			; C				
				eld			@rp3+d0, x1			; Lc
				eld			@rp3+d0, b			; R
				eld			@rp3+d0, y0			; Rs
				eld			@rp3+d0, d			; Lfe
				bnzd		r6, chmd_7ch_no_lfe
				eld			@rp3+d0, y1			; Rc
	.endif
				bra			end_audio_output


;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;::::::::::::::::::[  channel config: downmix  ]:::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
chmd_downmix_51ch:
	.if( _DECODER_TYPE != MPEG_1_AUDIO )
				eld			ma0, @rp1+s0		; Lo
				eld			ma1, @rp1+s0		; Ro

				eld			@rp3+d0, ma0		; L(Lo)
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C				
				eld			@rp3+d0, ma1		; R(Ro)
				eld			@rp3+d0, d			; Rs
				bnzd		r6, chmd_downmix_51ch
				eld			@rp3+d0, d			; Lfe
				bra			end_audio_output

chmd_downmix_71ch:
				eld			ma0, @rp1+s0		; Lo
				eld			ma1, @rp1+s0		; Ro

				eld			@rp3+d0, ma0		; L(Lo)
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C				
				eld			@rp3+d0, d			; Lc
				eld			@rp3+d0, ma1		; R(Ro)
				eld			@rp3+d0, d			; Rs
				eld			@rp3+d0, d			; Lfe
				bnzd		r6, chmd_downmix_71ch
				eld			@rp3+d0, d			; Rc
	.endif
				bra			end_audio_output


null_audio_output:
				eld			@rp3+d0, d			; L(Lo)
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C				
				eld			@rp3+d0, d			; R(Ro)
				eld			@rp3+d0, d			; Rs
				bnzd		r6, null_audio_output
				eld			@rp3+d0, d			; Lfe

end_audio_output:
				ret

.endif /* .if( OUPUT_6CH == TRUE ) */


.if( OUPUT_8CH == TRUE )

/********************************************************************

 Function:		output_pcm_sample

 Description:	output channel mode:
 				
					typedef enum {
						AUDIO_NULL,
						MPEG1_MONO,
						MPEG1_STEREO,
						MPEG2_5CH,
						MPEG2_7CH,
						CHANNEL_TEST	// output test tone
					} MPA_Output_t;

				pcm_ch_buffer sample array:
				<---------  fixed length  --------->
				+----+----+----+----+----+----+----+-----------+
				|  L |  R |  C | Ls | Rs | Lc | Rc | ... next  |
				+----+----+----+----+----+----+----+-----------+

				pcm_dm_buffer sample array:				
				+----+----+----+----+-------------+
				| Lo | Ro | Lo | Ro |   ... next  |
				+----+----+----+----+-------------+

				pcm_lfe_buffer sample array:				
				+----+----+----+----+-------------+
				| s1 | s2 | s3 | s4 |   ... next  |
				+----+----+----+----+-------------+


				audio buffer map:
				
				10-channel mode (MPEG2_7CH)

				<------------  sample per each channel ------------>
				+----+----+----+----+----+----+----+-----+----+----+
				| Lo |  L | Ls |  C | Lc | Ro |  R | Rs | LFE | Rc | 
				+----+----+----+----+----+----+----+-----+----+----+
				... 1152 th sample of channel 


				8-channel mode (MPEG2_5CH) without augmentation channel

				<-------  sample per each channel ------->
				+----+----+----+----+----+----+----+-----+
				| Lo |  L | Ls |  C | Ro |  R | Rs | LFE |
				+----+----+----+----+----+----+----+-----+
				... 1152 th sample of channel 

				Configuration of SBF1 write mode:
				 - 16-bit mode 
				 	(1) MAC[23:8] => EMEM[15:0]
						mOVERFLOW_CHECK	An :  "eadd An, p"
								 	
				    (2) MAC[15:0] => EMEM[15:0]
				    	mOVERFLOW_CHECK	An :  "esra8 An" and "eincc An"

				 - 24-bit mode => MAC[23:0] => EMEM[31:0], zero extension

 Arguments:		
				index registers:
				@bank0
						d1		d0		s1		s0
				---------------------------------------
				sd0: 	 1 		 x	     -       1
				sd1: 	 x 		 x	     x       1
				sd2: 	 x 		 x	     x       1
				sd3:	 x		 0		 x	     x		SBF1

********************************************************************/
output_pcm_sample::
				er			xsd
				eld			sd0, #0x1001
				eld			sd1, #0x0001
				eld			sd2, #0x0001
				eld			sd3, #0x0000
				
				eld			rp0, #pcm_ch_buffer
	.if( _DECODER_TYPE != MPEG_1_AUDIO )
				eld			rp1, #pcm_dm_buffer
				eld			rp2, #pcm_lfe_buffer
	.endif
				eld			rp3, #SBF1_PTR

				ldw			a11, @[a10+_pParameter]
				ldb			r0, @[a11+_CH_Mode]
				ldb			r1, @[a11+_CH_Content]
				ldb			r2, @[a11+_LFE_Enable]
				ldb			r3, @[a10+_OutPCMSize]				
				ldw			a9, @[a10+_OutputBufferOffset]

				eld			d, #0				; zero sample
				ld			r6, #SAMPLES_PER_FRAME-1
				eld			a, rpd0.layer
				ecp			a, #LAYER_I
				ebra		ec1, %f2
				eld			a, rpd1.mpeg_version
				ecp			a, #_MPEG_1_AUDIO
				ebra		ec1, %f2
				ld			r6, #SAMPLES_PER_FRAME/3-1
				eld			a, rpd1.frameNo
				eld			b, #3
				mDIVIDE		a, b
				ecp			b, #0
				ebra		ec0, %f2
				ecld		r7, b
				dec			r7
				ld			r4, #0x1800
				cmp			eq, r3, #PCM_SAMPLE_24BITS
				brf			%f1
				sl			r4
%1				bnzd		r7, $
				add			a9, r4


; configuration of SBF1 write mode
%2				ld			a8, #SFR_BASE
				ldw			r4, @[a8+rCONFIG0]
				and			r4, #0xf0ff
				cmp			eq, r3, #PCM_SAMPLE_24BITS
				brt			mode_24bit
mode_16bit		or			r4, #0x0600
mode_24bit		ldw			@[a8+rCONFIG0], r4
				ldw			@[a8+rSBL1OFF], a9

; check channel mode
				cmp			eq, r0, #_MPEG1_MONO
				brt			chmd_mono
				cmp			eq, r0, #_MPEG1_STEREO
				brt			chmd_stereo
; if chmd set to _MPEG2_5CH or _MPEG2_7CH
				eld			a, rpd1.mc_channel
				ecp			a, #0
				ebra		ec1, chmd_multich
				eld			b, rpd1.stereo
				ecp			b, #STEREO
				ebra		ec0, chmd_stereo
				ecp			b, #MONO
				ebra		ec0, chmd_mono
/** debug **/	bra			chmd_stereo

chmd_multich	cmp			eq, r0, #_MPEG2_5CH
				brt			chmd_5ch_with_lfe
				cmp			eq, r0, #_MPEG2_7CH
				brt			chmd_7ch_with_lfe
				cmp			eq, r0, #_AUDIO_NULL
				brt			null_audio_output
				brf			null_audio_output


;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;::::::::::::::::::::[  channel config: MONO  ]::::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
chmd_mono		esd0		s1, #MAX_CHANNEL
				cmp			eq, r1, #0			; channel content -> left ch
				brt			chmd_L_mono
				cmp			eq, r1, #1			; channel content -> right ch
				brf			chmd_L_mono

				erpn		rp0, #1				
chmd_R_mono		eld			a, @rp0+s1			; R

				eld			@rp3+d0, a			; Lo
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C
				eld			@rp3+d0, a			; Ro
				eld			@rp3+d0, a			; R
				eld			@rp3+d0, d			; Rs
				bnzd		r6, chmd_R_mono
				eld			@rp3+d0, d			; Lfe
				bra			end_audio_output

chmd_L_mono		eld			a, @rp0+s1			; L

				eld			@rp3+d0, a			; Lo
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C
				eld			@rp3+d0, a			; Ro
				eld			@rp3+d0, a			; R
				eld			@rp3+d0, d			; Rs
				bnzd		r6, chmd_L_mono
				eld			@rp3+d0, d			; Lfe
				bra			end_audio_output


chmd_mono_2ndST	esd0		s1, #MAX_CHANNEL-2
				
_2ndST			eld			a, @rp0+s0			; MONO
				eld			b, @rp0+s0			; L2
				eld			c, @rp0+s1			; R2

				eld			@rp3+d0, a			; Lo
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, b			; Ls
				eld			@rp3+d0, d			; C
				eld			@rp3+d0, a			; Ro
				eld			@rp3+d0, a			; R
				eld			@rp3+d0, c			; Rs
				bnzd		r6, _2ndST
				eld			@rp3+d0, d			; Lfe
				bra			end_audio_output
				

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;

⌨️ 快捷键说明

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