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

📄 mpa_common.s

📁 samsung 9908DVD源代码,
💻 S
📖 第 1 页 / 共 2 页
字号:
recheck_ext_sync
				slb			r0
				or			r0, r1
				and			r0, #0x7ff0
				cmp			eq, r0, #EXT_SYNC_WORD<<4
				brf			search_ext_sync
				bra			success_ext_found
				
ext_sync_not_found
				mRETURN		(_EXT_SYNC_NOT_FOUND)
				pop			a14
				ret
;========================================================================; 
.endif /* .if( _DECODER_TYPE != MPEG_1_AUDIO ) */


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

 Function:		MPG_parse_base_header

 Description:	get header information of base bit stream.

 Arguments:

********************************************************************/
samplerate:		dl		44100, 48000, 32000

bitrate_I:		dl		0, 32000, 64000, 96000, 128000, 160000, 192000, 224000
				dl		256000, 288000, 320000, 352000, 384000, 416000, 448000

bitrate_II:		dl		0, 32000, 48000, 56000, 64000, 80000, 96000, 112000
				dl		128000, 160000, 192000, 224000, 256000, 320000, 384000

MPG_parse_base_header::
				push		a14

				bsrd		getbits
				eld			a, #SYNC_WORD_LENGTH
				eld			rpd0.syncword, d
; 1. MPEG ID
				bsrd		getbits
				eld			a, #1
				eld			rpd0.version, d
; 2. layer
				bsrd		getbits
				eld			a, #2
				eld			c, #4
				esub		c, d
				eld			rpd0.layer, c
				ecld		r0, c
; 3. protection bit
				bsrd		getbits
				eld			a, #1
				eld			rpd0.protection_bit, d
; 4. bitrate index
				bsrd		getbits
				eld			a, #4
				eld			rpd0.bitrate_index, d
				ecld		r1, d
; 5. sampling frequency
				bsrd		getbits
				eld			a, #2
				eld			rpd0.sampling_frequency, d
				ecld		r2, d
; 6. padding bit
				bsrd		getbits
				eld			a, #1
				eld			rpd0.padding_bit, d

				ld			a11, #L2_bitrate_table
				cmp			eq, r0, #LAYER_I
				brf			%f1
				ld			a11, #L1_bitrate_table
%1				sl			r1
				add			a11, r1
				ldc			r4, @a11					; r4 := bitrate
				ld			a12, #samplerate_table
				sl			r2
				add			a12, r2
				ldc			r5, @a12					; r5 := samplerate

/* For ADM manager system */
				ld			a11, #bitrate_II
				cmp			eq, r0, #LAYER_I
				brf			%f2
				ld			a11, #bitrate_I
%2				sl			r1
				add			a11, r1
				ldc			r7, @a11
				add			a11, #2
				ldc			r6, @a11					; r5:r4 = _BitRate
				ld			e9, r7
				ld			r9, r6
				ldw			@[a10+_BitRate], a9

				ld			a12, #samplerate
				sl			r2
				add			a12, r2
				ldc			r7, @a12
				add			a12, #2
				ldc			r6, @a12					; r5:r4 = _SamplingRate
				ld			e9, r7
				ld			r9, r6
				ldw			@[a10+_SamplingRate], a9
/* */
; 7. private bit
				bsrd		getbits
				eld			a, #1
				eld			rpd0.private_bit, d
; 8. mode
				bsrd		getbits
				eld			a, #2
				eld			rpd0.mode, d
				ecld		r1, d
; 9. mode extension
				bsrd		getbits
				eld			a, #2
				eld			rpd0.mode_extension, d
				ecld		r2, d

		/******************************************************
			select sblimit, jsbound and allocation table
		******************************************************/
				cmp			eq, r1, #MPEG_MODE_SINGLE
				brtd		$+6
				eld			c, #MONO
				eld			c, #STEREO
				eld			rpd1.stereo, c
				eld			a, #SBLIMIT
				cmp			eq, r0, #LAYER_I
				brt			%f5

				ecp			c, #MONO
				ebra		ec0, %f0
				sr			r4							/* bitrate per channel */
%0				cmp			eq, r4, #320
				brt			%f1
				cmp			eq, r4, #480
				brf			%f2
%1				cmp			eq, r5, #320
				brtd		%f4
				eld			a, #3
				brfd		%f4
				eld			a, #2
%2				eld			a, #0
				cmp			eq, r4, #560
				brt			%f4
				cmp			eq, r4, #640
				brt			%f4
				cmp			eq, r4, #800
				brt			%f4
%3				cmp			eq, r5, #480
				brt			%f4
				eld			a, #1
