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

📄 mpa_dematrix.s

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

;;;>> loop control <<<====================================================				
dp2_loop_sblimit
				ld			r7, #PARTS-1
				inc			r6
				cmp			eq, r6, #SBLIMIT				; sblimit loop
				jpf			a13			
				
				erpn		rp3, #MAX_CHANNEL*PARTS*SBLIMIT-SBLIMIT
				ld			r6, #0
				dt			r8								; granules loop
				jpf			a13				

_end_dematrixing_				
				er			op
				er			xsd
				pop			a14
				ret



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

 Function:		MC_AUG_dematricing

 Description:	Dematricing augmentation channels. 
 				Dematrix equations are used in DVD specification 
 				Part 3. Video Specifications Version 1.0, 
 				5.4.2.3.2 MPEG audio 7.1-channel augmentation

				dematrix_procedure: 0, 1, 2 

					c0	sqrt(2)/6 	(=0.2357022603955)
 					c1	3*sqrt(2) 	(=4.2426406871193)
				
				dematrix_procedure: 3
					
					c0	1.0/3.0 	(=0.3333333333333)
					c1	1.0/c0 		(=3.0000000000000)
					
 Arguments:		

				index registers:
				@bank0
						d1		d0		s1		s0
				---------------------------------------
				sd0:   -96		96	   -96		96
				sd1: 	 x		 x	     x		 0
				sd2: 	 x		 x	     x		 1
				sd3: 	 x		 x	    32	   -95


********************************************************************/
MC_AUG_dematricing::
				es			usm
				es			psh1
				es			op
				es			opm

				er			xsd
				eld			sd0, #0x0000
				eld			sd3, #0x0001
				es			xsd
				eld			sd0, #0xa6a6
				eld			sd3, #0x002a
				esd1		s0, #0
				esd2		s0, #1

				eld			a, rpd0.dematrix_procedure
				eld			b, rpd1.aug_mtx_proc
				ecld		r0, b

				eld			rp2, #aug_dematrix_factor
				ecp			a, #3
				ebra		ec1, 4
				erpn		rp2, #2
				eld			x1, @rp2+s0					; c0
				eld			y1, @rp2+s0					; c1

				eld			rp3, #fraction
				eld			rp2, #sbgr_table
				eld			mc0, #aug_tc_alloc
				ld			r8, #GRANULES				; gr count
				ld			r7, #PARTS-1				; part count
				ld			r6, #0						; sb count

check_aug_dematrix_procedure
				cmp			eq, r0, #0					; aug_mtx_proc == 0
				brt			aug_dematrix_procedure_0
				cmp			eq, r0, #1					; aug_mtx_proc == 1
				brt			aug_dematrix_procedure_1
				bra			_end_aug_dematrixing_



;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;::                                                                ::;
;::                    Aug dematrix procedure 0                    ::;
;::                                                                ::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
aug_dematrix_procedure_0

				ld			a13, pc
				nop
/*loop_start*/	eld			rp0, rp3
				eld			a, @rp2+s0					; the number of sbgr.
				eld			rp1, mc0
				erpn		rp1, a
				eld			a, @rp1						; aug_tc_alloc[sbgr]
				ecld		r5, a

				cmp			eq, r5, #0					; tc_alloc
				brt			dp0_aug_tc_alloc_0 
				cmp			eq, r5, #1
				brt			dp0_aug_tc_alloc_1
				cmp			eq, r5, #2
				brt			dp0_aug_tc_alloc_2 	
				cmp			eq, r5, #3
				brt			dp0_aug_tc_alloc_3 	
				cmp			eq, r5, #4
				brt			dp0_aug_tc_alloc_4 
				cmp			eq, r5, #5
				brt			dp0_aug_tc_alloc_5
				cmp			eq, r5, #6
				brt			dp0_aug_tc_alloc_6 	
				cmp			eq, r5, #7
				brt			dp0_aug_tc_alloc_7 	
.ifdef _DEBUG_
/** debug **/	bra			$
.endif
				
dp0_aug_tc_alloc_0 
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				eld			ma0, @rp0+s0
				erpn		rp0, #96*2
				eld			c, @rp0+s0
				esub		a, c, d, @rp0+s0 
				esub		b, d
				eadd		c, d
				eld			y0, c
				emul		x1y0
				erpn		rp0, #-(96*7)
				eld			ma1, p, @rp0+d0, a
				esla		ma1
				esla		ma1
				eld			p, ma1
				esub		ma0, p, @rp0+d0, b
				eld			@rp0+d0, ma0
				erps		rp3+s1
				bnzd		r7, dp0_aug_tc_alloc_0
				eld			rp0, rp3				
				brad		aug_dp0_loop_sblimit
				erps		rp3+s0

