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

📄 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
				
				eld			@rp3+d0, a			; Lo
	.if( _DECODER_TYPE != MPEG_1_AUDIO )
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C
				eld			@rp3+d0, b			; Ro
				eld			@rp3+d0, b			; R
				eld			@rp3+d0, d			; Rs
	.endif
				bnzd		r6, chmd_stereo_2ch
	.if( _DECODER_TYPE != MPEG_1_AUDIO )
				eld			@rp3+d0, d			; Lfe
	.else
				eld			@rp3+d0, b			; Ro
	.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			; Lo
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C
				eld			@rp3+d0, b			; Ro
				eld			@rp3+d0, b			; R
				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			ma0, @rp1+s0		; Lo
				eld			ma1, @rp1+s0		; Ro
				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, ma0		; Lo
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, x0			; Ls
				eld			@rp3+d0, c			; C				
				eld			@rp3+d0, ma1		; Ro
				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			ma0, @rp1+s0		; Lo
				eld			ma1, @rp1+s0		; Ro
				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, ma0		; Lo
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, x0			; Ls
				eld			@rp3+d0, c			; C				
				eld			@rp3+d0, ma1		; Ro
				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			ma0, @rp1+s0		; Lo
				eld			ma1, @rp1+s0		; Ro
				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, ma0		; Lo
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, x0			; Ls
				eld			@rp3+d0, c			; C				
				eld			@rp3+d0, x1			; Lc
				eld			@rp3+d0, ma1		; Ro
				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			ma0, @rp1+s0		; Lo
				eld			ma1, @rp1+s0		; Ro
				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, ma0		; Lo
				eld			@rp3+d0, a			; L
				eld			@rp3+d0, x0			; Ls
				eld			@rp3+d0, c			; C				
				eld			@rp3+d0, x1			; Lc
				eld			@rp3+d0, ma1		; Ro
				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
				
null_audio_output
				eld			@rp3+d0, d			; Lo
				eld			@rp3+d0, d			; L
				eld			@rp3+d0, d			; Ls
				eld			@rp3+d0, d			; C				
				eld			@rp3+d0, d			; Ro
				eld			@rp3+d0, d			; R
				eld			@rp3+d0, d			; Rs
				bnzd		r6, null_audio_output
				eld			@rp3+d0, d			; Lfe

end_audio_output
				ret				

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



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

 Function:		output_digital

 Description:	output bitstream mode by S/PDIF 
 				
 Arguments:		

********************************************************************/
output_digital::
				push		a14
				ld			r7, #0
				mRETURN		(_DECODE_OK)

.if( _SUPPORT_SPDIF == TRUE )
; mpg
				eld			a, rpd1.frame_size
				ecp			a, #0
				ebra		ec0, end_digital_out

				ld			a13, #_buffer_ptr
				ldw			a11, @[a13+_BS_MAIN]

				ldw			a12, @[a10+_StreamBufOffset]
				ld			r0, e12
				add			r0, #^SB0_BASE	//BS_SPDIF_BASE
				ld			e12, r0

				ecld		r6, a
				add			r7, r6
				dec			r6
%1				ldb			r1, @[a11]
				add			a11, #1
				ldb			@[a12], r1
				bnzd		r6, %b1
				add			a12, #1

; ext
				eld			a, rpd0.ext_stream_present
				ecp			a, #TRUE
				ebra		ec0, %f2

; 2004.10.13, Lee Kyungtae, support mpeg-2 spdif output in mpeg-1 decoder
				ldw			a11, @[a10+_pParameter]
				ldb			r0, @[a11+_EXT_Present]
				cmp			eq, r0, #TRUE
				brf			end_digital_out
				
				jsr			check_mpeg2_extension
				cmp			eq, r2, #_DECODE_OK
				brf			end_digital_out

%2				eld			a, rpd0.ext_length
				ecp			a, #0
				ebra		ec0, end_digital_out

				ldw			a11, @[a10+_ExtInputBufferOffset]
				ld			r0, e11
				add			r0, #^SB0_BASE
				ld			e11, r0

				ecld		r6, a
				add			r7, r6

cpy_ext			ldw			a14, @[a13+_EXT_BUF_LIMIT]
				dec			r6

%2				ldb			r0, @[a11]
				add			a11, #1
				cmp			eq, a11, a14
				brfd		%f3
				ldb			@[a12], r0
				ldw			a11, @[a13+_EXT_BUF_BASE]