%4				eld			rpd1.tbl_num, a
				eld			rp1, #allocation_tables
				erpn		rp1, a
				esd1		s0, #4
				eld			a, @rp1+s0						/* sblimit value */
				eld			b, @rp1							/* allocation table pointer */
				eld			rpd1.sblimit, a
				eld			rpd1.alloc_tbl_ptr, b

%5				cmp			eq, r1, #MPEG_MODE_JSTEREO
				brf			%f6
				add			r2, #1
				ld			r3, #4
				mul			uu, r2, r3
				ecld		a, r2
%6				eld			rpd1.jsbound, a

; 10. copyright
				bsrd		getbits
				eld			a, #1
				eld			rpd0.copyright, d
; 11. original
				bsrd		getbits
				eld			a, #1
				eld			rpd0.original, d
; 12. emphasis
				bsrd		getbits
				eld			a, #2
				eld			rpd0.emphasis, d
				pop			a14
				ret


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

 Function:		MC_parse_mc_header

 Description:	get header information of mc bit stream.

********************************************************************/
.if( _DECODER_TYPE != MPEG_1_AUDIO )
MC_parse_mc_header::
				push		a14

; 1. extension bit stream
				bsrd		getbits
				eld			a, #1
				eld			rpd0.ext_stream_present, d
; 2. additional bytes for ancillary data
				ecp			d, #TRUE
				ebra		ec1, %f1
				bsrd		getbits			/* MPEG-1 compatible ancillary data field size */
				eld			a, #8
%1				eld			rpd0.n_ad_bytes, d
; 3. center channel
				bsrd		getbits
				eld			a, #2
				eld			rpd0.center, d
; 4. surround channel
				bsrd		getbits
				eld			a, #2
				eld			rpd0.surround, d
; 5. low frequency enhancement channel
				bsrd		getbits
				eld			a, #1
				eld			rpd0.lfe, d
; 6. large or small room
				bsrd		getbits
				eld			a, #1
				eld			rpd0.audio_mix, d
; 7. dematrix procedure
				bsrd		getbits
				eld			a, #2
				eld			rpd0.dematrix_procedure, d
; 8. multilingual channels
				bsrd		getbits
				eld			a, #3
				eld			rpd0.no_of_multi_lingual_ch, d
; 9. sampling freq. of multilingual channel
				bsrd		getbits
				eld			a, #1
				eld			rpd0.multi_lingual_fs, d
; 10. layer of multilingual channel
				bsrd		getbits
				eld			a, #1
				eld			rpd0.multi_lingual_layer, d
; 11. 72-bit copyright identification field
				bsrd		getbits
				eld			a, #1
				eld			rpd0.copyright_ident_bit, d
; 12. large or small room
				bsrd		getbits
				eld			a, #1
				eld			rpd0.copyright_ident_start, d

		/******************************************************
				select mc_sblimit and allocation table
		******************************************************/
				eld			c, rpd0.sampling_frequency
				eld			rp0, #allocation_tables
				ecp			c, #S_FREQ_48kHz				/* sampling freq. =48kHz */
				ebra		ec0, %f2
				//bug fix in layer-I, 2002.09.17
				//erps		rp0+s0
				erpn		rp0, #1							; 48kHz -> table 0
%2				eld			d, @rp0
				eld			rpd1.sblimit_mc, d
				eld			c, #mc_allocation_table
				efz8		c
				eld			rpd1.alloc_tbl_ptr, c

		/******************************************************
					set multichannel configuration
		******************************************************/
				eld			a, rpd0.surround
				eld			b, rpd0.center
				eld			si, sr
				esla		a
				esra		b
				eincc		a
				ecld		r0, a
				ld			a8, #mc_config_table
				sl			r0
				add			a8, r0
				ldc			r0, @a8
				ecld		c, r0
				esla8		c
				eld			sr, c
				eld			b, #4
				esft		sr, b
				eld			d, sg
				eld			rpd1.mc_channel, d
				esft		sr, b
				eld			d, sg
				eld			rpd1.tc_alloc_bits, d
				esft		sr, b
				eld			d, sg
				eld			rpd1.dyn_cross_bits, d
				eld			sr, si

end_of_mc_header_decode
				pop			a14
				ret
.endif /* .if( _DECODER_TYPE != MPEG_1_AUDIO ) */


			
				


;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;::                                                                ::;
;::                     Miscellanious functions                    ::;
;::                                                                ::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;


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

 Function:		load_table

 Description:
 				Load table to XMEM or YMEM area with 24-bit aligned.

 Arguments:		r6		|WORD3_IDATA_ABS$$section-name$$SIZE|
 				a11		|WORD3_IDATA_ABS$$section-name$$LOAD|
 				rp2		|WORD3_IDATA_ABS$$section-name$$START|

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