dp0_aug_tc_alloc_1
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				eld			ma0, @rp0+s0
				erpn		rp0, #96*2
				eld			c, @rp0+s0
				esub		a, c, d, @rp0+s0 
				esub		b, d
				eadd		d, a
				eld			y0, d
				emul		x1y0
				eld			ma1, c
				erpn		rp0, #-(96*7)
				eld			ma1, p, @rp0+d0, ma1
				esla		ma1
				esla		ma1
				eld			p, ma1
				esub		ma0, p, @rp0+d0, b
				eld			@rp0+d0, ma0
				erpn		rp0, #96*2
				eld			@rp0+d0, a
				erps		rp3+s1
				bnzd		r7, dp0_aug_tc_alloc_1
				eld			rp0, rp3				
				brad		aug_dp0_loop_sblimit
				erps		rp3+s0

dp0_aug_tc_alloc_2
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				eld			ma0, @rp0+s0
				erpn		rp0, #96*2
				eld			c, @rp0+s0
				esub		a, c, d, @rp0+s0 
				esub		b, d
				eadd		c, b
				eld			y0, c
				emul		x1y0
				erpn		rp0, #-(96*7)
				eld			ma1, p, @rp0+d0, a
				esla		ma1
				esla		ma1
				eld			p, ma1
				esub		ma0, p
				eld			@rp0+d0, d
				eld			@rp0+d0, ma0
				erpn		rp0, #96*3
				eld			@rp0+d0, b
				erps		rp3+s1
				bnzd		r7, dp0_aug_tc_alloc_2
				eld			rp0, rp3				
				brad		aug_dp0_loop_sblimit
				erps		rp3+s0

dp0_aug_tc_alloc_3
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				eld			ma0, @rp0+s0
				erpn		rp0, #96*2
				eld			c, @rp0+s0
				esub		a, c, d, @rp0+s1 
				esub		b, d
				eld			c, a
				eadd		c, b
				eld			y0, c
				emul		x1y0
				eld			ma1, p, x0, @rp0+s0
				esla		ma1
				esla		ma1
				eld			p, ma1
				eld			ma1, x0
				erpn		rp0, #-(96*6)
				esub		ma0, p, @rp0+d0, ma1
				eld			@rp0+d0, d
				eld			@rp0+d0, ma0
				erpn		rp0, #96*2
				eld			@rp0+d0, a
				eld			@rp0+d0, b
				erps		rp3+s1
				bnzd		r7, dp0_aug_tc_alloc_3
				eld			rp0, rp3				
				brad		aug_dp0_loop_sblimit
				erps		rp3+s0

dp0_aug_tc_alloc_4
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				eld			c, @rp0+s0
				erpn		rp0, #96*2
				eld			ma0, @rp0+s0
				esub		a, ma0, y0, @rp0+s0
				esub		c, y0
				eld			x0, c
				emul		x0y1
				erpn		rp0, #-(96*7)
				eld			ma1, p, @rp0+d0, a
				esla		ma1
				esla		ma1
				eld			d, ma1
				esub		d, ma0 
				esub		b, d
				eld			@rp0+d0, b
				eld			@rp0+d0, y0
				erpn		rp0, #96*3
				eld			@rp0+d0, d
				erps		rp3+s1
				bnzd		r7, dp0_aug_tc_alloc_4
				eld			rp0, rp3				
				brad		aug_dp0_loop_sblimit
				erps		rp3+s0

dp0_aug_tc_alloc_5
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				eld			c, @rp0+s0
				erpn		rp0, #96*2
				eld			ma0, @rp0+s0
				esub		a, ma0, y0, @rp0+s0 
				esub		c, y0
				eld			x0, c
				emul		x0y1
				erpn		rp0, #-(96*7)
				eld			ma1, p, @rp0+d0, ma0
				esla		ma1
				esla		ma1
				eld			d, ma1rn
				esub		d, a
				esub		b, d				
				eld			@rp0+d0, b
				eld			@rp0+d0, y0				
				erpn		rp0, #96*2
				eld			@rp0+d0, a
				eld			@rp0+d0, d				
				erps		rp3+s1
				bnzd		r7, dp0_aug_tc_alloc_5
				eld			rp0, rp3				
				brad		aug_dp0_loop_sblimit
				erps		rp3+s0

dp0_aug_tc_alloc_6
				eld			a, @rp0+s0
				eld			c, @rp0+s0
				eld			b, @rp0+s0
				erpn		rp0, #96*2
				eld			d, @rp0+s0
				esub		b, d, d, @rp0+s1 
				esub		c, d
				eld			x0, b
				emul		x0y1
				eld			ma1, p, y0, @rp0+s0
				esla		ma1
				esla		ma1
				eld			b, ma1
				esub		b, d
				esub		a, b
				erpn		rp0, #-(96*6)
				eld			@rp0+d0, a
				eld			@rp0+d0, c
				eld			@rp0+d0, y0
				erpn		rp0, #96*2
				eld			@rp0+d0, b
				erps		rp3+s1
				bnzd		r7, dp0_aug_tc_alloc_6
				eld			rp0, rp3				
				brad		aug_dp0_loop_sblimit
				erps		rp3+s0

