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

📄 decl1lib.s

📁 samsung 9908DVD源代码,
💻 S
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////////
;		The following program will decoding Layer1 bitstream
;		by S/W Algorithm (for C-PAD3)
;			File Name: DecL2lib.s
;			copyright ji,Han      2001.10.7
;
;	profile
//////////////////////////////////////////////////////////////////////////////////
.include	"mp3_def.h"
.include	"mp3_ext.h"
.include	"mp12_def.h"
.include	"mp12_ext.h"
//.include 	"CPAD3.REG"

.extern	Area_bitalloc,Area_scfsi,Area_scalefactor0,Area_fraction,Area_L2Variables,GLayerDiff	
.extern	GetNBitFromBitstreamOnlyMP3,Load_L2table
.extern	G_cnt


	MP3DecL1libSection
//////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////
InitalizeForL1Decoding::		
	eld		a		,#Area_L2Variables
	eld		rpd0	,a										
//	eld		a		,#Area_mpegVariables
//	eld		rpd1	,a

	eld		a		,#0x0250
	eld		msr2	,a
//	eld		a		,#1
//	eld		rpd1.index_GranuleLoop	,a
	eld		sd0		,#((1&0fh)<<12)|(1<<8)|((2&0fh)<<4)|(1<<0)	
	eld		sd1		,#((1&0fh)<<12)|(1<<8)|((2&0fh)<<4)|(1<<0)	
	eld		sd2		,#((1&0fh)<<12)|(1<<8)|((2&0fh)<<4)|(1<<0)	
	eld		sd3		,#((1&0fh)<<12)|(1<<8)|((2&0fh)<<4)|(1<<0)	

.ifndef	SAVE_PCMSAMPLE
	efz8	a
	ldw		r0		,@[a13+Index_OutputBufferRPointerL]			;2B
	ecld	a		,r0
	esra	a
	ecp		a		,#Area_pcmSamples+767
	etst	gt		,t
	eld		a		,#768
	esra8t	a
	esra8t	a
	eld		b		,#Area_pcmSamples
	eadd	b		,a
	eld		rpd1.index_GptrPcmSamples,	b
.endif


//	eld		a		,GL2Done
//	ecp		a		,#1
//	bra		ec0		,InitalizeForL2DecodingReturn
//d	ldb		r0		,@[a13+Index_GL2Done]
	ldw		r0		,@[a10+Index_pParameterH]
	ld		e12		,r0
	ldw		r0		,@[a10+Index_pParameterL]
	ld		r12		,r0
	
	ldb		r0		,@[a12+Index_P_GL2Done]
	cmp		eq		,r0		,#2
	brt		InitalizeForL1DecodingReturn
	
	ld		r0		,#768*4	
	ldw		@[a13+Index_OutputBufferLength]	,r0

	ld		r1		,#0x20	
	ldw		@[a13+Index_OutputBufferMiddleH],r1
	ld		r0		,#0x2abc	
	ldw		@[a13+Index_OutputBufferMiddleL],r0

	ld		r1		,#0x20	
	ldw		@[a13+Index_OutputBufferEndH]	,r1
	ld		r0		,#0x30bc	
	ldw		@[a13+Index_OutputBufferEndL]	,r0

	eld		a		,#Area_pcmSamples
	eld		rpd1.index_GptrPcmSamples,	a

	eld		a		,#Area_synthesisBufferCh0
	eld		rpd1.index_GptrSynPrevious,a

	eld		a		,#0
	eld		G_cnt	,a

	ld		r0		,#2
//d	ldb		@[a13+Index_GL2Done]	,r0
	ldb		@[a12+Index_P_GL2Done]	,r0

//	push	a14
//	jsr		Load_L2table
//	pop		a14
		
//	push	a14
//	jsr		Load_L1table
//	pop		a14
InitalizeForL1DecodingReturn
	ret