load_table:
				esd2		d0, #1
%1				cmp			gt, r6, #0
				brf			end_load_table

				ldc			r0, @a11
				add			a11, #2
				ldc			r1, @a11
				add			a11, #2
				ldc			r2, @a11
				add			a11, #2

				ld			r3, r0
				srb			r0
				ecld		ah, r0
				slb			r3
				ecld		bh, r1
				srb			r1
				add			r3, r1
				ecld		a, r3
				ecld		b, r2
				eld			@rp2+d0, a
				eld			@rp2+d0, b
				brad		%b1
				sub			r6, #2
end_load_table
				ret



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

 Function:		copy_decode_table

 Description:
 				Load table to XMEM or YMEM area with 24-bit aligned.

 Arguments:		r6		|WORD3_IDATA_ABS$$section-name$$SIZE|
 				a11		|WORD3_IDATA_ABS$$section-name$$LOAD|
 				rp2		|WORD3_IDATA_ABS$$section-name$$START|

********************************************************************/
.extern 	|WORD3_IDATA_ABS$$secSynthWindow_mac$$LOAD|
.extern 	|WORD3_IDATA_ABS$$secSynthWindow_mac$$SIZE|
.extern 	|WORD3_IDATA_ABS$$secSynthWindow_mac$$START|
.extern 	|WORD3_IDATA_ABS$$secDCT32Coeff_mac$$LOAD|
.extern 	|WORD3_IDATA_ABS$$secDCT32Coeff_mac$$SIZE|
.extern 	|WORD3_IDATA_ABS$$secDCT32Coeff_mac$$START|
.extern 	|WORD3_IDATA_ABS$$secDecodeTables_mac$$LOAD|
.extern 	|WORD3_IDATA_ABS$$secDecodeTables_mac$$SIZE|
.extern 	|WORD3_IDATA_ABS$$secDecodeTables_mac$$START|
.extern 	|WORD3_IDATA_ABS$$secSepCodes_mac$$LOAD|
.extern 	|WORD3_IDATA_ABS$$secSepCodes_mac$$SIZE|
.extern 	|WORD3_IDATA_ABS$$secSepCodes_mac$$START|
.extern 	|WORD3_IDATA_ABS$$secDRCTable_mac$$LOAD|
.extern 	|WORD3_IDATA_ABS$$secDRCTable_mac$$SIZE|
.extern 	|WORD3_IDATA_ABS$$secDRCTable_mac$$START|
.extern 	|WORD3_IDATA_ABS$$secLfeSteps_mac$$SIZE|
.extern 	|WORD3_IDATA_ABS$$secLfeSteps_mac$$LOAD|
.extern 	|WORD3_IDATA_ABS$$secLfeSteps_mac$$START|

copy_decode_table::
				push		a14
				
				ld			r6,  #|WORD3_IDATA_ABS$$secSynthWindow_mac$$SIZE|
 				ld			a11, #|WORD3_IDATA_ABS$$secSynthWindow_mac$$LOAD|
 				eld			rp2, #|WORD3_IDATA_ABS$$secSynthWindow_mac$$START|
 				jsr			load_table

 				ld			r6,  #|WORD3_IDATA_ABS$$secDCT32Coeff_mac$$SIZE|
 				ld			a11, #|WORD3_IDATA_ABS$$secDCT32Coeff_mac$$LOAD|
 				eld			rp2, #|WORD3_IDATA_ABS$$secDCT32Coeff_mac$$START|
 				jsr			load_table

 				ld			r6,  #|WORD3_IDATA_ABS$$secDecodeTables_mac$$SIZE|
 				ld			a11, #|WORD3_IDATA_ABS$$secDecodeTables_mac$$LOAD|
 				eld			rp2, #|WORD3_IDATA_ABS$$secDecodeTables_mac$$START|
 				jsr			load_table

 				ld			r6,  #|WORD3_IDATA_ABS$$secSepCodes_mac$$SIZE|
 				ld			a11, #|WORD3_IDATA_ABS$$secSepCodes_mac$$LOAD|
 				eld			rp2, #|WORD3_IDATA_ABS$$secSepCodes_mac$$START|
 				jsr			load_table

.if( _DECODER_TYPE != MPEG_1_AUDIO )
 				ld			r6,  #|WORD3_IDATA_ABS$$secDRCTable_mac$$SIZE|
 				ld			a11, #|WORD3_IDATA_ABS$$secDRCTable_mac$$LOAD|
 				eld			rp2, #|WORD3_IDATA_ABS$$secDRCTable_mac$$START|
 				jsr			load_table

 				ld			r6,  #|WORD3_IDATA_ABS$$secLfeSteps_mac$$SIZE|
 				ld			a11, #|WORD3_IDATA_ABS$$secLfeSteps_mac$$LOAD|
 				eld			rp2, #|WORD3_IDATA_ABS$$secLfeSteps_mac$$START|
 				jsr			load_table