dp0_aug_tc_alloc_7
				eld			a, @rp0+s0
				eld			c, @rp0+s0
				eld			b, @rp0+s0
				erpn		rp0, #96*2
				eld			d, @rp0+s0
				esub		b, d, d, @rp0+s1 
				esub		c, d
				eld			x0, b
				emul		x0y1
				eld			ma1, p, y0, @rp0+s0
				esla		ma1
				esla		ma1
				eld			b, ma1
				esub		b, c
				esub		a, b
				erpn		rp0, #-(96*6)
				eld			@rp0+d0, a
				eld			@rp0+d0, d
				eld			@rp0+d0, y0
				erpn		rp0, #96*2
				eld			@rp0+d0, b
				eld			@rp0+d0, c
				erps		rp3+s1
				bnzd		r7, dp0_aug_tc_alloc_7
				eld			rp0, rp3				
				brad		aug_dp0_loop_sblimit
				erps		rp3+s0

;;;>> loop control <<<====================================================				
aug_dp0_loop_sblimit
				ld			r7, #PARTS-1
				inc			r6
				cmp			eq, r6, #SBLIMIT				; sblimit loop
				jpf			a13			
				
				eld			rp2, #sbgr_table
				erpn		rp3, #MAX_CHANNEL*PARTS*SBLIMIT-SBLIMIT
				ld			r6, #0
				dt			r8								; granules loop
				jpf			a13				
				jmp			_end_aug_dematrixing_



;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;::                                                                ::;
;::                    Aug dematrix procedure 1                    ::;
;::                                                                ::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
aug_dematrix_procedure_1
				ld			a13, pc
				nop
/*loop_start*/	eld			rp0, rp3
				eld			a, @rp2+s0					; the number of sbgr.
				eld			rp1, mc0
				erpn		rp1, a
				eld			a, @rp1						; aug_tc_alloc[sbgr]
				ecld		r5, a

				cmp			eq, r5, #0					; tc_alloc
				brt			dp1_aug_tc_alloc_0 
				cmp			eq, r5, #1
				brt			dp1_aug_tc_alloc_1
				cmp			eq, r5, #2
				brt			dp1_aug_tc_alloc_2 	
				cmp			eq, r5, #3
				brt			dp1_aug_tc_alloc_3 	
.ifdef _DEBUG_
/** debug **/	bra			$
.endif
				
dp1_aug_tc_alloc_0 
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				erpn		rp0, #96*3
				eld			c, @rp0+s0
				esub		a, c, d, @rp0+s0 
				esub		b, d
				erpn		rp0, #-(96*7)
				eld			@rp0+d0, a
				eld			@rp0+d0, b
				erps		rp3+s1
				bnzd		r7, dp1_aug_tc_alloc_0
				eld			rp0, rp3				
				brad		aug_dp1_loop_sblimit
				erps		rp3+s0

dp1_aug_tc_alloc_1
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				erpn		rp0, #96*3
				eld			c, @rp0+s0
				esub		a, c, d, @rp0+s0 
				esub		b, d
				erpn		rp0, #-(96*7)
				eld			@rp0+d0, c
				eld			@rp0+d0, b
				erpn		rp0, #96*3
				eld			@rp0+d0, a
				erps		rp3+s1
				bnzd		r7, dp1_aug_tc_alloc_1
				eld			rp0, rp3				
				brad		aug_dp1_loop_sblimit
				erps		rp3+s0

dp1_aug_tc_alloc_2
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				erpn		rp0, #96*3
				eld			c, @rp0+s0
				esub		a, c, d, @rp0+s0 
				esub		b, d
				erpn		rp0, #-(96*7)
				eld			@rp0+d0, a
				eld			@rp0+d0, d
				erpn		rp0, #96*4
				eld			@rp0+d0, b
				erps		rp3+s1
				bnzd		r7, dp1_aug_tc_alloc_2
				eld			rp0, rp3				
				brad		aug_dp1_loop_sblimit
				erps		rp3+s0

dp1_aug_tc_alloc_3
				eld			a, @rp0+s0
				eld			b, @rp0+s0
				erpn		rp0, #96*3
				eld			c, @rp0+s0
				esub		a, c, d, @rp0+s0 
				esub		b, d
				erpn		rp0, #-(96*7)
				eld			@rp0+d0, c
				eld			@rp0+d0, d
				erpn		rp0, #96*3
				eld			@rp0+d0, a
				eld			@rp0+d0, b
				erps		rp3+s1
				bnzd		r7, dp1_aug_tc_alloc_3
				eld			rp0, rp3				
				brad		aug_dp1_loop_sblimit
				erps		rp3+s0



aug_dp1_loop_sblimit
				ld			r7, #PARTS-1
				inc			r6
				cmp			eq, r6, #SBLIMIT				; sblimit loop
				jpf			a13			
				
				eld			rp2, #sbgr_table
				erpn		rp3, #MAX_CHANNEL*PARTS*SBLIMIT-SBLIMIT
				ld			r6, #0
				dt			r8								; granules loop
				jpf			a13				
				jmp			_end_aug_dematrixing_



_end_aug_dematrixing_				
				er			op
				er			opm
				er			xsd
				er			usm
				er			psh1
				ret

.endif /* .if( _DECODER_TYPE != MPEG_1_AUDIO ) */

.end

⌨️ 快捷键说明

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