//////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////
ParsingHeaderL1::							
	push	a14
	jsr		CheckSyncWordL1
	pop		a14
	
	cmp		eq		,r0		,#0	
	jpf		ParsingHeaderSyncErrorL1

	ldw		r0		,@[a13+Index_InputBufferRPointerL]
	ecld	a		,r0

	efz8	a
	esra	a									;set carry-flag
	etst	nc		,t	
	eld		rp1		,a
	es		me1									;enable rp1 modulo	
	
	eld		c		,@rp1+s0
	esla8	c
	eld		sr		,c

	eld		b		,#-16
	eld		a		,#8
	esra8t	a
	eadd	b		,a
	esft	sr		,a											;align byte	

	eld		sa		,#15										;Sync word(07ffh):11-bit
																;ID(XX):2-bit
																;Layer(01):2-bit	
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3	
	pop		a14
	
	eld		sa		,#1											;Protection(CRC): 1-bit
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3
	pop		a14
	
	eld		a		,sg
	eld		rpd0.index_GCRC	,a									;save Protection(CRC)
	eld		si		,a											;next using
	
	eld		sa		,#4											;bitrate: 4-bit	
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3
	pop		a14
	
	eld		a		,sg
	ecld	r0		,a	
/////////////////////////////////////////////	
// Multi-CODEC //
// No need to change
/////////////////////////////////////////////		
	ldb		@[a13+Index_BitRate]	,r0							;save bitrate
//	
	eld		a		,rpd1.index_Glsf
	ecld	r1		,a
	cmp		eq		,r1		,#0
	brf		bitrateL1_lsf
	
	eld		rp3		,#tbl_bitrateL1-1		
	ecld	a		,r0
	eadd	a		,rp3
	eld		rp3		,a
	eld		a		,@rp3
	ecld	r0		,a
	ecld	r1		,ah
	
	ldw		@[a13+Index_FrameBitRate]	,r0
	ldw		@[a10+Index_BitRateADM+0]	,r1					//High
	ldw		@[a10+Index_BitRateADM+2]	,r0					//Low	
	
	jmp		bitrateL1_lsfEnd	
bitrateL1_lsf	
	eld		rp3		,#tbl_bitrateLSFL1-1	
	ecld	a		,r0
	eadd	a		,rp3
	eld		rp3		,a
	eld		a		,@rp3
	ecld	r0		,a
	ecld	r1		,ah

	ldw		@[a13+Index_FrameBitRate]	,r0
	ldw		@[a10+Index_BitRateADM+0]	,r1					//High
	ldw		@[a10+Index_BitRateADM+2]	,r0					//Low	
bitrateL1_lsfEnd	
	eld		sa		,#2										;sampling freq.: 2-bit
	push	a14	
	jsr		GetNBitFromBitstreamOnlyMP3	
	pop		a14

	eld		a		,sg
	eld		rpd1.index_GOrgSampFreq	,a	
/////////////////////////////////////////////	
// Multi-CODEC //
//  MpegVersion 0 (11172 MP3)
//	44.1Khz 0	->	4
//	48Khz	1	->	3
//	32Khz	2	->	5
//  MpegVersion 1 (13818 LSF)
//	22.05Khz 0	->	7
//	24Khz	 1	->	6
//	16Khz	 2	->	8
//  MpegVersion 2 (Mpeg2.5)
//	11.025Khz 0	->	10
//	12Khz  	  1	->	 9
//	 8Khz	  2	->	11
/////////////////////////////////////////////	
	eld		a		,rpd1.index_Glsf
	ecld	r0		,a
	cmp		eq		,r0		,#1
	brt		LSF_samplingL1
	
	eld		a		,sg
	ld		r1		,#4	
	ld		r2		,#0xac44	
	ecld	r0		,a
	cmp		eq		,r0		,#0	
	brt		f10_bL1
	ld		r1		,#3
	ld		r2		,#0xbb80	
	cmp		eq		,r0		,#1
	brt		f10_bL1
	ld		r1		,#5	
	ld		r2		,#0x7d00	
f10_bL1		
	ldb		@[a13+Index_SamplingFreq]		,r1					;save sampling freq.
	ldw		@[a10+Index_SamplingRate+2]		,r2		
	jmp		Sampling_BranchL1	
LSF_samplingL1
	eld		a		,sg
	ld		r1		,#7	
	ld		r2		,#0x5622	
	ecld	r0		,a	
	cmp		eq		,r0		,#0
	brt		f20_bL1
	ld		r1		,#6
	ld		r2		,#0x5dc0
	cmp		eq		,r0		,#1
	brt		f20_bL1	
	ld		r1		,#8	
	ld		r2		,#0x3e80