.endif
 				
 				pop			a14
 				ret



.if( 0 )
/********************************************************************

 Function:		_xymemclr

 Description:
 				- Clear XMEM/YMEM memory.
 				- R2 is the number of long words.
 				- A10 is address pointer of X/Y area.
				- "C" prototype
					void xymemclr(void *, int size);

********************************************************************/
_xymemclr::
				push		a12
				push    	r4, r5

				ld			a12, a10
				sr			r12
				ld			r5, e10
				cmp			eq, r5, #0x22
				brf			%f0
				add			r12, #0x8000

%0				er			xsd
				esd0		d0, #1
				ld			r4, r12
				ecld		a, r4
				eld			rp0, a
				eld			a, #0
				ld			r4, r2

%1				cmp			eq, r4, #0
				brt			%f2
				eld			@rp0+d0, a
				brad		%b1
				sub			r4, #1

%2				pop     	r5, r4
				pop			a12
				ret


/********************************************************************
                                                                     
 Function:		__xmemset                                             
                                                                     
 Description:	XY memory set routine for "C".                       
 				                                                     
********************************************************************/
__xymemset::		push		a8, a9
				push		r4, r5
				ld			r5, r10
				and			r3, #0xff
				ld			r4, r3
				slb			r4
				add			r4, r3
				ecld		a, r5
				ecld		b, r4
				ecld		bh, r4
				eld			rp0, a
				esd0		d0, #1
				ld			r6, r2
				dec			r6				
%1              bnzd		r6, %b1
				eld			@rp0+d0, b
				pop			r5, r4
				pop			a9, a8
				ret
.endif


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

 Function:		__flush_data
  
 Description:	Write cache data to external memory.
 				  
********************************************************************/
DCACHE_PROHIBIT			equ		0x40
DCACHE_ALL_FLUSH		equ		0x10
DCACHE_ALL_INVALID		equ		0x20

cXCACHE_FLUSH			equ		0x0040
cYCACHE_FLUSH			equ		0x0004
cSBF0_FLUSH				equ		0x2000
cSBF1_FLUSH				equ		0x0200

__flush_data::
/*
				push		a8
				push		r0
				ld			a8, #SFR_BASE

				ld			r0, #cXCACHE_FLUSH | cYCACHE_FLUSH
				ldw			@[a8+rCACHECON], r0
				
				ld			r0, #cSBF0_FLUSH | cSBF1_FLUSH
				ldw			@[a8+rSBFCON], r0

				pop			r0
				pop			a8
*/
				ret


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

 Function:		__pushRegs
  
 Description:	Push all registers.
 				  
********************************************************************/
__pushRegs::
				push		r0, r1
				push		/*r2,*/ r3
				push		r4, r5
				push		r6, r7
				push		a8, a9
				push		a10, a11
				push		a12, a13
      			ret

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

 Function:		__popRegs
  
 Description:	Pop all registers.
 				  
********************************************************************/
__popRegs::
				pop			a13, a12
				pop			a11, a10		
				pop			a9, a8		
				pop			r7, r6		
				pop			r5, r4		
				pop			r3	/*, r2*/
				pop			r1, r0	        
        		ret


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

 Function:		__cache_simul_on, __cache_simul_off
  
 Description:	ADM cache simulation on/off.
 				  
********************************************************************/
cICACHE_ENABLE		equ		0x0200
cICACHE_DISABLE		equ		0x0300
cXCACHE_ENABLE		equ		0x0020
cXCACHE_DISABLE		equ		0x0030
cYCACHE_ENABLE		equ		0x0002
cYCACHE_DISABLE		equ		0x0003

.if( _CACHE_SIMULATION == TRUE )

__cache_simul_on::
				push		a8
				push		r0
				ld			a8, #SFR_BASE
				ld			r0, #(cICACHE_ENABLE | cXCACHE_ENABLE | cYCACHE_ENABLE)
				ldw			@[a8+rCACHECON], r0
				pop			r0
				pop			a8
				ret

__cache_simul_off::
				push		a8
				push		r0
				ld			a8, #SFR_BASE
				ld			r0, #(cICACHE_DISABLE | cXCACHE_DISABLE | cYCACHE_DISABLE)
				ldw			@[a8+rCACHECON], r0
				pop			r0
				pop			a8
				ret
.endif


.end


⌨️ 快捷键说明

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