%3				bnzd		r6, %b2
				add			a12, #1
				ld			r0, e11
				sub			r0, #^SB0_BASE
				ld			e11, r0
				ldw			@[a10+_ExtInputBufferOffset], a11
				mRETURN		(_DECODE_OK)
.endif
end_digital_out
				ldw			@[a10+_FrameSize], r7
				pop			a14
				ret


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

 Function:		check_mpeg2_extension

 Description:	Output extension bitstream for MPEG-1 decoder
 				
 Arguments:		

********************************************************************/
check_mpeg2_extension::
				push		a12
				eld			a, #0
				eld			b, #0
				eld			c, #0
				
				ldw			a11, @[a10+_ExtInputBufferOffset]
				ld			r0, e11
				add			r0, #^SB0_BASE
				ld			e11, r0
				ldw			a12, @[a13+_EXT_BUF_LIMIT]

; search mpg sync word
_1_byte_ext		ldb			r0, @[a11]
				add			a11, #1
				cmp			eq, a11, a12
				brf			_2_byte_ext
				ldw			a11, @[a13+_EXT_BUF_BASE]

_2_byte_ext		ldb			r1, @[a11]
				add			a11, #1
				cmp			eq, a11, a12
				brf			check_ext_sync
				ldw			a11, @[a13+_EXT_BUF_BASE]
check_ext_sync
				slb			r0
				or			r0, r1
				and			r0, #0x7ff0
				cmp			eq, r0, #EXT_SYNC_WORD<<4
				brf			search_ext_sync

_3_byte_ext		ldb			r2, @[a11]
				add			a11, #1
				cmp			eq, a11, a12
				brf			_4_byte_ext
				ldw			a11, @[a13+_EXT_BUF_BASE]

_4_byte_ext		ldb			r3, @[a11]
				add			a11, #1
				cmp			eq, a11, a12
				brf			get_ext_crc
				ldw			a11, @[a13+_EXT_BUF_BASE]

get_ext_crc		slb			r1
				or			r1, r2
				sl			r1
				sl			r1
				sl			r1
				sl			r1
				ld			r6, r3
				sr			r3
				sr			r3
				sr			r3
				sr			r3
				or			r1, r3
				ecld		c, r1
				
_5_byte_ext		ldb			r1, @[a11]
				add			a11, #1
				cmp			eq, a11, a12
				brf			get_ext_length
				ldw			a11, @[a13+_EXT_BUF_BASE]
get_ext_length
				ld			r2, #0
				slb			r6
				or			r6, r1
				sr			r6
				incc		r2
				and			r6, #0x7ff
				ecld		a, r2
				ecld		b, r6
				mRETURN		(_DECODE_OK)
checked_mpeg2_ext
				eld			rpd0.ext_ID, a
				eld			rpd0.ext_length, b
				eld			rpd0.ext_crc_val, c
				ldw			a12, @[a13+_EXT_BUF_BASE]
				sub			a11, #EXT_HEADER_SIZE
				cmpu		ge, r11, r12
				brt			update_ext_offset
				add			r11, r12
update_ext_offset
				ld			r0, e11
				sub			r0, #^SB0_BASE	;0x24
				ld			e11, r0
				ldw			@[a10+_ExtInputBufferOffset], a11
				pop			a12
				ret

;========================================================================; 
;;; LKT: 2004.10.29 added
search_ext_sync:
				ldw			a9, @[a13+_EXT_BUF_BASE]
				cmp			eq, a11, a9
				brfd		_1st_byte_ext
				sub			a11, #1
				ldw			a11, @[a13+_EXT_BUF_LIMIT]
				sub			a11, #1
				
; search extension sync word		
_1st_byte_ext	ldb			r0, @[a11]
				add			a11, #1
				cmp			eq, a11, a12
				brf			_2nd_byte_ext
				ldw			a11, @[a13+_EXT_BUF_BASE]

_2nd_byte_ext	ldb			r1, @[a11]
				add			a11, #1
				cmp			eq, a11, a12
				brf			recheck_ext_sync
				ldw			a11, @[a13+_EXT_BUF_BASE]

recheck_ext_sync
				slb			r0
				or			r0, r1
				and			r0, #0x7ff0
				cmp			eq, r0, #EXT_SYNC_WORD<<4
				brf			search_ext_sync
				bra			_3_byte_ext
				
ext_sync_not_found
				brad		checked_mpeg2_ext
				mRETURN		(_EXT_SYNC_NOT_FOUND)
;========================================================================; 

.end

⌨️ 快捷键说明

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