f20_bL1		
	ldb		@[a13+Index_SamplingFreq]		,r1					;save sampling freq.
	ldw		@[a10+Index_SamplingRate+2]		,r2	
Sampling_BranchL1	

	eld		sa		,#1										;padding:1-bit	
	push	a14		
	jsr		GetNBitFromBitstreamOnlyMP3
	pop		a14

	eld		a		,sg
	
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3						;fetch private_bit	
	pop		a14

	esla8	a
	eld		sa		,#2										;mode: 2-bit
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3
	pop		a14
	eadd	a		,sg
	esla8	a	
	ecld	r0		,a
	srb		r0

	ldb		@[a13+Index_Mode]	,r0

	cmp		eq		,r0		,#const_mono					;check mode
	brt		bra_chL1
	eadd	a		,#1										;setting 2-channel
bra_chL1
	eld		rpd0.index_GPaddMode,a										;save a
															;a[23:16]=padding
															;a[15:8]=mode
															;a[7:0]=channel number
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3						;fetch mode_ext		
	pop		a14
	
	eld		a		,sg
	eld		rpd0.index_GmodeExt	,a							;save sg
															;sg[15:8]=null zero
															;sg[7:0]=mode_ext
	eld		sa		,#4
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3						;fetch copyright,original/copy
	pop		a14
															;emphasis															

	eld		a		,si										;for checking CRC
///	bra		ec0		,ParsingHeaderNoCRCL2
	ecld	r4		,a
	cmp		eq		,r4		,#0
	brf		ParsingHeaderNoCRCL1

	eld		a		,#16
	eld		sa		,a										;	
	push	a14	
	jsr		GetNBitFromBitstreamOnlyMP3						;fetch CRC
	pop		a14	

	push	a14
	jsr		CheckCRCL1
	pop		a14

ParsingHeaderNoCRCL1

///////////////////////////////////////////////////////////
//	read frame count
///////////////////////////////////////////////////////////
	ldw		r2		,@[a13+Index_FrameLength]				;r0<-frame length 

	ldw		r3		,@[a13+Index_InputBufferValidData]
	sub		r3		,r2
	ldw		@[a13+Index_InputBufferValidData]	,r3

	ldw		r3		,@[a13+Index_InputBufferRPointerL]		;source	
	add		r3		,r2
	
	and		r3		,#FetchMASK
	or		r3		,#StartReadPointer
	

	ldw		@[a13+Index_InputBufferRPointerL]	,r3			;source	
	ld		r3		,#0x20
	ldw		@[a13+Index_InputBufferRPointerH]	,r3			;source	
///////////////////////////////////////////////////////////

	ld		r0		,#0
	ldb		@[a13+Index_FrameErrorFlag]		,r0				;indicates "TRUE"
	ldb		@[a10+Index_DecodeErrFlag]		,r0
	ret

ParsingHeaderSyncErrorL1	
	nop
ParsingHeaderFreqErrorL1	
	ld		r0		,#1
	ldb		@[a13+Index_FrameErrorFlag]		,r0				;indicates "FALSE"
	ldb		@[a10+Index_DecodeErrFlag]		,r0
	ret
//////////////////////////////////////////////////////////////////////////////////
;		sg-register		In 	CRC value
//////////////////////////////////////////////////////////////////////////////////
CheckCRCL1:
	ret

//////////////////////////////////////////////////////////////////////////////////
//
//	
//	rp0				valid data size
//	MA[47:24]		rp0's backup
//	P[47:24]		for MA++
//	x0				temporary buffer
//	y0				read buffer pointer
//
//////////////////////////////////////////////////////////////////////////////////
CheckSyncWordL1:
	ld		r3		,#1							;indicates "FALSE"
	eld		sd0		,#((-1&0fh)<<12)|(1<<8)|((-1&0fh)<<4)|(1<<0)	;initialize post-modified value

	eld		rp2		,#tbl_FrameSizeL1

	eld		sd1		,sd0		
	eld		a		,#1	
	eld		p		,a
	
	ldw		r0		,@[a13+Index_InputBufferValidData]
	ecld	a		,r0

	efz8	a
	eld		rp0		,a							;valid data size
	eld		ma0		,a

	ldw		r0		,@[a13+Index_InputBufferRPointerL]
	ecld	a		,r0

	efz8	a
	eld		y0		,a							;read pointer	
CheckSyncWordLoopL1
	esra	a									;set carry-flag
	etst	nc		,t	
	eld		rp1		,a
	es		me1									;enable rp1 modulo	
	eld		c		,@rp1+s0
	esla8	c
	eld		sr		,c

	eld		b		,#-16
	eld		a		,#8
	esra8t	a
	eadd	b		,a
	esft	sr		,a							;align byte	

	eld		a		,ma0

	ecld	r5		,a
	cmpu	ge		,r5		,#4
	brf		CheckSyncWordValidEmptyL1			;ec1=nc,check if valid data>=4-byte(header size)
	eld		sa,		#4							;Sync word(0fffh):12-bit	

	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3
	pop		a14

	eld		sa		,#8	
	eld		a		,sg
SearchSyncWordLoopL1
	esla8	a
	push	a14	
	jsr		GetNBitFromBitstreamOnlyMP3	
	pop		a14

	eadd	a		,sg
	eld		sg		,a
	enmsk	sg,		#12	
	eld		a		,sg
	ecp		a,		#0xfff						;compare A with Sync.word
	enop
	bra		ec0		,ParsingHeaderDataL1		;ec0=z-flag

	eld		x0		,a
	esub	ma0		,p							;valid size--
	eld		a		,ma0						;MAH<-the size of valid data
	ecld	r0		,a
	cmpu    ge		,r0		,#4
	brf		CheckSyncWordValidEmptyL1

	eld		a		,x0
	ecld	r0		,a
	cmpu    ge		,r0		,#0
	brf		CheckSyncWordValidEmptyL1

	jmp		SearchSyncWordLoopL1

ParsingHeaderDataL1
	eld		sa		,#1							
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3			;ID(0) LSF / ID(1) MP3
	pop		a14

	eld		a		,#0
	eld		rpd1.index_LMpegVersion		,a
	eld		rpd1.index_Glsf		,a				; MPEG1 MP3
	eld		rp2		,#tbl_FrameSizeL1
	eld		a		,sg
	ecld	r0		,a
	cmp		eq		,r0		,#0
	brf		NoneLSFL2
	
	eld		a		,#1
	eld		rpd1.index_Glsf		,a				; MPEG2 LSF
	eld		rp2		,#tbl_FrameSizeLSFL1
	eld		rpd1.index_LMpegVersion		,a
NoneLSFL2												

	eld		sa		,#2							;Layer(01):2-bit
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3			;01
	pop		a14
	
	eld		a		,sg
	ecld	r0		,a
	cmp		eq		,r0		,#0
	brt		ParsingHeaderLayerErrorL1	
	
//	eld		a		,sg
	ecld	r5		,a
//////////////////////////////////////////////////
	cmp		eq		,r5		,#3
	brt		layer1_pass

	eld		a		,rpd1.index_Glsf	
	ecld	r4		,a
	cmp		eq		,r4		,#0
	brf		Lsf_LowLayerL1
	
	cmp		eq		,r5		,#1
	brf		Layer2_frameL1
	
	eld		rp2		,#tbl_mainDataSize
	jmp		layer1_pass
Layer2_frameL1
	eld		rp2		,#tbl_FrameSizeL2	

	jmp		layer1_pass
Lsf_LowLayerL1

	cmp		eq		,r5		,#1
	brf		Layer2_frameLsfL1
	
	eld		rp2		,#tbl_mainDataSizeLSF

	jmp		layer1_pass
Layer2_frameLsfL1
	eld		rp2		,#tbl_FrameSizeLSFL2
layer1_pass
//////////////////////////////////////////////////	
	
	eld		sa		,#1							;Protection(CRC): 1-bit
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3
	pop		a14
	
	eld		sa		,#4							;bitrate: 4-bit	
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3
	pop		a14

	eld		a		,sg
	ecld	r0		,a
	cmp		eq		,r0		,#0
	brt		ParsingHeaderLayerErrorL1

	cmp		eq		,r0		,#15
	brt		ParsingHeaderLayerErrorL1	

	eld		si		,sg
	
	eld		sa		,#2							;sampling freq.: 2-bit
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3	
	pop		a14

⌨️ 快捷键说明

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